diff options
author | Fred Carlsen <fred@sjelfull.no> | 2018-12-10 20:37:10 +0800 |
---|---|---|
committer | Fred Carlsen <fred@sjelfull.no> | 2018-12-10 20:38:06 +0800 |
commit | 3ac6da7db1570b08636e578bcd96fd470cebf009 (patch) | |
tree | aab4c853bc4ae94e5696bd882c9fc39ff08cb5ce /packages/website/ts/@next/components | |
parent | 3e93442a43c834bed9418760adee1110d3556f69 (diff) | |
download | dexon-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.tsx | 75 | ||||
-rw-r--r-- | packages/website/ts/@next/components/layout.tsx | 3 |
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'}; |