diff --git a/packages/website/public/images/launch_kit/NFT_screenshot.png b/packages/website/public/images/launch_kit/NFT_screenshot.png new file mode 100644 index 0000000000..04f1078cd1 Binary files /dev/null and b/packages/website/public/images/launch_kit/NFT_screenshot.png differ diff --git a/packages/website/public/images/launch_kit/background_marquee.png b/packages/website/public/images/launch_kit/background_marquee.png new file mode 100644 index 0000000000..7db67343d3 Binary files /dev/null and b/packages/website/public/images/launch_kit/background_marquee.png differ diff --git a/packages/website/public/images/launch_kit/relayer_screenshot.png b/packages/website/public/images/launch_kit/relayer_screenshot.png new file mode 100644 index 0000000000..b8cb2dc8ce Binary files /dev/null and b/packages/website/public/images/launch_kit/relayer_screenshot.png differ diff --git a/packages/website/ts/components/background_marquee.tsx b/packages/website/ts/components/background_marquee.tsx new file mode 100644 index 0000000000..f2dc0b0030 --- /dev/null +++ b/packages/website/ts/components/background_marquee.tsx @@ -0,0 +1,129 @@ +import React from "react"; +import styled, { keyframes } from "styled-components"; + +const scrollFactory = (height:number,imgRepeatCt:number) => keyframes` + 0% { transform: translate3d(0, -${height}px, 0) } + 100% { transform: translate3d(0, -${height*(imgRepeatCt-1)}px, 0) } +`; + +const scrollMobileFactory = (height:number,imgRepeatCt:number) => keyframes` + 0% { transform: translate3d(0, -${height}px, 0) } + 100% { transform: translate3d(0, -${height*(imgRepeatCt-1)}px, 0) } +`; + +interface MarqueeWrapProps { + height?: string; + imgHeightInPx: number; + imgRepeatCt: number; +} + +const MarqueeWrap = styled.div` + width: 100%; + height: ${props => props.height || "100%"}; + overflow: hidden; + position: relative; + + &:after { + content: ""; + position: absolute; + width: 100%; + height: ${props => props.height || "100%"}; + left: 0; + top: 0; + background: linear-gradient(180.18deg, #000000 11.09%, rgba(0, 0, 0, 0.8) 62.74%, rgba(0, 0, 0, 0) 103.8%); + } + + @media (max-width: 768px) { + overflow: hidden; + } + + > div { + height: auto; + display: flex; + flex-direction: column; + will-change: transform; + transform: translate3d(0, -715px, 0); + } + + @media (min-width: 768px) { + > div { + height: ${props => props.imgHeightInPx*props.imgRepeatCt}px; + animation: ${props => scrollFactory(props.imgHeightInPx,props.imgRepeatCt)} 140s linear infinite; + } + } + + @media (max-width: 768px) { + > div { + height: ${props => props.imgHeightInPx*props.imgRepeatCt}px; + animation: ${props => scrollMobileFactory(props.imgHeightInPx,props.imgRepeatCt)} 140s linear infinite; + } + } +`; + +interface CardProps { + imgHeight:number +} + +const Card = styled.div` + opacity: 1; + will-change: opacity, transform; + + & + & { + margin-top: -0px; + } + + img { + height: auto; + } + + @media (min-width: 768px) { + img { + width: 100%; + height: ${props => props.imgHeight}; + } + } + + @media (max-width: 768px) { + img { + width: 100%; + height: ${props => props.imgHeight}; + } + } +`; + +const MarqueeImg = styled.img` + object-fit: cover; + opacity: 0.4; +` + +export interface BackgroundMarqueeProps { + height?: string; + imgHeightInPx: number; + imgSrcUrl: string; +} + +export class BackgroundMarquee extends React.Component { + state={ + imgRepeatCt:5 + } + + componentDidMount() { + + } + + onImageUpdate = () => { + + } + + public render(): React.ReactNode { + return +
+ {[...Array(this.state.imgRepeatCt)].map((item, index) => ( + + + + ))} +
+
+ } +} \ No newline at end of file diff --git a/packages/website/ts/components/definition.tsx b/packages/website/ts/components/definition.tsx index bd7a404254..639028f079 100644 --- a/packages/website/ts/components/definition.tsx +++ b/packages/website/ts/components/definition.tsx @@ -17,7 +17,7 @@ interface Props { isInlineIcon?: boolean; isCentered?: boolean; isWithMargin?: boolean; - icon: string; + icon?: string; iconSize?: 'medium' | 'large' | number; fontSize?: 'default' | 'medium' | number; title: string; @@ -28,7 +28,7 @@ interface Props { export const Definition = (props: Props) => ( - + {!!props.icon && } ` padding: ${props => (props.isAnnouncement ? '50px 0 120px 0' : '120px 0')}; - + position: relative; @media (max-width: 768px) { padding: 60px 0; } @@ -126,8 +127,17 @@ const ButtonWrap = styled.div` } `; +const BackgroundWrap = styled.div` + position: absolute; + bottom:0; + left:0; + right:0; + top:0; +` + export const Hero: React.StatelessComponent = (props: Props) => (
+ {!!props.background && {props.background}} {props.figure && {props.figure}} diff --git a/packages/website/ts/components/showcase_section.tsx b/packages/website/ts/components/showcase_section.tsx new file mode 100644 index 0000000000..341424322b --- /dev/null +++ b/packages/website/ts/components/showcase_section.tsx @@ -0,0 +1,39 @@ +import * as React from 'react'; +import styled from 'styled-components'; + +import { Button } from 'ts/components/button'; +import { Heading, Paragraph } from 'ts/components/text'; +import { Section } from 'ts/components/newLayout'; + +interface Props { + children?: React.ReactNode; + showcaseImgSrc: string; + maxWidth?: string; + sectionPadding?: string; +} + +const ShowcaseImg = styled.img` + position: absolute; + top: 0; + bottom: 0; + right: 0; + margin: auto 0 auto 0; + max-width: 40%; + height: 100%; +`; + +interface WrapProps { + sectionPadding?: string; +} + +const Wrap = styled.div` + position: relative; + padding: ${props => props.sectionPadding || "0 0"}; +`; + +export const ShowcaseSection = (props: Props) => +
+ {props.children} +
+ +
\ No newline at end of file diff --git a/packages/website/ts/pages/launch_kit.tsx b/packages/website/ts/pages/launch_kit.tsx index 111bd39fe1..8b3e06f94c 100644 --- a/packages/website/ts/pages/launch_kit.tsx +++ b/packages/website/ts/pages/launch_kit.tsx @@ -7,26 +7,49 @@ import { DocumentTitle } from 'ts/components/document_title'; import { Hero } from 'ts/components/hero'; import { Icon } from 'ts/components/icon'; import { Section } from 'ts/components/newLayout'; +import { ShowcaseSection } from 'ts/components/showcase_section'; import { SiteWrap } from 'ts/components/siteWrap'; import { constants } from 'ts/utils/constants'; import { documentConstants } from 'ts/utils/document_meta_constants'; +import { Heading } from 'ts/components/text'; import { ModalContact } from '../components/modals/modal_contact'; +import { BackgroundMarquee } from '../components/background_marquee'; const offersData = [ { - icon: 'supportForAllEthereumStandards', - title: 'Perfect for developers who need a simple drop-in marketplace', - description: ( -
    -
  • Quickly launch a market for your project’s token
  • -
  • Seamlessly create an in-game marketplace for digital items and collectables
  • -
  • Easily build a 0x relayer for your local market
  • -
- ), + title: 'Accelerate Your Development', + description: "Let Launch Kit take care of the complexities of building a relayer. The codebase allows you to connect to wallets, wrap ETH, make and take orders, and get notified of order state changes so you can spend more time on making your relayer your own.", + showcaseUrl: "images/launch_kit/relayer_screenshot.png", + links:[ + { + label: 'Get Started', + url: ``, + }, + { + label: 'Live Demo', + url: ``, + }, + ] + }, + { + title: 'A Universe of Tokens', + description: "Launch Kit supports all ERC-20 and ERC-721 tokens out of the box. Trade commodities with the ERC-20 exchange interface, or bid on crypto collectibles with the ERC-721 marketplace interface.", + showcaseUrl: "images/launch_kit/NFT_screenshot.png", + links:[ + { + label: 'Get Started', + url: ``, + }, + { + label: 'Live Demo', + url: ``, + }, + ] }, ]; + export class NextLaunchKit extends React.Component { public state = { isContactModalOpen: false, @@ -37,9 +60,10 @@ export class NextLaunchKit extends React.Component { } actions={} /> @@ -72,19 +96,34 @@ export class NextLaunchKit extends React.Component { />
-
- {_.map(offersData, (item, index) => ( + {_.map(offersData, (item, index) => ( + - ))} -
+ + ))} +
+ Features +
    +
  • Hello
  • +
  • Hello
  • +
  • Hello
  • +
  • Hello
  • +
  • Hello
  • +
+
    +
  • Hello
  • +
  • Hello
  • +
  • Hello
  • +
  • Hello
  • +
  • Hello
  • +
+