{"version":3,"sources":["scenes/PastLaunches/Rocket/rockets.svg","components/arrow-bottom.svg","scenes/PastLaunches/destinations.svg","components/ScrollButton.tsx","components/Header.tsx","components/Countdown.tsx","scenes/Next/Right.tsx","scenes/PastLaunches/Rocket/index.tsx","scenes/Next/Launch.tsx","scenes/Next/Arrows.tsx","scenes/Next/index.tsx","components/SocialButtons.tsx","components/Footer.tsx","scenes/PastLaunches/Destination.tsx","scenes/PastLaunches/Caption.tsx","scenes/PastLaunches/Patch.tsx","scenes/PastLaunches/Launch.tsx","scenes/PastLaunches/index.tsx","App.tsx","index.tsx"],"names":["module","exports","Container","styled","div","Img","img","scroll","toTop","h","Math","max","document","documentElement","clientHeight","window","innerHeight","scrollTo","top","left","behavior","ScrollButton","props","to","onClick","src","arrow","alt","style","transform","header","p","bg","Header","href","target","rel","state","now","floor","Date","interval","tick","setState","this","setInterval","clearInterval","difference","date","seconds","minutes","hours","days","String","padStart","React","Component","Icons","Right","data","mass","rocket","second_stage","payloads","every","e","payload_mass_kg","reduce","acc","getTotalMass","flex","className","rocket_name","flight_number","first_stage","cores","map","c","reused","join","i","landing_intent","orbit","links","reddit_campaign","icon","faRedditAlien","video_link","faYoutube","Rocket","success","id","rocket_id","rocket_type","payload_type","getPayloadId","getSvgRocketId","options","legs","push","block","gridfins","getOptions","title","filter","xmlns","viewBox","key","RocketsSVG","xlinkHref","option","RocketContainer","Mission","size","Title","Launch","l","mission_name","length","name_fontsize","launch_date_unix","Arrows","current","right","callback","MoreInfo","Main","axios","get","then","details","SocialButtons","link","encodeURIComponent","text","twitterUser","colors","background","faTwitter","marginRight","faFacebookF","footer","Footer","orbitMap","includes","Destination","DestinationSVG","LandingOutcome","landing_type","land_success","fontWeight","Caption","name","Picture","picture","Patch","mission_patch","patchFileName","replace","SIZE","srcSet","type","Flight","launch","launch_success","SizeMe","require","list","reverse","monitorHeight","width","height","scrollDirection","itemCount","itemSize","renderItem","index","faSpinner","spin","App","Fragment","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.55bc8b82.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/rockets.321ccb82.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow-bottom.0a4179c5.svg\";","module.exports = __webpack_public_path__ + \"static/media/destinations.a688b080.svg\";","import React, { FC } from 'react'\nimport styled from 'styled-components/macro'\nimport arrow from './arrow-bottom.svg'\n\nconst Container = styled.div`\n text-align: center;\n padding: 0 0 0.3em;\n cursor: pointer;\n margin: 0 auto;\n font-size: 1.5em;\n\n > div {\n color: #fff;\n font-weight: 400;\n line-height: 1;\n }\n\n @media (max-width: 600px) {\n font-size: 1.2em;\n }\n`\n\nconst Img = styled.img`\n height: 0.8em;\n`\n\nconst scroll = (toTop: boolean) => {\n const h = toTop\n ? 0\n : Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return () =>\n window.scrollTo({\n top: h,\n left: 0,\n behavior: 'smooth',\n })\n}\n\nconst ScrollButton: FC<{ to: 'top' | 'bottom' }> = props => {\n const toTop = props.to === 'top'\n return (\n \n {toTop && (\n \"arrow\n )}\n {!toTop &&
View past launches
}\n {!toTop && \"arrow}\n
\n )\n}\n\nexport default ScrollButton\n","import React, { FC } from 'react'\nimport styled from 'styled-components/macro'\n\nconst Container = styled.header<{ bg: boolean }>`\n color: #fff;\n padding: 10px;\n width: 100%;\n display: flex;\n ${p => (p.bg ? 'background: #011e37;' : '')}\n z-index: 10;\n h1 {\n flex: 1;\n line-height: 1;\n font-weight: 400;\n margin: 0;\n font-size: 1.5em;\n\n @media (max-width: 600px) {\n text-align: center;\n }\n }\n\n span {\n @media (max-width: 600px) {\n display: none;\n }\n }\n`\n\nconst Header: FC<{ top?: boolean }> = props => (\n \n

SpaceXLaunches.com

\n {props.top ? null : (\n \n illustrated by{' '}\n \n ZLSA Design\n \n \n )}\n
\n)\n\nexport default Header\n","import React from 'react'\nimport styled from 'styled-components/macro'\n\nconst Container = styled.div`\n display: flex;\n text-align: center;\n justify-content: space-between;\n line-height: 1;\n margin-top: 20px;\n min-width: 21em;\n align-self: flex-end;\n\n @media (max-width: 600px) {\n margin-top: 10px;\n }\n\n > div {\n margin-left: 20px;\n div {\n font-family: 'Roboto Mono', monospace;\n font-size: 3.8em;\n font-weight: 100;\n }\n\n span {\n font-variant: small-caps;\n }\n }\n`\nexport default class extends React.Component<{ date: number }, { now: number }> {\n state = { now: Math.floor(Date.now() / 1000) }\n interval = 0\n componentDidMount() {\n this.interval = setInterval(this.tick, 1000)\n }\n\n componentWillUnmount() {\n clearInterval(this.interval)\n }\n\n tick = () => {\n this.setState({ now: Math.floor(Date.now() / 1000) })\n }\n\n render() {\n let difference = this.props.date - this.state.now\n\n if (difference <= 0) {\n difference = 0\n }\n\n const seconds = Math.floor(difference)\n const minutes = Math.floor(seconds / 60)\n const hours = Math.floor(minutes / 60)\n const days = Math.floor(hours / 24)\n\n return (\n \n
\n
{String(days).padStart(2, '0')}
\n days\n
\n
\n
{String(hours % 24).padStart(2, '0')}
\n hours\n
\n
\n
{String(minutes % 60).padStart(2, '0')}
\n minutes\n
\n
\n
{String(seconds % 60).padStart(2, '0')}
\n seconds\n
\n
\n )\n }\n}\n","import React, { FC } from 'react'\nimport styled from 'styled-components/macro'\nimport { LaunchType } from '../../types'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faRedditAlien, faYoutube } from '@fortawesome/free-brands-svg-icons'\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n margin-right: 20px;\n .rocket {\n font-size: 2em;\n margin-bottom: 10px;\n text-align: center;\n }\n\n .infos {\n > div {\n display: flex;\n }\n }\n\n .name {\n flex: 1;\n margin-right: 20px;\n }\n\n .monospace {\n font-family: monospace;\n }\n`\n\nconst Icons = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n font-size: 2em;\n justify-content: space-around;\n margin-top: 10px;\n @media (max-width: 600px) {\n margin-top: 20px;\n }\n\n a {\n color: #fff;\n\n &:hover {\n color: #ccc;\n }\n }\n\n .disabled {\n color: rgba(255, 255, 255, 0.2) !important;\n cursor: default;\n }\n`\n\nfunction getTotalMass(data: LaunchType) {\n if (data.rocket.second_stage.payloads.every(e => e.payload_mass_kg === null))\n return null\n return data.rocket.second_stage.payloads.reduce(\n (acc, e) => acc + (e.payload_mass_kg || 0),\n 0\n )\n}\n\nconst Right: FC<{ data: LaunchType }> = ({ data }) => {\n const mass = getTotalMass(data)\n return (\n \n
\n
{data.rocket.rocket_name}
\n
\n
\n Flight Number\n {data.flight_number}\n
\n
\n Used core\n \n {data.rocket.first_stage.cores.map(c => (c.reused ? '✓' : '✘')).join('')}\n \n
\n
\n Landing attempt\n \n {data.rocket.first_stage.cores\n .map(({ landing_intent: i }) => (i === null ? '?' : i ? '✓' : '✘'))\n .join('')}\n \n
\n
\n Destination\n {data.rocket.second_stage.payloads[0].orbit}\n
\n {mass && (\n
\n Mass\n {mass}kg\n
\n )}\n
\n
\n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default Right\n","import React, { FC } from 'react'\nimport { RocketType } from '../../../types'\nimport RocketsSVG from './rockets.svg'\nimport styled from 'styled-components/macro'\n\nconst Container = styled.div`\n flex: 1;\n padding-top: 5px;\n align-items: flex-end;\n align-content: stretch;\n justify-content: center;\n display: flex;\n svg {\n overflow: visible;\n height: 100%;\n width: 100%;\n }\n`\n\nfunction getPayloadId(rocket: RocketType) {\n switch (rocket.second_stage.payloads[0].payload_type) {\n case 'Dragon Boilerplate':\n return 'dragonNT'\n case 'Dragon 1.0':\n case 'Dragon 1.1':\n return 'dragon'\n case 'Crew Dragon':\n return 'crew-dragon'\n case 'Satellite':\n case 'Lander':\n return 'sat'\n default:\n return ''\n }\n}\n\nfunction getSvgRocketId(rocket: RocketType) {\n if (rocket.rocket_id === 'falcon1') return rocket.rocket_id\n\n const res = `${rocket.rocket_id}_${rocket.rocket_type}_${getPayloadId(rocket)}`\n return res\n}\n\nfunction getOptions(rocket: RocketType): string[] {\n let options = []\n if (rocket.first_stage.cores[0].legs) {\n options.push('legs')\n }\n if (rocket.first_stage.cores[0].block === 5 && rocket.rocket_id !== 'falconheavy') {\n options.push('block5')\n }\n if (rocket.first_stage.cores[0].gridfins) {\n options.push('farings')\n }\n return options\n}\n\nconst Rocket: FC<{\n rocket: RocketType\n success: boolean | null\n}> = ({ rocket, success }) => {\n const id = getSvgRocketId(rocket)\n const options = getOptions(rocket)\n return (\n \n \n \n \n {options.map(option => (\n \n ))}\n \n \n \n )\n}\n\nexport default Rocket\n","import React, { FC } from 'react'\nimport styled from 'styled-components/macro'\nimport Countdown from '../../components/Countdown'\nimport Right from './Right'\nimport { LaunchType } from '../../types'\nimport Rocket from '../PastLaunches/Rocket'\n\nconst RocketContainer = styled.div`\n width: 17px;\n\n @media (min-width: 600px) {\n margin: 0 40px 0 45px;\n }\n div {\n height: 100%;\n padding: 0;\n }\n @media (max-width: 600px) {\n width: 100%;\n height: 75px;\n overflow: hidden;\n svg {\n transform: rotate(90deg) scale(4);\n }\n }\n`\n\nconst Mission = styled.div<{ size: number }>`\n line-height: 50px;\n font-size: ${p => p.size}em;\n text-align: right;\n`\n\nconst Container = styled.div`\n display: flex;\n line-height: 1;\n .left {\n display: flex;\n flex-direction: column;\n }\n\n @media (max-width: 600px) {\n flex-direction: column;\n\n > div {\n margin-top: 40px;\n }\n }\n\n @media (max-width: 400px) {\n font-size: 0.8em;\n }\n`\n\nconst Title = styled.div`\n text-align: right;\n`\n\nconst Launch: FC<{ data: LaunchType }> = ({ data }) => {\n const l = data.mission_name.length\n const name_fontsize = l > 20 ? (l > 26 ? 2 : 3) : 4\n\n return (\n \n
\n Mission Name\n {data.mission_name}\n \n
\n \n \n \n \n
\n )\n}\n\nexport default Launch\n","import React, { FC } from 'react'\nimport styled from 'styled-components/macro'\n\nconst Container = styled.div`\n font-size: 2em;\n margin-top: 10px;\n display: flex;\n > div {\n flex: 1;\n }\n button {\n cursor: pointer;\n padding: 0 10px;\n margin: 0;\n background: transparent;\n border: 0;\n cursor: pointer;\n color: #007bff;\n &:focus {\n outline: none;\n }\n }\n .disabled {\n color: rgba(255, 255, 255, 0.2) !important;\n cursor: default;\n }\n`\n\nconst Arrows: FC<{\n max: number\n current: number\n callback: (i: number) => void\n}> = props => {\n const left = props.current !== 0\n const right = props.current !== props.max - 1\n return (\n \n props.callback(props.current - 1) : () => undefined}\n >\n ←\n \n
\n props.callback(props.current + 1) : () => undefined}\n >\n →\n \n \n )\n}\n\nexport default Arrows\n","import React from 'react'\nimport styled from 'styled-components/macro'\nimport axios from 'axios'\nimport ScrollButton from '../../components/ScrollButton'\nimport Header from '../../components/Header'\nimport Launch from './Launch'\nimport Arrows from './Arrows'\nimport { LaunchType } from '../../types'\n\nconst MoreInfo = styled.div`\n text-align: justify;\n max-width: 580px;\n margin: 0 auto;\n height: 60px;\n line-height: 1;\n color: rgba(255, 255, 255, 0.75);\n @media (max-width: 600px) {\n display: none;\n }\n @media (max-height: 600px) {\n display: none;\n }\n`\n\nconst Container = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n`\n\nconst Main = styled.div`\n color: #fff;\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n`\n\nexport default class extends React.Component<\n {},\n { data: LaunchType[] | null; i: number }\n> {\n state = { data: null as LaunchType[] | null, i: 0 }\n\n callback = (i: number) => this.setState({ i })\n\n componentDidMount() {\n axios\n .get('https://api.spacexdata.com/v3/launches/upcoming')\n .then(({ data }) => this.setState({ data: data as LaunchType[] }))\n }\n\n render() {\n const { data, i } = this.state\n\n return (\n \n
\n
\n {data && (\n <>\n \n \n {data && data[i].details}\n \n )}\n
\n \n \n )\n }\n}\n","import React, { FC } from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTwitter, faFacebookF } from '@fortawesome/free-brands-svg-icons'\nimport styled from 'styled-components/macro'\n\nconst Container = styled.div<{ colors: boolean }>`\n flex-direction: 'row';\n margin-bottom: 5px;\n a {\n color: #fff;\n border-radius: 3px;\n margin-left: 5px;\n padding-top: 4px;\n padding-bottom: 4px;\n padding-left: 7px;\n padding-right: 7px;\n font-size: 12px;\n font-weight: 400;\n &:hover {\n text-decoration: none;\n opacity: 0.8;\n }\n }\n`\n\nconst SocialButtons: FC<{\n link: string\n text: string\n twitterUser?: string\n colors?: boolean\n}> = props => {\n const link = encodeURIComponent(props.link)\n const text = encodeURIComponent(props.text)\n const twitterUser = props.twitterUser && encodeURIComponent(props.twitterUser)\n return (\n \n \n \n Tweet\n \n \n \n Share\n \n \n )\n}\nexport default SocialButtons\n","import React, { FC } from 'react'\nimport styled from 'styled-components/macro'\nimport SocialButtons from './SocialButtons'\n\nconst Container = styled.footer`\n .left,\n .right {\n color: #fff;\n position: fixed;\n bottom: 5px;\n @media (max-width: 600px) {\n display: none;\n }\n font-size: 0.9em;\n }\n .left {\n opacity: 0.5;\n left: 5px;\n }\n .right {\n right: 5px;\n }\n`\n\nconst Footer: FC<{}> = () => (\n \n
\n {'Not an official site - '}\n \n Report issue on GitHub\n \n {' - Source: '}\n \n SpaceX-API\n \n
\n
\n \n
\n
\n)\n\nexport default Footer\n","import React, { FC } from 'react'\nimport DestinationSVG from './destinations.svg'\n\nfunction orbitMap(orbit: string) {\n if (['VLEO'].includes(orbit)) {\n return 'LEO'\n }\n return orbit\n}\n\nconst Destination: FC<{ orbit: string }> = ({ orbit }) => {\n orbit = orbitMap(orbit)\n return (\n \n \n \n \n \n )\n}\n\nexport default Destination\n","import React, { FC } from 'react'\nimport { RocketType } from '../../types'\n\nconst LandingOutcome: FC<{\n success: boolean | null\n land_success: boolean | null\n landing_type: string | null\n}> = props => {\n if (!props.success) {\n return {`// Failure \\\\\\\\`}\n }\n if (props.landing_type != null) {\n let className\n let text\n if (props.landing_type === 'Ocean') {\n text = 'Water land'\n className = 'neutral'\n } else if (props.land_success) {\n text = 'Landed'\n className = 'success'\n } else {\n text = 'Landing fail'\n className = 'fail'\n }\n return {text}\n }\n return null\n}\n\nconst Caption: FC<{\n success: boolean | null\n rocket: RocketType\n name: string\n}> = props => (\n
\n {props.name}\n \n \n \n
\n)\n\nexport default Caption\n","import React, { FC } from 'react'\nimport styled from 'styled-components/macro'\n\nconst SIZE = 75\n\nconst Picture = styled.picture`\n > * {\n align-self: center;\n margin-bottom: 25px;\n width: ${SIZE}px;\n height: ${SIZE}px;\n }\n`\n\nconst Patch: FC<{\n mission_patch: string | null\n name: string\n}> = props => {\n if (props.mission_patch == null) return
\n const patchFileName = `https://images.weserv.nl/?url=${encodeURIComponent(\n props.mission_patch.replace(/(^\\w+:|^)\\/\\//, '')\n )}&w=${SIZE * 2}&h=${SIZE * 2}`\n return (\n \n \n \n \n {`${props.name}\n \n \n )\n}\n\nexport default Patch\n","import React, { FC, CSSProperties } from 'react'\nimport styled from 'styled-components/macro'\nimport Destination from './Destination'\nimport Rocket from './Rocket'\nimport Caption from './Caption'\nimport Patch from './Patch'\nimport { LaunchType } from '../../types'\n\nconst Flight = styled.div`\n font-size: 14px;\n color: #fff;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding-bottom: 5px;\n .destination {\n border-top: 2px solid #071c2f;\n border-bottom: 2px solid #071c2f;\n align-content: stretch;\n justify-content: center;\n display: flex;\n min-height: 5em;\n\n overflow: visible;\n svg {\n width: 5.6em;\n height: 2.8em;\n }\n }\n\n .name,\n .outcome {\n text-align: center;\n overflow: hidden;\n font-size: 12px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .name {\n padding-top: 10px;\n height: 3.3em;\n margin-bottom: 5px;\n }\n\n .outcome {\n padding-bottom: 10px;\n height: 4em;\n\n > span {\n padding: 2px 4px;\n white-space: nowrap;\n }\n }\n\n .landing {\n background-color: rgba(0, 0, 0, 0.3);\n border: 1px solid;\n border-radius: 10px;\n overflow: hidden;\n min-width: 4.4em;\n }\n`\n\nconst Launch: FC<{ style: CSSProperties; launch: LaunchType }> = ({\n style,\n launch,\n}) => (\n \n \n \n \n \n \n)\n\nexport default Launch\n","import React from 'react'\nimport styled from 'styled-components/macro'\nimport axios from 'axios'\nimport ScrollButton from '../../components/ScrollButton'\nimport Header from '../../components/Header'\nimport Footer from '../../components/Footer'\nimport Launch from './Launch'\nimport VirtualList from 'react-tiny-virtual-list'\nimport { LaunchType } from '../../types'\nimport { DIRECTION } from 'react-tiny-virtual-list/types/constants'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons'\nconst { SizeMe }: any = require('react-sizeme')\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n height: 100vh;\n width: 100%;\n background: #081e35;\n box-shadow: 0 -2px 20px 0 hsla(211, 74%, 9%, 1);\n\n .loading,\n .flight-container {\n z-index: 10;\n background: #011e37;\n flex: 1;\n display: flex;\n }\n .loading {\n align-items: center;\n justify-content: center;\n color: #fff;\n }\n .flight-container {\n font-size: 14px;\n > div {\n overflow-x: scroll !important;\n overflow-y: hidden !important;\n }\n border-bottom: 5px solid $border;\n\n @media (max-height: 770px) {\n font-size: 1.9vh;\n }\n }\n`\n\nexport default class extends React.Component<{}, { data: LaunchType[] | null }> {\n state = { data: null as LaunchType[] | null }\n\n componentDidMount() {\n axios\n .get('https://api.spacexdata.com/v3/launches/past')\n .then(({ data }) => this.setState({ data: data as LaunchType[] }))\n }\n\n render() {\n const data = this.state.data\n let list = data && data.reverse()\n return (\n \n
\n {list ? (\n \n {({ size }: { size: { width: number; height: number } }) => {\n if (size.width == null || size.height == null) return null\n return (\n
\n (\n \n )}\n />\n
\n )\n }}\n
\n ) : (\n
\n \n
\n )}\n \n