{"version":3,"file":"static/chunks/4587-5a135191d5baf2d2.js","mappings":"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","sources":["webpack://_N_E/../client/use-merged-ref.ts","webpack://_N_E/../../../src/shared/lib/image-loader.ts","webpack://_N_E/../../../src/shared/lib/image-external.tsx","webpack://_N_E/../../../src/shared/lib/image-blur-svg.ts","webpack://_N_E/../client/image-component.tsx","webpack://_N_E/../../../src/shared/lib/get-img-props.ts","webpack://_N_E/./node_modules/next/image.js"],"sourcesContent":["import { useCallback, useRef, type Ref } from 'react'\n\n// This is a compatibility hook to support React 18 and 19 refs.\n// In 19, a cleanup function from refs may be returned.\n// In 18, returning a cleanup function creates a warning.\n// Since we take userspace refs, we don't know ahead of time if a cleanup function will be returned.\n// This implements cleanup functions with the old behavior in 18.\n// We know refs are always called alternating with `null` and then `T`.\n// So a call with `null` means we need to call the previous cleanup functions.\nexport function useMergedRef(\n refA: Ref,\n refB: Ref\n): Ref {\n const cleanupA = useRef<(() => void) | null>(null)\n const cleanupB = useRef<(() => void) | null>(null)\n\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (e.g. via ``),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return useCallback(\n (current: TElement | null): void => {\n if (current === null) {\n const cleanupFnA = cleanupA.current\n if (cleanupFnA) {\n cleanupA.current = null\n cleanupFnA()\n }\n const cleanupFnB = cleanupB.current\n if (cleanupFnB) {\n cleanupB.current = null\n cleanupFnB()\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current)\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current)\n }\n }\n },\n [refA, refB]\n )\n}\n\nfunction applyRef(\n refA: NonNullable>,\n current: TElement\n) {\n if (typeof refA === 'function') {\n const cleanup = refA(current)\n if (typeof cleanup === 'function') {\n return cleanup\n } else {\n return () => refA(null)\n }\n } else {\n refA.current = current\n return () => {\n refA.current = null\n }\n }\n}\n","import type { ImageLoaderPropsWithConfig } from './image-config'\n\nconst DEFAULT_Q = 75\n\nfunction defaultLoader({\n config,\n src,\n width,\n quality,\n}: ImageLoaderPropsWithConfig): string {\n if (process.env.NODE_ENV !== 'production') {\n const missingValues = []\n\n // these should always be provided but make sure they are\n if (!src) missingValues.push('src')\n if (!width) missingValues.push('width')\n\n if (missingValues.length > 0) {\n throw new Error(\n `Next Image Optimization requires ${missingValues.join(\n ', '\n )} to be provided. Make sure you pass them as props to the \\`next/image\\` component. Received: ${JSON.stringify(\n { src, width, quality }\n )}`\n )\n }\n\n if (src.startsWith('//')) {\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)`\n )\n }\n\n if (src.startsWith('/') && config.localPatterns) {\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasLocalMatch } = require('./match-local-pattern')\n if (!hasLocalMatch(config.localPatterns, src)) {\n throw new Error(\n `Invalid src prop (${src}) on \\`next/image\\` does not match \\`images.localPatterns\\` configured in your \\`next.config.js\\`\\n` +\n `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`\n )\n }\n }\n }\n\n if (!src.startsWith('/') && (config.domains || config.remotePatterns)) {\n let parsedSrc: URL\n try {\n parsedSrc = new URL(src)\n } catch (err) {\n console.error(err)\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, if using relative image it must start with a leading slash \"/\" or be an absolute URL (http:// or https://)`\n )\n }\n\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasRemoteMatch } = require('./match-remote-pattern')\n if (!hasRemoteMatch(config.domains, config.remotePatterns, parsedSrc)) {\n throw new Error(\n `Invalid src prop (${src}) on \\`next/image\\`, hostname \"${parsedSrc.hostname}\" is not configured under images in your \\`next.config.js\\`\\n` +\n `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host`\n )\n }\n }\n }\n\n if (quality && config.qualities && !config.qualities.includes(quality)) {\n throw new Error(\n `Invalid quality prop (${quality}) on \\`next/image\\` does not match \\`images.qualities\\` configured in your \\`next.config.js\\`\\n` +\n `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-qualities`\n )\n }\n }\n\n const q =\n quality ||\n config.qualities?.reduce((prev, cur) =>\n Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q) ? cur : prev\n ) ||\n DEFAULT_Q\n\n return `${config.path}?url=${encodeURIComponent(src)}&w=${width}&q=${q}${\n src.startsWith('/_next/static/media/') && process.env.NEXT_DEPLOYMENT_ID\n ? `&dpl=${process.env.NEXT_DEPLOYMENT_ID}`\n : ''\n }`\n}\n\n// We use this to determine if the import is the default loader\n// or a custom loader defined by the user in next.config.js\ndefaultLoader.__next_img_default = true\n\nexport default defaultLoader\n","import type { ImageConfigComplete, ImageLoaderProps } from './image-config'\nimport type { ImageProps, ImageLoader, StaticImageData } from './get-img-props'\n\nimport { getImgProps } from './get-img-props'\nimport { Image } from '../../client/image-component'\n\n// @ts-ignore - This is replaced by webpack alias\nimport defaultLoader from 'next/dist/shared/lib/image-loader'\n\n/**\n * For more advanced use cases, you can call `getImageProps()`\n * to get the props that would be passed to the underlying `` element,\n * and instead pass to them to another component, style, canvas, etc.\n *\n * Read more: [Next.js docs: `getImageProps`](https://nextjs.org/docs/app/api-reference/components/image#getimageprops)\n */\nexport function getImageProps(imgProps: ImageProps) {\n const { props } = getImgProps(imgProps, {\n defaultLoader,\n // This is replaced by webpack define plugin\n imgConf: process.env.__NEXT_IMAGE_OPTS as any as ImageConfigComplete,\n })\n // Normally we don't care about undefined props because we pass to JSX,\n // but this exported function could be used by the end user for anything\n // so we delete undefined props to clean it up a little.\n for (const [key, value] of Object.entries(props)) {\n if (value === undefined) {\n delete props[key as keyof typeof props]\n }\n }\n return { props }\n}\n\nexport default Image\n\nexport type { ImageProps, ImageLoaderProps, ImageLoader, StaticImageData }\n","/**\n * A shared function, used on both client and server, to generate a SVG blur placeholder.\n */\nexport function getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL,\n objectFit,\n}: {\n widthInt?: number\n heightInt?: number\n blurWidth?: number\n blurHeight?: number\n blurDataURL: string\n objectFit?: string\n}): string {\n const std = 20\n const svgWidth = blurWidth ? blurWidth * 40 : widthInt\n const svgHeight = blurHeight ? blurHeight * 40 : heightInt\n\n const viewBox =\n svgWidth && svgHeight ? `viewBox='0 0 ${svgWidth} ${svgHeight}'` : ''\n const preserveAspectRatio = viewBox\n ? 'none'\n : objectFit === 'contain'\n ? 'xMidYMid'\n : objectFit === 'cover'\n ? 'xMidYMid slice'\n : 'none'\n\n return `%3Csvg xmlns='http://www.w3.org/2000/svg' ${viewBox}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${preserveAspectRatio}' style='filter: url(%23b);' href='${blurDataURL}'/%3E%3C/svg%3E`\n}\n","'use client'\n\nimport React, {\n useRef,\n useEffect,\n useCallback,\n useContext,\n useMemo,\n useState,\n forwardRef,\n use,\n} from 'react'\nimport ReactDOM from 'react-dom'\nimport Head from '../shared/lib/head'\nimport { getImgProps } from '../shared/lib/get-img-props'\nimport type {\n ImageProps,\n ImgProps,\n OnLoad,\n OnLoadingComplete,\n PlaceholderValue,\n} from '../shared/lib/get-img-props'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n} from '../shared/lib/image-config'\nimport { imageConfigDefault } from '../shared/lib/image-config'\nimport { ImageConfigContext } from '../shared/lib/image-config-context.shared-runtime'\nimport { warnOnce } from '../shared/lib/utils/warn-once'\nimport { RouterContext } from '../shared/lib/router-context.shared-runtime'\n\n// @ts-ignore - This is replaced by webpack alias\nimport defaultLoader from 'next/dist/shared/lib/image-loader'\nimport { useMergedRef } from './use-merged-ref'\n\n// This is replaced by webpack define plugin\nconst configEnv = process.env.__NEXT_IMAGE_OPTS as any as ImageConfigComplete\n\nif (typeof window === 'undefined') {\n ;(globalThis as any).__NEXT_IMAGE_IMPORTED = true\n}\n\nexport type { ImageLoaderProps }\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\ntype ImgElementWithDataProp = HTMLImageElement & {\n 'data-loaded-src': string | undefined\n}\n\ntype ImageElementProps = ImgProps & {\n unoptimized: boolean\n placeholder: PlaceholderValue\n onLoadRef: React.MutableRefObject\n onLoadingCompleteRef: React.MutableRefObject\n setBlurComplete: (b: boolean) => void\n setShowAltText: (b: boolean) => void\n sizesInput: string | undefined\n}\n\n// See https://stackoverflow.com/q/39777833/266535 for why we use this ref\n// handler instead of the img's onLoad attribute.\nfunction handleLoading(\n img: ImgElementWithDataProp,\n placeholder: PlaceholderValue,\n onLoadRef: React.MutableRefObject,\n onLoadingCompleteRef: React.MutableRefObject,\n setBlurComplete: (b: boolean) => void,\n unoptimized: boolean,\n sizesInput: string | undefined\n) {\n const src = img?.src\n if (!img || img['data-loaded-src'] === src) {\n return\n }\n img['data-loaded-src'] = src\n const p = 'decode' in img ? img.decode() : Promise.resolve()\n p.catch(() => {}).then(() => {\n if (!img.parentElement || !img.isConnected) {\n // Exit early in case of race condition:\n // - onload() is called\n // - decode() is called but incomplete\n // - unmount is called\n // - decode() completes\n return\n }\n if (placeholder !== 'empty') {\n setBlurComplete(true)\n }\n if (onLoadRef?.current) {\n // Since we don't have the SyntheticEvent here,\n // we must create one with the same shape.\n // See https://reactjs.org/docs/events.html\n const event = new Event('load')\n Object.defineProperty(event, 'target', { writable: false, value: img })\n let prevented = false\n let stopped = false\n onLoadRef.current({\n ...event,\n nativeEvent: event,\n currentTarget: img,\n target: img,\n isDefaultPrevented: () => prevented,\n isPropagationStopped: () => stopped,\n persist: () => {},\n preventDefault: () => {\n prevented = true\n event.preventDefault()\n },\n stopPropagation: () => {\n stopped = true\n event.stopPropagation()\n },\n })\n }\n if (onLoadingCompleteRef?.current) {\n onLoadingCompleteRef.current(img)\n }\n if (process.env.NODE_ENV !== 'production') {\n const origSrc = new URL(src, 'http://n').searchParams.get('url') || src\n if (img.getAttribute('data-nimg') === 'fill') {\n if (!unoptimized && (!sizesInput || sizesInput === '100vw')) {\n let widthViewportRatio =\n img.getBoundingClientRect().width / window.innerWidth\n if (widthViewportRatio < 0.6) {\n if (sizesInput === '100vw') {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" prop and \"sizes\" prop of \"100vw\", but image is not rendered at full viewport width. Please adjust \"sizes\" to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`\n )\n } else {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" but is missing \"sizes\" prop. Please add it to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`\n )\n }\n }\n }\n if (img.parentElement) {\n const { position } = window.getComputedStyle(img.parentElement)\n const valid = ['absolute', 'fixed', 'relative']\n if (!valid.includes(position)) {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" and parent element with invalid \"position\". Provided \"${position}\" should be one of ${valid\n .map(String)\n .join(',')}.`\n )\n }\n }\n if (img.height === 0) {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" and a height value of 0. This is likely because the parent element of the image has not been styled to have a set height.`\n )\n }\n }\n\n const heightModified =\n img.height.toString() !== img.getAttribute('height')\n const widthModified = img.width.toString() !== img.getAttribute('width')\n if (\n (heightModified && !widthModified) ||\n (!heightModified && widthModified)\n ) {\n warnOnce(\n `Image with src \"${origSrc}\" has either width or height modified, but not the other. If you use CSS to change the size of your image, also include the styles 'width: \"auto\"' or 'height: \"auto\"' to maintain the aspect ratio.`\n )\n }\n }\n })\n}\n\nfunction getDynamicProps(\n fetchPriority?: string\n): Record {\n if (Boolean(use)) {\n // In React 19.0.0 or newer, we must use camelCase\n // prop to avoid \"Warning: Invalid DOM property\".\n // See https://github.com/facebook/react/pull/25927\n return { fetchPriority }\n }\n // In React 18.2.0 or older, we must use lowercase prop\n // to avoid \"Warning: Invalid DOM property\".\n return { fetchpriority: fetchPriority }\n}\n\nconst ImageElement = forwardRef(\n (\n {\n src,\n srcSet,\n sizes,\n height,\n width,\n decoding,\n className,\n style,\n fetchPriority,\n placeholder,\n loading,\n unoptimized,\n fill,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n setShowAltText,\n sizesInput,\n onLoad,\n onError,\n ...rest\n },\n forwardedRef\n ) => {\n const ownRef = useCallback(\n (img: ImgElementWithDataProp | null) => {\n if (!img) {\n return\n }\n if (onError) {\n // If the image has an error before react hydrates, then the error is lost.\n // The workaround is to wait until the image is mounted which is after hydration,\n // then we set the src again to trigger the error handler (if there was an error).\n // eslint-disable-next-line no-self-assign\n img.src = img.src\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!src) {\n console.error(`Image is missing required \"src\" property:`, img)\n }\n if (img.getAttribute('alt') === null) {\n console.error(\n `Image is missing required \"alt\" property. Please add Alternative Text to describe the image for screen readers and search engines.`\n )\n }\n }\n if (img.complete) {\n handleLoading(\n img,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n unoptimized,\n sizesInput\n )\n }\n },\n [\n src,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n onError,\n unoptimized,\n sizesInput,\n ]\n )\n\n const ref = useMergedRef(forwardedRef, ownRef)\n\n return (\n {\n const img = event.currentTarget as ImgElementWithDataProp\n handleLoading(\n img,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n unoptimized,\n sizesInput\n )\n }}\n onError={(event) => {\n // if the real image fails to load, this will ensure \"alt\" is visible\n setShowAltText(true)\n if (placeholder !== 'empty') {\n // If the real image fails to load, this will still remove the placeholder.\n setBlurComplete(true)\n }\n if (onError) {\n onError(event)\n }\n }}\n />\n )\n }\n)\n\nfunction ImagePreload({\n isAppRouter,\n imgAttributes,\n}: {\n isAppRouter: boolean\n imgAttributes: ImgProps\n}) {\n const opts = {\n as: 'image',\n imageSrcSet: imgAttributes.srcSet,\n imageSizes: imgAttributes.sizes,\n crossOrigin: imgAttributes.crossOrigin,\n referrerPolicy: imgAttributes.referrerPolicy,\n ...getDynamicProps(imgAttributes.fetchPriority),\n }\n\n if (isAppRouter && ReactDOM.preload) {\n // See https://github.com/facebook/react/pull/26940\n ReactDOM.preload(\n imgAttributes.src,\n // @ts-expect-error TODO: upgrade to `@types/react-dom@18.3.x`\n opts\n )\n return null\n }\n\n return (\n \n \n \n )\n}\n\n/**\n * The `Image` component is used to optimize images.\n *\n * Read more: [Next.js docs: `Image`](https://nextjs.org/docs/app/api-reference/components/image)\n */\nexport const Image = forwardRef(\n (props, forwardedRef) => {\n const pagesRouter = useContext(RouterContext)\n // We're in the app directory if there is no pages router.\n const isAppRouter = !pagesRouter\n\n const configContext = useContext(ImageConfigContext)\n const config = useMemo(() => {\n const c = configEnv || configContext || imageConfigDefault\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n return { ...c, allSizes, deviceSizes, qualities }\n }, [configContext])\n\n const { onLoad, onLoadingComplete } = props\n const onLoadRef = useRef(onLoad)\n\n useEffect(() => {\n onLoadRef.current = onLoad\n }, [onLoad])\n\n const onLoadingCompleteRef = useRef(onLoadingComplete)\n\n useEffect(() => {\n onLoadingCompleteRef.current = onLoadingComplete\n }, [onLoadingComplete])\n\n const [blurComplete, setBlurComplete] = useState(false)\n const [showAltText, setShowAltText] = useState(false)\n\n const { props: imgAttributes, meta: imgMeta } = getImgProps(props, {\n defaultLoader,\n imgConf: config,\n blurComplete,\n showAltText,\n })\n\n return (\n <>\n {\n \n }\n {imgMeta.priority ? (\n \n ) : null}\n \n )\n }\n)\n","import { warnOnce } from './utils/warn-once'\nimport { getImageBlurSvg } from './image-blur-svg'\nimport { imageConfigDefault } from './image-config'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n ImageLoaderPropsWithConfig,\n} from './image-config'\n\nimport type { JSX } from 'react'\n\nexport interface StaticImageData {\n src: string\n height: number\n width: number\n blurDataURL?: string\n blurWidth?: number\n blurHeight?: number\n}\n\nexport interface StaticRequire {\n default: StaticImageData\n}\n\nexport type StaticImport = StaticRequire | StaticImageData\n\nexport type ImageProps = Omit<\n JSX.IntrinsicElements['img'],\n 'src' | 'srcSet' | 'ref' | 'alt' | 'width' | 'height' | 'loading'\n> & {\n src: string | StaticImport\n alt: string\n width?: number | `${number}`\n height?: number | `${number}`\n fill?: boolean\n loader?: ImageLoader\n quality?: number | `${number}`\n priority?: boolean\n loading?: LoadingValue\n placeholder?: PlaceholderValue\n blurDataURL?: string\n unoptimized?: boolean\n overrideSrc?: string\n /**\n * @deprecated Use `onLoad` instead.\n * @see https://nextjs.org/docs/app/api-reference/components/image#onload\n */\n onLoadingComplete?: OnLoadingComplete\n /**\n * @deprecated Use `fill` prop instead of `layout=\"fill\"` or change import to `next/legacy/image`.\n * @see https://nextjs.org/docs/api-reference/next/legacy/image\n */\n layout?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectFit?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectPosition?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyBoundary?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyRoot?: string\n}\n\nexport type ImgProps = Omit & {\n loading: LoadingValue\n width: number | undefined\n height: number | undefined\n style: NonNullable\n sizes: string | undefined\n srcSet: string | undefined\n src: string\n}\n\nconst VALID_LOADING_VALUES = ['lazy', 'eager', undefined] as const\ntype LoadingValue = (typeof VALID_LOADING_VALUES)[number]\ntype ImageConfig = ImageConfigComplete & {\n allSizes: number[]\n output?: 'standalone' | 'export'\n}\n\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\n// Do not export - this is an internal type only\n// because `next.config.js` is only meant for the\n// built-in loaders, not for a custom loader() prop.\ntype ImageLoaderWithConfig = (p: ImageLoaderPropsWithConfig) => string\n\nexport type PlaceholderValue = 'blur' | 'empty' | `data:image/${string}`\nexport type OnLoad = React.ReactEventHandler | undefined\nexport type OnLoadingComplete = (img: HTMLImageElement) => void\n\nfunction isStaticRequire(\n src: StaticRequire | StaticImageData\n): src is StaticRequire {\n return (src as StaticRequire).default !== undefined\n}\n\nfunction isStaticImageData(\n src: StaticRequire | StaticImageData\n): src is StaticImageData {\n return (src as StaticImageData).src !== undefined\n}\n\nfunction isStaticImport(src: string | StaticImport): src is StaticImport {\n return (\n !!src &&\n typeof src === 'object' &&\n (isStaticRequire(src as StaticImport) ||\n isStaticImageData(src as StaticImport))\n )\n}\n\nconst allImgs = new Map<\n string,\n { src: string; priority: boolean; placeholder: PlaceholderValue }\n>()\nlet perfObserver: PerformanceObserver | undefined\n\nfunction getInt(x: unknown): number | undefined {\n if (typeof x === 'undefined') {\n return x\n }\n if (typeof x === 'number') {\n return Number.isFinite(x) ? x : NaN\n }\n if (typeof x === 'string' && /^[0-9]+$/.test(x)) {\n return parseInt(x, 10)\n }\n return NaN\n}\n\nfunction getWidths(\n { deviceSizes, allSizes }: ImageConfig,\n width: number | undefined,\n sizes: string | undefined\n): { widths: number[]; kind: 'w' | 'x' } {\n if (sizes) {\n // Find all the \"vw\" percent sizes used in the sizes prop\n const viewportWidthRe = /(^|\\s)(1?\\d?\\d)vw/g\n const percentSizes = []\n for (let match; (match = viewportWidthRe.exec(sizes)); match) {\n percentSizes.push(parseInt(match[2]))\n }\n if (percentSizes.length) {\n const smallestRatio = Math.min(...percentSizes) * 0.01\n return {\n widths: allSizes.filter((s) => s >= deviceSizes[0] * smallestRatio),\n kind: 'w',\n }\n }\n return { widths: allSizes, kind: 'w' }\n }\n if (typeof width !== 'number') {\n return { widths: deviceSizes, kind: 'w' }\n }\n\n const widths = [\n ...new Set(\n // > This means that most OLED screens that say they are 3x resolution,\n // > are actually 3x in the green color, but only 1.5x in the red and\n // > blue colors. Showing a 3x resolution image in the app vs a 2x\n // > resolution image will be visually the same, though the 3x image\n // > takes significantly more data. Even true 3x resolution screens are\n // > wasteful as the human eye cannot see that level of detail without\n // > something like a magnifying glass.\n // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n [width, width * 2 /*, width * 3*/].map(\n (w) => allSizes.find((p) => p >= w) || allSizes[allSizes.length - 1]\n )\n ),\n ]\n return { widths, kind: 'x' }\n}\n\ntype GenImgAttrsData = {\n config: ImageConfig\n src: string\n unoptimized: boolean\n loader: ImageLoaderWithConfig\n width?: number\n quality?: number\n sizes?: string\n}\n\ntype GenImgAttrsResult = {\n src: string\n srcSet: string | undefined\n sizes: string | undefined\n}\n\nfunction generateImgAttrs({\n config,\n src,\n unoptimized,\n width,\n quality,\n sizes,\n loader,\n}: GenImgAttrsData): GenImgAttrsResult {\n if (unoptimized) {\n return { src, srcSet: undefined, sizes: undefined }\n }\n\n const { widths, kind } = getWidths(config, width, sizes)\n const last = widths.length - 1\n\n return {\n sizes: !sizes && kind === 'w' ? '100vw' : sizes,\n srcSet: widths\n .map(\n (w, i) =>\n `${loader({ config, src, quality, width: w })} ${\n kind === 'w' ? w : i + 1\n }${kind}`\n )\n .join(', '),\n\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n src: loader({ config, src, quality, width: widths[last] }),\n }\n}\n\n/**\n * A shared function, used on both client and server, to generate the props for .\n */\nexport function getImgProps(\n {\n src,\n sizes,\n unoptimized = false,\n priority = false,\n loading,\n className,\n quality,\n width,\n height,\n fill = false,\n style,\n overrideSrc,\n onLoad,\n onLoadingComplete,\n placeholder = 'empty',\n blurDataURL,\n fetchPriority,\n decoding = 'async',\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n ...rest\n }: ImageProps,\n _state: {\n defaultLoader: ImageLoaderWithConfig\n imgConf: ImageConfigComplete\n showAltText?: boolean\n blurComplete?: boolean\n }\n): {\n props: ImgProps\n meta: {\n unoptimized: boolean\n priority: boolean\n placeholder: NonNullable\n fill: boolean\n }\n} {\n const { imgConf, showAltText, blurComplete, defaultLoader } = _state\n let config: ImageConfig\n let c = imgConf || imageConfigDefault\n if ('allSizes' in c) {\n config = c as ImageConfig\n } else {\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n config = { ...c, allSizes, deviceSizes, qualities }\n }\n\n if (typeof defaultLoader === 'undefined') {\n throw new Error(\n 'images.loaderFile detected but the file is missing default export.\\nRead more: https://nextjs.org/docs/messages/invalid-images-config'\n )\n }\n let loader: ImageLoaderWithConfig = rest.loader || defaultLoader\n\n // Remove property so it's not spread on element\n delete rest.loader\n delete (rest as any).srcSet\n\n // This special value indicates that the user\n // didn't define a \"loader\" prop or \"loader\" config.\n const isDefaultLoader = '__next_img_default' in loader\n\n if (isDefaultLoader) {\n if (config.loader === 'custom') {\n throw new Error(\n `Image with src \"${src}\" is missing \"loader\" prop.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader`\n )\n }\n } else {\n // The user defined a \"loader\" prop or config.\n // Since the config object is internal only, we\n // must not pass it to the user-defined \"loader\".\n const customImageLoader = loader as ImageLoader\n loader = (obj) => {\n const { config: _, ...opts } = obj\n return customImageLoader(opts)\n }\n }\n\n if (layout) {\n if (layout === 'fill') {\n fill = true\n }\n const layoutToStyle: Record | undefined> = {\n intrinsic: { maxWidth: '100%', height: 'auto' },\n responsive: { width: '100%', height: 'auto' },\n }\n const layoutToSizes: Record = {\n responsive: '100vw',\n fill: '100vw',\n }\n const layoutStyle = layoutToStyle[layout]\n if (layoutStyle) {\n style = { ...style, ...layoutStyle }\n }\n const layoutSizes = layoutToSizes[layout]\n if (layoutSizes && !sizes) {\n sizes = layoutSizes\n }\n }\n\n let staticSrc = ''\n let widthInt = getInt(width)\n let heightInt = getInt(height)\n let blurWidth: number | undefined\n let blurHeight: number | undefined\n if (isStaticImport(src)) {\n const staticImageData = isStaticRequire(src) ? src.default : src\n\n if (!staticImageData.src) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n if (!staticImageData.height || !staticImageData.width) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n\n blurWidth = staticImageData.blurWidth\n blurHeight = staticImageData.blurHeight\n blurDataURL = blurDataURL || staticImageData.blurDataURL\n staticSrc = staticImageData.src\n\n if (!fill) {\n if (!widthInt && !heightInt) {\n widthInt = staticImageData.width\n heightInt = staticImageData.height\n } else if (widthInt && !heightInt) {\n const ratio = widthInt / staticImageData.width\n heightInt = Math.round(staticImageData.height * ratio)\n } else if (!widthInt && heightInt) {\n const ratio = heightInt / staticImageData.height\n widthInt = Math.round(staticImageData.width * ratio)\n }\n }\n }\n src = typeof src === 'string' ? src : staticSrc\n\n let isLazy =\n !priority && (loading === 'lazy' || typeof loading === 'undefined')\n if (!src || src.startsWith('data:') || src.startsWith('blob:')) {\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n unoptimized = true\n isLazy = false\n }\n if (config.unoptimized) {\n unoptimized = true\n }\n if (\n isDefaultLoader &&\n !config.dangerouslyAllowSVG &&\n src.split('?', 1)[0].endsWith('.svg')\n ) {\n // Special case to make svg serve as-is to avoid proxying\n // through the built-in Image Optimization API.\n unoptimized = true\n }\n\n const qualityInt = getInt(quality)\n\n if (process.env.NODE_ENV !== 'production') {\n if (config.output === 'export' && isDefaultLoader && !unoptimized) {\n throw new Error(\n `Image Optimization using the default loader is not compatible with \\`{ output: 'export' }\\`.\n Possible solutions:\n - Remove \\`{ output: 'export' }\\` and run \"next start\" to run server mode including the Image Optimization API.\n - Configure \\`{ images: { unoptimized: true } }\\` in \\`next.config.js\\` to disable the Image Optimization API.\n Read more: https://nextjs.org/docs/messages/export-image-api`\n )\n }\n if (!src) {\n // React doesn't show the stack trace and there's\n // no `src` to help identify which image, so we\n // instead console.error(ref) during mount.\n unoptimized = true\n } else {\n if (fill) {\n if (width) {\n throw new Error(\n `Image with src \"${src}\" has both \"width\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (height) {\n throw new Error(\n `Image with src \"${src}\" has both \"height\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (style?.position && style.position !== 'absolute') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.position\" properties. Images with \"fill\" always use position absolute - it cannot be modified.`\n )\n }\n if (style?.width && style.width !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.width\" properties. Images with \"fill\" always use width 100% - it cannot be modified.`\n )\n }\n if (style?.height && style.height !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.height\" properties. Images with \"fill\" always use height 100% - it cannot be modified.`\n )\n }\n } else {\n if (typeof widthInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"width\" property.`\n )\n } else if (isNaN(widthInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"width\" property. Expected a numeric value in pixels but received \"${width}\".`\n )\n }\n if (typeof heightInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"height\" property.`\n )\n } else if (isNaN(heightInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"height\" property. Expected a numeric value in pixels but received \"${height}\".`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/^[\\x00-\\x20]/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot start with a space or control character. Use src.trimStart() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/[\\x00-\\x20]$/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot end with a space or control character. Use src.trimEnd() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n }\n }\n if (!VALID_LOADING_VALUES.includes(loading)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"loading\" property. Provided \"${loading}\" should be one of ${VALID_LOADING_VALUES.map(\n String\n ).join(',')}.`\n )\n }\n if (priority && loading === 'lazy') {\n throw new Error(\n `Image with src \"${src}\" has both \"priority\" and \"loading='lazy'\" properties. Only one should be used.`\n )\n }\n if (\n placeholder !== 'empty' &&\n placeholder !== 'blur' &&\n !placeholder.startsWith('data:image/')\n ) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"placeholder\" property \"${placeholder}\".`\n )\n }\n if (placeholder !== 'empty') {\n if (widthInt && heightInt && widthInt * heightInt < 1600) {\n warnOnce(\n `Image with src \"${src}\" is smaller than 40x40. Consider removing the \"placeholder\" property to improve performance.`\n )\n }\n }\n if (placeholder === 'blur' && !blurDataURL) {\n const VALID_BLUR_EXT = ['jpeg', 'png', 'webp', 'avif'] // should match next-image-loader\n\n throw new Error(\n `Image with src \"${src}\" has \"placeholder='blur'\" property but is missing the \"blurDataURL\" property.\n Possible solutions:\n - Add a \"blurDataURL\" property, the contents should be a small Data URL to represent the image\n - Change the \"src\" property to a static import with one of the supported file types: ${VALID_BLUR_EXT.join(\n ','\n )} (animated images not supported)\n - Remove the \"placeholder\" property, effectively no blur effect\n Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url`\n )\n }\n if ('ref' in rest) {\n warnOnce(\n `Image with src \"${src}\" is using unsupported \"ref\" property. Consider using the \"onLoad\" property instead.`\n )\n }\n\n if (!unoptimized && !isDefaultLoader) {\n const urlStr = loader({\n config,\n src,\n width: widthInt || 400,\n quality: qualityInt || 75,\n })\n let url: URL | undefined\n try {\n url = new URL(urlStr)\n } catch (err) {}\n if (urlStr === src || (url && url.pathname === src && !url.search)) {\n warnOnce(\n `Image with src \"${src}\" has a \"loader\" property that does not implement width. Please implement it or use the \"unoptimized\" property instead.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width`\n )\n }\n }\n\n if (onLoadingComplete) {\n warnOnce(\n `Image with src \"${src}\" is using deprecated \"onLoadingComplete\" property. Please use the \"onLoad\" property instead.`\n )\n }\n\n for (const [legacyKey, legacyValue] of Object.entries({\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n })) {\n if (legacyValue) {\n warnOnce(\n `Image with src \"${src}\" has legacy prop \"${legacyKey}\". Did you forget to run the codemod?` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13`\n )\n }\n }\n\n if (\n typeof window !== 'undefined' &&\n !perfObserver &&\n window.PerformanceObserver\n ) {\n perfObserver = new PerformanceObserver((entryList) => {\n for (const entry of entryList.getEntries()) {\n // @ts-ignore - missing \"LargestContentfulPaint\" class with \"element\" prop\n const imgSrc = entry?.element?.src || ''\n const lcpImage = allImgs.get(imgSrc)\n if (\n lcpImage &&\n !lcpImage.priority &&\n lcpImage.placeholder === 'empty' &&\n !lcpImage.src.startsWith('data:') &&\n !lcpImage.src.startsWith('blob:')\n ) {\n // https://web.dev/lcp/#measure-lcp-in-javascript\n warnOnce(\n `Image with src \"${lcpImage.src}\" was detected as the Largest Contentful Paint (LCP). Please add the \"priority\" property if this image is above the fold.` +\n `\\nRead more: https://nextjs.org/docs/api-reference/next/image#priority`\n )\n }\n }\n })\n try {\n perfObserver.observe({\n type: 'largest-contentful-paint',\n buffered: true,\n })\n } catch (err) {\n // Log error but don't crash the app\n console.error(err)\n }\n }\n }\n const imgStyle = Object.assign(\n fill\n ? {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n objectFit,\n objectPosition,\n }\n : {},\n showAltText ? {} : { color: 'transparent' },\n style\n )\n\n const backgroundImage =\n !blurComplete && placeholder !== 'empty'\n ? placeholder === 'blur'\n ? `url(\"data:image/svg+xml;charset=utf-8,${getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL: blurDataURL || '', // assume not undefined\n objectFit: imgStyle.objectFit,\n })}\")`\n : `url(\"${placeholder}\")` // assume `data:image/`\n : null\n\n let placeholderStyle = backgroundImage\n ? {\n backgroundSize: imgStyle.objectFit || 'cover',\n backgroundPosition: imgStyle.objectPosition || '50% 50%',\n backgroundRepeat: 'no-repeat',\n backgroundImage,\n }\n : {}\n\n if (process.env.NODE_ENV === 'development') {\n if (\n placeholderStyle.backgroundImage &&\n placeholder === 'blur' &&\n blurDataURL?.startsWith('/')\n ) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, `next-image-loader.js`\n // will inline a special url to lazily generate the blur placeholder at request time.\n placeholderStyle.backgroundImage = `url(\"${blurDataURL}\")`\n }\n }\n\n const imgAttributes = generateImgAttrs({\n config,\n src,\n unoptimized,\n width: widthInt,\n quality: qualityInt,\n sizes,\n loader,\n })\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined') {\n let fullUrl: URL\n try {\n fullUrl = new URL(imgAttributes.src)\n } catch (e) {\n fullUrl = new URL(imgAttributes.src, window.location.href)\n }\n allImgs.set(fullUrl.href, { src, priority, placeholder })\n }\n }\n\n const props: ImgProps = {\n ...rest,\n loading: isLazy ? 'lazy' : loading,\n fetchPriority,\n width: widthInt,\n height: heightInt,\n decoding,\n className,\n style: { ...imgStyle, ...placeholderStyle },\n sizes: imgAttributes.sizes,\n srcSet: imgAttributes.srcSet,\n src: overrideSrc || imgAttributes.src,\n }\n const meta = { unoptimized, priority, placeholder, fill }\n return { props, meta }\n}\n","module.exports = require('./dist/shared/lib/image-external')\n"],"names":["useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","defaultLoader","config","src","width","quality","q","qualities","reduce","prev","cur","Math","abs","DEFAULT_Q","path","encodeURIComponent","startsWith","process","__next_img_default","getImageProps","imgProps","props","getImgProps","imgConf","key","value","Object","entries","undefined","Image","getImageBlurSvg","widthInt","heightInt","blurWidth","blurHeight","blurDataURL","objectFit","svgWidth","svgHeight","viewBox","std","preserveAspectRatio","configEnv","handleLoading","img","placeholder","onLoadRef","onLoadingCompleteRef","setBlurComplete","unoptimized","sizesInput","p","decode","Promise","resolve","catch","then","parentElement","isConnected","event","Event","defineProperty","writable","prevented","stopped","nativeEvent","currentTarget","target","isDefaultPrevented","isPropagationStopped","persist","preventDefault","stopPropagation","getDynamicProps","fetchPriority","use","Boolean","fetchpriority","ImageElement","forwardRef","forwardedRef","srcSet","sizes","height","decoding","className","style","loading","fill","setShowAltText","onLoad","onError","rest","ownRef","complete","ref","data-nimg","ImagePreload","isAppRouter","imgAttributes","opts","as","imageSrcSet","imageSizes","crossOrigin","referrerPolicy","ReactDOM","preload","Head","link","rel","href","pagesRouter","useContext","RouterContext","configContext","ImageConfigContext","useMemo","c","imageConfigDefault","allSizes","deviceSizes","sort","a","b","onLoadingComplete","useEffect","blurComplete","useState","showAltText","meta","imgMeta","priority","isStaticRequire","default","getInt","x","Number","isFinite","NaN","test","parseInt","_state","overrideSrc","layout","objectPosition","lazyBoundary","lazyRoot","Error","loader","isDefaultLoader","customImageLoader","_","obj","layoutStyle","layoutToStyle","intrinsic","maxWidth","responsive","layoutSizes","staticSrc","isStaticImageData","staticImageData","JSON","stringify","ratio","round","isLazy","dangerouslyAllowSVG","split","endsWith","qualityInt","imgStyle","assign","position","left","top","right","bottom","color","backgroundImage","backgroundSize","backgroundPosition","backgroundRepeat","generateImgAttrs","widths","kind","getWidths","viewportWidthRe","percentSizes","match","exec","push","length","smallestRatio","min","filter","s","Set","map","find","w","last","i","join","placeholderStyle"],"sourceRoot":"","ignoreList":[6]}