{"version":3,"file":"component---src-pages-projects-klh-tsx-9736598e998732d4a3aa.js","mappings":"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","sources":["webpack://axon-division/./src/components/GatsbyImageAdaptor/GatsbyImageAdaptor.tsx","webpack://axon-division/./src/utils/css.utils.ts","webpack://axon-division/./src/components/ProjectPage/ProjectPage.tsx","webpack://axon-division/./src/components/SimpleEntryGallery/SimpleEntryGallery.tsx","webpack://axon-division/./src/components/ProjectURLButton/ProjectURLButton.tsx","webpack://axon-division/./src/pages/projects/klh.tsx","webpack://axon-division/./src/content/projects/klh.project.ts"],"sourcesContent":["import { GatsbyImage, GatsbyImageProps, getImage } from 'gatsby-plugin-image';\nimport React from 'react';\nimport { ImageWithMetaInfo } from '../../types/app.types';\nimport { ImageDataLike } from '../../types/gatsby.types';\n\ntype GatsbyImageAdaptorProps = {\n image: ImageWithMetaInfo | ImageDataLike,\n id?: string,\n title?: string,\n alt?: string,\n className?: string,\n objectFit?: GatsbyImageProps['objectFit'],\n objectPosition?: GatsbyImageProps['objectPosition'],\n backgroundColor?: string,\n}\n\n/**\n * A little adaptor component that automatically applies the getImage method for graphQL image query results.\n * It also accepts title/alt overrides.\n */\nconst GatsbyImageAdaptor: React.FC = props => {\n const image = props.image ? getImage(('image' in props.image || 'title' in props.image || 'alt' in props.image) ? props.image?.image : props.image) : null;\n return image ? : null;\n}\n\nexport default GatsbyImageAdaptor;","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, { ReactNode } from 'react';\nimport { EntryMetaInfoWithQueriedResources } from '../../types/app.types';\nimport joinClassName from '../../utils/className.utils';\nimport { isNumber } from '../../utils/typeChecks.utils';\nimport AppScreenshotSlider from '../AppScreenshotSlider/AppScreenshotSlider';\nimport GatsbyImageAdaptor from '../GatsbyImageAdaptor/GatsbyImageAdaptor';\nimport './SimpleEntryGallery.scss';\n\ntype SimpleEntryGalleryProps = {\n className?: string,\n entry: EntryMetaInfoWithQueriedResources,\n range?: [number, number],\n doNotRenderContainer?: boolean,\n autoAddMobileSlides?: boolean,\n mobileSlidesPosition?: number,\n}\n\nconst SimpleEntryGallery: React.FC = props => {\n const mobileScreenshots = props.entry.mobileScreenshots;\n const slides: ReactNode[] = (props.entry.gallery ?? []).slice(props.range?.[0] ?? 0, props.range?.[1] ?? (props.entry.gallery?.length ?? 0)).map((entry, i) => React.createElement(\n props.doNotRenderContainer ? 'div' : 'li',\n { \n key: i,\n className: \"SimpleEntryGalleryItem\",\n children: \n }\n ));\n if (mobileScreenshots && (props.autoAddMobileSlides || isNumber(props.mobileSlidesPosition))) slides.splice(props.mobileSlidesPosition ?? 1, 0, )\n if (props.doNotRenderContainer) return <>{slides}\n return
    \n { slides }\n
\n}\n\nexport default SimpleEntryGallery;","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;","import React from 'react';\nimport ProjectPage from '../../components/ProjectPage/ProjectPage';\nimport SimpleEntryGallery from '../../components/SimpleEntryGallery/SimpleEntryGallery';\nimport { useKLHInfo } from '../../content/projects/klh.project';\nimport { PageComponent } from '../../types/gatsby.types';\n// import './ProjectPageKLH.scss';\n\ntype ProjectPageKLHProps = {}\n\nconst ProjectPageKLH: PageComponent = props => {\n const metaInfo = useKLHInfo();\n return \n \n \n}\n\nexport default ProjectPageKLH;","import { graphql, useStaticQuery } from \"gatsby\";\nimport { Category } from \"../../constants/categories.constants\";\nimport { Sector } from \"../../constants/sectors.constants\";\nimport { ImageWithMetaInfo, ProjectMetaInfo, ProjectMetaInfoWithQueriedResources } from \"../../types/app.types\";\nimport { KlhImagesQuery } from \"../../types/generated\";\n\nexport const ProjectMetaInfoKLH: ProjectMetaInfo = {\n name: \"klh\",\n displayName: \"KLH Audio\",\n abbreviation: \"KLH\",\n subtitle: \"KLH Audio Speakers Website (Europe)\",\n description: \"Founded in 1957 in Cambridge, Massachusetts, KLH is a company of ground-breaking firsts and has created some of the bestselling speakers in the world.\",\n categories: [\n Category.websites,\n ],\n sectors: [\n Sector.eCommerceAndRetail,\n Sector.musicAndAudio\n ],\n url: \"https://www.klhaudio.eu/\",\n hasPage: true,\n keywords: [\n 'KLH',\n 'KLH Audio',\n 'web design',\n 'web development',\n 'Laravel',\n 'eCommerce',\n 'audio equipments',\n ],\n}\n\nexport const useKLHInfo = () => {\n const KLHImages: KlhImagesQuery = useStaticQuery(graphql`\n query KLHImages {\n featuredImage: file(relativePath: {eq: \"images/klh/klh-speakers-in-lounge.jpg\"}) {\n childImageSharp {\n gatsbyImageData(width: 1280, height: 720)\n }\n }\n gallery: allFile(\n sort: {fields: name},\n filter: {\n extension: {regex: \"/(jpg)|(jpeg)|(png)/\"},\n relativeDirectory: {eq: \"images/klh/gallery\"}\n }\n ) {\n edges {\n node {\n name\n childImageSharp {\n gatsbyImageData(width: 2560, height: 1440)\n }\n }\n }\n }\n mobileScreenshots: allFile(\n sort: {fields: name},\n filter: {\n extension: {regex: \"/(jpg)|(jpeg)|(png)/\"},\n relativeDirectory: {eq: \"images/klh/mobile-screenshots\"}\n }\n ) {\n edges {\n node {\n name\n childImageSharp {\n gatsbyImageData(\n width: 238\n )\n }\n }\n }\n }\n }\n `)\n const imageMetaData: Partial[] = [\n {\n title: \"KLH Audio EU Homepage Screenshot\",\n alt: \"KLH Audio EU Homepage Screenshot, desktop version\",\n },\n ]\n const info: ProjectMetaInfoWithQueriedResources = {\n ...ProjectMetaInfoKLH,\n featuredImage: {\n image: KLHImages.featuredImage!.childImageSharp,\n title: 'KLH Audio EU Website Homepage Desktop',\n alt: 'KLH Audio EU Website Homepage Desktop',\n },\n gallery: KLHImages.gallery.edges.map((edge, i) => ({\n image: edge.node.childImageSharp?.gatsbyImageData,\n ...imageMetaData[i]\n })),\n // TODO: provide better title / alt values,\n mobileScreenshots: KLHImages.mobileScreenshots.edges.map((edge, i) => ({\n image: edge.node.childImageSharp,\n title: edge.node.name,\n alt: edge.node.name,\n }))\n }\n return info;\n}"],"names":["props","_props$image","_props$title","_props$image2","_ref","_props$alt","_props$image3","image","getImage","_jsx","GatsbyImage","_objectSpread","id","title","alt","backgroundColor","disableSmoothScrollTemporarily","async","isBuildTime","document","documentElement","style","scrollBehavior","tick","key","project","name","useOnMount","pageHeadingGroupRef","useObservableRef","useAnimateTextEnterByLine","animateTextEnter","delay","Observer","children","_props$project$pageBa","_jsxs","PageTemplate","className","joinClassName","displayName","description","keywords","entryMeta","backgroundImage","pageBackgroundImage","featuredImage","TricolorMorphDef","PageSection","as","ref","Widowless","subtitle","StandardTextBlock","url","ProjectURLButton","ribbons","sidebarExtraContent","_props$entry$gallery","_props$range$","_props$range","_props$range$2","_props$range2","_props$entry$gallery$","_props$entry$gallery2","_props$mobileSlidesPo","mobileScreenshots","entry","slides","gallery","slice","range","length","map","i","React","doNotRenderContainer","GatsbyImageAdaptor","autoAddMobileSlides","isNumber","mobileSlidesPosition","splice","AppScreenshotSlider","_Fragment","_props$drawLine","UI","useAppContext","CTAButton","to","rel","target","drawLine","undefined","viewport","width","metaInfo","useKLHInfo","ProjectPage","SimpleEntryGallery","ProjectMetaInfoKLH","abbreviation","categories","Category","websites","sectors","Sector","eCommerceAndRetail","musicAndAudio","hasPage","KLHImages","useStaticQuery","imageMetaData","childImageSharp","edges","edge","_edge$node$childImage","node","gatsbyImageData"],"sourceRoot":""}