{"version":3,"file":"component---src-pages-projects-alexander-boyd-displays-tsx-3928f4cdc8dca97d5ddc.js","mappings":"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","sources":["webpack://axon-division/./src/content/projects/alexander-boyd-displays.project.ts","webpack://axon-division/./src/pages/projects/alexander-boyd-displays.tsx","webpack://axon-division/./src/components/YouTubeEmbed/YouTubeEmbed.tsx","webpack://axon-division/./src/constants/hashtags.constants.ts","webpack://axon-division/./src/utils/css.utils.ts","webpack://axon-division/./src/components/ProjectPage/ProjectPage.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/hooks/useAnimateTextEnterByLine.hook.ts"],"sourcesContent":["import { graphql, useStaticQuery } from \"gatsby\";\nimport { Category } from \"../../constants/categories.constants\";\nimport { Hashtag } from \"../../constants/hashtags.constants\";\nimport { ProjectMetaInfo, ProjectMetaInfoWithQueriedResources } from \"../../types/app.types\";\nimport { AlexanderBoydDisplaysImagesQuery } from \"../../types/generated\";\n\nexport const ProjectMetaInfoAlexanderBoydDisplays: ProjectMetaInfo = {\n name: \"alexander-boyd-displays\",\n displayName: \"Alexander Boyd Displays\",\n abbreviation: \"ABD\",\n subtitle: \"Website & Animation advertisement\",\n // TODO\n description: \"\",\n categories: [\n Category.design,\n Category.websites,\n ],\n sectors: [\n ],\n hashtags: [\n Hashtag.animations,\n ],\n // hasPage: false,\n hasPage: true,\n keywords: [\n 'Alexander Boyd Displays',\n 'animation design',\n 'web design',\n 'motion graphics',\n ],\n}\nexport const useAlexanderBoydDisplaysInfo = () => {\n const AlexanderBoydDisplaysImages: AlexanderBoydDisplaysImagesQuery = useStaticQuery(graphql`\n query AlexanderBoydDisplaysImages {\n featuredImage: file(relativePath: {eq: \"images/alexander-boyd-displays/alexander-boyd-displays-video-screenshot-cinema.jpg\"}) {\n childImageSharp {\n gatsbyImageData(width: 1280, height: 720)\n }\n }\n }\n `)\n const info: ProjectMetaInfoWithQueriedResources = {\n ...ProjectMetaInfoAlexanderBoydDisplays,\n featuredImage: {\n image: AlexanderBoydDisplaysImages.featuredImage!.childImageSharp,\n title: 'Alexander Boyd Display Advertisement Video Preview',\n alt: 'Alexander Boyd Display Advertisement Video Preview Image showing a man putting up outdoors posters on the exterior wall of a vintage cinema',\n },\n }\n return info;\n}","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 { useAlexanderBoydDisplaysInfo } from '../../content/projects/alexander-boyd-displays.project';\nimport { PageComponent } from '../../types/gatsby.types';\n// import './ProjectPageJimOCallaghan.scss';\n\ntype ProjectPageAlexanderBoydAnimationProps = {}\n\nconst ProjectPageAlexanderBoydAnimation: PageComponent = props => {\n const metaInfo = useAlexanderBoydDisplaysInfo();\n return Watch on YouTube\n }\n >\n \n \n}\n\nexport default ProjectPageAlexanderBoydAnimation;","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 { 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;","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;","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":["ProjectMetaInfoAlexanderBoydDisplays","name","displayName","abbreviation","subtitle","description","categories","Category","design","websites","sectors","hashtags","Hashtag","animations","hasPage","keywords","useAlexanderBoydDisplaysInfo","AlexanderBoydDisplaysImages","useStaticQuery","_objectSpread","featuredImage","image","childImageSharp","title","alt","props","metaInfo","_jsx","ProjectPage","project","sidebarExtraContent","CTAButton","to","target","ribbons","drawLine","children","YouTubeEmbed","src","UI","useAppContext","Observer","className","frameBorder","allow","allowFullScreen","width","isIE","Math","min","viewport","undefined","height","round","DesignHashtags","digitalDesign","branding","printDesign","disableSmoothScrollTemporarily","async","isBuildTime","document","documentElement","style","scrollBehavior","tick","key","useOnMount","pageHeadingGroupRef","useObservableRef","useAnimateTextEnterByLine","animateTextEnter","delay","_props$project$pageBa","_jsxs","PageTemplate","joinClassName","entryMeta","backgroundImage","pageBackgroundImage","TricolorMorphDef","PageSection","id","as","ref","Widowless","StandardTextBlock","url","ProjectURLButton","_props$drawLine","rel","widowPreventerRegex","_props$as","s","React","replace","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":""}