{"version":3,"file":"component---src-pages-projects-cpd-animation-tsx-c91e66f6e42cc09a7f59.js","mappings":"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","sources":["webpack://axon-division/./src/components/YouTubeEmbed/YouTubeEmbed.tsx","webpack://axon-division/./src/constants/hashtags.constants.ts","webpack://axon-division/./src/content/projects/cpd-animation.project.ts","webpack://axon-division/./src/utils/css.utils.ts","webpack://axon-division/./src/components/ProjectPage/ProjectPage.tsx","webpack://axon-division/./src/pages/projects/cpd-animation.tsx","webpack://axon-division/./src/constants/categories.constants.ts","webpack://axon-division/./src/components/StandardTextBlock/StandardTextBlock.tsx","webpack://axon-division/./src/components/ProjectURLButton/ProjectURLButton.tsx","webpack://axon-division/./src/utils/typography.utils.ts","webpack://axon-division/./src/components/Widowless/Widowless.tsx","webpack://axon-division/./src/constants/sectors.constants.ts","webpack://axon-division/./src/hooks/useAnimateTextEnterByLine.hook.ts"],"sourcesContent":["import { Observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { useAppContext } from '../../controllers/app.controller';\nimport { isIE } from '../../utils/browsers.utils';\nimport './YouTubeEmbed.scss';\n\ntype YouTubeEmbedProps = {\n src: string,\n title: string,\n}\n\nconst YouTubeEmbed: React.FC = props => {\n const { UI } = useAppContext();\n return (\n
\n \n
\n )} />\n}\n\nexport default YouTubeEmbed;","export enum Hashtag {\n 'branding' = 'branding',\n 'digitalDesign' = 'digitalDesign',\n 'printDesign' = 'printDesign',\n 'animations' = 'animations',\n}\n\nexport const DesignHashtags = [\n Hashtag.digitalDesign,\n Hashtag.animations,\n Hashtag.branding,\n Hashtag.printDesign,\n]","import { graphql, useStaticQuery } from \"gatsby\";\nimport { Category } from \"../../constants/categories.constants\";\nimport { Hashtag } from \"../../constants/hashtags.constants\";\nimport { Sector } from \"../../constants/sectors.constants\";\nimport { ProjectMetaInfo, ProjectMetaInfoWithQueriedResources } from \"../../types/app.types\";\nimport { AaaidpAnimationImagesQuery } from \"../../types/generated\";\n\nexport const ProjectMetaInfoCPDAnimation: ProjectMetaInfo = {\n name: \"cpd-animation\",\n displayName: \"CPD Animation\",\n abbreviation: \"CPD Animation\",\n subtitle: \"Animation produced for CPD\",\n // TODO\n description: \"Animation produced for Carnet de Passages (CPD) to inform what is an FIA / AIT Carnet De Passages En Douane.\",\n categories: [\n Category.design,\n ],\n sectors: [\n Sector.governmentAndNPO,\n ],\n hashtags: [\n Hashtag.animations,\n ],\n hasPage: true,\n keywords: [\n 'CPD',\n 'Carnet de Passage',\n 'animation design',\n 'advertisement design',\n 'motion graphics',\n ],\n}\nexport const useCPDAnimationInfo = () => {\n const CPDAnimationImages: CpdAnimationImagesQuery = useStaticQuery(graphql`\n query CPDAnimationImages {\n featuredImage: file(relativePath: {eq: \"images/cpd-animation/cpd-animation-featured-image.png\"}) {\n childImageSharp {\n gatsbyImageData(width: 1280, height: 720)\n }\n }\n pageBackgroundImage: file(relativePath: {eq: \"images/cpd-animation/cpd-animation-background.png\"}) {\n childImageSharp {\n gatsbyImageData(width: 1280, height: 720)\n }\n }\n }\n `)\n const info: ProjectMetaInfoWithQueriedResources = {\n ...ProjectMetaInfoCPDAnimation,\n featuredImage: {\n image: CPDAnimationImages.featuredImage!.childImageSharp,\n title: 'CPD Video Preview',\n alt: 'CPD Video Preview Image showing how to drive your car across borders',\n },\n pageBackgroundImage: {\n image: CPDAnimationImages.pageBackgroundImage!.childImageSharp,\n title: 'CPD Video Preview',\n alt: 'CPD Video Preview Image showing how to drive your car across borders',\n },\n }\n return info;\n}","import { isBuildTime } from \"../env\";\nimport tick from \"./waiters.utils\";\n\nexport const getFontSize = (element?: HTMLElement, fallback: number = 16) => {\n if (isBuildTime) return fallback;\n return parseFloat(getComputedStyle(element ?? document.body).fontSize);\n}\n\nexport const disableSmoothScroll = () => {\n if (isBuildTime) return;\n document.documentElement.style.scrollBehavior = 'auto';\n return enableSmoothScroll;\n}\n\nexport const enableSmoothScroll = () => {\n if (isBuildTime) return;\n document.documentElement.style.scrollBehavior = 'smooth';\n}\n\nexport const disableSmoothScrollTemporarily = async () => {\n if (isBuildTime) return;\n document.documentElement.style.scrollBehavior = 'auto';\n await tick();\n document.documentElement.style.scrollBehavior = 'smooth';\n}","import { Observer } from 'mobx-react-lite';\nimport React, { ReactElement } from 'react';\nimport { useOnMount } from '../../hooks/lifecycle.hooks';\nimport { useAnimateTextEnterByLine } from '../../hooks/useAnimateTextEnterByLine.hook';\nimport { useObservableRef } from '../../hooks/useObservableRef.hook';\nimport { ProjectMetaInfoWithQueriedResources } from '../../types/app.types';\nimport { PageComponent } from '../../types/gatsby.types';\nimport joinClassName from '../../utils/className.utils';\nimport { disableSmoothScrollTemporarily } from '../../utils/css.utils';\nimport PageSection from '../PageSection/PageSection';\nimport PageTemplate from '../PageTemplate/PageTemplate';\nimport ProjectURLButton from '../ProjectURLButton/ProjectURLButton';\nimport StandardTextBlock from '../StandardTextBlock/StandardTextBlock';\nimport TricolorMorphDef from '../TricolorMorphDef/TricolorMorphDef';\nimport Widowless from '../Widowless/Widowless';\nimport './ProjectPage.scss';\n\ntype ProjectPageProps = {\n project: ProjectMetaInfoWithQueriedResources,\n sidebarExtraContent?: ReactElement,\n}\n\nconst ProjectPage: PageComponent = props => {\n const key = `ProjectPage--${props.project.name}`;\n useOnMount(disableSmoothScrollTemporarily);\n const pageHeadingGroupRef = useObservableRef();\n useAnimateTextEnterByLine(pageHeadingGroupRef, { \n animateTextEnter: { delay: 100 }\n });\n return (\n \n \n \n\n \n\n
\n {props.children}\n
\n\n \n \n )} />\n}\n\nexport default ProjectPage;","import React from 'react';\nimport CTAButton from '../../components/CTAButton/CTAButton';\nimport ProjectPage from '../../components/ProjectPage/ProjectPage';\nimport YouTubeEmbed from '../../components/YouTubeEmbed/YouTubeEmbed';\n// import { useAAAIDPAnimationInfo } from '../../content/projects/aaa-idp-animation.project';\nimport { useCPDAnimationInfo } from '../../content/projects/cpd-animation.project';\nimport { PageComponent } from '../../types/gatsby.types';\n// import './ProjectPageJimOCallaghan.scss';\n\ntype ProjectPageCPDAnimationProps = {}\n\nconst ProjectPageCPDAnimation: PageComponent = props => {\n const metaInfo = useCPDAnimationInfo();\n return Watch on YouTube\n }\n >\n \n \n}\n\nexport default ProjectPageCPDAnimation;","export enum Category {\n 'apps' = 'apps',\n 'websites' = 'websites',\n 'design' = 'design',\n}\n","import React from 'react';\nimport { AnimateTextEnterByLineProps, useAnimateTextEnterByLine } from '../../hooks/useAnimateTextEnterByLine.hook';\nimport { useObservableRef } from '../../hooks/useObservableRef.hook';\nimport joinClassName from '../../utils/className.utils';\nimport './StandardTextBlock.scss';\n\ntype StandardTextBlockProps = AnimateTextEnterByLineProps & {\n className?: string\n}\n\nconst StandardTextBlock: React.FC = props => {\n const ref = useObservableRef();\n useAnimateTextEnterByLine(ref, props);\n return
\n {props.children}\n
\n}\n\nexport default StandardTextBlock;","import React from 'react';\nimport { useAppContext } from '../../controllers/app.controller';\nimport { ProjectMetaInfo } from '../../types/app.types';\nimport joinClassName from '../../utils/className.utils';\nimport CTAButton, { CTAButtonProps } from '../CTAButton/CTAButton';\n// import './ProjectURLButton.scss';\n\ntype ProjectURLButtonProps = Omit & {\n project: ProjectMetaInfo,\n drawLine?: 'left' | 'right' | false,\n}\n\nconst ProjectURLButton: React.FC = props => {\n const { UI } = useAppContext();\n return 768 ? 'left' : 'right'))}\n >Visit Site\n}\n\nexport default ProjectURLButton;","const widowPreventerRegex = /\\s(?=[^\\s]*$)/g;\n\nexport const preventWidows = (s: string) => s.replace(widowPreventerRegex, '\\u00A0');","import React from 'react';\nimport { preventWidows } from '../../utils/typography.utils';\n\ntype WidowlessProps = {\n as?: keyof HTMLElementTagNameMap,\n className?: string,\n children: string,\n onClick?: React.MouseEventHandler,\n}\n\nconst Widowless: React.FC = props => React.createElement(\n props.as ?? 'p', {\n ...props,\n children: preventWidows(props.children)\n }\n)\n\nexport default Widowless;","export enum Sector {\n 'all' = 'all',\n // 'agriculture' = 'agriculture',\n // 'aviation' = 'aviation',\n // 'construction' = 'construction',\n 'eCommerceAndRetail' = 'eCommerceAndRetail',\n 'eLearning' = 'eLearning',\n 'energy' = 'energy',\n 'entertainmentAndEvents' = 'entertainmentAndEvents',\n 'finance' = 'finance',\n 'governmentAndNPO' = 'governmentAndNPO',\n 'healthAndFitness' = 'healthAndFitness',\n 'lgbtq' = 'lgbtq',\n 'motorsports' = 'motorsports',\n 'musicAndAudio' = 'musicAndAudio',\n 'newsAndMedia' = 'newsAndMedia',\n 'tourism' = 'tourism',\n}\n\nexport const sectorsPreferredOrder = [\n Sector.all,\n Sector.healthAndFitness,\n Sector.eCommerceAndRetail,\n Sector.governmentAndNPO,\n Sector.finance,\n Sector.motorsports,\n Sector.tourism,\n Sector.entertainmentAndEvents,\n Sector.eLearning,\n Sector.musicAndAudio,\n Sector.lgbtq,\n // Sector.aviation,\n // Sector.construction,\n // Sector.agriculture,\n Sector.energy,\n Sector.newsAndMedia,\n]\n\nexport type SectorDefinition = {\n name: string,\n abbreviation?: string,\n slug: string,\n}\n\nexport const sectorDefinitions: Record = {\n [Sector.all]: { name: 'All Sectors', slug: 'all' },\n // [Sector.agriculture]: { name: 'Agriculture', slug: 'agriculture' },\n // [Sector.aviation]: { name: 'Aviation', slug: 'aviation' },\n // [Sector.construction]: { name: 'Construction', slug: 'construction' },\n [Sector.eCommerceAndRetail]: { name: 'eCommerce & Retail', slug: 'ecommerce-and-retail' },\n [Sector.eLearning]: { name: 'eLearning', slug: 'elearning' },\n [Sector.energy]: { name: 'Energy', slug: 'energy' },\n [Sector.entertainmentAndEvents]: { name: 'Entertainment & Events', slug: 'entertainment-and-events' },\n [Sector.finance]: { name: 'Finance', slug: 'finance' },\n [Sector.governmentAndNPO]: { name: 'Government & NPO', abbreviation: 'Gov & NPO', slug: 'government-and-npo' },\n [Sector.healthAndFitness]: { name: 'Health & Fitness', slug: 'health-and-fitness' },\n [Sector.lgbtq]: { name: 'LGBTQ+', slug: 'lgbtq' },\n [Sector.motorsports]: { name: 'Motorsports', slug: 'motorsports' },\n [Sector.musicAndAudio]: { name: 'Music & Audio', slug: 'music-and-audio' },\n [Sector.newsAndMedia]: { name: 'News & Media', slug: 'news-and-media' },\n [Sector.tourism]: { name: 'Tourism', slug: 'tourism' },\n}\n\nexport const isSectorEnum = (s: string): s is Sector => s in Sector;\n\nexport const getSectorName = (s?: Sometimes) => {\n if (!s) return undefined;\n if (isSectorEnum(s)) return sectorDefinitions[s].name;\n const [sector, def] = Object.entries(sectorDefinitions).find(([key, value]) => value.slug === s || value.name === s || value.abbreviation === s) || [];\n return def?.name;\n}\nexport const getSectorFromSlug = (s?: Sometimes) => {\n const [sector, def] = Object.entries(sectorDefinitions).find(([key, value]) => value.slug === s) || [];\n return sector as Sector | undefined;\n}","import { Expo, TweenMax } from 'gsap';\nimport { SplitText } from 'gsap/SplitText';\nimport { when } from \"mobx\";\nimport { PageSectionContext, usePageSectionContext } from \"../components/PageSection/PageSection\";\nimport { useAppContext } from '../controllers/app.controller';\nimport { isBrowser, isProduction } from \"../env\";\nimport { makeDisposerController } from \"../utils/disposer.utils\";\nimport { waitForFontsToLoad } from \"../utils/fonts.utils\";\nimport { log } from '../utils/loggers.utils';\nimport { highPerf } from '../utils/performance.utils';\nimport { isObject } from \"../utils/typeChecks.utils\";\nimport tick from \"../utils/waiters.utils\";\nimport { useOnMount } from \"./lifecycle.hooks\";\nimport { ObservableRef } from \"./useObservableRef.hook\";\n\nexport type AnimateTextEnterByLineProps = {\n animateTextEnter?: {\n delay?: number,\n onlyWhenParentSectionVisible?: boolean,\n } | true,\n}\n\nexport const useAnimateTextEnterByLine = (\n ref: ObservableRef, \n props: AnimateTextEnterByLineProps,\n context?: PageSectionContext,\n) => {\n const { UI } = useAppContext();\n const autoContext = usePageSectionContext();\n const pageSection = context ?? autoContext;\n useOnMount(() => {\n if (isProduction && UI.isFirstLoad) return;\n if (!highPerf) return;\n const d = makeDisposerController();\n const animateIn = async () => {\n if (isBrowser) {\n await waitForFontsToLoad();\n if (!ref.current) return;\n const spiltText = new SplitText(ref.current.children, { type: 'lines' });\n TweenMax.set(spiltText.lines, { opacity: 0 });\n if (isObject(props.animateTextEnter)) {\n if (props.animateTextEnter.delay) {\n await tick(props.animateTextEnter.delay);\n }\n if (props.animateTextEnter.onlyWhenParentSectionVisible) {\n await when(() => pageSection.visible);\n log('visible now', pageSection.id);\n }\n }\n if (!ref.current) return;\n const styles = getComputedStyle(ref.current);\n const YOffset = parseInt(styles.fontSize ?? 64) * 1;\n TweenMax.fromTo(spiltText.lines!, .62, {\n opacity: 0,\n y: YOffset,\n }, {\n opacity: 1,\n y: 0,\n ease: Expo.easeOut,\n stagger: .05,\n onComplete: () => spiltText.revert()\n });\n }\n }\n if (props.animateTextEnter) animateIn();\n return d.disposer\n })\n}"],"names":["props","UI","useAppContext","_jsx","Observer","children","className","src","title","frameBorder","allow","allowFullScreen","width","isIE","Math","min","viewport","undefined","height","round","Hashtag","DesignHashtags","digitalDesign","animations","branding","printDesign","ProjectMetaInfoCPDAnimation","name","displayName","abbreviation","subtitle","description","categories","Category","design","sectors","Sector","governmentAndNPO","hashtags","hasPage","keywords","useCPDAnimationInfo","CPDAnimationImages","useStaticQuery","_objectSpread","featuredImage","image","childImageSharp","alt","pageBackgroundImage","disableSmoothScrollTemporarily","async","isBuildTime","document","documentElement","style","scrollBehavior","tick","key","project","useOnMount","pageHeadingGroupRef","useObservableRef","useAnimateTextEnterByLine","animateTextEnter","delay","_props$project$pageBa","_jsxs","PageTemplate","joinClassName","entryMeta","backgroundImage","TricolorMorphDef","PageSection","id","as","ref","Widowless","StandardTextBlock","url","ProjectURLButton","ribbons","sidebarExtraContent","metaInfo","ProjectPage","CTAButton","to","target","drawLine","YouTubeEmbed","_props$drawLine","rel","widowPreventerRegex","_props$as","s","React","replace","sectorsPreferredOrder","all","healthAndFitness","eCommerceAndRetail","finance","motorsports","tourism","entertainmentAndEvents","eLearning","musicAndAudio","lgbtq","energy","newsAndMedia","sectorDefinitions","slug","getSectorName","isSectorEnum","sector","def","Object","entries","find","_ref","value","getSectorFromSlug","_ref2","context","autoContext","usePageSectionContext","pageSection","isProduction","isFirstLoad","highPerf","d","makeDisposerController","isBrowser","_styles$fontSize","waitForFontsToLoad","current","spiltText","SplitText","type","TweenMax","set","lines","opacity","isObject","onlyWhenParentSectionVisible","when","visible","log","styles","getComputedStyle","YOffset","parseInt","fontSize","fromTo","y","ease","Expo","easeOut","stagger","onComplete","revert","animateIn","disposer"],"sourceRoot":""}