{"version":3,"file":"243-bbc382f7ddbf0790961c.js","mappings":"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","sources":["webpack://shadepro-gatsby/../src/components/intersection-observer.ts","webpack://shadepro-gatsby/../src/components/lazy-hydrate.tsx"],"sourcesContent":["let intersectionObserver: IntersectionObserver\n\nexport type Unobserver = () => void\n\nconst ioEntryMap = new WeakMap void>()\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst connection =\n (navigator as any).connection ||\n (navigator as any).mozConnection ||\n (navigator as any).webkitConnection\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n// These match the thresholds used in Chrome's native lazy loading\n// @see https://web.dev/browser-level-image-lazy-loading/#distance-from-viewport-thresholds\nconst FAST_CONNECTION_THRESHOLD = `1250px`\nconst SLOW_CONNECTION_THRESHOLD = `2500px`\n\nexport function createIntersectionObserver(\n callback: () => void\n): (element: HTMLElement) => Unobserver {\n const connectionType = connection?.effectiveType\n\n // if we don't support intersectionObserver we don't lazy load (Sorry IE 11).\n if (!(`IntersectionObserver` in window)) {\n return function observe(): Unobserver {\n callback()\n return function unobserve(): void {}\n }\n }\n\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n // Get the matching entry's callback and call it\n ioEntryMap.get(entry.target as HTMLElement)?.()\n // We only need to call it once\n ioEntryMap.delete(entry.target as HTMLElement)\n }\n })\n },\n {\n rootMargin:\n connectionType === `4g` && !connection?.saveData\n ? FAST_CONNECTION_THRESHOLD\n : SLOW_CONNECTION_THRESHOLD,\n }\n )\n }\n\n return function observe(element: HTMLElement): Unobserver {\n // Store a reference to the callback mapped to the element being watched\n ioEntryMap.set(element, callback)\n intersectionObserver.observe(element)\n\n return function unobserve(): void {\n if (intersectionObserver && element) {\n ioEntryMap.delete(element)\n intersectionObserver.unobserve(element)\n }\n }\n }\n}\n","import React from \"react\"\nimport { renderToStaticMarkup } from \"react-dom/server\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImage } from \"./main-image\"\nimport {\n hasNativeLazyLoadSupport,\n getMainProps,\n getPlaceholderProps,\n} from \"./hooks\"\nimport { createIntersectionObserver } from \"./intersection-observer\"\nimport type { MainImageProps } from \"./main-image\"\nimport type { GatsbyImageProps } from \"./gatsby-image.browser\"\n\ntype LazyHydrateProps = Omit & {\n isLoading: boolean\n isLoaded: boolean\n}\n\nasync function applyPolyfill(element: HTMLImageElement): Promise {\n if (!(`objectFitPolyfill` in window)) {\n await import(\n // @ts-ignore typescript can't find the module for some reason ¯\\_(ツ)_/¯\n /* webpackChunkName: \"gatsby-plugin-image-objectfit-polyfill\" */ `objectFitPolyfill`\n )\n }\n ;(window as any).objectFitPolyfill(element)\n}\n\nfunction toggleLoaded(\n mainImage: HTMLElement,\n placeholderImage: HTMLElement\n): void {\n mainImage.style.opacity = `1`\n\n if (placeholderImage) {\n placeholderImage.style.opacity = `0`\n }\n}\n\nfunction startLoading(\n element: HTMLElement,\n cacheKey: string,\n imageCache: Set,\n onStartLoad: GatsbyImageProps[\"onStartLoad\"],\n onLoad: GatsbyImageProps[\"onLoad\"],\n onError: GatsbyImageProps[\"onError\"]\n): () => void {\n const mainImage = element.querySelector(\n `[data-main-image]`\n ) as HTMLImageElement\n const placeholderImage = element.querySelector(\n `[data-placeholder-image]`\n )\n const isCached = imageCache.has(cacheKey)\n\n function onImageLoaded(e): void {\n // eslint-disable-next-line @babel/no-invalid-this\n this.removeEventListener(`load`, onImageLoaded)\n\n const target = e.currentTarget\n const img = new Image()\n img.src = target.currentSrc\n\n if (img.decode) {\n // Decode the image through javascript to support our transition\n img\n .decode()\n .then(() => {\n // eslint-disable-next-line @babel/no-invalid-this\n toggleLoaded(this, placeholderImage)\n onLoad?.({\n wasCached: isCached,\n })\n })\n .catch(e => {\n // eslint-disable-next-line @babel/no-invalid-this\n toggleLoaded(this, placeholderImage)\n onError?.(e)\n })\n } else {\n // eslint-disable-next-line @babel/no-invalid-this\n toggleLoaded(this, placeholderImage)\n onLoad?.({\n wasCached: isCached,\n })\n }\n }\n\n mainImage.addEventListener(`load`, onImageLoaded)\n\n onStartLoad?.({\n wasCached: isCached,\n })\n Array.from(mainImage.parentElement.children).forEach(child => {\n const src = child.getAttribute(`data-src`)\n const srcSet = child.getAttribute(`data-srcset`)\n if (src) {\n child.removeAttribute(`data-src`)\n child.setAttribute(`src`, src)\n }\n if (srcSet) {\n child.removeAttribute(`data-srcset`)\n child.setAttribute(`srcset`, srcSet)\n }\n })\n\n imageCache.add(cacheKey)\n\n // Load times not always fires - mostly when it's a 304\n // We check if the image is already completed and if so we trigger onload.\n if (mainImage.complete) {\n onImageLoaded.call(mainImage, {\n currentTarget: mainImage,\n })\n }\n\n return (): void => {\n if (mainImage) {\n mainImage.removeEventListener(`load`, onImageLoaded)\n }\n }\n}\n\nexport function swapPlaceholderImage(\n element: HTMLElement,\n cacheKey: string,\n imageCache: Set,\n style: React.CSSProperties,\n onStartLoad: GatsbyImageProps[\"onStartLoad\"],\n onLoad: GatsbyImageProps[\"onLoad\"],\n onError: GatsbyImageProps[\"onError\"]\n): () => void {\n if (!hasNativeLazyLoadSupport()) {\n let cleanup\n const io = createIntersectionObserver(() => {\n cleanup = startLoading(\n element,\n cacheKey,\n imageCache,\n onStartLoad,\n onLoad,\n onError\n )\n })\n const unobserve = io(element)\n\n // Polyfill \"object-fit\" if unsupported (mostly IE)\n if (!(`objectFit` in document.documentElement.style)) {\n element.dataset.objectFit = style.objectFit ?? `cover`\n element.dataset.objectPosition = `${style.objectPosition ?? `50% 50%`}`\n applyPolyfill(element as HTMLImageElement)\n }\n\n return (): void => {\n if (cleanup) {\n cleanup()\n }\n\n unobserve()\n }\n }\n\n return startLoading(\n element,\n cacheKey,\n imageCache,\n onStartLoad,\n onLoad,\n onError\n )\n}\n\nexport function renderImageToString({\n image,\n loading = `lazy`,\n isLoading,\n isLoaded,\n imgClassName,\n imgStyle = {},\n objectPosition,\n backgroundColor,\n objectFit = `cover`,\n ...props\n}: LazyHydrateProps): string {\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: wrapperBackgroundColor,\n } = image\n\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n return renderToStaticMarkup(\n \n \n\n )}\n width={width}\n height={height}\n className={imgClassName}\n {...getMainProps(isLoading, isLoaded, images, loading, imgStyle)}\n />\n \n )\n}\n"],"names":["intersectionObserver","ioEntryMap","WeakMap","connection","navigator","mozConnection","webkitConnection","_excluded","toggleLoaded","mainImage","placeholderImage","style","opacity","startLoading","element","cacheKey","imageCache","onStartLoad","onLoad","onError","querySelector","has","onImageLoaded","e","this","removeEventListener","target","currentTarget","img","Image","src","currentSrc","decode","then","wasCached","isCached","catch","addEventListener","Array","from","parentElement","children","forEach","child","getAttribute","srcSet","removeAttribute","setAttribute","add","complete","call","hasNativeLazyLoadSupport","cleanup","callback","IntersectionObserver","entries","entry","isIntersecting","get","delete","rootMargin","effectiveType","saveData","set","observe","unobserve","io","document","documentElement","dataset","objectFit","_style$objectFit","objectPosition","async","window","import","objectFitPolyfill","renderImageToString","image","_ref","loading","isLoading","isLoaded","imgClassName","imgStyle","backgroundColor","props","_objectWithoutPropertiesLoose","width","height","layout","images","placeholder","wrapperBackgroundColor","React","createElement","getPlaceholderProps","MainImage","className","getMainProps"],"sourceRoot":""}