aboutsummaryrefslogtreecommitdiffstats
path: root/packages/website/ts/@next/components
diff options
context:
space:
mode:
authorFred Carlsen <fred@sjelfull.no>2018-12-10 20:37:10 +0800
committerFred Carlsen <fred@sjelfull.no>2018-12-10 20:38:06 +0800
commit3ac6da7db1570b08636e578bcd96fd470cebf009 (patch)
treeaab4c853bc4ae94e5696bd882c9fc39ff08cb5ce /packages/website/ts/@next/components
parent3e93442a43c834bed9418760adee1110d3556f69 (diff)
downloaddexon-sol-tools-3ac6da7db1570b08636e578bcd96fd470cebf009.tar.gz
dexon-sol-tools-3ac6da7db1570b08636e578bcd96fd470cebf009.tar.zst
dexon-sol-tools-3ac6da7db1570b08636e578bcd96fd470cebf009.zip
Added banner
Diffstat (limited to 'packages/website/ts/@next/components')
-rw-r--r--packages/website/ts/@next/components/banner.tsx75
-rw-r--r--packages/website/ts/@next/components/layout.tsx3
2 files changed, 78 insertions, 0 deletions
diff --git a/packages/website/ts/@next/components/banner.tsx b/packages/website/ts/@next/components/banner.tsx
new file mode 100644
index 000000000..59fbf7fdc
--- /dev/null
+++ b/packages/website/ts/@next/components/banner.tsx
@@ -0,0 +1,75 @@
+import * as React from 'react';
+import styled from 'styled-components';
+
+import {colors} from 'ts/style/colors';
+
+import {Button, ButtonWrap} from 'ts/@next/components/button';
+import { Column, Section, Wrap, WrapCentered } from 'ts/@next/components/layout';
+import {Paragraph, Heading} from 'ts/@next/components/text';
+import { ThemeInterface } from 'ts/@next/components/siteWrap';
+
+interface Props {
+ heading?: string;
+ subline?: string;
+ mainCta?: CTAButton;
+ secondaryCta?: CTAButton;
+ theme?: ThemeInterface;
+}
+
+interface CTAButton {
+ text: string;
+ href: string;
+}
+
+interface BorderProps {
+ isBottom?: boolean;
+}
+
+export const Banner: React.StatelessComponent<Props> = (props: Props) => {
+ const {
+ heading,
+ subline,
+ mainCta,
+ secondaryCta,
+ } = props;
+ return (
+ <Section bgColor={colors.brandDark} isRelative={true}>
+ <Border/>
+ <Wrap>
+ <CustomColumn colWidth="1/2" isPadLarge={true}>
+ <WrapCentered>
+ <Heading isNoMargin={true}>{heading}</Heading>
+ {subline && <Paragraph isMuted={true} isNoMargin={true}>{subline}</Paragraph>}
+ </WrapCentered>
+ </CustomColumn>
+ <CustomColumn colWidth="1/2" isPadLarge={true}>
+ <WrapCentered>
+ <ButtonWrap>
+ {mainCta && <Button href={mainCta.href}>{mainCta.text}</Button>}
+ {secondaryCta && <Button href={secondaryCta.href} isTransparent={true}>{secondaryCta.text}</Button>}
+ </ButtonWrap>
+ </WrapCentered>
+ </CustomColumn>
+ </Wrap>
+ <Border isBottom={true} />
+ </Section>
+ );
+};
+
+const CustomColumn = styled(Column)`
+ padding: 95px 30px;
+`;
+
+// Note let's refactor this
+// is it absolutely necessary to have a stateless component
+// to pass props down into the styled icon?
+const Border = styled.div<BorderProps>`
+ position: absolute;
+ background-image: url("data:image/svg+xml;utf8,<svg width='218' height='41' viewBox='0 0 218 41' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M109 39c59.094 0 107-47.906 107-107 0-59.095-47.906-107-107-107S2-127.095 2-68C2-8.907 49.906 39 109 39z' stroke='rgba(255, 255, 255, 0.1)' stroke-width='3' stroke-miterlimit='10'/><path d='M55 6.688L109-68l54 74.688-8.917 22.313H63.988L55 6.688zM109-68l22 97M109-68L87 29M164 6H55' stroke='rgba(255, 255, 255, 0.1)' stroke-width='3' stroke-miterlimit='10'/></svg>");
+ left: 0;
+ width: calc(100% + 214px);
+ height: 40px;
+ top: ${props => !props.isBottom && 0 };
+ bottom: ${props => props.isBottom && 0 };
+ transform: ${props => props.isBottom ? 'rotate(180deg) translate(112px)' : 'translate(-112px)' };
+`;
diff --git a/packages/website/ts/@next/components/layout.tsx b/packages/website/ts/@next/components/layout.tsx
index 48b8ec074..bd3b8a2e3 100644
--- a/packages/website/ts/@next/components/layout.tsx
+++ b/packages/website/ts/@next/components/layout.tsx
@@ -19,6 +19,7 @@ interface SectionProps {
isNoMargin?: boolean;
bgColor?: string;
isFullWidth?: boolean;
+ isRelative?: boolean;
}
interface WrapProps extends PaddingInterface {
@@ -85,6 +86,8 @@ export const Section = styled.section<SectionProps>`
margin-bottom: ${props => !props.isNoMargin && `${GUTTER}px`};
margin-left: ${props => props.isFullWidth && `-${GUTTER}px`};
background-color: ${props => props.bgColor};
+ position: ${props => props.isRelative && 'relative'};
+ overflow: ${props => props.isRelative && 'hidden'};
@media (min-width: 1560px) {
width: ${props => props.isFullWidth && '100vw'};