{"version":3,"file":"component---src-pages-projects-tbm-animation-tsx-3d75c69fc22c2e10cdb0.js","mappings":"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","sources":["webpack://axon-division/./src/content/projects/tbm-animation.project.ts","webpack://axon-division/./src/components/YouTubeEmbed/YouTubeEmbed.tsx","webpack://axon-division/./src/constants/hashtags.constants.ts","webpack://axon-division/./src/pages/projects/tbm-animation.tsx","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/constants/sectors.constants.ts","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 { Sector } from \"../../constants/sectors.constants\";\nimport { ProjectMetaInfo, ProjectMetaInfoWithQueriedResources } from \"../../types/app.types\";\nimport { AaaidpAnimationImagesQuery } from \"../../types/generated\";\n\nexport const ProjectMetaInfoTBMAnimation: ProjectMetaInfo = {\n name: \"tbm-animation\",\n displayName: \"TBM Animation\",\n abbreviation: \"TBM Animation\",\n subtitle: \"Animation produced for TBM\",\n // TODO\n description: \"Animation produced for Total Brand Management (TBM) Solutions.\",\n categories: [\n Category.design,\n ],\n sectors: [\n Sector.eCommerceAndRetail,\n ],\n hashtags: [\n Hashtag.animations,\n ],\n hasPage: true,\n keywords: [\n 'TBM',\n 'Total Brand Management',\n 'animation design',\n 'advertisement design',\n 'motion graphics',\n ],\n}\nexport const useTBMAnimationInfo = () => {\n const TBMAnimationImages: TbmAnimationImagesQuery = useStaticQuery(graphql`\n query TBMAnimationImages {\n featuredImage: file(relativePath: {eq: \"images/tbm-animation/tbm-animation-featured-image.png\"}) {\n childImageSharp {\n gatsbyImageData(width: 1280, height: 720)\n }\n }\n pageBackgroundImage: file(relativePath: {eq: \"images/tbm-animation/tbm-animation-background.png\"}) {\n childImageSharp {\n gatsbyImageData(width: 1280, height: 720)\n }\n }\n }\n `)\n const info: ProjectMetaInfoWithQueriedResources = {\n ...ProjectMetaInfoTBMAnimation,\n featuredImage: {\n image: TBMAnimationImages.featuredImage!.childImageSharp,\n title: 'TBM Video Preview',\n alt: 'TBM Video Preview Image',\n },\n pageBackgroundImage: {\n image: TBMAnimationImages.pageBackgroundImage!.childImageSharp,\n title: 'TBM Video Preview',\n alt: 'TBM Video Preview Image',\n },\n }\n return info;\n}","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 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 { useTBMAnimationInfo } from '../../content/projects/tbm-animation.project';\nimport { PageComponent } from '../../types/gatsby.types';\n// import './ProjectPageJimOCallaghan.scss';\n\ntype ProjectPageTBMAnimationProps = {}\n\nconst ProjectPageTBMAnimation: PageComponent = props => {\n const metaInfo = useTBMAnimationInfo();\n return Watch on YouTube\n }\n >\n \n \n}\n\nexport default ProjectPageTBMAnimation;","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;","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":["ProjectMetaInfoTBMAnimation","name","displayName","abbreviation","subtitle","description","categories","Category","design","sectors","Sector","eCommerceAndRetail","hashtags","Hashtag","animations","hasPage","keywords","useTBMAnimationInfo","TBMAnimationImages","useStaticQuery","_objectSpread","featuredImage","image","childImageSharp","title","alt","pageBackgroundImage","props","UI","useAppContext","_jsx","Observer","children","className","src","frameBorder","allow","allowFullScreen","width","isIE","Math","min","viewport","undefined","height","round","DesignHashtags","digitalDesign","branding","printDesign","metaInfo","ProjectPage","project","sidebarExtraContent","CTAButton","to","target","ribbons","drawLine","YouTubeEmbed","disableSmoothScrollTemporarily","async","isBuildTime","document","documentElement","style","scrollBehavior","tick","key","useOnMount","pageHeadingGroupRef","useObservableRef","useAnimateTextEnterByLine","animateTextEnter","delay","_props$project$pageBa","_jsxs","PageTemplate","joinClassName","entryMeta","backgroundImage","TricolorMorphDef","PageSection","id","as","ref","Widowless","StandardTextBlock","url","ProjectURLButton","_props$drawLine","rel","widowPreventerRegex","_props$as","s","React","replace","sectorsPreferredOrder","all","healthAndFitness","governmentAndNPO","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":""}