{"version":3,"file":"static/chunks/633-771127d7207ff055.js","mappings":"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","sources":["webpack://_N_E/./node_modules/next/dist/api/image.js","webpack://_N_E/../../../src/client/app-dir/link.tsx","webpack://_N_E/../../src/client/image-component.tsx","webpack://_N_E/../../src/client/use-intersection.tsx","webpack://_N_E/../../src/client/use-merged-ref.ts","webpack://_N_E/../../../src/shared/lib/amp-context.shared-runtime.ts","webpack://_N_E/../../../src/shared/lib/amp-mode.ts","webpack://_N_E/../../../src/shared/lib/get-img-props.ts","webpack://_N_E/../../../src/shared/lib/head.tsx","webpack://_N_E/../../../src/shared/lib/image-blur-svg.ts","webpack://_N_E/../../../src/shared/lib/image-config-context.shared-runtime.ts","webpack://_N_E/../../../src/shared/lib/image-config.ts","webpack://_N_E/../../../src/shared/lib/image-external.tsx","webpack://_N_E/../../../src/shared/lib/image-loader.ts","webpack://_N_E/../../../src/shared/lib/router-context.shared-runtime.ts","webpack://_N_E/../../../../../src/shared/lib/router/utils/format-url.ts","webpack://_N_E/../../../../../src/shared/lib/router/utils/querystring.ts","webpack://_N_E/../../../src/shared/lib/side-effect.tsx","webpack://_N_E/../../../src/shared/lib/utils.ts","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/wrap.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/utils/get-easing-for-segment.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/is-dom-keyframes.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animate/resolve-subjects.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/sequence/utils/calc-repeat-duration.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/sequence/utils/calc-time.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/sequence/utils/edit.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/sequence/utils/normalize-times.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/sequence/utils/sort.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/sequence/create.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/object/ObjectVisualElement.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/create-visual-element.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animate/subject.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animate/sequence.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animate/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/components/motion/create.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/viewport/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/use-in-view.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/use-motion-value.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/transform.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/use-combine-values.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/use-computed.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/use-transform.mjs"],"sourcesContent":["export { default } from '../shared/lib/image-external';\nexport * from '../shared/lib/image-external';\n\n//# sourceMappingURL=image.js.map","'use client'\n\nimport type { NextRouter } from '../../shared/lib/router/router'\n\nimport React from 'react'\nimport type { UrlObject } from 'url'\nimport { formatUrl } from '../../shared/lib/router/utils/format-url'\nimport { AppRouterContext } from '../../shared/lib/app-router-context.shared-runtime'\nimport type { AppRouterInstance } from '../../shared/lib/app-router-context.shared-runtime'\nimport type { PrefetchOptions } from '../../shared/lib/app-router-context.shared-runtime'\nimport { useIntersection } from '../use-intersection'\nimport { PrefetchKind } from '../components/router-reducer/router-reducer-types'\nimport { useMergedRef } from '../use-merged-ref'\nimport { isAbsoluteUrl } from '../../shared/lib/utils'\nimport { addBasePath } from '../add-base-path'\nimport { warnOnce } from '../../shared/lib/utils/warn-once'\n\ntype Url = string | UrlObject\ntype RequiredKeys = {\n [K in keyof T]-?: {} extends Pick ? never : K\n}[keyof T]\ntype OptionalKeys = {\n [K in keyof T]-?: {} extends Pick ? K : never\n}[keyof T]\n\ntype InternalLinkProps = {\n /**\n * The path or URL to navigate to. It can also be an object.\n *\n * @example https://nextjs.org/docs/api-reference/next/link#with-url-object\n */\n href: Url\n /**\n * Optional decorator for the path that will be shown in the browser URL bar. Before Next.js 9.5.3 this was used for dynamic routes, check our [previous docs](https://github.com/vercel/next.js/blob/v9.5.2/docs/api-reference/next/link.md#dynamic-routes) to see how it worked. Note: when this path differs from the one provided in `href` the previous `href`/`as` behavior is used as shown in the [previous docs](https://github.com/vercel/next.js/blob/v9.5.2/docs/api-reference/next/link.md#dynamic-routes).\n */\n as?: Url\n /**\n * Replace the current `history` state instead of adding a new url into the stack.\n *\n * @defaultValue `false`\n */\n replace?: boolean\n /**\n * Whether to override the default scroll behavior\n *\n * @example https://nextjs.org/docs/api-reference/next/link#disable-scrolling-to-the-top-of-the-page\n *\n * @defaultValue `true`\n */\n scroll?: boolean\n /**\n * Update the path of the current page without rerunning [`getStaticProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props), [`getServerSideProps`](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props) or [`getInitialProps`](/docs/pages/api-reference/functions/get-initial-props).\n *\n * @defaultValue `false`\n */\n shallow?: boolean\n /**\n * Forces `Link` to send the `href` property to its child.\n *\n * @defaultValue `false`\n */\n passHref?: boolean\n /**\n * Prefetch the page in the background.\n * Any `` that is in the viewport (initially or through scroll) will be prefetched.\n * Prefetch can be disabled by passing `prefetch={false}`. Prefetching is only enabled in production.\n *\n * In App Router:\n * - `null` (default): For statically generated pages, this will prefetch the full React Server Component data. For dynamic pages, this will prefetch up to the nearest route segment with a [`loading.js`](https://nextjs.org/docs/app/api-reference/file-conventions/loading) file. If there is no loading file, it will not fetch the full tree to avoid fetching too much data.\n * - `true`: This will prefetch the full React Server Component data for all route segments, regardless of whether they contain a segment with `loading.js`.\n * - `false`: This will not prefetch any data, even on hover.\n *\n * In Pages Router:\n * - `true` (default): The full route & its data will be prefetched.\n * - `false`: Prefetching will not happen when entering the viewport, but will still happen on hover.\n * @defaultValue `true` (pages router) or `null` (app router)\n */\n prefetch?: boolean | null\n /**\n * The active locale is automatically prepended. `locale` allows for providing a different locale.\n * When `false` `href` has to include the locale as the default behavior is disabled.\n * Note: This is only available in the Pages Router.\n */\n locale?: string | false\n /**\n * Enable legacy link behavior.\n * @defaultValue `false`\n * @see https://github.com/vercel/next.js/commit/489e65ed98544e69b0afd7e0cfc3f9f6c2b803b7\n */\n legacyBehavior?: boolean\n /**\n * Optional event handler for when the mouse pointer is moved onto Link\n */\n onMouseEnter?: React.MouseEventHandler\n /**\n * Optional event handler for when Link is touched.\n */\n onTouchStart?: React.TouchEventHandler\n /**\n * Optional event handler for when Link is clicked.\n */\n onClick?: React.MouseEventHandler\n}\n\n// TODO-APP: Include the full set of Anchor props\n// adding this to the publicly exported type currently breaks existing apps\n\n// `RouteInferType` is a stub here to avoid breaking `typedRoutes` when the type\n// isn't generated yet. It will be replaced when the webpack plugin runs.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type LinkProps = InternalLinkProps\ntype LinkPropsRequired = RequiredKeys\ntype LinkPropsOptional = OptionalKeys>\n\nfunction prefetch(\n router: AppRouterInstance,\n href: string,\n options: PrefetchOptions\n): void {\n if (typeof window === 'undefined') {\n return\n }\n\n const doPrefetch = async () => {\n // note that `appRouter.prefetch()` is currently sync,\n // so we have to wrap this call in an async function to be able to catch() errors below.\n return router.prefetch(href, options)\n }\n\n // Prefetch the page if asked (only in the client)\n // We need to handle a prefetch error here since we may be\n // loading with priority which can reject but we don't\n // want to force navigation since this is only a prefetch\n doPrefetch().catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n // rethrow to show invalid URL errors\n throw err\n }\n })\n}\n\nfunction isModifiedEvent(event: React.MouseEvent): boolean {\n const eventTarget = event.currentTarget as HTMLAnchorElement | SVGAElement\n const target = eventTarget.getAttribute('target')\n return (\n (target && target !== '_self') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey || // triggers resource download\n (event.nativeEvent && event.nativeEvent.which === 2)\n )\n}\n\nfunction linkClicked(\n e: React.MouseEvent,\n router: NextRouter | AppRouterInstance,\n href: string,\n as: string,\n replace?: boolean,\n shallow?: boolean,\n scroll?: boolean\n): void {\n const { nodeName } = e.currentTarget\n\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === 'A'\n\n if (isAnchorNodeName && isModifiedEvent(e)) {\n // ignore click for browser’s default behavior\n return\n }\n\n e.preventDefault()\n\n const navigate = () => {\n // If the router is an NextRouter instance it will have `beforePopState`\n const routerScroll = scroll ?? true\n if ('beforePopState' in router) {\n router[replace ? 'replace' : 'push'](href, as, {\n shallow,\n scroll: routerScroll,\n })\n } else {\n router[replace ? 'replace' : 'push'](as || href, {\n scroll: routerScroll,\n })\n }\n }\n\n React.startTransition(navigate)\n}\n\ntype LinkPropsReal = React.PropsWithChildren<\n Omit, keyof LinkProps> &\n LinkProps\n>\n\nfunction formatStringOrUrl(urlObjOrString: UrlObject | string): string {\n if (typeof urlObjOrString === 'string') {\n return urlObjOrString\n }\n\n return formatUrl(urlObjOrString)\n}\n\n/**\n * A React component that extends the HTML `` element to provide [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)\n * and client-side navigation between routes.\n *\n * It is the primary way to navigate between routes in Next.js.\n *\n * Read more: [Next.js docs: ``](https://nextjs.org/docs/app/api-reference/components/link)\n */\nconst Link = React.forwardRef(\n function LinkComponent(props, forwardedRef) {\n let children: React.ReactNode\n\n const {\n href: hrefProp,\n as: asProp,\n children: childrenProp,\n prefetch: prefetchProp = null,\n passHref,\n replace,\n shallow,\n scroll,\n onClick,\n onMouseEnter: onMouseEnterProp,\n onTouchStart: onTouchStartProp,\n legacyBehavior = false,\n ...restProps\n } = props\n\n children = childrenProp\n\n if (\n legacyBehavior &&\n (typeof children === 'string' || typeof children === 'number')\n ) {\n children = {children}\n }\n\n const router = React.useContext(AppRouterContext)\n\n const prefetchEnabled = prefetchProp !== false\n /**\n * The possible states for prefetch are:\n * - null: this is the default \"auto\" mode, where we will prefetch partially if the link is in the viewport\n * - true: we will prefetch if the link is visible and prefetch the full page, not just partially\n * - false: we will not prefetch if in the viewport at all\n */\n const appPrefetchKind =\n prefetchProp === null ? PrefetchKind.AUTO : PrefetchKind.FULL\n\n if (process.env.NODE_ENV !== 'production') {\n function createPropError(args: {\n key: string\n expected: string\n actual: string\n }) {\n return new Error(\n `Failed prop type: The prop \\`${args.key}\\` expects a ${args.expected} in \\`\\`, but got \\`${args.actual}\\` instead.` +\n (typeof window !== 'undefined'\n ? \"\\nOpen your browser's console to view the Component stack trace.\"\n : '')\n )\n }\n\n // TypeScript trick for type-guarding:\n const requiredPropsGuard: Record = {\n href: true,\n } as const\n const requiredProps: LinkPropsRequired[] = Object.keys(\n requiredPropsGuard\n ) as LinkPropsRequired[]\n requiredProps.forEach((key: LinkPropsRequired) => {\n if (key === 'href') {\n if (\n props[key] == null ||\n (typeof props[key] !== 'string' && typeof props[key] !== 'object')\n ) {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: props[key] === null ? 'null' : typeof props[key],\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _: never = key\n }\n })\n\n // TypeScript trick for type-guarding:\n const optionalPropsGuard: Record = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true,\n } as const\n const optionalProps: LinkPropsOptional[] = Object.keys(\n optionalPropsGuard\n ) as LinkPropsOptional[]\n optionalProps.forEach((key: LinkPropsOptional) => {\n const valType = typeof props[key]\n\n if (key === 'as') {\n if (props[key] && valType !== 'string' && valType !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: valType,\n })\n }\n } else if (\n key === 'onClick' ||\n key === 'onMouseEnter' ||\n key === 'onTouchStart'\n ) {\n if (props[key] && valType !== 'function') {\n throw createPropError({\n key,\n expected: '`function`',\n actual: valType,\n })\n }\n } else if (\n key === 'replace' ||\n key === 'scroll' ||\n key === 'shallow' ||\n key === 'passHref' ||\n key === 'prefetch' ||\n key === 'legacyBehavior'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _: never = key\n }\n })\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (props.locale) {\n warnOnce(\n 'The `locale` prop is not supported in `next/link` while using the `app` router. Read more about app router internalization: https://nextjs.org/docs/app/building-your-application/routing/internationalization'\n )\n }\n if (!asProp) {\n let href: string | undefined\n if (typeof hrefProp === 'string') {\n href = hrefProp\n } else if (\n typeof hrefProp === 'object' &&\n typeof hrefProp.pathname === 'string'\n ) {\n href = hrefProp.pathname\n }\n\n if (href) {\n const hasDynamicSegment = href\n .split('/')\n .some((segment) => segment.startsWith('[') && segment.endsWith(']'))\n\n if (hasDynamicSegment) {\n throw new Error(\n `Dynamic href \\`${href}\\` found in while using the \\`/app\\` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href`\n )\n }\n }\n }\n }\n\n const { href, as } = React.useMemo(() => {\n const resolvedHref = formatStringOrUrl(hrefProp)\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref,\n }\n }, [hrefProp, asProp])\n\n const previousHref = React.useRef(href)\n const previousAs = React.useRef(as)\n\n // This will return the first child, if multiple are provided it will throw an error\n let child: any\n if (legacyBehavior) {\n if (process.env.NODE_ENV === 'development') {\n if (onClick) {\n console.warn(\n `\"onClick\" was passed to with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link`\n )\n }\n if (onMouseEnterProp) {\n console.warn(\n `\"onMouseEnter\" was passed to with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link`\n )\n }\n try {\n child = React.Children.only(children)\n } catch (err) {\n if (!children) {\n throw new Error(\n `No children were passed to with \\`href\\` of \\`${hrefProp}\\` but one child is required https://nextjs.org/docs/messages/link-no-children`\n )\n }\n throw new Error(\n `Multiple children were passed to with \\`href\\` of \\`${hrefProp}\\` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children` +\n (typeof window !== 'undefined'\n ? \" \\nOpen your browser's console to view the Component stack trace.\"\n : '')\n )\n }\n } else {\n child = React.Children.only(children)\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if ((children as any)?.type === 'a') {\n throw new Error(\n 'Invalid with child. Please remove or use .\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor'\n )\n }\n }\n }\n\n const childRef: any = legacyBehavior\n ? child && typeof child === 'object' && child.ref\n : forwardedRef\n\n const [setIntersectionRef, isVisible, resetVisible] = useIntersection({\n rootMargin: '200px',\n })\n\n const setIntersectionWithResetRef = React.useCallback(\n (el: Element) => {\n // Before the link getting observed, check if visible state need to be reset\n if (previousAs.current !== as || previousHref.current !== href) {\n resetVisible()\n previousAs.current = as\n previousHref.current = href\n }\n\n setIntersectionRef(el)\n },\n [as, href, resetVisible, setIntersectionRef]\n )\n\n const setRef = useMergedRef(setIntersectionWithResetRef, childRef)\n\n // Prefetch the URL if we haven't already and it's visible.\n React.useEffect(() => {\n // in dev, we only prefetch on hover to avoid wasting resources as the prefetch will trigger compiling the page.\n if (process.env.NODE_ENV !== 'production') {\n return\n }\n\n if (!router) {\n return\n }\n\n // If we don't need to prefetch the URL, don't do prefetch.\n if (!isVisible || !prefetchEnabled) {\n return\n }\n\n // Prefetch the URL.\n prefetch(router, href, {\n kind: appPrefetchKind,\n })\n }, [as, href, isVisible, prefetchEnabled, router, appPrefetchKind])\n\n const childProps: {\n onTouchStart?: React.TouchEventHandler\n onMouseEnter: React.MouseEventHandler\n onClick: React.MouseEventHandler\n href?: string\n ref?: any\n } = {\n ref: setRef,\n onClick(e) {\n if (process.env.NODE_ENV !== 'production') {\n if (!e) {\n throw new Error(\n `Component rendered inside next/link has to pass click event to \"onClick\" prop.`\n )\n }\n }\n\n if (!legacyBehavior && typeof onClick === 'function') {\n onClick(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onClick === 'function'\n ) {\n child.props.onClick(e)\n }\n\n if (!router) {\n return\n }\n\n if (e.defaultPrevented) {\n return\n }\n\n linkClicked(e, router, href, as, replace, shallow, scroll)\n },\n onMouseEnter(e) {\n if (!legacyBehavior && typeof onMouseEnterProp === 'function') {\n onMouseEnterProp(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onMouseEnter === 'function'\n ) {\n child.props.onMouseEnter(e)\n }\n\n if (!router) {\n return\n }\n\n if (!prefetchEnabled || process.env.NODE_ENV === 'development') {\n return\n }\n\n prefetch(router, href, {\n kind: appPrefetchKind,\n })\n },\n onTouchStart: process.env.__NEXT_LINK_NO_TOUCH_START\n ? undefined\n : function onTouchStart(e) {\n if (!legacyBehavior && typeof onTouchStartProp === 'function') {\n onTouchStartProp(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onTouchStart === 'function'\n ) {\n child.props.onTouchStart(e)\n }\n\n if (!router) {\n return\n }\n\n if (!prefetchEnabled) {\n return\n }\n\n prefetch(router, href, {\n kind: appPrefetchKind,\n })\n },\n }\n\n // If child is an tag and doesn't have a href attribute, or if the 'passHref' property is\n // defined, we specify the current 'href', so that repetition is not needed by the user.\n // If the url is absolute, we can bypass the logic to prepend the basePath.\n if (isAbsoluteUrl(as)) {\n childProps.href = as\n } else if (\n !legacyBehavior ||\n passHref ||\n (child.type === 'a' && !('href' in child.props))\n ) {\n childProps.href = addBasePath(as)\n }\n\n return legacyBehavior ? (\n React.cloneElement(child, childProps)\n ) : (\n \n {children}\n \n )\n }\n)\n\nexport default Link\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 { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n requestIdleCallback,\n cancelIdleCallback,\n} from './request-idle-callback'\n\ntype UseIntersectionObserverInit = Pick<\n IntersectionObserverInit,\n 'rootMargin' | 'root'\n>\n\ntype UseIntersection = { disabled?: boolean } & UseIntersectionObserverInit & {\n rootRef?: React.RefObject | null\n }\ntype ObserveCallback = (isVisible: boolean) => void\ntype Identifier = {\n root: Element | Document | null\n margin: string\n}\ntype Observer = {\n id: Identifier\n observer: IntersectionObserver\n elements: Map\n}\n\nconst hasIntersectionObserver = typeof IntersectionObserver === 'function'\n\nconst observers = new Map()\nconst idList: Identifier[] = []\n\nfunction createObserver(options: UseIntersectionObserverInit): Observer {\n const id = {\n root: options.root || null,\n margin: options.rootMargin || '',\n }\n const existing = idList.find(\n (obj) => obj.root === id.root && obj.margin === id.margin\n )\n let instance: Observer | undefined\n\n if (existing) {\n instance = observers.get(existing)\n if (instance) {\n return instance\n }\n }\n\n const elements = new Map()\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const callback = elements.get(entry.target)\n const isVisible = entry.isIntersecting || entry.intersectionRatio > 0\n if (callback && isVisible) {\n callback(isVisible)\n }\n })\n }, options)\n instance = {\n id,\n observer,\n elements,\n }\n\n idList.push(id)\n observers.set(id, instance)\n return instance\n}\n\nfunction observe(\n element: Element,\n callback: ObserveCallback,\n options: UseIntersectionObserverInit\n): () => void {\n const { id, observer, elements } = createObserver(options)\n elements.set(element, callback)\n\n observer.observe(element)\n return function unobserve(): void {\n elements.delete(element)\n observer.unobserve(element)\n\n // Destroy observer when there's nothing left to watch:\n if (elements.size === 0) {\n observer.disconnect()\n observers.delete(id)\n const index = idList.findIndex(\n (obj) => obj.root === id.root && obj.margin === id.margin\n )\n if (index > -1) {\n idList.splice(index, 1)\n }\n }\n }\n}\n\nexport function useIntersection({\n rootRef,\n rootMargin,\n disabled,\n}: UseIntersection): [(element: T | null) => void, boolean, () => void] {\n const isDisabled: boolean = disabled || !hasIntersectionObserver\n\n const [visible, setVisible] = useState(false)\n const elementRef = useRef(null)\n const setElement = useCallback((element: T | null) => {\n elementRef.current = element\n }, [])\n\n useEffect(() => {\n if (hasIntersectionObserver) {\n if (isDisabled || visible) return\n\n const element = elementRef.current\n if (element && element.tagName) {\n const unobserve = observe(\n element,\n (isVisible) => isVisible && setVisible(isVisible),\n { root: rootRef?.current, rootMargin }\n )\n\n return unobserve\n }\n } else {\n if (!visible) {\n const idleCallback = requestIdleCallback(() => setVisible(true))\n return () => cancelIdleCallback(idleCallback)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDisabled, rootMargin, rootRef, visible, elementRef.current])\n\n const resetVisible = useCallback(() => {\n setVisible(false)\n }, [])\n\n return [setElement, visible, resetVisible]\n}\n","import { useMemo, 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>(() => {})\n const cleanupB = useRef<() => void>(() => {})\n\n return useMemo(() => {\n if (!refA || !refB) {\n return refA || refB\n }\n\n return (current: TElement | null): void => {\n if (current === null) {\n cleanupA.current()\n cleanupB.current()\n } else {\n cleanupA.current = applyRef(refA, current)\n cleanupB.current = applyRef(refB, current)\n }\n }\n }, [refA, refB])\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 React from 'react'\n\nexport const AmpStateContext: React.Context = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n AmpStateContext.displayName = 'AmpStateContext'\n}\n","export function isInAmpMode({\n ampFirst = false,\n hybrid = false,\n hasQuery = false,\n} = {}): boolean {\n return ampFirst || (hybrid && hasQuery)\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","'use client'\n\nimport React, { useContext, type JSX } from 'react'\nimport Effect from './side-effect'\nimport { AmpStateContext } from './amp-context.shared-runtime'\nimport { HeadManagerContext } from './head-manager-context.shared-runtime'\nimport { isInAmpMode } from './amp-mode'\nimport { warnOnce } from './utils/warn-once'\n\ntype WithInAmpMode = {\n inAmpMode?: boolean\n}\n\nexport function defaultHead(inAmpMode = false): JSX.Element[] {\n const head = []\n if (!inAmpMode) {\n head.push(\n \n )\n }\n return head\n}\n\nfunction onlyReactElement(\n list: Array>,\n child: React.ReactElement | number | string\n): Array> {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list\n }\n // Adds support for React.Fragment\n if (child.type === React.Fragment) {\n return list.concat(\n // @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]\n React.Children.toArray(child.props.children).reduce(\n // @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]\n (\n fragmentList: Array>,\n fragmentChild: React.ReactElement | number | string\n ): Array> => {\n if (\n typeof fragmentChild === 'string' ||\n typeof fragmentChild === 'number'\n ) {\n return fragmentList\n }\n return fragmentList.concat(fragmentChild)\n },\n []\n )\n )\n }\n return list.concat(child)\n}\n\nconst METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp']\n\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like \n Also adds support for deduplicated `key` properties\n*/\nfunction unique() {\n const keys = new Set()\n const tags = new Set()\n const metaTypes = new Set()\n const metaCategories: { [metatype: string]: Set<string> } = {}\n\n return (h: React.ReactElement<any>) => {\n let isUnique = true\n let hasKey = false\n\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true\n const key = h.key.slice(h.key.indexOf('$') + 1)\n if (keys.has(key)) {\n isUnique = false\n } else {\n keys.add(key)\n }\n }\n\n // eslint-disable-next-line default-case\n switch (h.type) {\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false\n } else {\n tags.add(h.type)\n }\n break\n case 'meta':\n for (let i = 0, len = METATYPES.length; i < len; i++) {\n const metatype = METATYPES[i]\n if (!h.props.hasOwnProperty(metatype)) continue\n\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false\n } else {\n metaTypes.add(metatype)\n }\n } else {\n const category = h.props[metatype]\n const categories = metaCategories[metatype] || new Set()\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false\n } else {\n categories.add(category)\n metaCategories[metatype] = categories\n }\n }\n }\n break\n }\n\n return isUnique\n }\n}\n\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */\nfunction reduceComponents<T extends {} & WithInAmpMode>(\n headChildrenElements: Array<React.ReactElement<any>>,\n props: T\n) {\n const { inAmpMode } = props\n return headChildrenElements\n .reduce(onlyReactElement, [])\n .reverse()\n .concat(defaultHead(inAmpMode).reverse())\n .filter(unique())\n .reverse()\n .map((c: React.ReactElement<any>, i: number) => {\n const key = c.key || i\n if (\n process.env.NODE_ENV !== 'development' &&\n process.env.__NEXT_OPTIMIZE_FONTS &&\n !inAmpMode\n ) {\n if (\n c.type === 'link' &&\n c.props['href'] &&\n // TODO(prateekbh@): Replace this with const from `constants` when the tree shaking works.\n ['https://fonts.googleapis.com/css', 'https://use.typekit.net/'].some(\n (url) => c.props['href'].startsWith(url)\n )\n ) {\n const newProps = { ...(c.props || {}) }\n newProps['data-href'] = newProps['href']\n newProps['href'] = undefined\n\n // Add this attribute to make it easy to identify optimized tags\n newProps['data-optimized-fonts'] = true\n\n return React.cloneElement(c, newProps)\n }\n }\n if (process.env.NODE_ENV === 'development') {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {\n const srcMessage = c.props['src']\n ? `<script> tag with src=\"${c.props['src']}\"`\n : `inline <script>`\n warnOnce(\n `Do not add <script> tags using next/head (see ${srcMessage}). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component`\n )\n } else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {\n warnOnce(\n `Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"${c.props['href']}\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component`\n )\n }\n }\n return React.cloneElement(c, { key })\n })\n}\n\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */\nfunction Head({ children }: { children: React.ReactNode }) {\n const ampState = useContext(AmpStateContext)\n const headManager = useContext(HeadManagerContext)\n return (\n <Effect\n reduceComponentsToState={reduceComponents}\n headManager={headManager}\n inAmpMode={isInAmpMode(ampState)}\n >\n {children}\n </Effect>\n )\n}\n\nexport default Head\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","import React from 'react'\nimport type { ImageConfigComplete } from './image-config'\nimport { imageConfigDefault } from './image-config'\n\nexport const ImageConfigContext =\n React.createContext<ImageConfigComplete>(imageConfigDefault)\n\nif (process.env.NODE_ENV !== 'production') {\n ImageConfigContext.displayName = 'ImageConfigContext'\n}\n","export const VALID_LOADERS = [\n 'default',\n 'imgix',\n 'cloudinary',\n 'akamai',\n 'custom',\n] as const\n\nexport type LoaderValue = (typeof VALID_LOADERS)[number]\n\nexport type ImageLoaderProps = {\n src: string\n width: number\n quality?: number\n}\n\nexport type ImageLoaderPropsWithConfig = ImageLoaderProps & {\n config: Readonly<ImageConfig>\n}\n\nexport type LocalPattern = {\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single path segment.\n * Double `**` matches any number of path segments.\n */\n pathname?: string\n\n /**\n * Can be literal query string such as `?v=1` or\n * empty string meaning no query string.\n */\n search?: string\n}\n\nexport type RemotePattern = {\n /**\n * Must be `http` or `https`.\n */\n protocol?: 'http' | 'https'\n\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single subdomain.\n * Double `**` matches any number of subdomains.\n */\n hostname: string\n\n /**\n * Can be literal port such as `8080` or empty string\n * meaning no port.\n */\n port?: string\n\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single path segment.\n * Double `**` matches any number of path segments.\n */\n pathname?: string\n\n /**\n * Can be literal query string such as `?v=1` or\n * empty string meaning no query string.\n */\n search?: string\n}\n\ntype ImageFormat = 'image/avif' | 'image/webp'\n\n/**\n * Image configurations\n *\n * @see [Image configuration options](https://nextjs.org/docs/api-reference/next/image#configuration-options)\n */\nexport type ImageConfigComplete = {\n /** @see [Device sizes documentation](https://nextjs.org/docs/api-reference/next/image#device-sizes) */\n deviceSizes: number[]\n\n /** @see [Image sizing documentation](https://nextjs.org/docs/app/building-your-application/optimizing/images#image-sizing) */\n imageSizes: number[]\n\n /** @see [Image loaders configuration](https://nextjs.org/docs/api-reference/next/legacy/image#loader) */\n loader: LoaderValue\n\n /** @see [Image loader configuration](https://nextjs.org/docs/api-reference/next/legacy/image#loader-configuration) */\n path: string\n\n /** @see [Image loader configuration](https://nextjs.org/docs/api-reference/next/image#loader-configuration) */\n loaderFile: string\n\n /**\n * @deprecated Use `remotePatterns` instead.\n */\n domains: string[]\n\n /** @see [Disable static image import configuration](https://nextjs.org/docs/api-reference/next/image#disable-static-imports) */\n disableStaticImages: boolean\n\n /** @see [Cache behavior](https://nextjs.org/docs/api-reference/next/image#caching-behavior) */\n minimumCacheTTL: number\n\n /** @see [Acceptable formats](https://nextjs.org/docs/api-reference/next/image#acceptable-formats) */\n formats: ImageFormat[]\n\n /** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */\n dangerouslyAllowSVG: boolean\n\n /** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */\n contentSecurityPolicy: string\n\n /** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */\n contentDispositionType: 'inline' | 'attachment'\n\n /** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#remotepatterns) */\n remotePatterns: RemotePattern[]\n\n /** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#localPatterns) */\n localPatterns: LocalPattern[] | undefined\n\n /** @see [Qualities](https://nextjs.org/docs/api-reference/next/image#qualities) */\n qualities: number[] | undefined\n\n /** @see [Unoptimized](https://nextjs.org/docs/api-reference/next/image#unoptimized) */\n unoptimized: boolean\n}\n\nexport type ImageConfig = Partial<ImageConfigComplete>\n\nexport const imageConfigDefault: ImageConfigComplete = {\n deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],\n path: '/_next/image',\n loader: 'default',\n loaderFile: '',\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 60,\n formats: ['image/webp'],\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`,\n contentDispositionType: 'attachment',\n localPatterns: undefined, // default: allow all local images\n remotePatterns: [], // default: allow no remote images\n qualities: undefined, // default: allow all qualities\n unoptimized: false,\n}\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 `<img>` 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","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 React from 'react'\nimport type { NextRouter } from './router/router'\n\nexport const RouterContext = React.createContext<NextRouter | null>(null)\n\nif (process.env.NODE_ENV !== 'production') {\n RouterContext.displayName = 'RouterContext'\n}\n","// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { UrlObject } from 'url'\nimport type { ParsedUrlQuery } from 'querystring'\nimport * as querystring from './querystring'\n\nconst slashedProtocols = /https?|ftp|gopher|file/\n\nexport function formatUrl(urlObj: UrlObject) {\n let { auth, hostname } = urlObj\n let protocol = urlObj.protocol || ''\n let pathname = urlObj.pathname || ''\n let hash = urlObj.hash || ''\n let query = urlObj.query || ''\n let host: string | false = false\n\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : ''\n\n if (urlObj.host) {\n host = auth + urlObj.host\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname)\n if (urlObj.port) {\n host += ':' + urlObj.port\n }\n }\n\n if (query && typeof query === 'object') {\n query = String(querystring.urlQueryToSearchParams(query as ParsedUrlQuery))\n }\n\n let search = urlObj.search || (query && `?${query}`) || ''\n\n if (protocol && !protocol.endsWith(':')) protocol += ':'\n\n if (\n urlObj.slashes ||\n ((!protocol || slashedProtocols.test(protocol)) && host !== false)\n ) {\n host = '//' + (host || '')\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname\n } else if (!host) {\n host = ''\n }\n\n if (hash && hash[0] !== '#') hash = '#' + hash\n if (search && search[0] !== '?') search = '?' + search\n\n pathname = pathname.replace(/[?#]/g, encodeURIComponent)\n search = search.replace('#', '%23')\n\n return `${protocol}${host}${pathname}${search}${hash}`\n}\n\nexport const urlObjectKeys = [\n 'auth',\n 'hash',\n 'host',\n 'hostname',\n 'href',\n 'path',\n 'pathname',\n 'port',\n 'protocol',\n 'query',\n 'search',\n 'slashes',\n]\n\nexport function formatWithValidation(url: UrlObject): string {\n if (process.env.NODE_ENV === 'development') {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach((key) => {\n if (!urlObjectKeys.includes(key)) {\n console.warn(\n `Unknown key passed via urlObject into url.format: ${key}`\n )\n }\n })\n }\n }\n\n return formatUrl(url)\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\nexport function searchParamsToUrlQuery(\n searchParams: URLSearchParams\n): ParsedUrlQuery {\n const query: ParsedUrlQuery = {}\n searchParams.forEach((value, key) => {\n if (typeof query[key] === 'undefined') {\n query[key] = value\n } else if (Array.isArray(query[key])) {\n ;(query[key] as string[]).push(value)\n } else {\n query[key] = [query[key] as string, value]\n }\n })\n return query\n}\n\nfunction stringifyUrlQueryParam(param: unknown): string {\n if (\n typeof param === 'string' ||\n (typeof param === 'number' && !isNaN(param)) ||\n typeof param === 'boolean'\n ) {\n return String(param)\n } else {\n return ''\n }\n}\n\nexport function urlQueryToSearchParams(\n urlQuery: ParsedUrlQuery\n): URLSearchParams {\n const result = new URLSearchParams()\n Object.entries(urlQuery).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((item) => result.append(key, stringifyUrlQueryParam(item)))\n } else {\n result.set(key, stringifyUrlQueryParam(value))\n }\n })\n return result\n}\n\nexport function assign(\n target: URLSearchParams,\n ...searchParamsList: URLSearchParams[]\n): URLSearchParams {\n searchParamsList.forEach((searchParams) => {\n Array.from(searchParams.keys()).forEach((key) => target.delete(key))\n searchParams.forEach((value, key) => target.append(key, value))\n })\n return target\n}\n","import type React from 'react'\nimport { Children, useEffect, useLayoutEffect, type JSX } from 'react'\n\ntype State = JSX.Element[] | undefined\n\nexport type SideEffectProps = {\n reduceComponentsToState: <T extends {}>(\n components: Array<React.ReactElement<any>>,\n props: T\n ) => State\n handleStateChange?: (state: State) => void\n headManager: any\n inAmpMode?: boolean\n children: React.ReactNode\n}\n\nconst isServer = typeof window === 'undefined'\nconst useClientOnlyLayoutEffect = isServer ? () => {} : useLayoutEffect\nconst useClientOnlyEffect = isServer ? () => {} : useEffect\n\nexport default function SideEffect(props: SideEffectProps) {\n const { headManager, reduceComponentsToState } = props\n\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = Children.toArray(\n Array.from(headManager.mountedInstances as Set<React.ReactNode>).filter(\n Boolean\n )\n ) as React.ReactElement[]\n headManager.updateHead(reduceComponentsToState(headElements, props))\n }\n }\n\n if (isServer) {\n headManager?.mountedInstances?.add(props.children)\n emitChange()\n }\n\n useClientOnlyLayoutEffect(() => {\n headManager?.mountedInstances?.add(props.children)\n return () => {\n headManager?.mountedInstances?.delete(props.children)\n }\n })\n\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect(() => {\n if (headManager) {\n headManager._pendingUpdate = emitChange\n }\n return () => {\n if (headManager) {\n headManager._pendingUpdate = emitChange\n }\n }\n })\n\n useClientOnlyEffect(() => {\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate()\n headManager._pendingUpdate = null\n }\n return () => {\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate()\n headManager._pendingUpdate = null\n }\n }\n })\n\n return null\n}\n","import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType<Props> & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise<InitialProps>\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType<P = {}> = NextComponentType<\n AppContextType,\n P,\n AppPropsType<any, P>\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'FID', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer<C> = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer<AppType>\n enhanceComponent?: Enhancer<NextComponentType>\n }\n | Enhancer<NextComponentType>\n\nexport type RenderPageResult = {\n html: string\n head?: Array<JSX.Element | null>\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise<DocumentInitialProps>\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record<string, any>\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n runtimeConfig?: { [key: string]: any }\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: string[]\n defaultLocale?: string\n domainLocales?: DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType<Router extends NextRouter = NextRouter> = {\n Component: NextComponentType<NextPageContext>\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps<PageProps = any> = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps<PageProps> & {\n Component: NextComponentType<NextPageContext, any, any>\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise<DocumentInitialProps>\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable<React.ReactNode> | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send<T> = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse<Data = any> = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send<Data>\n /**\n * Send data `json` data in response\n */\n json: Send<Data>\n status: (statusCode: number) => NextApiResponse<Data>\n redirect(url: string): NextApiResponse<Data>\n redirect(status: number, url: string): NextApiResponse<Data>\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse<Data>\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse<Data>\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse<Data>\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise<void>\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler<T = any> = (\n req: NextApiRequest,\n res: NextApiResponse<T>\n) => unknown | Promise<unknown>\n\n/**\n * Utils\n */\nexport function execOnce<T extends (...args: any[]) => ReturnType<T>>(\n fn: T\n): T {\n let used = false\n let result: ReturnType<T>\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => ABSOLUTE_URL_REGEX.test(url)\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName<P>(Component: ComponentType<P>) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType<C, IP, P>, ctx: C): Promise<IP> {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise<void>\n mkdir(dir: string): Promise<void | string>\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n","const wrap = (min, max, v) => {\n const rangeSize = max - min;\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\n};\n\nexport { wrap };\n","import { wrap } from '../../utils/wrap.mjs';\nimport { isEasingArray } from './is-easing-array.mjs';\n\nfunction getEasingForSegment(easing, i) {\n return isEasingArray(easing) ? easing[wrap(0, easing.length, i)] : easing;\n}\n\nexport { getEasingForSegment };\n","function isDOMKeyframes(keyframes) {\n return typeof keyframes === \"object\" && !Array.isArray(keyframes);\n}\n\nexport { isDOMKeyframes };\n","import { resolveElements } from 'motion-dom';\nimport { isDOMKeyframes } from '../utils/is-dom-keyframes.mjs';\n\nfunction resolveSubjects(subject, keyframes, scope, selectorCache) {\n if (typeof subject === \"string\" && isDOMKeyframes(keyframes)) {\n return resolveElements(subject, scope, selectorCache);\n }\n else if (subject instanceof NodeList) {\n return Array.from(subject);\n }\n else if (Array.isArray(subject)) {\n return subject;\n }\n else {\n return [subject];\n }\n}\n\nexport { resolveSubjects };\n","function calculateRepeatDuration(duration, repeat, _repeatDelay) {\n return duration * (repeat + 1);\n}\n\nexport { calculateRepeatDuration };\n","/**\n * Given a absolute or relative time definition and current/prev time state of the sequence,\n * calculate an absolute time for the next keyframes.\n */\nfunction calcNextTime(current, next, prev, labels) {\n var _a;\n if (typeof next === \"number\") {\n return next;\n }\n else if (next.startsWith(\"-\") || next.startsWith(\"+\")) {\n return Math.max(0, current + parseFloat(next));\n }\n else if (next === \"<\") {\n return prev;\n }\n else {\n return (_a = labels.get(next)) !== null && _a !== void 0 ? _a : current;\n }\n}\n\nexport { calcNextTime };\n","import { getEasingForSegment } from '../../../easing/utils/get-easing-for-segment.mjs';\nimport { removeItem } from '../../../utils/array.mjs';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\nfunction eraseKeyframes(sequence, startTime, endTime) {\n for (let i = 0; i < sequence.length; i++) {\n const keyframe = sequence[i];\n if (keyframe.at > startTime && keyframe.at < endTime) {\n removeItem(sequence, keyframe);\n // If we remove this item we have to push the pointer back one\n i--;\n }\n }\n}\nfunction addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) {\n /**\n * Erase every existing value between currentTime and targetTime,\n * this will essentially splice this timeline into any currently\n * defined ones.\n */\n eraseKeyframes(sequence, startTime, endTime);\n for (let i = 0; i < keyframes.length; i++) {\n sequence.push({\n value: keyframes[i],\n at: mixNumber(startTime, endTime, offset[i]),\n easing: getEasingForSegment(easing, i),\n });\n }\n}\n\nexport { addKeyframes, eraseKeyframes };\n","/**\n * Take an array of times that represent repeated keyframes. For instance\n * if we have original times of [0, 0.5, 1] then our repeated times will\n * be [0, 0.5, 1, 1, 1.5, 2]. Loop over the times and scale them back\n * down to a 0-1 scale.\n */\nfunction normalizeTimes(times, repeat) {\n for (let i = 0; i < times.length; i++) {\n times[i] = times[i] / (repeat + 1);\n }\n}\n\nexport { normalizeTimes };\n","function compareByTime(a, b) {\n if (a.at === b.at) {\n if (a.value === null)\n return 1;\n if (b.value === null)\n return -1;\n return 0;\n }\n else {\n return a.at - b.at;\n }\n}\n\nexport { compareByTime };\n","import { isGenerator, createGeneratorEasing } from 'motion-dom';\nimport { progress, secondsToMilliseconds, invariant } from 'motion-utils';\nimport { getEasingForSegment } from '../../easing/utils/get-easing-for-segment.mjs';\nimport { defaultOffset } from '../../utils/offsets/default.mjs';\nimport { fillOffset } from '../../utils/offsets/fill.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { resolveSubjects } from '../animate/resolve-subjects.mjs';\nimport { calculateRepeatDuration } from './utils/calc-repeat-duration.mjs';\nimport { calcNextTime } from './utils/calc-time.mjs';\nimport { addKeyframes } from './utils/edit.mjs';\nimport { normalizeTimes } from './utils/normalize-times.mjs';\nimport { compareByTime } from './utils/sort.mjs';\n\nconst defaultSegmentEasing = \"easeInOut\";\nconst MAX_REPEAT = 20;\nfunction createAnimationsFromSequence(sequence, { defaultTransition = {}, ...sequenceTransition } = {}, scope, generators) {\n const defaultDuration = defaultTransition.duration || 0.3;\n const animationDefinitions = new Map();\n const sequences = new Map();\n const elementCache = {};\n const timeLabels = new Map();\n let prevTime = 0;\n let currentTime = 0;\n let totalDuration = 0;\n /**\n * Build the timeline by mapping over the sequence array and converting\n * the definitions into keyframes and offsets with absolute time values.\n * These will later get converted into relative offsets in a second pass.\n */\n for (let i = 0; i < sequence.length; i++) {\n const segment = sequence[i];\n /**\n * If this is a timeline label, mark it and skip the rest of this iteration.\n */\n if (typeof segment === \"string\") {\n timeLabels.set(segment, currentTime);\n continue;\n }\n else if (!Array.isArray(segment)) {\n timeLabels.set(segment.name, calcNextTime(currentTime, segment.at, prevTime, timeLabels));\n continue;\n }\n let [subject, keyframes, transition = {}] = segment;\n /**\n * If a relative or absolute time value has been specified we need to resolve\n * it in relation to the currentTime.\n */\n if (transition.at !== undefined) {\n currentTime = calcNextTime(currentTime, transition.at, prevTime, timeLabels);\n }\n /**\n * Keep track of the maximum duration in this definition. This will be\n * applied to currentTime once the definition has been parsed.\n */\n let maxDuration = 0;\n const resolveValueSequence = (valueKeyframes, valueTransition, valueSequence, elementIndex = 0, numSubjects = 0) => {\n const valueKeyframesAsList = keyframesAsList(valueKeyframes);\n const { delay = 0, times = defaultOffset(valueKeyframesAsList), type = \"keyframes\", repeat, repeatType, repeatDelay = 0, ...remainingTransition } = valueTransition;\n let { ease = defaultTransition.ease || \"easeOut\", duration } = valueTransition;\n /**\n * Resolve stagger() if defined.\n */\n const calculatedDelay = typeof delay === \"function\"\n ? delay(elementIndex, numSubjects)\n : delay;\n /**\n * If this animation should and can use a spring, generate a spring easing function.\n */\n const numKeyframes = valueKeyframesAsList.length;\n const createGenerator = isGenerator(type)\n ? type\n : generators === null || generators === void 0 ? void 0 : generators[type];\n if (numKeyframes <= 2 && createGenerator) {\n /**\n * As we're creating an easing function from a spring,\n * ideally we want to generate it using the real distance\n * between the two keyframes. However this isn't always\n * possible - in these situations we use 0-100.\n */\n let absoluteDelta = 100;\n if (numKeyframes === 2 &&\n isNumberKeyframesArray(valueKeyframesAsList)) {\n const delta = valueKeyframesAsList[1] - valueKeyframesAsList[0];\n absoluteDelta = Math.abs(delta);\n }\n const springTransition = { ...remainingTransition };\n if (duration !== undefined) {\n springTransition.duration = secondsToMilliseconds(duration);\n }\n const springEasing = createGeneratorEasing(springTransition, absoluteDelta, createGenerator);\n ease = springEasing.ease;\n duration = springEasing.duration;\n }\n duration !== null && duration !== void 0 ? duration : (duration = defaultDuration);\n const startTime = currentTime + calculatedDelay;\n /**\n * If there's only one time offset of 0, fill in a second with length 1\n */\n if (times.length === 1 && times[0] === 0) {\n times[1] = 1;\n }\n /**\n * Fill out if offset if fewer offsets than keyframes\n */\n const remainder = times.length - valueKeyframesAsList.length;\n remainder > 0 && fillOffset(times, remainder);\n /**\n * If only one value has been set, ie [1], push a null to the start of\n * the keyframe array. This will let us mark a keyframe at this point\n * that will later be hydrated with the previous value.\n */\n valueKeyframesAsList.length === 1 &&\n valueKeyframesAsList.unshift(null);\n /**\n * Handle repeat options\n */\n if (repeat) {\n invariant(repeat < MAX_REPEAT, \"Repeat count too high, must be less than 20\");\n duration = calculateRepeatDuration(duration, repeat);\n const originalKeyframes = [...valueKeyframesAsList];\n const originalTimes = [...times];\n ease = Array.isArray(ease) ? [...ease] : [ease];\n const originalEase = [...ease];\n for (let repeatIndex = 0; repeatIndex < repeat; repeatIndex++) {\n valueKeyframesAsList.push(...originalKeyframes);\n for (let keyframeIndex = 0; keyframeIndex < originalKeyframes.length; keyframeIndex++) {\n times.push(originalTimes[keyframeIndex] + (repeatIndex + 1));\n ease.push(keyframeIndex === 0\n ? \"linear\"\n : getEasingForSegment(originalEase, keyframeIndex - 1));\n }\n }\n normalizeTimes(times, repeat);\n }\n const targetTime = startTime + duration;\n /**\n * Add keyframes, mapping offsets to absolute time.\n */\n addKeyframes(valueSequence, valueKeyframesAsList, ease, times, startTime, targetTime);\n maxDuration = Math.max(calculatedDelay + duration, maxDuration);\n totalDuration = Math.max(targetTime, totalDuration);\n };\n if (isMotionValue(subject)) {\n const subjectSequence = getSubjectSequence(subject, sequences);\n resolveValueSequence(keyframes, transition, getValueSequence(\"default\", subjectSequence));\n }\n else {\n const subjects = resolveSubjects(subject, keyframes, scope, elementCache);\n const numSubjects = subjects.length;\n /**\n * For every element in this segment, process the defined values.\n */\n for (let subjectIndex = 0; subjectIndex < numSubjects; subjectIndex++) {\n /**\n * Cast necessary, but we know these are of this type\n */\n keyframes = keyframes;\n transition = transition;\n const thisSubject = subjects[subjectIndex];\n const subjectSequence = getSubjectSequence(thisSubject, sequences);\n for (const key in keyframes) {\n resolveValueSequence(keyframes[key], getValueTransition(transition, key), getValueSequence(key, subjectSequence), subjectIndex, numSubjects);\n }\n }\n }\n prevTime = currentTime;\n currentTime += maxDuration;\n }\n /**\n * For every element and value combination create a new animation.\n */\n sequences.forEach((valueSequences, element) => {\n for (const key in valueSequences) {\n const valueSequence = valueSequences[key];\n /**\n * Arrange all the keyframes in ascending time order.\n */\n valueSequence.sort(compareByTime);\n const keyframes = [];\n const valueOffset = [];\n const valueEasing = [];\n /**\n * For each keyframe, translate absolute times into\n * relative offsets based on the total duration of the timeline.\n */\n for (let i = 0; i < valueSequence.length; i++) {\n const { at, value, easing } = valueSequence[i];\n keyframes.push(value);\n valueOffset.push(progress(0, totalDuration, at));\n valueEasing.push(easing || \"easeOut\");\n }\n /**\n * If the first keyframe doesn't land on offset: 0\n * provide one by duplicating the initial keyframe. This ensures\n * it snaps to the first keyframe when the animation starts.\n */\n if (valueOffset[0] !== 0) {\n valueOffset.unshift(0);\n keyframes.unshift(keyframes[0]);\n valueEasing.unshift(defaultSegmentEasing);\n }\n /**\n * If the last keyframe doesn't land on offset: 1\n * provide one with a null wildcard value. This will ensure it\n * stays static until the end of the animation.\n */\n if (valueOffset[valueOffset.length - 1] !== 1) {\n valueOffset.push(1);\n keyframes.push(null);\n }\n if (!animationDefinitions.has(element)) {\n animationDefinitions.set(element, {\n keyframes: {},\n transition: {},\n });\n }\n const definition = animationDefinitions.get(element);\n definition.keyframes[key] = keyframes;\n definition.transition[key] = {\n ...defaultTransition,\n duration: totalDuration,\n ease: valueEasing,\n times: valueOffset,\n ...sequenceTransition,\n };\n }\n });\n return animationDefinitions;\n}\nfunction getSubjectSequence(subject, sequences) {\n !sequences.has(subject) && sequences.set(subject, {});\n return sequences.get(subject);\n}\nfunction getValueSequence(name, sequences) {\n if (!sequences[name])\n sequences[name] = [];\n return sequences[name];\n}\nfunction keyframesAsList(keyframes) {\n return Array.isArray(keyframes) ? keyframes : [keyframes];\n}\nfunction getValueTransition(transition, key) {\n return transition && transition[key]\n ? {\n ...transition,\n ...transition[key],\n }\n : { ...transition };\n}\nconst isNumber = (keyframe) => typeof keyframe === \"number\";\nconst isNumberKeyframesArray = (keyframes) => keyframes.every(isNumber);\n\nexport { createAnimationsFromSequence, getValueTransition };\n","import { createBox } from '../../projection/geometry/models.mjs';\nimport { VisualElement } from '../VisualElement.mjs';\n\nfunction isObjectKey(key, object) {\n return key in object;\n}\nclass ObjectVisualElement extends VisualElement {\n constructor() {\n super(...arguments);\n this.type = \"object\";\n }\n readValueFromInstance(instance, key) {\n if (isObjectKey(key, instance)) {\n const value = instance[key];\n if (typeof value === \"string\" || typeof value === \"number\") {\n return value;\n }\n }\n return undefined;\n }\n getBaseTargetFromProps() {\n return undefined;\n }\n removeValueFromRenderState(key, renderState) {\n delete renderState.output[key];\n }\n measureInstanceViewportBox() {\n return createBox();\n }\n build(renderState, latestValues) {\n Object.assign(renderState.output, latestValues);\n }\n renderInstance(instance, { output }) {\n Object.assign(instance, output);\n }\n sortInstanceNodePosition() {\n return 0;\n }\n}\n\nexport { ObjectVisualElement };\n","import { isSVGElement } from '../../render/dom/utils/is-svg-element.mjs';\nimport { SVGVisualElement } from '../../render/svg/SVGVisualElement.mjs';\nimport { HTMLVisualElement } from '../../render/html/HTMLVisualElement.mjs';\nimport { visualElementStore } from '../../render/store.mjs';\nimport { ObjectVisualElement } from '../../render/object/ObjectVisualElement.mjs';\n\nfunction createDOMVisualElement(element) {\n const options = {\n presenceContext: null,\n props: {},\n visualState: {\n renderState: {\n transform: {},\n transformOrigin: {},\n style: {},\n vars: {},\n attrs: {},\n },\n latestValues: {},\n },\n };\n const node = isSVGElement(element)\n ? new SVGVisualElement(options)\n : new HTMLVisualElement(options);\n node.mount(element);\n visualElementStore.set(element, node);\n}\nfunction createObjectVisualElement(subject) {\n const options = {\n presenceContext: null,\n props: {},\n visualState: {\n renderState: {\n output: {},\n },\n latestValues: {},\n },\n };\n const node = new ObjectVisualElement(options);\n node.mount(subject);\n visualElementStore.set(subject, node);\n}\n\nexport { createDOMVisualElement, createObjectVisualElement };\n","import { invariant } from 'motion-utils';\nimport { visualElementStore } from '../../render/store.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { animateTarget } from '../interfaces/visual-element-target.mjs';\nimport { createDOMVisualElement, createObjectVisualElement } from '../utils/create-visual-element.mjs';\nimport { isDOMKeyframes } from '../utils/is-dom-keyframes.mjs';\nimport { resolveSubjects } from './resolve-subjects.mjs';\nimport { animateSingleValue } from './single-value.mjs';\n\nfunction isSingleValue(subject, keyframes) {\n return (isMotionValue(subject) ||\n typeof subject === \"number\" ||\n (typeof subject === \"string\" && !isDOMKeyframes(keyframes)));\n}\n/**\n * Implementation\n */\nfunction animateSubject(subject, keyframes, options, scope) {\n const animations = [];\n if (isSingleValue(subject, keyframes)) {\n animations.push(animateSingleValue(subject, isDOMKeyframes(keyframes)\n ? keyframes.default || keyframes\n : keyframes, options ? options.default || options : options));\n }\n else {\n const subjects = resolveSubjects(subject, keyframes, scope);\n const numSubjects = subjects.length;\n invariant(Boolean(numSubjects), \"No valid elements provided.\");\n for (let i = 0; i < numSubjects; i++) {\n const thisSubject = subjects[i];\n const createVisualElement = thisSubject instanceof Element\n ? createDOMVisualElement\n : createObjectVisualElement;\n if (!visualElementStore.has(thisSubject)) {\n createVisualElement(thisSubject);\n }\n const visualElement = visualElementStore.get(thisSubject);\n const transition = { ...options };\n /**\n * Resolve stagger function if provided.\n */\n if (\"delay\" in transition &&\n typeof transition.delay === \"function\") {\n transition.delay = transition.delay(i, numSubjects);\n }\n animations.push(...animateTarget(visualElement, { ...keyframes, transition }, {}));\n }\n }\n return animations;\n}\n\nexport { animateSubject };\n","import { spring } from '../generators/spring/index.mjs';\nimport { createAnimationsFromSequence } from '../sequence/create.mjs';\nimport { animateSubject } from './subject.mjs';\n\nfunction animateSequence(sequence, options, scope) {\n const animations = [];\n const animationDefinitions = createAnimationsFromSequence(sequence, options, scope, { spring });\n animationDefinitions.forEach(({ keyframes, transition }, subject) => {\n animations.push(...animateSubject(subject, keyframes, transition));\n });\n return animations;\n}\n\nexport { animateSequence };\n","import { GroupPlaybackControls } from 'motion-dom';\nimport { animateSequence } from './sequence.mjs';\nimport { animateSubject } from './subject.mjs';\n\nfunction isSequence(value) {\n return Array.isArray(value) && value.some(Array.isArray);\n}\n/**\n * Creates an animation function that is optionally scoped\n * to a specific element.\n */\nfunction createScopedAnimate(scope) {\n /**\n * Implementation\n */\n function scopedAnimate(subjectOrSequence, optionsOrKeyframes, options) {\n let animations = [];\n if (isSequence(subjectOrSequence)) {\n animations = animateSequence(subjectOrSequence, optionsOrKeyframes, scope);\n }\n else {\n animations = animateSubject(subjectOrSequence, optionsOrKeyframes, options, scope);\n }\n const animation = new GroupPlaybackControls(animations);\n if (scope) {\n scope.animations.push(animation);\n }\n return animation;\n }\n return scopedAnimate;\n}\nconst animate = createScopedAnimate();\n\nexport { animate, createScopedAnimate };\n","import { animations } from '../../../motion/features/animations.mjs';\nimport { drag } from '../../../motion/features/drag.mjs';\nimport { gestureAnimations } from '../../../motion/features/gestures.mjs';\nimport { layout } from '../../../motion/features/layout.mjs';\nimport { createMotionComponentFactory } from '../create-factory.mjs';\nimport { createDomVisualElement } from '../../dom/create-visual-element.mjs';\n\nconst createMotionComponent = /*@__PURE__*/ createMotionComponentFactory({\n ...animations,\n ...gestureAnimations,\n ...drag,\n ...layout,\n}, createDomVisualElement);\n\nexport { createMotionComponent };\n","import { createDOMMotionComponentProxy } from '../create-proxy.mjs';\nimport { createMotionComponent } from './create.mjs';\n\nconst motion = /*@__PURE__*/ createDOMMotionComponentProxy(createMotionComponent);\n\nexport { motion };\n","import { resolveElements } from 'motion-dom';\n\nconst thresholds = {\n some: 0,\n all: 1,\n};\nfunction inView(elementOrSelector, onStart, { root, margin: rootMargin, amount = \"some\" } = {}) {\n const elements = resolveElements(elementOrSelector);\n const activeIntersections = new WeakMap();\n const onIntersectionChange = (entries) => {\n entries.forEach((entry) => {\n const onEnd = activeIntersections.get(entry.target);\n /**\n * If there's no change to the intersection, we don't need to\n * do anything here.\n */\n if (entry.isIntersecting === Boolean(onEnd))\n return;\n if (entry.isIntersecting) {\n const newOnEnd = onStart(entry.target, entry);\n if (typeof newOnEnd === \"function\") {\n activeIntersections.set(entry.target, newOnEnd);\n }\n else {\n observer.unobserve(entry.target);\n }\n }\n else if (typeof onEnd === \"function\") {\n onEnd(entry);\n activeIntersections.delete(entry.target);\n }\n });\n };\n const observer = new IntersectionObserver(onIntersectionChange, {\n root,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholds[amount],\n });\n elements.forEach((element) => observer.observe(element));\n return () => observer.disconnect();\n}\n\nexport { inView };\n","import { useState, useEffect } from 'react';\nimport { inView } from '../render/dom/viewport/index.mjs';\n\nfunction useInView(ref, { root, margin, amount, once = false } = {}) {\n const [isInView, setInView] = useState(false);\n useEffect(() => {\n if (!ref.current || (once && isInView))\n return;\n const onEnter = () => {\n setInView(true);\n return once ? undefined : () => setInView(false);\n };\n const options = {\n root: (root && root.current) || undefined,\n margin,\n amount,\n };\n return inView(ref.current, onEnter, options);\n }, [root, ref, margin, once, amount]);\n return isInView;\n}\n\nexport { useInView };\n","import { useContext, useState, useEffect } from 'react';\nimport { motionValue } from './index.mjs';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { useConstant } from '../utils/use-constant.mjs';\n\n/**\n * Creates a `MotionValue` to track the state and velocity of a value.\n *\n * Usually, these are created automatically. For advanced use-cases, like use with `useTransform`, you can create `MotionValue`s externally and pass them into the animated component via the `style` prop.\n *\n * ```jsx\n * export const MyComponent = () => {\n * const scale = useMotionValue(1)\n *\n * return <motion.div style={{ scale }} />\n * }\n * ```\n *\n * @param initial - The initial state.\n *\n * @public\n */\nfunction useMotionValue(initial) {\n const value = useConstant(() => motionValue(initial));\n /**\n * If this motion value is being used in static mode, like on\n * the Framer canvas, force components to rerender when the motion\n * value is updated.\n */\n const { isStatic } = useContext(MotionConfigContext);\n if (isStatic) {\n const [, setLatest] = useState(initial);\n useEffect(() => value.on(\"change\", setLatest), []);\n }\n return value;\n}\n\nexport { useMotionValue };\n","import { interpolate } from './interpolate.mjs';\n\nconst isCustomValueType = (v) => {\n return v && typeof v === \"object\" && v.mix;\n};\nconst getMixer = (v) => (isCustomValueType(v) ? v.mix : undefined);\nfunction transform(...args) {\n const useImmediate = !Array.isArray(args[0]);\n const argOffset = useImmediate ? 0 : -1;\n const inputValue = args[0 + argOffset];\n const inputRange = args[1 + argOffset];\n const outputRange = args[2 + argOffset];\n const options = args[3 + argOffset];\n const interpolator = interpolate(inputRange, outputRange, {\n mixer: getMixer(outputRange[0]),\n ...options,\n });\n return useImmediate ? interpolator(inputValue) : interpolator;\n}\n\nexport { transform };\n","import { useMotionValue } from './use-motion-value.mjs';\nimport { useIsomorphicLayoutEffect } from '../utils/use-isomorphic-effect.mjs';\nimport { cancelFrame, frame } from '../frameloop/frame.mjs';\n\nfunction useCombineMotionValues(values, combineValues) {\n /**\n * Initialise the returned motion value. This remains the same between renders.\n */\n const value = useMotionValue(combineValues());\n /**\n * Create a function that will update the template motion value with the latest values.\n * This is pre-bound so whenever a motion value updates it can schedule its\n * execution in Framesync. If it's already been scheduled it won't be fired twice\n * in a single frame.\n */\n const updateValue = () => value.set(combineValues());\n /**\n * Synchronously update the motion value with the latest values during the render.\n * This ensures that within a React render, the styles applied to the DOM are up-to-date.\n */\n updateValue();\n /**\n * Subscribe to all motion values found within the template. Whenever any of them change,\n * schedule an update.\n */\n useIsomorphicLayoutEffect(() => {\n const scheduleUpdate = () => frame.preRender(updateValue, false, true);\n const subscriptions = values.map((v) => v.on(\"change\", scheduleUpdate));\n return () => {\n subscriptions.forEach((unsubscribe) => unsubscribe());\n cancelFrame(updateValue);\n };\n });\n return value;\n}\n\nexport { useCombineMotionValues };\n","import { collectMotionValues } from './index.mjs';\nimport { useCombineMotionValues } from './use-combine-values.mjs';\n\nfunction useComputed(compute) {\n /**\n * Open session of collectMotionValues. Any MotionValue that calls get()\n * will be saved into this array.\n */\n collectMotionValues.current = [];\n compute();\n const value = useCombineMotionValues(collectMotionValues.current, compute);\n /**\n * Synchronously close session of collectMotionValues.\n */\n collectMotionValues.current = undefined;\n return value;\n}\n\nexport { useComputed };\n","import { transform } from '../utils/transform.mjs';\nimport { useCombineMotionValues } from './use-combine-values.mjs';\nimport { useConstant } from '../utils/use-constant.mjs';\nimport { useComputed } from './use-computed.mjs';\n\nfunction useTransform(input, inputRangeOrTransformer, outputRange, options) {\n if (typeof input === \"function\") {\n return useComputed(input);\n }\n const transformer = typeof inputRangeOrTransformer === \"function\"\n ? inputRangeOrTransformer\n : transform(inputRangeOrTransformer, outputRange, options);\n return Array.isArray(input)\n ? useListTransform(input, transformer)\n : useListTransform([input], ([latest]) => transformer(latest));\n}\nfunction useListTransform(values, transformer) {\n const latest = useConstant(() => []);\n return useCombineMotionValues(values, () => {\n latest.length = 0;\n const numValues = values.length;\n for (let i = 0; i < numValues; i++) {\n latest[i] = values[i].get();\n }\n return transformer(latest);\n });\n}\n\nexport { useTransform };\n"],"names":["prefetch","router","href","options","window","doPrefetch","catch","formatStringOrUrl","urlObjOrString","formatUrl","React","forwardRef","LinkComponent","forwardedRef","children","child","hrefProp","as","asProp","childrenProp","prefetchProp","passHref","replace","shallow","scroll","onClick","onMouseEnter","onMouseEnterProp","onTouchStart","onTouchStartProp","legacyBehavior","restProps","props","a","useContext","AppRouterContext","prefetchEnabled","appPrefetchKind","PrefetchKind","AUTO","FULL","useMemo","resolvedHref","previousHref","useRef","previousAs","only","childRef","ref","setIntersectionRef","isVisible","resetVisible","useIntersection","rootMargin","setIntersectionWithResetRef","useCallback","current","el","setRef","useMergedRef","useEffect","childProps","e","defaultPrevented","nodeName","currentTarget","toUpperCase","isModifiedEvent","target","event","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","preventDefault","startTransition","routerScroll","kind","process","env","NODE_ENV","undefined","isAbsoluteUrl","type","addBasePath","cloneElement","Image","configEnv","handleLoading","img","placeholder","onLoadRef","onLoadingCompleteRef","setBlurComplete","unoptimized","sizesInput","src","p","decode","Promise","resolve","then","parentElement","Event","Object","defineProperty","writable","value","prevented","stopped","isDefaultPrevented","isPropagationStopped","persist","stopPropagation","getDynamicProps","fetchPriority","use","Boolean","fetchpriority","globalThis","__NEXT_IMAGE_IMPORTED","ImageElement","srcSet","sizes","height","width","decoding","className","style","loading","fill","setShowAltText","onLoad","onError","rest","ownRef","complete","data-nimg","ImagePreload","isAppRouter","imgAttributes","opts","imageSrcSet","imageSizes","crossOrigin","referrerPolicy","ReactDOM","preload","Head","link","rel","pagesRouter","RouterContext","configContext","ImageConfigContext","config","c","imageConfigDefault","allSizes","deviceSizes","sort","b","qualities","onLoadingComplete","blurComplete","useState","showAltText","meta","imgMeta","getImgProps","defaultLoader","imgConf","priority","hasIntersectionObserver","IntersectionObserver","observers","Map","idList","rootRef","disabled","isDisabled","visible","setVisible","elementRef","setElement","element","tagName","unobserve","observe","callback","id","observer","elements","createObserver","instance","root","margin","existing","find","obj","get","entries","forEach","entry","isIntersecting","intersectionRatio","push","set","delete","size","disconnect","index","findIndex","splice","idleCallback","requestIdleCallback","cancelIdleCallback","refA","refB","cleanupA","cleanupB","applyRef","cleanup","AmpStateContext","createContext","isInAmpMode","ampFirst","hybrid","hasQuery","isStaticRequire","default","getInt","x","Number","isFinite","NaN","test","parseInt","_state","blurWidth","blurHeight","quality","overrideSrc","blurDataURL","layout","objectFit","objectPosition","lazyBoundary","lazyRoot","loader","isDefaultLoader","customImageLoader","_","layoutStyle","intrinsic","maxWidth","responsive","layoutSizes","staticSrc","widthInt","heightInt","isStaticImageData","staticImageData","Error","JSON","stringify","ratio","Math","round","isLazy","startsWith","dangerouslyAllowSVG","split","endsWith","qualityInt","imgStyle","assign","position","left","top","right","bottom","color","backgroundImage","getImageBlurSvg","backgroundSize","backgroundPosition","backgroundRepeat","generateImgAttrs","widths","getWidths","viewportWidthRe","percentSizes","match","exec","length","smallestRatio","min","filter","s","Set","map","w","last","i","join","placeholderStyle","defaultHead","inAmpMode","head","charSet","name","content","onlyReactElement","list","Fragment","concat","Children","toArray","reduce","fragmentList","fragmentChild","METATYPES","reduceComponents","headChildrenElements","reverse","unique","keys","tags","metaTypes","metaCategories","isUnique","hasKey","h","key","indexOf","slice","has","add","len","metatype","hasOwnProperty","category","categories","__NEXT_OPTIMIZE_FONTS","some","url","newProps","ampState","headManager","HeadManagerContext","Effect","reduceComponentsToState","svgWidth","svgHeight","viewBox","std","preserveAspectRatio","VALID_LOADERS","path","loaderFile","domains","disableStaticImages","minimumCacheTTL","formats","contentSecurityPolicy","contentDispositionType","localPatterns","remotePatterns","getImageProps","imgProps","q","prev","cur","abs","DEFAULT_Q","encodeURIComponent","__next_img_default","formatWithValidation","urlObjectKeys","slashedProtocols","urlObj","auth","hostname","protocol","pathname","hash","query","host","port","String","querystring","urlQueryToSearchParams","search","slashes","searchParamsToUrlQuery","searchParams","Array","isArray","stringifyUrlQueryParam","param","isNaN","urlQuery","result","URLSearchParams","append","item","searchParamsList","from","SideEffect","isServer","useClientOnlyLayoutEffect","useLayoutEffect","useClientOnlyEffect","emitChange","mountedInstances","headElements","updateHead","_pendingUpdate","DecodeError","MiddlewareNotFoundError","MissingStaticPage","NormalizeError","PageNotFoundError","SP","ST","WEB_VITALS","execOnce","getDisplayName","getLocationOrigin","getURL","isResSent","loadGetInitialProps","normalizeRepeatedSlashes","stringifyError","fn","used","args","ABSOLUTE_URL_REGEX","location","origin","substring","Component","displayName","res","finished","headersSent","urlParts","App","ctx","getInitialProps","performance","every","method","constructor","page","code","message","error","stack"],"sourceRoot":"","ignoreList":[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]}