@helpwave/hightide 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/src/shared/lib/utils/warn-once.ts","../node_modules/next/src/shared/lib/image-blur-svg.ts","../node_modules/next/src/shared/lib/image-config.ts","../node_modules/next/src/shared/lib/get-img-props.ts","../node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs","../node_modules/next/src/shared/lib/side-effect.tsx","../node_modules/next/src/shared/lib/amp-context.shared-runtime.ts","../node_modules/next/src/shared/lib/head-manager-context.shared-runtime.ts","../node_modules/next/src/shared/lib/amp-mode.ts","../node_modules/next/src/shared/lib/head.tsx","../node_modules/next/src/shared/lib/image-config-context.shared-runtime.ts","../node_modules/next/src/shared/lib/router-context.shared-runtime.ts","../node_modules/next/dist/compiled/picomatch/index.js","../node_modules/next/src/shared/lib/match-local-pattern.ts","../node_modules/next/src/shared/lib/match-remote-pattern.ts","../node_modules/next/src/shared/lib/image-loader.ts","../node_modules/next/src/client/use-merged-ref.ts","../node_modules/next/src/client/image-component.tsx","../node_modules/next/src/shared/lib/image-external.tsx","../node_modules/next/image.js","../node_modules/next/src/shared/lib/router/utils/querystring.ts","../node_modules/next/src/shared/lib/router/utils/format-url.ts","../node_modules/next/src/shared/lib/router/utils/omit.ts","../node_modules/next/src/shared/lib/utils.ts","../node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts","../node_modules/next/src/shared/lib/router/utils/parse-path.ts","../node_modules/next/src/client/normalize-trailing-slash.ts","../node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts","../node_modules/next/src/client/has-base-path.ts","../node_modules/next/src/shared/lib/router/utils/is-local-url.ts","../node_modules/next/src/shared/lib/router/utils/sorted-routes.ts","../node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts","../node_modules/next/src/shared/lib/segment.ts","../node_modules/next/src/shared/lib/router/utils/app-paths.ts","../node_modules/next/src/shared/lib/router/utils/interception-routes.ts","../node_modules/next/src/shared/lib/router/utils/is-dynamic.ts","../node_modules/next/src/shared/lib/router/utils/index.ts","../node_modules/next/dist/compiled/path-to-regexp/index.js","../node_modules/next/src/lib/route-pattern-normalizer.ts","../node_modules/next/src/shared/lib/router/utils/route-match-utils.ts","../node_modules/next/src/shared/lib/router/utils/route-matcher.ts","../node_modules/next/src/lib/constants.ts","../node_modules/next/src/shared/lib/escape-regexp.ts","../node_modules/next/src/shared/lib/router/utils/get-dynamic-param.ts","../node_modules/next/src/shared/lib/router/utils/route-regex.ts","../node_modules/next/src/shared/lib/router/utils/interpolate-as.ts","../node_modules/next/src/client/resolve-href.ts","../node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts","../node_modules/next/src/shared/lib/router/utils/add-locale.ts","../node_modules/next/src/client/add-locale.ts","../node_modules/next/src/client/request-idle-callback.ts","../node_modules/next/src/client/use-intersection.tsx","../node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts","../node_modules/next/src/client/normalize-locale-path.ts","../node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts","../node_modules/next/src/client/detect-domain-locale.ts","../node_modules/next/src/client/get-domain-locale.ts","../node_modules/next/src/client/add-base-path.ts","../node_modules/next/src/shared/lib/utils/error-once.ts","../node_modules/next/src/client/link.tsx","../node_modules/next/link.js","../src/index.ts","../src/components/branding/HelpwaveLogo.tsx","../src/components/branding/HelpwaveBadge.tsx","../src/components/display-and-visualization/Avatar.tsx","../src/components/layout/Visibility.tsx","../src/components/user-interaction/Button.tsx","../src/components/display-and-visualization/Chip.tsx","../src/components/display-and-visualization/Circle.tsx","../src/components/display-and-visualization/ExpansionIcon.tsx","../src/components/display-and-visualization/ProgressIndicator.tsx","../src/components/display-and-visualization/Ring.tsx","../src/components/display-and-visualization/Tag.tsx","../src/components/form/FieldLayout.tsx","../src/utils/array.ts","../src/utils/propsUtil.ts","../src/components/form/FormContext.tsx","../src/components/form/FormField.tsx","../src/components/form/FormStore.ts","../src/components/form/useCreateForm.tsx","../src/components/layout/Carousel.tsx","../src/contexts/LocaleContext.tsx","../src/hooks/useLocalStorage.ts","../src/utils/storage.ts","../src/utils/resolveSetState.ts","../src/i18n/translations.ts","../src/i18n/util.ts","../src/contexts/HightideConfigContext.tsx","../src/i18n/useHightideTranslation.ts","../src/components/layout/DividerInserter.tsx","../src/hooks/focus/useFocusTrap.ts","../src/hooks/focus/useIsMounted.ts","../src/hooks/useOverlayRegistry.ts","../src/components/layout/Drawer.tsx","../src/hooks/useTransitionState.ts","../src/components/layout/Expandable.tsx","../src/hooks/useOverwritableState.ts","../src/components/layout/FAQSection.tsx","../src/components/layout/FloatingContainer.tsx","../src/hooks/useFloatingElement.ts","../src/utils/math.ts","../src/components/layout/InifiniteScroll.tsx","../src/components/layout/ListBox.tsx","../src/utils/match.ts","../src/components/layout/MarkdownInterpreter.tsx","../src/components/layout/TabSwitcher.tsx","../src/components/layout/TextImage.tsx","../src/components/layout/VerticalDivider.tsx","../src/components/layout/dialog/ConfirmDialog.tsx","../src/components/layout/dialog/Dialog.tsx","../src/hooks/useLogOnce.ts","../src/components/layout/dialog/DiscardChangesDialog.tsx","../src/components/user-interaction/input/Input.tsx","../src/hooks/useDelay.ts","../src/hooks/focus/useFocusManagement.ts","../src/components/layout/dialog/InputDialog.tsx","../src/components/user-interaction/Select.tsx","../src/components/layout/dialog/LanguageDialog.tsx","../src/components/layout/dialog/ThemeDialog.tsx","../src/contexts/ThemeContext.tsx","../src/components/layout/loading/ErrorComponent.tsx","../src/components/layout/loading/LoadingAndErrorComponent.tsx","../src/components/layout/loading/LoadingContainer.tsx","../src/components/layout/loading/LoadingAnimation.tsx","../src/components/layout/navigation/BreadCrumbs.tsx","../src/components/layout/navigation/Navigation.tsx","../src/components/layout/navigation/Pagination.tsx","../src/components/layout/navigation/StepperBar.tsx","../src/components/layout/table/FillerCell.tsx","../src/components/layout/table/Filter.ts","../src/components/layout/table/Table.tsx","../src/components/layout/table/TableCell.tsx","../src/hooks/useResizeCallbackWrapper.ts","../src/components/layout/table/TableSortButton.tsx","../src/components/user-interaction/Tooltip.tsx","../src/components/layout/table/TableFilterButton.tsx","../src/components/user-interaction/Menu.tsx","../src/utils/bagFunctions.ts","../src/hooks/usePopoverPosition.ts","../src/hooks/useHoverState.ts","../src/hooks/useOutsideClick.ts","../src/components/user-interaction/Checkbox.tsx","../src/components/user-interaction/CopyToClipboardWrapper.tsx","../src/utils/writeToClipboard.ts","../src/components/user-interaction/ScrollPicker.tsx","../src/components/user-interaction/Textarea.tsx","../src/components/user-interaction/date/DatePicker.tsx","../src/utils/date.ts","../src/components/user-interaction/date/DayPicker.tsx","../src/components/user-interaction/date/YearMonthPicker.tsx","../src/components/user-interaction/date/DateTimePicker.tsx","../src/components/user-interaction/date/TimePicker.tsx","../src/components/user-interaction/date/TimeDisplay.tsx","../src/components/user-interaction/input/DateTimeInput.tsx","../src/components/user-interaction/input/InsideLabelInput.tsx","../src/components/user-interaction/input/SearchBar.tsx","../src/components/user-interaction/input/ToggleableInput.tsx","../src/components/user-interaction/properties/CheckboxProperty.tsx","../src/components/user-interaction/properties/PropertyBase.tsx","../src/components/user-interaction/properties/DateProperty.tsx","../src/components/user-interaction/properties/MultiSelectProperty.tsx","../src/components/user-interaction/properties/NumberProperty.tsx","../src/components/user-interaction/properties/SelectProperty.tsx","../src/components/user-interaction/properties/TextProperty.tsx","../src/components/utils/FocusTrap.tsx","../src/components/utils/Transition.tsx","../src/contexts/HightideProvider.tsx","../src/hooks/focus/useFocusGuards.ts","../src/hooks/focus/useFocusOnceVisible.ts","../src/hooks/useRerender.ts","../src/hooks/useSearch.ts","../src/utils/simpleSearch.ts","../src/utils/emailValidation.ts","../src/hooks/useValidators.ts","../src/utils/builder.ts","../src/utils/duration.ts","../src/utils/easeFunctions.ts","../src/utils/loopingArray.ts","../src/utils/noop.ts","../src/utils/promise.ts"],"sourcesContent":["\"use strict\";\n\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports._ = _interop_require_default;\n","let warnOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const warnings = new Set<string>()\n warnOnce = (msg: string) => {\n if (!warnings.has(msg)) {\n console.warn(msg)\n }\n warnings.add(msg)\n }\n}\n\nexport { warnOnce }\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","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/app/api-reference/components/image#path) */\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 [Content Security Policy](https://nextjs.org/docs/api-reference/next/image#contentsecuritypolicy) */\n contentSecurityPolicy: string\n\n /** @see [Content Disposition Type](https://nextjs.org/docs/api-reference/next/image#contentdispositiontype) */\n contentDispositionType: 'inline' | 'attachment'\n\n /** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#remotepatterns) */\n remotePatterns: Array<URL | RemotePattern>\n\n /** @see [Local 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 { 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 { CSSProperties, 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<ImageProps, 'src' | 'loader'> & {\n loading: LoadingValue\n width: number | undefined\n height: number | undefined\n style: NonNullable<JSX.IntrinsicElements['img']['style']>\n sizes: string | undefined\n srcSet: string | undefined\n src: string\n}\n\nconst VALID_LOADING_VALUES = ['lazy', 'eager', undefined] as const\n\n// Object-fit values that are not valid background-size values\nconst INVALID_BACKGROUND_SIZE_VALUES = [\n '-moz-initial',\n 'fill',\n 'none',\n 'scale-down',\n undefined,\n]\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<HTMLImageElement> | undefined\nexport type OnLoadingComplete = (img: HTMLImageElement) => void\n\nexport type PlaceholderStyle = Partial<\n Pick<\n CSSProperties,\n | 'backgroundSize'\n | 'backgroundPosition'\n | 'backgroundRepeat'\n | 'backgroundImage'\n >\n>\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 <img>.\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<ImageProps['placeholder']>\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 <img> 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<string, Record<string, string> | undefined> = {\n intrinsic: { maxWidth: '100%', height: 'auto' },\n responsive: { width: '100%', height: 'auto' },\n }\n const layoutToSizes: Record<string, string | undefined> = {\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 (qualityInt && qualityInt !== 75 && !config.qualities) {\n warnOnce(\n `Image with src \"${src}\" is using quality \"${qualityInt}\" which is not configured in images.qualities. This config will be required starting in Next.js 16.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-qualities`\n )\n }\n if (\n src.startsWith('/') &&\n src.includes('?') &&\n (!config?.localPatterns?.length ||\n (config.localPatterns.length === 1 &&\n config.localPatterns[0].pathname === '/_next/static/media/**'))\n ) {\n warnOnce(\n `Image with src \"${src}\" is using a query string which is not configured in images.localPatterns. This config will be required starting in Next.js 16.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`\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 const backgroundSize = !INVALID_BACKGROUND_SIZE_VALUES.includes(\n imgStyle.objectFit\n )\n ? imgStyle.objectFit\n : imgStyle.objectFit === 'fill'\n ? '100% 100%' // the background-size equivalent of `fill`\n : 'cover'\n\n let placeholderStyle: PlaceholderStyle = backgroundImage\n ? {\n backgroundSize,\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 strict\";\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\nexports._ = _interop_require_wildcard;\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 React from 'react'\n\nexport const AmpStateContext: React.Context<any> = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n AmpStateContext.displayName = 'AmpStateContext'\n}\n","import React from 'react'\n\nexport const HeadManagerContext: React.Context<{\n updateHead?: (state: any) => void\n mountedInstances?: any\n updateScripts?: (state: any) => void\n scripts?: any\n getIsSsr?: () => boolean\n\n // Used in app directory, to render script tags as server components.\n appDir?: boolean\n nonce?: string\n}> = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n HeadManagerContext.displayName = 'HeadManagerContext'\n}\n","export function isInAmpMode({\n ampFirst = false,\n hybrid = false,\n hasQuery = false,\n} = {}): boolean {\n return ampFirst || (hybrid && hasQuery)\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 = [<meta charSet=\"utf-8\" key=\"charset\" />]\n if (!inAmpMode) {\n head.push(\n <meta name=\"viewport\" content=\"width=device-width\" key=\"viewport\" />\n )\n }\n return head\n}\n\nfunction onlyReactElement(\n list: Array<React.ReactElement<any>>,\n child: React.ReactElement | number | string\n): Array<React.ReactElement<any>> {\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<React.ReactElement<any>>,\n fragmentChild: React.ReactElement | number | string\n ): Array<React.ReactElement<any>> => {\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 <title/>\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 (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","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","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","(()=>{\"use strict\";var t={170:(t,e,u)=>{const n=u(510);const isWindows=()=>{if(typeof navigator!==\"undefined\"&&navigator.platform){const t=navigator.platform.toLowerCase();return t===\"win32\"||t===\"windows\"}if(typeof process!==\"undefined\"&&process.platform){return process.platform===\"win32\"}return false};function picomatch(t,e,u=false){if(e&&(e.windows===null||e.windows===undefined)){e={...e,windows:isWindows()}}return n(t,e,u)}Object.assign(picomatch,n);t.exports=picomatch},154:t=>{const e=\"\\\\\\\\/\";const u=`[^${e}]`;const n=\"\\\\.\";const o=\"\\\\+\";const s=\"\\\\?\";const r=\"\\\\/\";const a=\"(?=.)\";const i=\"[^/]\";const c=`(?:${r}|$)`;const p=`(?:^|${r})`;const l=`${n}{1,2}${c}`;const f=`(?!${n})`;const A=`(?!${p}${l})`;const _=`(?!${n}{0,1}${c})`;const R=`(?!${l})`;const E=`[^.${r}]`;const h=`${i}*?`;const g=\"/\";const b={DOT_LITERAL:n,PLUS_LITERAL:o,QMARK_LITERAL:s,SLASH_LITERAL:r,ONE_CHAR:a,QMARK:i,END_ANCHOR:c,DOTS_SLASH:l,NO_DOT:f,NO_DOTS:A,NO_DOT_SLASH:_,NO_DOTS_SLASH:R,QMARK_NO_DOT:E,STAR:h,START_ANCHOR:p,SEP:g};const C={...b,SLASH_LITERAL:`[${e}]`,QMARK:u,STAR:`${u}*?`,DOTS_SLASH:`${n}{1,2}(?:[${e}]|$)`,NO_DOT:`(?!${n})`,NO_DOTS:`(?!(?:^|[${e}])${n}{1,2}(?:[${e}]|$))`,NO_DOT_SLASH:`(?!${n}{0,1}(?:[${e}]|$))`,NO_DOTS_SLASH:`(?!${n}{1,2}(?:[${e}]|$))`,QMARK_NO_DOT:`[^.${e}]`,START_ANCHOR:`(?:^|[${e}])`,END_ANCHOR:`(?:[${e}]|$)`,SEP:\"\\\\\"};const y={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};t.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:y,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(t){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${t.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(t){return t===true?C:b}}},697:(t,e,u)=>{const n=u(154);const o=u(96);const{MAX_LENGTH:s,POSIX_REGEX_SOURCE:r,REGEX_NON_SPECIAL_CHARS:a,REGEX_SPECIAL_CHARS_BACKREF:i,REPLACEMENTS:c}=n;const expandRange=(t,e)=>{if(typeof e.expandRange===\"function\"){return e.expandRange(...t,e)}t.sort();const u=`[${t.join(\"-\")}]`;try{new RegExp(u)}catch(e){return t.map((t=>o.escapeRegex(t))).join(\"..\")}return u};const syntaxError=(t,e)=>`Missing ${t}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`;const parse=(t,e)=>{if(typeof t!==\"string\"){throw new TypeError(\"Expected a string\")}t=c[t]||t;const u={...e};const p=typeof u.maxLength===\"number\"?Math.min(s,u.maxLength):s;let l=t.length;if(l>p){throw new SyntaxError(`Input length: ${l}, exceeds maximum allowed length: ${p}`)}const f={type:\"bos\",value:\"\",output:u.prepend||\"\"};const A=[f];const _=u.capture?\"\":\"?:\";const R=n.globChars(u.windows);const E=n.extglobChars(R);const{DOT_LITERAL:h,PLUS_LITERAL:g,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:y,NO_DOT:$,NO_DOT_SLASH:x,NO_DOTS_SLASH:S,QMARK:H,QMARK_NO_DOT:v,STAR:d,START_ANCHOR:L}=R;const globstar=t=>`(${_}(?:(?!${L}${t.dot?y:h}).)*?)`;const T=u.dot?\"\":$;const O=u.dot?H:v;let k=u.bash===true?globstar(u):d;if(u.capture){k=`(${k})`}if(typeof u.noext===\"boolean\"){u.noextglob=u.noext}const m={input:t,index:-1,start:0,dot:u.dot===true,consumed:\"\",output:\"\",prefix:\"\",backtrack:false,negated:false,brackets:0,braces:0,parens:0,quotes:0,globstar:false,tokens:A};t=o.removePrefix(t,m);l=t.length;const w=[];const N=[];const I=[];let B=f;let G;const eos=()=>m.index===l-1;const D=m.peek=(e=1)=>t[m.index+e];const M=m.advance=()=>t[++m.index]||\"\";const remaining=()=>t.slice(m.index+1);const consume=(t=\"\",e=0)=>{m.consumed+=t;m.index+=e};const append=t=>{m.output+=t.output!=null?t.output:t.value;consume(t.value)};const negate=()=>{let t=1;while(D()===\"!\"&&(D(2)!==\"(\"||D(3)===\"?\")){M();m.start++;t++}if(t%2===0){return false}m.negated=true;m.start++;return true};const increment=t=>{m[t]++;I.push(t)};const decrement=t=>{m[t]--;I.pop()};const push=t=>{if(B.type===\"globstar\"){const e=m.braces>0&&(t.type===\"comma\"||t.type===\"brace\");const u=t.extglob===true||w.length&&(t.type===\"pipe\"||t.type===\"paren\");if(t.type!==\"slash\"&&t.type!==\"paren\"&&!e&&!u){m.output=m.output.slice(0,-B.output.length);B.type=\"star\";B.value=\"*\";B.output=k;m.output+=B.output}}if(w.length&&t.type!==\"paren\"){w[w.length-1].inner+=t.value}if(t.value||t.output)append(t);if(B&&B.type===\"text\"&&t.type===\"text\"){B.output=(B.output||B.value)+t.value;B.value+=t.value;return}t.prev=B;A.push(t);B=t};const extglobOpen=(t,e)=>{const n={...E[e],conditions:1,inner:\"\"};n.prev=B;n.parens=m.parens;n.output=m.output;const o=(u.capture?\"(\":\"\")+n.open;increment(\"parens\");push({type:t,value:e,output:m.output?\"\":C});push({type:\"paren\",extglob:true,value:M(),output:o});w.push(n)};const extglobClose=t=>{let n=t.close+(u.capture?\")\":\"\");let o;if(t.type===\"negate\"){let s=k;if(t.inner&&t.inner.length>1&&t.inner.includes(\"/\")){s=globstar(u)}if(s!==k||eos()||/^\\)+$/.test(remaining())){n=t.close=`)$))${s}`}if(t.inner.includes(\"*\")&&(o=remaining())&&/^\\.[^\\\\/.]+$/.test(o)){const u=parse(o,{...e,fastpaths:false}).output;n=t.close=`)${u})${s})`}if(t.prev.type===\"bos\"){m.negatedExtglob=true}}push({type:\"paren\",extglob:true,value:G,output:n});decrement(\"parens\")};if(u.fastpaths!==false&&!/(^[*!]|[/()[\\]{}\"])/.test(t)){let n=false;let s=t.replace(i,((t,e,u,o,s,r)=>{if(o===\"\\\\\"){n=true;return t}if(o===\"?\"){if(e){return e+o+(s?H.repeat(s.length):\"\")}if(r===0){return O+(s?H.repeat(s.length):\"\")}return H.repeat(u.length)}if(o===\".\"){return h.repeat(u.length)}if(o===\"*\"){if(e){return e+o+(s?k:\"\")}return k}return e?t:`\\\\${t}`}));if(n===true){if(u.unescape===true){s=s.replace(/\\\\/g,\"\")}else{s=s.replace(/\\\\+/g,(t=>t.length%2===0?\"\\\\\\\\\":t?\"\\\\\":\"\"))}}if(s===t&&u.contains===true){m.output=t;return m}m.output=o.wrapOutput(s,m,e);return m}while(!eos()){G=M();if(G===\"\\0\"){continue}if(G===\"\\\\\"){const t=D();if(t===\"/\"&&u.bash!==true){continue}if(t===\".\"||t===\";\"){continue}if(!t){G+=\"\\\\\";push({type:\"text\",value:G});continue}const e=/^\\\\+/.exec(remaining());let n=0;if(e&&e[0].length>2){n=e[0].length;m.index+=n;if(n%2!==0){G+=\"\\\\\"}}if(u.unescape===true){G=M()}else{G+=M()}if(m.brackets===0){push({type:\"text\",value:G});continue}}if(m.brackets>0&&(G!==\"]\"||B.value===\"[\"||B.value===\"[^\")){if(u.posix!==false&&G===\":\"){const t=B.value.slice(1);if(t.includes(\"[\")){B.posix=true;if(t.includes(\":\")){const t=B.value.lastIndexOf(\"[\");const e=B.value.slice(0,t);const u=B.value.slice(t+2);const n=r[u];if(n){B.value=e+n;m.backtrack=true;M();if(!f.output&&A.indexOf(B)===1){f.output=C}continue}}}}if(G===\"[\"&&D()!==\":\"||G===\"-\"&&D()===\"]\"){G=`\\\\${G}`}if(G===\"]\"&&(B.value===\"[\"||B.value===\"[^\")){G=`\\\\${G}`}if(u.posix===true&&G===\"!\"&&B.value===\"[\"){G=\"^\"}B.value+=G;append({value:G});continue}if(m.quotes===1&&G!=='\"'){G=o.escapeRegex(G);B.value+=G;append({value:G});continue}if(G==='\"'){m.quotes=m.quotes===1?0:1;if(u.keepQuotes===true){push({type:\"text\",value:G})}continue}if(G===\"(\"){increment(\"parens\");push({type:\"paren\",value:G});continue}if(G===\")\"){if(m.parens===0&&u.strictBrackets===true){throw new SyntaxError(syntaxError(\"opening\",\"(\"))}const t=w[w.length-1];if(t&&m.parens===t.parens+1){extglobClose(w.pop());continue}push({type:\"paren\",value:G,output:m.parens?\")\":\"\\\\)\"});decrement(\"parens\");continue}if(G===\"[\"){if(u.nobracket===true||!remaining().includes(\"]\")){if(u.nobracket!==true&&u.strictBrackets===true){throw new SyntaxError(syntaxError(\"closing\",\"]\"))}G=`\\\\${G}`}else{increment(\"brackets\")}push({type:\"bracket\",value:G});continue}if(G===\"]\"){if(u.nobracket===true||B&&B.type===\"bracket\"&&B.value.length===1){push({type:\"text\",value:G,output:`\\\\${G}`});continue}if(m.brackets===0){if(u.strictBrackets===true){throw new SyntaxError(syntaxError(\"opening\",\"[\"))}push({type:\"text\",value:G,output:`\\\\${G}`});continue}decrement(\"brackets\");const t=B.value.slice(1);if(B.posix!==true&&t[0]===\"^\"&&!t.includes(\"/\")){G=`/${G}`}B.value+=G;append({value:G});if(u.literalBrackets===false||o.hasRegexChars(t)){continue}const e=o.escapeRegex(B.value);m.output=m.output.slice(0,-B.value.length);if(u.literalBrackets===true){m.output+=e;B.value=e;continue}B.value=`(${_}${e}|${B.value})`;m.output+=B.value;continue}if(G===\"{\"&&u.nobrace!==true){increment(\"braces\");const t={type:\"brace\",value:G,output:\"(\",outputIndex:m.output.length,tokensIndex:m.tokens.length};N.push(t);push(t);continue}if(G===\"}\"){const t=N[N.length-1];if(u.nobrace===true||!t){push({type:\"text\",value:G,output:G});continue}let e=\")\";if(t.dots===true){const t=A.slice();const n=[];for(let e=t.length-1;e>=0;e--){A.pop();if(t[e].type===\"brace\"){break}if(t[e].type!==\"dots\"){n.unshift(t[e].value)}}e=expandRange(n,u);m.backtrack=true}if(t.comma!==true&&t.dots!==true){const u=m.output.slice(0,t.outputIndex);const n=m.tokens.slice(t.tokensIndex);t.value=t.output=\"\\\\{\";G=e=\"\\\\}\";m.output=u;for(const t of n){m.output+=t.output||t.value}}push({type:\"brace\",value:G,output:e});decrement(\"braces\");N.pop();continue}if(G===\"|\"){if(w.length>0){w[w.length-1].conditions++}push({type:\"text\",value:G});continue}if(G===\",\"){let t=G;const e=N[N.length-1];if(e&&I[I.length-1]===\"braces\"){e.comma=true;t=\"|\"}push({type:\"comma\",value:G,output:t});continue}if(G===\"/\"){if(B.type===\"dot\"&&m.index===m.start+1){m.start=m.index+1;m.consumed=\"\";m.output=\"\";A.pop();B=f;continue}push({type:\"slash\",value:G,output:b});continue}if(G===\".\"){if(m.braces>0&&B.type===\"dot\"){if(B.value===\".\")B.output=h;const t=N[N.length-1];B.type=\"dots\";B.output+=G;B.value+=G;t.dots=true;continue}if(m.braces+m.parens===0&&B.type!==\"bos\"&&B.type!==\"slash\"){push({type:\"text\",value:G,output:h});continue}push({type:\"dot\",value:G,output:h});continue}if(G===\"?\"){const t=B&&B.value===\"(\";if(!t&&u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){extglobOpen(\"qmark\",G);continue}if(B&&B.type===\"paren\"){const t=D();let e=G;if(B.value===\"(\"&&!/[!=<:]/.test(t)||t===\"<\"&&!/<([!=]|\\w+>)/.test(remaining())){e=`\\\\${G}`}push({type:\"text\",value:G,output:e});continue}if(u.dot!==true&&(B.type===\"slash\"||B.type===\"bos\")){push({type:\"qmark\",value:G,output:v});continue}push({type:\"qmark\",value:G,output:H});continue}if(G===\"!\"){if(u.noextglob!==true&&D()===\"(\"){if(D(2)!==\"?\"||!/[!=<:]/.test(D(3))){extglobOpen(\"negate\",G);continue}}if(u.nonegate!==true&&m.index===0){negate();continue}}if(G===\"+\"){if(u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){extglobOpen(\"plus\",G);continue}if(B&&B.value===\"(\"||u.regex===false){push({type:\"plus\",value:G,output:g});continue}if(B&&(B.type===\"bracket\"||B.type===\"paren\"||B.type===\"brace\")||m.parens>0){push({type:\"plus\",value:G});continue}push({type:\"plus\",value:g});continue}if(G===\"@\"){if(u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){push({type:\"at\",extglob:true,value:G,output:\"\"});continue}push({type:\"text\",value:G});continue}if(G!==\"*\"){if(G===\"$\"||G===\"^\"){G=`\\\\${G}`}const t=a.exec(remaining());if(t){G+=t[0];m.index+=t[0].length}push({type:\"text\",value:G});continue}if(B&&(B.type===\"globstar\"||B.star===true)){B.type=\"star\";B.star=true;B.value+=G;B.output=k;m.backtrack=true;m.globstar=true;consume(G);continue}let e=remaining();if(u.noextglob!==true&&/^\\([^?]/.test(e)){extglobOpen(\"star\",G);continue}if(B.type===\"star\"){if(u.noglobstar===true){consume(G);continue}const n=B.prev;const o=n.prev;const s=n.type===\"slash\"||n.type===\"bos\";const r=o&&(o.type===\"star\"||o.type===\"globstar\");if(u.bash===true&&(!s||e[0]&&e[0]!==\"/\")){push({type:\"star\",value:G,output:\"\"});continue}const a=m.braces>0&&(n.type===\"comma\"||n.type===\"brace\");const i=w.length&&(n.type===\"pipe\"||n.type===\"paren\");if(!s&&n.type!==\"paren\"&&!a&&!i){push({type:\"star\",value:G,output:\"\"});continue}while(e.slice(0,3)===\"/**\"){const u=t[m.index+4];if(u&&u!==\"/\"){break}e=e.slice(3);consume(\"/**\",3)}if(n.type===\"bos\"&&eos()){B.type=\"globstar\";B.value+=G;B.output=globstar(u);m.output=B.output;m.globstar=true;consume(G);continue}if(n.type===\"slash\"&&n.prev.type!==\"bos\"&&!r&&eos()){m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type=\"globstar\";B.output=globstar(u)+(u.strictSlashes?\")\":\"|$)\");B.value+=G;m.globstar=true;m.output+=n.output+B.output;consume(G);continue}if(n.type===\"slash\"&&n.prev.type!==\"bos\"&&e[0]===\"/\"){const t=e[1]!==void 0?\"|$\":\"\";m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type=\"globstar\";B.output=`${globstar(u)}${b}|${b}${t})`;B.value+=G;m.output+=n.output+B.output;m.globstar=true;consume(G+M());push({type:\"slash\",value:\"/\",output:\"\"});continue}if(n.type===\"bos\"&&e[0]===\"/\"){B.type=\"globstar\";B.value+=G;B.output=`(?:^|${b}|${globstar(u)}${b})`;m.output=B.output;m.globstar=true;consume(G+M());push({type:\"slash\",value:\"/\",output:\"\"});continue}m.output=m.output.slice(0,-B.output.length);B.type=\"globstar\";B.output=globstar(u);B.value+=G;m.output+=B.output;m.globstar=true;consume(G);continue}const n={type:\"star\",value:G,output:k};if(u.bash===true){n.output=\".*?\";if(B.type===\"bos\"||B.type===\"slash\"){n.output=T+n.output}push(n);continue}if(B&&(B.type===\"bracket\"||B.type===\"paren\")&&u.regex===true){n.output=G;push(n);continue}if(m.index===m.start||B.type===\"slash\"||B.type===\"dot\"){if(B.type===\"dot\"){m.output+=x;B.output+=x}else if(u.dot===true){m.output+=S;B.output+=S}else{m.output+=T;B.output+=T}if(D()!==\"*\"){m.output+=C;B.output+=C}}push(n)}while(m.brackets>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\"]\"));m.output=o.escapeLast(m.output,\"[\");decrement(\"brackets\")}while(m.parens>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\")\"));m.output=o.escapeLast(m.output,\"(\");decrement(\"parens\")}while(m.braces>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\"}\"));m.output=o.escapeLast(m.output,\"{\");decrement(\"braces\")}if(u.strictSlashes!==true&&(B.type===\"star\"||B.type===\"bracket\")){push({type:\"maybe_slash\",value:\"\",output:`${b}?`})}if(m.backtrack===true){m.output=\"\";for(const t of m.tokens){m.output+=t.output!=null?t.output:t.value;if(t.suffix){m.output+=t.suffix}}}return m};parse.fastpaths=(t,e)=>{const u={...e};const r=typeof u.maxLength===\"number\"?Math.min(s,u.maxLength):s;const a=t.length;if(a>r){throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${r}`)}t=c[t]||t;const{DOT_LITERAL:i,SLASH_LITERAL:p,ONE_CHAR:l,DOTS_SLASH:f,NO_DOT:A,NO_DOTS:_,NO_DOTS_SLASH:R,STAR:E,START_ANCHOR:h}=n.globChars(u.windows);const g=u.dot?_:A;const b=u.dot?R:A;const C=u.capture?\"\":\"?:\";const y={negated:false,prefix:\"\"};let $=u.bash===true?\".*?\":E;if(u.capture){$=`(${$})`}const globstar=t=>{if(t.noglobstar===true)return $;return`(${C}(?:(?!${h}${t.dot?f:i}).)*?)`};const create=t=>{switch(t){case\"*\":return`${g}${l}${$}`;case\".*\":return`${i}${l}${$}`;case\"*.*\":return`${g}${$}${i}${l}${$}`;case\"*/*\":return`${g}${$}${p}${l}${b}${$}`;case\"**\":return g+globstar(u);case\"**/*\":return`(?:${g}${globstar(u)}${p})?${b}${l}${$}`;case\"**/*.*\":return`(?:${g}${globstar(u)}${p})?${b}${$}${i}${l}${$}`;case\"**/.*\":return`(?:${g}${globstar(u)}${p})?${i}${l}${$}`;default:{const e=/^(.*?)\\.(\\w+)$/.exec(t);if(!e)return;const u=create(e[1]);if(!u)return;return u+i+e[2]}}};const x=o.removePrefix(t,y);let S=create(x);if(S&&u.strictSlashes!==true){S+=`${p}?`}return S};t.exports=parse},510:(t,e,u)=>{const n=u(716);const o=u(697);const s=u(96);const r=u(154);const isObject=t=>t&&typeof t===\"object\"&&!Array.isArray(t);const picomatch=(t,e,u=false)=>{if(Array.isArray(t)){const n=t.map((t=>picomatch(t,e,u)));const arrayMatcher=t=>{for(const e of n){const u=e(t);if(u)return u}return false};return arrayMatcher}const n=isObject(t)&&t.tokens&&t.input;if(t===\"\"||typeof t!==\"string\"&&!n){throw new TypeError(\"Expected pattern to be a non-empty string\")}const o=e||{};const s=o.windows;const r=n?picomatch.compileRe(t,e):picomatch.makeRe(t,e,false,true);const a=r.state;delete r.state;let isIgnored=()=>false;if(o.ignore){const t={...e,ignore:null,onMatch:null,onResult:null};isIgnored=picomatch(o.ignore,t,u)}const matcher=(u,n=false)=>{const{isMatch:i,match:c,output:p}=picomatch.test(u,r,e,{glob:t,posix:s});const l={glob:t,state:a,regex:r,posix:s,input:u,output:p,match:c,isMatch:i};if(typeof o.onResult===\"function\"){o.onResult(l)}if(i===false){l.isMatch=false;return n?l:false}if(isIgnored(u)){if(typeof o.onIgnore===\"function\"){o.onIgnore(l)}l.isMatch=false;return n?l:false}if(typeof o.onMatch===\"function\"){o.onMatch(l)}return n?l:true};if(u){matcher.state=a}return matcher};picomatch.test=(t,e,u,{glob:n,posix:o}={})=>{if(typeof t!==\"string\"){throw new TypeError(\"Expected input to be a string\")}if(t===\"\"){return{isMatch:false,output:\"\"}}const r=u||{};const a=r.format||(o?s.toPosixSlashes:null);let i=t===n;let c=i&&a?a(t):t;if(i===false){c=a?a(t):t;i=c===n}if(i===false||r.capture===true){if(r.matchBase===true||r.basename===true){i=picomatch.matchBase(t,e,u,o)}else{i=e.exec(c)}}return{isMatch:Boolean(i),match:i,output:c}};picomatch.matchBase=(t,e,u)=>{const n=e instanceof RegExp?e:picomatch.makeRe(e,u);return n.test(s.basename(t))};picomatch.isMatch=(t,e,u)=>picomatch(e,u)(t);picomatch.parse=(t,e)=>{if(Array.isArray(t))return t.map((t=>picomatch.parse(t,e)));return o(t,{...e,fastpaths:false})};picomatch.scan=(t,e)=>n(t,e);picomatch.compileRe=(t,e,u=false,n=false)=>{if(u===true){return t.output}const o=e||{};const s=o.contains?\"\":\"^\";const r=o.contains?\"\":\"$\";let a=`${s}(?:${t.output})${r}`;if(t&&t.negated===true){a=`^(?!${a}).*$`}const i=picomatch.toRegex(a,e);if(n===true){i.state=t}return i};picomatch.makeRe=(t,e={},u=false,n=false)=>{if(!t||typeof t!==\"string\"){throw new TypeError(\"Expected a non-empty string\")}let s={negated:false,fastpaths:true};if(e.fastpaths!==false&&(t[0]===\".\"||t[0]===\"*\")){s.output=o.fastpaths(t,e)}if(!s.output){s=o(t,e)}return picomatch.compileRe(s,e,u,n)};picomatch.toRegex=(t,e)=>{try{const u=e||{};return new RegExp(t,u.flags||(u.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===true)throw t;return/$^/}};picomatch.constants=r;t.exports=picomatch},716:(t,e,u)=>{const n=u(96);const{CHAR_ASTERISK:o,CHAR_AT:s,CHAR_BACKWARD_SLASH:r,CHAR_COMMA:a,CHAR_DOT:i,CHAR_EXCLAMATION_MARK:c,CHAR_FORWARD_SLASH:p,CHAR_LEFT_CURLY_BRACE:l,CHAR_LEFT_PARENTHESES:f,CHAR_LEFT_SQUARE_BRACKET:A,CHAR_PLUS:_,CHAR_QUESTION_MARK:R,CHAR_RIGHT_CURLY_BRACE:E,CHAR_RIGHT_PARENTHESES:h,CHAR_RIGHT_SQUARE_BRACKET:g}=u(154);const isPathSeparator=t=>t===p||t===r;const depth=t=>{if(t.isPrefix!==true){t.depth=t.isGlobstar?Infinity:1}};const scan=(t,e)=>{const u=e||{};const b=t.length-1;const C=u.parts===true||u.scanToEnd===true;const y=[];const $=[];const x=[];let S=t;let H=-1;let v=0;let d=0;let L=false;let T=false;let O=false;let k=false;let m=false;let w=false;let N=false;let I=false;let B=false;let G=false;let D=0;let M;let P;let K={value:\"\",depth:0,isGlob:false};const eos=()=>H>=b;const peek=()=>S.charCodeAt(H+1);const advance=()=>{M=P;return S.charCodeAt(++H)};while(H<b){P=advance();let t;if(P===r){N=K.backslashes=true;P=advance();if(P===l){w=true}continue}if(w===true||P===l){D++;while(eos()!==true&&(P=advance())){if(P===r){N=K.backslashes=true;advance();continue}if(P===l){D++;continue}if(w!==true&&P===i&&(P=advance())===i){L=K.isBrace=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(w!==true&&P===a){L=K.isBrace=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===E){D--;if(D===0){w=false;L=K.isBrace=true;G=true;break}}}if(C===true){continue}break}if(P===p){y.push(H);$.push(K);K={value:\"\",depth:0,isGlob:false};if(G===true)continue;if(M===i&&H===v+1){v+=2;continue}d=H+1;continue}if(u.noext!==true){const t=P===_||P===s||P===o||P===R||P===c;if(t===true&&peek()===f){O=K.isGlob=true;k=K.isExtglob=true;G=true;if(P===c&&H===v){B=true}if(C===true){while(eos()!==true&&(P=advance())){if(P===r){N=K.backslashes=true;P=advance();continue}if(P===h){O=K.isGlob=true;G=true;break}}continue}break}}if(P===o){if(M===o)m=K.isGlobstar=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===R){O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===A){while(eos()!==true&&(t=advance())){if(t===r){N=K.backslashes=true;advance();continue}if(t===g){T=K.isBracket=true;O=K.isGlob=true;G=true;break}}if(C===true){continue}break}if(u.nonegate!==true&&P===c&&H===v){I=K.negated=true;v++;continue}if(u.noparen!==true&&P===f){O=K.isGlob=true;if(C===true){while(eos()!==true&&(P=advance())){if(P===f){N=K.backslashes=true;P=advance();continue}if(P===h){G=true;break}}continue}break}if(O===true){G=true;if(C===true){continue}break}}if(u.noext===true){k=false;O=false}let U=S;let X=\"\";let F=\"\";if(v>0){X=S.slice(0,v);S=S.slice(v);d-=v}if(U&&O===true&&d>0){U=S.slice(0,d);F=S.slice(d)}else if(O===true){U=\"\";F=S}else{U=S}if(U&&U!==\"\"&&U!==\"/\"&&U!==S){if(isPathSeparator(U.charCodeAt(U.length-1))){U=U.slice(0,-1)}}if(u.unescape===true){if(F)F=n.removeBackslashes(F);if(U&&N===true){U=n.removeBackslashes(U)}}const Q={prefix:X,input:t,start:v,base:U,glob:F,isBrace:L,isBracket:T,isGlob:O,isExtglob:k,isGlobstar:m,negated:I,negatedExtglob:B};if(u.tokens===true){Q.maxDepth=0;if(!isPathSeparator(P)){$.push(K)}Q.tokens=$}if(u.parts===true||u.tokens===true){let e;for(let n=0;n<y.length;n++){const o=e?e+1:v;const s=y[n];const r=t.slice(o,s);if(u.tokens){if(n===0&&v!==0){$[n].isPrefix=true;$[n].value=X}else{$[n].value=r}depth($[n]);Q.maxDepth+=$[n].depth}if(n!==0||r!==\"\"){x.push(r)}e=s}if(e&&e+1<t.length){const n=t.slice(e+1);x.push(n);if(u.tokens){$[$.length-1].value=n;depth($[$.length-1]);Q.maxDepth+=$[$.length-1].depth}}Q.slashes=y;Q.parts=x}return Q};t.exports=scan},96:(t,e,u)=>{const{REGEX_BACKSLASH:n,REGEX_REMOVE_BACKSLASH:o,REGEX_SPECIAL_CHARS:s,REGEX_SPECIAL_CHARS_GLOBAL:r}=u(154);e.isObject=t=>t!==null&&typeof t===\"object\"&&!Array.isArray(t);e.hasRegexChars=t=>s.test(t);e.isRegexChar=t=>t.length===1&&e.hasRegexChars(t);e.escapeRegex=t=>t.replace(r,\"\\\\$1\");e.toPosixSlashes=t=>t.replace(n,\"/\");e.removeBackslashes=t=>t.replace(o,(t=>t===\"\\\\\"?\"\":t));e.escapeLast=(t,u,n)=>{const o=t.lastIndexOf(u,n);if(o===-1)return t;if(t[o-1]===\"\\\\\")return e.escapeLast(t,u,o-1);return`${t.slice(0,o)}\\\\${t.slice(o)}`};e.removePrefix=(t,e={})=>{let u=t;if(u.startsWith(\"./\")){u=u.slice(2);e.prefix=\"./\"}return u};e.wrapOutput=(t,e={},u={})=>{const n=u.contains?\"\":\"^\";const o=u.contains?\"\":\"$\";let s=`${n}(?:${t})${o}`;if(e.negated===true){s=`(?:^(?!${s}).*$)`}return s};e.basename=(t,{windows:e}={})=>{const u=t.split(e?/[\\\\/]/:\"/\");const n=u[u.length-1];if(n===\"\"){return u[u.length-2]}return n}}};var e={};function __nccwpck_require__(u){var n=e[u];if(n!==undefined){return n.exports}var o=e[u]={exports:{}};var s=true;try{t[u](o,o.exports,__nccwpck_require__);s=false}finally{if(s)delete e[u]}return o.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var u=__nccwpck_require__(170);module.exports=u})();","import type { LocalPattern } from './image-config'\nimport { makeRe } from 'next/dist/compiled/picomatch'\n\n// Modifying this function should also modify writeImagesManifest()\nexport function matchLocalPattern(pattern: LocalPattern, url: URL): boolean {\n if (pattern.search !== undefined) {\n if (pattern.search !== url.search) {\n return false\n }\n }\n\n if (!makeRe(pattern.pathname ?? '**', { dot: true }).test(url.pathname)) {\n return false\n }\n\n return true\n}\n\nexport function hasLocalMatch(\n localPatterns: LocalPattern[] | undefined,\n urlPathAndQuery: string\n): boolean {\n if (!localPatterns) {\n // if the user didn't define \"localPatterns\", we allow all local images\n return true\n }\n const url = new URL(urlPathAndQuery, 'http://n')\n return localPatterns.some((p) => matchLocalPattern(p, url))\n}\n","import type { RemotePattern } from './image-config'\nimport { makeRe } from 'next/dist/compiled/picomatch'\n\n// Modifying this function should also modify writeImagesManifest()\nexport function matchRemotePattern(\n pattern: RemotePattern | URL,\n url: URL\n): boolean {\n if (pattern.protocol !== undefined) {\n if (pattern.protocol.replace(/:$/, '') !== url.protocol.replace(/:$/, '')) {\n return false\n }\n }\n if (pattern.port !== undefined) {\n if (pattern.port !== url.port) {\n return false\n }\n }\n\n if (pattern.hostname === undefined) {\n throw new Error(\n `Pattern should define hostname but found\\n${JSON.stringify(pattern)}`\n )\n } else {\n if (!makeRe(pattern.hostname).test(url.hostname)) {\n return false\n }\n }\n\n if (pattern.search !== undefined) {\n if (pattern.search !== url.search) {\n return false\n }\n }\n\n // Should be the same as writeImagesManifest()\n if (!makeRe(pattern.pathname ?? '**', { dot: true }).test(url.pathname)) {\n return false\n }\n\n return true\n}\n\nexport function hasRemoteMatch(\n domains: string[],\n remotePatterns: Array<RemotePattern | URL>,\n url: URL\n): boolean {\n return (\n domains.some((domain) => url.hostname === domain) ||\n remotePatterns.some((p) => matchRemotePattern(p, url))\n )\n}\n","import type { ImageLoaderPropsWithConfig } from './image-config'\n\nconst DEFAULT_Q = 75\n\nfunction defaultLoader({\n config,\n src,\n width,\n quality,\n}: ImageLoaderPropsWithConfig): string {\n if (process.env.NODE_ENV !== 'production') {\n const missingValues = []\n\n // these should always be provided but make sure they are\n if (!src) missingValues.push('src')\n if (!width) missingValues.push('width')\n\n if (missingValues.length > 0) {\n throw new Error(\n `Next Image Optimization requires ${missingValues.join(\n ', '\n )} to be provided. Make sure you pass them as props to the \\`next/image\\` component. Received: ${JSON.stringify(\n { src, width, quality }\n )}`\n )\n }\n\n if (src.startsWith('//')) {\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)`\n )\n }\n\n if (src.startsWith('/') && config.localPatterns) {\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasLocalMatch } =\n require('./match-local-pattern') as typeof import('./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 } =\n require('./match-remote-pattern') as typeof import('./match-remote-pattern')\n if (\n !hasRemoteMatch(config.domains!, config.remotePatterns!, parsedSrc)\n ) {\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 { useCallback, useRef, type Ref } from 'react'\n\n// This is a compatibility hook to support React 18 and 19 refs.\n// In 19, a cleanup function from refs may be returned.\n// In 18, returning a cleanup function creates a warning.\n// Since we take userspace refs, we don't know ahead of time if a cleanup function will be returned.\n// This implements cleanup functions with the old behavior in 18.\n// We know refs are always called alternating with `null` and then `T`.\n// So a call with `null` means we need to call the previous cleanup functions.\nexport function useMergedRef<TElement>(\n refA: Ref<TElement>,\n refB: Ref<TElement>\n): Ref<TElement> {\n const cleanupA = useRef<(() => void) | null>(null)\n const cleanupB = useRef<(() => void) | null>(null)\n\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (e.g. via `<Link legacyBehavior>`),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return useCallback(\n (current: TElement | null): void => {\n if (current === null) {\n const cleanupFnA = cleanupA.current\n if (cleanupFnA) {\n cleanupA.current = null\n cleanupFnA()\n }\n const cleanupFnB = cleanupB.current\n if (cleanupFnB) {\n cleanupB.current = null\n cleanupFnB()\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current)\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current)\n }\n }\n },\n [refA, refB]\n )\n}\n\nfunction applyRef<TElement>(\n refA: NonNullable<Ref<TElement>>,\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","'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// 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<OnLoad | undefined>\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>\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<OnLoad | undefined>,\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>,\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<string, string | undefined> {\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<HTMLImageElement | null, ImageElementProps>(\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 <img\n {...rest}\n {...getDynamicProps(fetchPriority)}\n // It's intended to keep `loading` before `src` because React updates\n // props in order which causes Safari/Firefox to not lazy load properly.\n // See https://github.com/facebook/react/issues/25883\n loading={loading}\n width={width}\n height={height}\n decoding={decoding}\n data-nimg={fill ? 'fill' : '1'}\n className={className}\n style={style}\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 sizes={sizes}\n srcSet={srcSet}\n src={src}\n ref={ref}\n onLoad={(event) => {\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: ReactDOM.PreloadOptions = {\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 ReactDOM.preload(imgAttributes.src, opts)\n return null\n }\n\n return (\n <Head>\n <link\n key={\n '__nimg-' +\n imgAttributes.src +\n imgAttributes.srcSet +\n imgAttributes.sizes\n }\n rel=\"preload\"\n // Note how we omit the `href` attribute, as it would only be relevant\n // for browsers that do not support `imagesrcset`, and in those cases\n // it would cause the incorrect image to be preloaded.\n //\n // https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset\n href={imgAttributes.srcSet ? undefined : imgAttributes.src}\n {...opts}\n />\n </Head>\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<HTMLImageElement | null, ImageProps>(\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 <ImageElement\n {...imgAttributes}\n unoptimized={imgMeta.unoptimized}\n placeholder={imgMeta.placeholder}\n fill={imgMeta.fill}\n onLoadRef={onLoadRef}\n onLoadingCompleteRef={onLoadingCompleteRef}\n setBlurComplete={setBlurComplete}\n setShowAltText={setShowAltText}\n sizesInput={props.sizes}\n ref={forwardedRef}\n />\n }\n {imgMeta.priority ? (\n <ImagePreload\n isAppRouter={isAppRouter}\n imgAttributes={imgAttributes}\n />\n ) : null}\n </>\n )\n }\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// 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","module.exports = require('./dist/shared/lib/image-external')\n","import type { ParsedUrlQuery } from 'querystring'\n\nexport function searchParamsToUrlQuery(\n searchParams: URLSearchParams\n): ParsedUrlQuery {\n const query: ParsedUrlQuery = {}\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key]\n if (typeof existing === 'undefined') {\n query[key] = value\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n query[key] = [existing, value]\n }\n }\n return query\n}\n\nfunction stringifyUrlQueryParam(param: unknown): string {\n if (typeof param === 'string') {\n return param\n }\n\n if (\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(query: ParsedUrlQuery): URLSearchParams {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, stringifyUrlQueryParam(item))\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value))\n }\n }\n return searchParams\n}\n\nexport function assign(\n target: URLSearchParams,\n ...searchParamsList: URLSearchParams[]\n): URLSearchParams {\n for (const searchParams of searchParamsList) {\n for (const key of searchParams.keys()) {\n target.delete(key)\n }\n\n for (const [key, value] of searchParams.entries()) {\n target.append(key, value)\n }\n }\n\n return target\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","export function omit<T extends { [key: string]: unknown }, K extends keyof T>(\n object: T,\n keys: K[]\n): Omit<T, K> {\n const omitted: { [key: string]: unknown } = {}\n Object.keys(object).forEach((key) => {\n if (!keys.includes(key as K)) {\n omitted[key] = object[key]\n }\n })\n return omitted as Omit<T, K>\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?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly 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?: readonly 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","/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */\nexport function removeTrailingSlash(route: string) {\n return route.replace(/\\/$/, '') || '/'\n}\n","/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n","import { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { parsePath } from '../shared/lib/router/utils/parse-path'\n\n/**\n * Normalizes the trailing slash of a path according to the `trailingSlash` option\n * in `next.config.js`.\n */\nexport const normalizePathTrailingSlash = (path: string) => {\n if (!path.startsWith('/') || process.env.__NEXT_MANUAL_TRAILING_SLASH) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n if (process.env.__NEXT_TRAILING_SLASH) {\n if (/\\.[^/]+\\/?$/.test(pathname)) {\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n } else if (pathname.endsWith('/')) {\n return `${pathname}${query}${hash}`\n } else {\n return `${pathname}/${query}${hash}`\n }\n }\n\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n","import { pathHasPrefix } from '../shared/lib/router/utils/path-has-prefix'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function hasBasePath(path: string): boolean {\n return pathHasPrefix(path, basePath)\n}\n","import { isAbsoluteUrl, getLocationOrigin } from '../../utils'\nimport { hasBasePath } from '../../../../client/has-base-path'\n\n/**\n * Detects whether a given url is routable by the Next.js router (browser only).\n */\nexport function isLocalURL(url: string): boolean {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!isAbsoluteUrl(url)) return true\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = getLocationOrigin()\n const resolved = new URL(url, locationOrigin)\n return resolved.origin === locationOrigin && hasBasePath(resolved.pathname)\n } catch (_) {\n return false\n }\n}\n","class UrlNode {\n placeholder: boolean = true\n children: Map<string, UrlNode> = new Map()\n slugName: string | null = null\n restSlugName: string | null = null\n optionalRestSlugName: string | null = null\n\n insert(urlPath: string): void {\n this._insert(urlPath.split('/').filter(Boolean), [], false)\n }\n\n smoosh(): string[] {\n return this._smoosh()\n }\n\n private _smoosh(prefix: string = '/'): string[] {\n const childrenPaths = [...this.children.keys()].sort()\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[]'), 1)\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[...]'), 1)\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1)\n }\n\n const routes = childrenPaths\n .map((c) => this.children.get(c)!._smoosh(`${prefix}${c}/`))\n .reduce((prev, curr) => [...prev, ...curr], [])\n\n if (this.slugName !== null) {\n routes.push(\n ...this.children.get('[]')!._smoosh(`${prefix}[${this.slugName}]/`)\n )\n }\n\n if (!this.placeholder) {\n const r = prefix === '/' ? '/' : prefix.slice(0, -1)\n if (this.optionalRestSlugName != null) {\n throw new Error(\n `You cannot define a route with the same specificity as a optional catch-all route (\"${r}\" and \"${r}[[...${this.optionalRestSlugName}]]\").`\n )\n }\n\n routes.unshift(r)\n }\n\n if (this.restSlugName !== null) {\n routes.push(\n ...this.children\n .get('[...]')!\n ._smoosh(`${prefix}[...${this.restSlugName}]/`)\n )\n }\n\n if (this.optionalRestSlugName !== null) {\n routes.push(\n ...this.children\n .get('[[...]]')!\n ._smoosh(`${prefix}[[...${this.optionalRestSlugName}]]/`)\n )\n }\n\n return routes\n }\n\n private _insert(\n urlPaths: string[],\n slugNames: string[],\n isCatchAll: boolean\n ): void {\n if (urlPaths.length === 0) {\n this.placeholder = false\n return\n }\n\n if (isCatchAll) {\n throw new Error(`Catch-all must be the last part of the URL.`)\n }\n\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0]\n\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1)\n\n let isOptional = false\n if (segmentName.startsWith('[') && segmentName.endsWith(']')) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1)\n isOptional = true\n }\n\n if (segmentName.startsWith('…')) {\n throw new Error(\n `Detected a three-dot character ('…') at ('${segmentName}'). Did you mean ('...')?`\n )\n }\n\n if (segmentName.startsWith('...')) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3)\n isCatchAll = true\n }\n\n if (segmentName.startsWith('[') || segmentName.endsWith(']')) {\n throw new Error(\n `Segment names may not start or end with extra brackets ('${segmentName}').`\n )\n }\n\n if (segmentName.startsWith('.')) {\n throw new Error(\n `Segment names may not start with erroneous periods ('${segmentName}').`\n )\n }\n\n function handleSlug(previousSlug: string | null, nextSlug: string) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\n `You cannot use different slug names for the same dynamic path ('${previousSlug}' !== '${nextSlug}').`\n )\n }\n }\n\n slugNames.forEach((slug) => {\n if (slug === nextSlug) {\n throw new Error(\n `You cannot have the same slug name \"${nextSlug}\" repeat within a single dynamic path`\n )\n }\n\n if (slug.replace(/\\W/g, '') === nextSegment.replace(/\\W/g, '')) {\n throw new Error(\n `You cannot have the slug names \"${slug}\" and \"${nextSlug}\" differ only by non-word symbols within a single dynamic path`\n )\n }\n })\n\n slugNames.push(nextSlug)\n }\n\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error(\n `You cannot use both an required and optional catch-all route at the same level (\"[...${this.restSlugName}]\" and \"${urlPaths[0]}\" ).`\n )\n }\n\n handleSlug(this.optionalRestSlugName, segmentName)\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = '[[...]]'\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error(\n `You cannot use both an optional and required catch-all route at the same level (\"[[...${this.optionalRestSlugName}]]\" and \"${urlPaths[0]}\").`\n )\n }\n\n handleSlug(this.restSlugName, segmentName)\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = '[...]'\n }\n } else {\n if (isOptional) {\n throw new Error(\n `Optional route parameters are not yet supported (\"${urlPaths[0]}\").`\n )\n }\n handleSlug(this.slugName, segmentName)\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = '[]'\n }\n }\n\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode())\n }\n\n this.children\n .get(nextSegment)!\n ._insert(urlPaths.slice(1), slugNames, isCatchAll)\n }\n}\n\n/**\n * @deprecated Use `sortSortableRoutes` or `sortPages` instead.\n */\nexport function getSortedRoutes(\n normalizedPages: ReadonlyArray<string>\n): string[] {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode()\n\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath) => root.insert(pagePath))\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh()\n}\n\n/**\n * @deprecated Use `sortSortableRouteObjects` or `sortPageObjects` instead.\n */\nexport function getSortedRouteObjects<T>(\n objects: T[],\n getter: (obj: T) => string\n): T[] {\n // We're assuming here that all the pathnames are unique, that way we can\n // sort the list and use the index as the key.\n const indexes: Record<string, number> = {}\n const pathnames: string[] = []\n for (let i = 0; i < objects.length; i++) {\n const pathname = getter(objects[i])\n indexes[pathname] = i\n pathnames[i] = pathname\n }\n\n // Sort the pathnames.\n const sorted = getSortedRoutes(pathnames)\n\n // Map the sorted pathnames back to the original objects using the new sorted\n // index.\n return sorted.map((pathname) => objects[indexes[pathname]])\n}\n","/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n","import type { Segment } from '../../server/app-render/types'\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\n","import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n","import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\nexport function extractInterceptionRouteInformation(path: string) {\n let interceptingRoute: string | undefined,\n marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined,\n interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n","import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n","export { getSortedRoutes, getSortedRouteObjects } from './sorted-routes'\nexport { isDynamicRoute } from './is-dynamic'\n","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var n=e;Object.defineProperty(n,\"__esModule\",{value:true});n.pathToRegexp=n.tokensToRegexp=n.regexpToFunction=n.match=n.tokensToFunction=n.compile=n.parse=void 0;function lexer(e){var n=[];var r=0;while(r<e.length){var t=e[r];if(t===\"*\"||t===\"+\"||t===\"?\"){n.push({type:\"MODIFIER\",index:r,value:e[r++]});continue}if(t===\"\\\\\"){n.push({type:\"ESCAPED_CHAR\",index:r++,value:e[r++]});continue}if(t===\"{\"){n.push({type:\"OPEN\",index:r,value:e[r++]});continue}if(t===\"}\"){n.push({type:\"CLOSE\",index:r,value:e[r++]});continue}if(t===\":\"){var a=\"\";var i=r+1;while(i<e.length){var o=e.charCodeAt(i);if(o>=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){a+=e[i++];continue}break}if(!a)throw new TypeError(\"Missing parameter name at \".concat(r));n.push({type:\"NAME\",index:r,value:a});r=i;continue}if(t===\"(\"){var c=1;var f=\"\";var i=r+1;if(e[i]===\"?\"){throw new TypeError('Pattern cannot start with \"?\" at '.concat(i))}while(i<e.length){if(e[i]===\"\\\\\"){f+=e[i++]+e[i++];continue}if(e[i]===\")\"){c--;if(c===0){i++;break}}else if(e[i]===\"(\"){c++;if(e[i+1]!==\"?\"){throw new TypeError(\"Capturing groups are not allowed at \".concat(i))}}f+=e[i++]}if(c)throw new TypeError(\"Unbalanced pattern at \".concat(r));if(!f)throw new TypeError(\"Missing pattern at \".concat(r));n.push({type:\"PATTERN\",index:r,value:f});r=i;continue}n.push({type:\"CHAR\",index:r,value:e[r++]})}n.push({type:\"END\",index:r,value:\"\"});return n}function parse(e,n){if(n===void 0){n={}}var r=lexer(e);var t=n.prefixes,a=t===void 0?\"./\":t,i=n.delimiter,o=i===void 0?\"/#?\":i;var c=[];var f=0;var u=0;var p=\"\";var tryConsume=function(e){if(u<r.length&&r[u].type===e)return r[u++].value};var mustConsume=function(e){var n=tryConsume(e);if(n!==undefined)return n;var t=r[u],a=t.type,i=t.index;throw new TypeError(\"Unexpected \".concat(a,\" at \").concat(i,\", expected \").concat(e))};var consumeText=function(){var e=\"\";var n;while(n=tryConsume(\"CHAR\")||tryConsume(\"ESCAPED_CHAR\")){e+=n}return e};var isSafe=function(e){for(var n=0,r=o;n<r.length;n++){var t=r[n];if(e.indexOf(t)>-1)return true}return false};var safePattern=function(e){var n=c[c.length-1];var r=e||(n&&typeof n===\"string\"?n:\"\");if(n&&!r){throw new TypeError('Must have text between two parameters, missing text after \"'.concat(n.name,'\"'))}if(!r||isSafe(r))return\"[^\".concat(escapeString(o),\"]+?\");return\"(?:(?!\".concat(escapeString(r),\")[^\").concat(escapeString(o),\"])+?\")};while(u<r.length){var v=tryConsume(\"CHAR\");var s=tryConsume(\"NAME\");var d=tryConsume(\"PATTERN\");if(s||d){var g=v||\"\";if(a.indexOf(g)===-1){p+=g;g=\"\"}if(p){c.push(p);p=\"\"}c.push({name:s||f++,prefix:g,suffix:\"\",pattern:d||safePattern(g),modifier:tryConsume(\"MODIFIER\")||\"\"});continue}var x=v||tryConsume(\"ESCAPED_CHAR\");if(x){p+=x;continue}if(p){c.push(p);p=\"\"}var h=tryConsume(\"OPEN\");if(h){var g=consumeText();var l=tryConsume(\"NAME\")||\"\";var m=tryConsume(\"PATTERN\")||\"\";var T=consumeText();mustConsume(\"CLOSE\");c.push({name:l||(m?f++:\"\"),pattern:l&&!m?safePattern(g):m,prefix:g,suffix:T,modifier:tryConsume(\"MODIFIER\")||\"\"});continue}mustConsume(\"END\")}return c}n.parse=parse;function compile(e,n){return tokensToFunction(parse(e,n),n)}n.compile=compile;function tokensToFunction(e,n){if(n===void 0){n={}}var r=flags(n);var t=n.encode,a=t===void 0?function(e){return e}:t,i=n.validate,o=i===void 0?true:i;var c=e.map((function(e){if(typeof e===\"object\"){return new RegExp(\"^(?:\".concat(e.pattern,\")$\"),r)}}));return function(n){var r=\"\";for(var t=0;t<e.length;t++){var i=e[t];if(typeof i===\"string\"){r+=i;continue}var f=n?n[i.name]:undefined;var u=i.modifier===\"?\"||i.modifier===\"*\";var p=i.modifier===\"*\"||i.modifier===\"+\";if(Array.isArray(f)){if(!p){throw new TypeError('Expected \"'.concat(i.name,'\" to not repeat, but got an array'))}if(f.length===0){if(u)continue;throw new TypeError('Expected \"'.concat(i.name,'\" to not be empty'))}for(var v=0;v<f.length;v++){var s=a(f[v],i);if(o&&!c[t].test(s)){throw new TypeError('Expected all \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix}continue}if(typeof f===\"string\"||typeof f===\"number\"){var s=a(String(f),i);if(o&&!c[t].test(s)){throw new TypeError('Expected \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix;continue}if(u)continue;var d=p?\"an array\":\"a string\";throw new TypeError('Expected \"'.concat(i.name,'\" to be ').concat(d))}return r}}n.tokensToFunction=tokensToFunction;function match(e,n){var r=[];var t=pathToRegexp(e,r,n);return regexpToFunction(t,r,n)}n.match=match;function regexpToFunction(e,n,r){if(r===void 0){r={}}var t=r.decode,a=t===void 0?function(e){return e}:t;return function(r){var t=e.exec(r);if(!t)return false;var i=t[0],o=t.index;var c=Object.create(null);var _loop_1=function(e){if(t[e]===undefined)return\"continue\";var r=n[e-1];if(r.modifier===\"*\"||r.modifier===\"+\"){c[r.name]=t[e].split(r.prefix+r.suffix).map((function(e){return a(e,r)}))}else{c[r.name]=a(t[e],r)}};for(var f=1;f<t.length;f++){_loop_1(f)}return{path:i,index:o,params:c}}}n.regexpToFunction=regexpToFunction;function escapeString(e){return e.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g,\"\\\\$1\")}function flags(e){return e&&e.sensitive?\"\":\"i\"}function regexpToRegexp(e,n){if(!n)return e;var r=/\\((?:\\?<(.*?)>)?(?!\\?)/g;var t=0;var a=r.exec(e.source);while(a){n.push({name:a[1]||t++,prefix:\"\",suffix:\"\",modifier:\"\",pattern:\"\"});a=r.exec(e.source)}return e}function arrayToRegexp(e,n,r){var t=e.map((function(e){return pathToRegexp(e,n,r).source}));return new RegExp(\"(?:\".concat(t.join(\"|\"),\")\"),flags(r))}function stringToRegexp(e,n,r){return tokensToRegexp(parse(e,r),n,r)}function tokensToRegexp(e,n,r){if(r===void 0){r={}}var t=r.strict,a=t===void 0?false:t,i=r.start,o=i===void 0?true:i,c=r.end,f=c===void 0?true:c,u=r.encode,p=u===void 0?function(e){return e}:u,v=r.delimiter,s=v===void 0?\"/#?\":v,d=r.endsWith,g=d===void 0?\"\":d;var x=\"[\".concat(escapeString(g),\"]|$\");var h=\"[\".concat(escapeString(s),\"]\");var l=o?\"^\":\"\";for(var m=0,T=e;m<T.length;m++){var E=T[m];if(typeof E===\"string\"){l+=escapeString(p(E))}else{var w=escapeString(p(E.prefix));var y=escapeString(p(E.suffix));if(E.pattern){if(n)n.push(E);if(w||y){if(E.modifier===\"+\"||E.modifier===\"*\"){var R=E.modifier===\"*\"?\"?\":\"\";l+=\"(?:\".concat(w,\"((?:\").concat(E.pattern,\")(?:\").concat(y).concat(w,\"(?:\").concat(E.pattern,\"))*)\").concat(y,\")\").concat(R)}else{l+=\"(?:\".concat(w,\"(\").concat(E.pattern,\")\").concat(y,\")\").concat(E.modifier)}}else{if(E.modifier===\"+\"||E.modifier===\"*\"){throw new TypeError('Can not repeat \"'.concat(E.name,'\" without a prefix and suffix'))}l+=\"(\".concat(E.pattern,\")\").concat(E.modifier)}}else{l+=\"(?:\".concat(w).concat(y,\")\").concat(E.modifier)}}}if(f){if(!a)l+=\"\".concat(h,\"?\");l+=!r.endsWith?\"$\":\"(?=\".concat(x,\")\")}else{var A=e[e.length-1];var _=typeof A===\"string\"?h.indexOf(A[A.length-1])>-1:A===undefined;if(!a){l+=\"(?:\".concat(h,\"(?=\").concat(x,\"))?\")}if(!_){l+=\"(?=\".concat(h,\"|\").concat(x,\")\")}}return new RegExp(l,flags(r))}n.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,n,r){if(e instanceof RegExp)return regexpToRegexp(e,n);if(Array.isArray(e))return arrayToRegexp(e,n,r);return stringToRegexp(e,n,r)}n.pathToRegexp=pathToRegexp})();module.exports=e})();","import type { Token } from 'next/dist/compiled/path-to-regexp'\n\n/**\n * Route pattern normalization utilities for path-to-regexp compatibility.\n *\n * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain\n * patterns commonly used in Next.js interception routes. This module provides\n * normalization functions to make Next.js route patterns compatible with the\n * updated library while preserving all functionality.\n */\n\n/**\n * Internal separator used to normalize adjacent parameter patterns.\n * This unique marker is inserted between adjacent parameters and stripped out\n * during parameter extraction to avoid conflicts with real URL content.\n */\nconst PARAM_SEPARATOR = '_NEXTSEP_'\n\n/**\n * Detects if a route pattern needs normalization for path-to-regexp compatibility.\n */\nexport function hasAdjacentParameterIssues(route: string): boolean {\n if (typeof route !== 'string') return false\n\n // Check for interception route markers followed immediately by parameters\n // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc.\n // These patterns cause \"Must have text between two parameters\" errors\n if (/\\/\\(\\.{1,3}\\):[^/\\s]+/.test(route)) {\n return true\n }\n\n // Check for basic adjacent parameters without separators\n // Pattern: :param1:param2 (but not :param* or other URL patterns)\n if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) {\n return true\n }\n\n return false\n}\n\n/**\n * Normalizes route patterns that have adjacent parameters without text between them.\n * Inserts a unique separator that can be safely stripped out later.\n */\nexport function normalizeAdjacentParameters(route: string): string {\n let normalized = route\n\n // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param\n normalized = normalized.replace(\n /(\\([^)]*\\)):([^/\\s]+)/g,\n `$1${PARAM_SEPARATOR}:$2`\n )\n\n // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2\n normalized = normalized.replace(/:([^:/\\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`)\n\n return normalized\n}\n\n/**\n * Normalizes tokens that have repeating modifiers (* or +) but empty prefix and suffix.\n *\n * path-to-regexp 6.3.0+ introduced validation that throws:\n * \"Can not repeat without prefix/suffix\"\n *\n * This occurs when a token has modifier: '*' or '+' with both prefix: '' and suffix: ''\n */\nexport function normalizeTokensForRegexp(tokens: Token[]): Token[] {\n return tokens.map((token) => {\n // Token union type: Token = string | TokenObject\n // Literal path segments are strings, parameters/wildcards are objects\n if (\n typeof token === 'object' &&\n token !== null &&\n // Not all token objects have 'modifier' property (e.g., simple text tokens)\n 'modifier' in token &&\n // Only repeating modifiers (* or +) cause the validation error\n // Other modifiers like '?' (optional) are fine\n (token.modifier === '*' || token.modifier === '+') &&\n // Token objects can have different shapes depending on route pattern\n 'prefix' in token &&\n 'suffix' in token &&\n // Both prefix and suffix must be empty strings\n // This is what causes the validation error in path-to-regexp\n token.prefix === '' &&\n token.suffix === ''\n ) {\n // Add minimal prefix to satisfy path-to-regexp validation\n // We use '/' as it's the most common path delimiter and won't break route matching\n // The prefix gets used in regex generation but doesn't affect parameter extraction\n return {\n ...token,\n prefix: '/',\n }\n }\n return token\n })\n}\n\n/**\n * Strips normalization separators from extracted route parameters.\n * Used by both server and client code to clean up parameters after route matching.\n */\nexport function stripParameterSeparators(\n params: Record<string, any>\n): Record<string, any> {\n const cleaned: Record<string, any> = {}\n\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === 'string') {\n // Remove the separator if it appears at the start of parameter values\n cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n } else if (Array.isArray(value)) {\n // Handle array parameters (from repeated route segments)\n cleaned[key] = value.map((item) =>\n typeof item === 'string'\n ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n : item\n )\n } else {\n cleaned[key] = value\n }\n }\n\n return cleaned\n}\n","/**\n * Client-safe utilities for route matching that don't import server-side\n * utilities to avoid bundling issues with Turbopack\n */\n\nimport type {\n Key,\n TokensToRegexpOptions,\n ParseOptions,\n TokensToFunctionOptions,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n pathToRegexp,\n compile,\n regexpToFunction,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n hasAdjacentParameterIssues,\n normalizeAdjacentParameters,\n stripParameterSeparators,\n} from '../../../../lib/route-pattern-normalizer'\n\n/**\n * Client-safe wrapper around pathToRegexp that handles path-to-regexp 6.3.0+ validation errors.\n * This includes both \"Can not repeat without prefix/suffix\" and \"Must have text between parameters\" errors.\n */\nexport function safePathToRegexp(\n route: string | RegExp | Array<string | RegExp>,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n if (typeof route !== 'string') {\n return pathToRegexp(route, keys, options)\n }\n\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return pathToRegexp(routeToUse, keys, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return pathToRegexp(normalizedRoute, keys, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around compile that handles path-to-regexp 6.3.0+ validation errors.\n * No server-side error reporting to avoid bundling issues.\n */\nexport function safeCompile(\n route: string,\n options?: TokensToFunctionOptions & ParseOptions\n) {\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return compile(routeToUse, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return compile(normalizedRoute, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around regexpToFunction that automatically cleans parameters.\n */\nexport function safeRegexpToFunction<\n T extends Record<string, any> = Record<string, any>,\n>(regexp: RegExp, keys?: Key[]): (pathname: string) => { params: T } | false {\n const originalMatcher = regexpToFunction<T>(regexp, keys || [])\n\n return (pathname: string) => {\n const result = originalMatcher(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return {\n ...result,\n params: stripParameterSeparators(result.params as any) as T,\n }\n }\n}\n\n/**\n * Safe wrapper for route matcher functions that automatically cleans parameters.\n * This is client-safe and doesn't import path-to-regexp.\n */\nexport function safeRouteMatcher<T extends Record<string, any>>(\n matcherFn: (pathname: string) => false | T\n): (pathname: string) => false | T {\n return (pathname: string) => {\n const result = matcherFn(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return stripParameterSeparators(result) as T\n }\n}\n","import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\nimport { safeRouteMatcher } from './route-match-utils'\n\nexport interface RouteMatchFn {\n (pathname: string): false | Params\n}\n\ntype RouteMatcherOptions = {\n // We only use the exec method of the RegExp object. This helps us avoid using\n // type assertions that the passed in properties are of the correct type.\n re: Pick<RegExp, 'exec'>\n groups: Record<string, Group>\n}\n\nexport function getRouteMatcher({\n re,\n groups,\n}: RouteMatcherOptions): RouteMatchFn {\n const rawMatcher = (pathname: string) => {\n const routeMatch = re.exec(pathname)\n if (!routeMatch) return false\n\n const decode = (param: string) => {\n try {\n return decodeURIComponent(param)\n } catch {\n throw new DecodeError('failed to decode param')\n }\n }\n\n const params: Params = {}\n for (const [key, group] of Object.entries(groups)) {\n const match = routeMatch[group.pos]\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry) => decode(entry))\n } else {\n params[key] = decode(match)\n }\n }\n }\n\n return params\n }\n\n // Wrap with safe matcher to handle parameter cleaning\n return safeRouteMatcher(rawMatcher)\n}\n","import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_PREFETCH_SUFFIX = '.prefetch.rsc'\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\n\n// in seconds\nexport const CACHE_ONE_YEAR = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record<string, ServerRuntime> = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n","// regexp is based on https://github.com/sindresorhus/escape-string-regexp\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g\n\nexport function escapeStringRegexp(str: string) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&')\n }\n return str\n}\n","import type { DynamicParam } from '../../../../server/app-render/app-render'\nimport type { DynamicParamTypesShort } from '../../../../server/app-render/types'\nimport type { FallbackRouteParams } from '../../../../server/request/fallback-params'\n\n/**\n *\n * Shared logic on client and server for creating a dynamic param value.\n *\n * This code needs to be shared with the client so it can extract dynamic route\n * params from the URL without a server request.\n *\n * Because everything in this module is sent to the client, we should aim to\n * keep this code as simple as possible. The special case handling for catchall\n * and optional is, alas, unfortunate.\n */\nexport function getDynamicParam(\n params: { [key: string]: any },\n segmentKey: string,\n dynamicParamType: DynamicParamTypesShort,\n pagePath: string,\n fallbackRouteParams: FallbackRouteParams | null\n): DynamicParam {\n let value = params[segmentKey]\n\n if (fallbackRouteParams && fallbackRouteParams.has(segmentKey)) {\n value = fallbackRouteParams.get(segmentKey)\n } else if (Array.isArray(value)) {\n value = value.map((i) => encodeURIComponent(i))\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value)\n }\n\n if (!value) {\n const isCatchall = dynamicParamType === 'c'\n const isOptionalCatchall = dynamicParamType === 'oc'\n\n if (isCatchall || isOptionalCatchall) {\n // handle the case where an optional catchall does not have a value,\n // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard`\n if (isOptionalCatchall) {\n return {\n param: segmentKey,\n value: null,\n type: dynamicParamType,\n treeSegment: [segmentKey, '', dynamicParamType],\n }\n }\n\n // handle the case where a catchall or optional catchall does not have a value,\n // e.g. `/foo/bar/hello` and `@slot/[...catchall]` or `@slot/[[...catchall]]` is matched\n value = pagePath\n .split('/')\n // remove the first empty string\n .slice(1)\n // replace any dynamic params with the actual values\n .flatMap((pathSegment) => {\n const param = parseParameter(pathSegment)\n // if the segment matches a param, return the param value\n // otherwise, it's a static segment, so just return that\n return params[param.key] ?? param.key\n })\n\n return {\n param: segmentKey,\n value,\n type: dynamicParamType,\n // This value always has to be a string.\n treeSegment: [segmentKey, value.join('/'), dynamicParamType],\n }\n }\n }\n\n return {\n param: segmentKey,\n // The value that is passed to user code.\n value: value,\n // The value that is rendered in the router tree.\n treeSegment: [\n segmentKey,\n Array.isArray(value) ? value.join('/') : value,\n dynamicParamType,\n ],\n type: dynamicParamType,\n }\n}\n\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n * - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n * - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n * - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n * - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */\nexport const PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/\n\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[[...slug]]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[[foo]]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `[bar]` -> `{ key: 'bar', repeat: false, optional: false }`\n * - `fizz` -> `{ key: 'fizz', repeat: false, optional: false }`\n * @param param - The parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseParameter(param: string) {\n const match = param.match(PARAMETER_PATTERN)\n\n if (!match) {\n return parseMatchedParameter(param)\n }\n\n return parseMatchedParameter(match[2])\n}\n\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseMatchedParameter(param: string) {\n const optional = param.startsWith('[') && param.endsWith(']')\n if (optional) {\n param = param.slice(1, -1)\n }\n const repeat = param.startsWith('...')\n if (repeat) {\n param = param.slice(3)\n }\n return { key: param, repeat, optional }\n}\n","import {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../../../lib/constants'\nimport { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { PARAMETER_PATTERN, parseMatchedParameter } from './get-dynamic-param'\n\nexport interface Group {\n pos: number\n repeat: boolean\n optional: boolean\n}\n\nexport interface RouteRegex {\n groups: { [groupName: string]: Group }\n re: RegExp\n}\n\ntype GetNamedRouteRegexOptions = {\n /**\n * Whether to prefix the route keys with the NEXT_INTERCEPTION_MARKER_PREFIX\n * or NEXT_QUERY_PARAM_PREFIX. This is only relevant when creating the\n * routes-manifest during the build.\n */\n prefixRouteKeys: boolean\n\n /**\n * Whether to include the suffix in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n\n /**\n * Whether to backtrack duplicate keys. This is only relevant when creating\n * the routes-manifest during the build.\n */\n backreferenceDuplicateKeys?: boolean\n}\n\ntype GetRouteRegexOptions = {\n /**\n * Whether to include extra parts in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n * of adding this option.\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n}\n\nfunction getParametrizedRoute(\n route: string,\n includeSuffix: boolean,\n includePrefix: boolean\n) {\n const groups: { [groupName: string]: Group } = {}\n let groupIndex = 1\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const markerMatch = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n segments.push(`/${escapeStringRegexp(markerMatch)}([^/]+?)`)\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = repeat ? (optional ? '(?:/(.+?))?' : '/(.+?)') : '/([^/]+?)'\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n parameterizedRoute: segments.join(''),\n groups,\n }\n}\n\n/**\n * From a normalized route this function generates a regular expression and\n * a corresponding groups object intended to be used to store matching groups\n * from the regular expression.\n */\nexport function getRouteRegex(\n normalizedRoute: string,\n {\n includeSuffix = false,\n includePrefix = false,\n excludeOptionalTrailingSlash = false,\n }: GetRouteRegexOptions = {}\n): RouteRegex {\n const { parameterizedRoute, groups } = getParametrizedRoute(\n normalizedRoute,\n includeSuffix,\n includePrefix\n )\n\n let re = parameterizedRoute\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?'\n }\n\n return {\n re: new RegExp(`^${re}$`),\n groups: groups,\n }\n}\n\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */\nfunction buildGetSafeRouteKey() {\n let i = 0\n\n return () => {\n let routeKey = ''\n let j = ++i\n while (j > 0) {\n routeKey += String.fromCharCode(97 + ((j - 1) % 26))\n j = Math.floor((j - 1) / 26)\n }\n return routeKey\n }\n}\n\nfunction getSafeKeyFromSegment({\n interceptionMarker,\n getSafeRouteKey,\n segment,\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n}: {\n interceptionMarker?: string\n getSafeRouteKey: () => string\n segment: string\n routeKeys: Record<string, string>\n keyPrefix?: string\n backreferenceDuplicateKeys: boolean\n}) {\n const { key, optional, repeat } = parseMatchedParameter(segment)\n\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '')\n\n if (keyPrefix) {\n cleanedKey = `${keyPrefix}${cleanedKey}`\n }\n let invalidKey = false\n\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true\n }\n\n if (invalidKey) {\n cleanedKey = getSafeRouteKey()\n }\n\n const duplicateKey = cleanedKey in routeKeys\n\n if (keyPrefix) {\n routeKeys[cleanedKey] = `${keyPrefix}${key}`\n } else {\n routeKeys[cleanedKey] = key\n }\n\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker\n ? escapeStringRegexp(interceptionMarker)\n : ''\n\n let pattern: string\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = `\\\\k<${cleanedKey}>`\n } else if (repeat) {\n pattern = `(?<${cleanedKey}>.+?)`\n } else {\n pattern = `(?<${cleanedKey}>[^/]+?)`\n }\n\n return optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const hasInterceptionMarker = INTERCEPTION_ROUTE_MARKERS.some((m) =>\n segment.startsWith(m)\n )\n\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n segments.push(\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: paramMatches[1],\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys\n ? NEXT_INTERCEPTION_MARKER_PREFIX\n : undefined,\n backreferenceDuplicateKeys,\n })\n )\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n }\n}\n\n/**\n * This function extends `getRouteRegex` generating also a named regexp where\n * each group is named along with a routeKeys object that indexes the assigned\n * named group with its corresponding key. When the routeKeys need to be\n * prefixed to uniquely identify internally the \"prefixRouteKey\" arg should\n * be \"true\" currently this is only the case when creating the routes-manifest\n * during the build\n */\nexport function getNamedRouteRegex(\n normalizedRoute: string,\n options: GetNamedRouteRegexOptions\n) {\n const result = getNamedParametrizedRoute(\n normalizedRoute,\n options.prefixRouteKeys,\n options.includeSuffix ?? false,\n options.includePrefix ?? false,\n options.backreferenceDuplicateKeys ?? false\n )\n\n let namedRegex = result.namedParameterizedRoute\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?'\n }\n\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: `^${namedRegex}$`,\n routeKeys: result.routeKeys,\n }\n}\n\n/**\n * Generates a named regexp.\n * This is intended to be using for build time only.\n */\nexport function getNamedMiddlewareRegex(\n normalizedRoute: string,\n options: {\n catchAll?: boolean\n }\n) {\n const { parameterizedRoute } = getParametrizedRoute(\n normalizedRoute,\n false,\n false\n )\n const { catchAll = true } = options\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : ''\n return {\n namedRegex: `^/${catchAllRegex}$`,\n }\n }\n\n const { namedParameterizedRoute } = getNamedParametrizedRoute(\n normalizedRoute,\n false,\n false,\n false,\n false\n )\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''\n return {\n namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$`,\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\nimport { getRouteMatcher } from './route-matcher'\nimport { getRouteRegex } from './route-regex'\n\nexport function interpolateAs(\n route: string,\n asPathname: string,\n query: ParsedUrlQuery\n) {\n let interpolatedRoute = ''\n\n const dynamicRegex = getRouteRegex(route)\n const dynamicGroups = dynamicRegex.groups\n const dynamicMatches =\n // Try to match the dynamic route against the asPath\n (asPathname !== route ? getRouteMatcher(dynamicRegex)(asPathname) : '') ||\n // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query\n\n interpolatedRoute = route\n const params = Object.keys(dynamicGroups)\n\n if (\n !params.every((param) => {\n let value = dynamicMatches[param] || ''\n const { repeat, optional } = dynamicGroups[param]\n\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = `[${repeat ? '...' : ''}${param}]`\n if (optional) {\n replaced = `${!value ? '/' : ''}[${replaced}]`\n }\n if (repeat && !Array.isArray(value)) value = [value]\n\n return (\n (optional || param in dynamicMatches) &&\n // Interpolate group into data URL if present\n (interpolatedRoute =\n interpolatedRoute!.replace(\n replaced,\n repeat\n ? (value as string[])\n .map(\n // these values should be fully encoded instead of just\n // path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment) => encodeURIComponent(segment)\n )\n .join('/')\n : encodeURIComponent(value as string)\n ) || '/')\n )\n })\n ) {\n interpolatedRoute = '' // did not satisfy all requirements\n\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `<Link>` component directly.\n }\n return {\n params,\n result: interpolatedRoute,\n }\n}\n","import type { NextRouter, Url } from '../shared/lib/router/router'\n\nimport { searchParamsToUrlQuery } from '../shared/lib/router/utils/querystring'\nimport { formatWithValidation } from '../shared/lib/router/utils/format-url'\nimport { omit } from '../shared/lib/router/utils/omit'\nimport { normalizeRepeatedSlashes } from '../shared/lib/utils'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\nimport { isLocalURL } from '../shared/lib/router/utils/is-local-url'\nimport { isDynamicRoute } from '../shared/lib/router/utils'\nimport { interpolateAs } from '../shared/lib/router/utils/interpolate-as'\nimport { getRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\n\n/**\n * Resolves a given hyperlink with a certain router state (basePath not included).\n * Preserves absolute urls.\n */\nexport function resolveHref(\n router: NextRouter,\n href: Url,\n resolveAs: true\n): [string, string] | [string]\nexport function resolveHref(\n router: NextRouter,\n href: Url,\n resolveAs?: false\n): string\nexport function resolveHref(\n router: NextRouter,\n href: Url,\n resolveAs?: boolean\n): [string, string] | [string] | string {\n // we use a dummy base url for relative urls\n let base: URL\n let urlAsString = typeof href === 'string' ? href : formatWithValidation(href)\n\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n // https://www.rfc-editor.org/rfc/rfc3986.html#section-3.1\n const urlProtoMatch = urlAsString.match(/^[a-z][a-z0-9+.-]*:\\/\\//i)\n const urlAsStringNoProto = urlProtoMatch\n ? urlAsString.slice(urlProtoMatch[0].length)\n : urlAsString\n\n const urlParts = urlAsStringNoProto.split('?', 1)\n\n if ((urlParts[0] || '').match(/(\\/\\/|\\\\)/)) {\n console.error(\n `Invalid href '${urlAsString}' passed to next/router in page: '${router.pathname}'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.`\n )\n const normalizedUrl = normalizeRepeatedSlashes(urlAsStringNoProto)\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : '') + normalizedUrl\n }\n\n // Return because it cannot be routed by the Next.js router\n if (!isLocalURL(urlAsString)) {\n return (resolveAs ? [urlAsString] : urlAsString) as string\n }\n\n try {\n let baseBase = urlAsString.startsWith('#') ? router.asPath : router.pathname\n\n // If the provided href is only a query string, it is safer to use the asPath\n // considering rewrites.\n if (urlAsString.startsWith('?')) {\n baseBase = router.asPath\n\n // However, if is a dynamic route, we need to use the pathname to preserve the\n // query interpolation and rewrites (router.pathname will look like \"/[slug]\").\n if (isDynamicRoute(router.pathname)) {\n baseBase = router.pathname\n\n const routeRegex = getRouteRegex(router.pathname)\n const match = getRouteMatcher(routeRegex)(router.asPath)\n\n // For dynamic routes, if asPath doesn't match the pathname regex, it is a rewritten path.\n // In this case, should use asPath to preserve the current URL.\n if (!match) {\n baseBase = router.asPath\n }\n\n // Note: There is an edge case where the pathname is dynamic, and also a rewrite path to the same segment.\n // E.g. in \"/[slug]\" path, rewrite \"/foo\" -> \"/bar\"\n\n // In this case, it will be treated as a non-rewritten path and possibly interpolate the query string.\n // E.g., \"/any?slug=foo\" will become the content of \"/foo\", not rewritten as \"/bar\"\n\n // This is currently a trade-off of not resolving rewrite paths on every Router/Link call,\n // but using a lighter route regex pattern check.\n }\n }\n\n base = new URL(baseBase, 'http://n')\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL('/', 'http://n')\n }\n\n try {\n const finalUrl = new URL(urlAsString, base)\n finalUrl.pathname = normalizePathTrailingSlash(finalUrl.pathname)\n let interpolatedAs = ''\n\n if (\n isDynamicRoute(finalUrl.pathname) &&\n finalUrl.searchParams &&\n resolveAs\n ) {\n const query = searchParamsToUrlQuery(finalUrl.searchParams)\n\n const { result, params } = interpolateAs(\n finalUrl.pathname,\n finalUrl.pathname,\n query\n )\n\n if (result) {\n interpolatedAs = formatWithValidation({\n pathname: result,\n hash: finalUrl.hash,\n query: omit(query, params),\n })\n }\n }\n\n // if the origin didn't change, it means we received a relative href\n const resolvedHref =\n finalUrl.origin === base.origin\n ? finalUrl.href.slice(finalUrl.origin.length)\n : finalUrl.href\n\n return resolveAs\n ? [resolvedHref, interpolatedAs || resolvedHref]\n : resolvedHref\n } catch (_) {\n return resolveAs ? [urlAsString] : urlAsString\n }\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n","import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n","import type { addLocale as Fn } from '../shared/lib/router/utils/add-locale'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nexport const addLocale: typeof Fn = (path, ...args) => {\n if (process.env.__NEXT_I18N_SUPPORT) {\n return normalizePathTrailingSlash(\n (\n require('../shared/lib/router/utils/add-locale') as typeof import('../shared/lib/router/utils/add-locale')\n ).addLocale(path, ...args)\n )\n }\n return path\n}\n","export const requestIdleCallback =\n (typeof self !== 'undefined' &&\n self.requestIdleCallback &&\n self.requestIdleCallback.bind(window)) ||\n function (cb: IdleRequestCallback): number {\n let start = Date.now()\n return self.setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50 - (Date.now() - start))\n },\n })\n }, 1)\n }\n\nexport const cancelIdleCallback =\n (typeof self !== 'undefined' &&\n self.cancelIdleCallback &&\n self.cancelIdleCallback.bind(window)) ||\n function (id: number) {\n return clearTimeout(id)\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<HTMLElement | null> | 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<Element, ObserveCallback>\n}\n\nconst hasIntersectionObserver = typeof IntersectionObserver === 'function'\n\nconst observers = new Map<Identifier, Observer>()\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<Element, ObserveCallback>()\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<T extends Element>({\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<T | null>(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","export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap<readonly string[], readonly string[]>()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n","import type { normalizeLocalePath as Fn } from '../shared/lib/i18n/normalize-locale-path'\n\nexport const normalizeLocalePath: typeof Fn = (pathname, locales) => {\n if (process.env.__NEXT_I18N_SUPPORT) {\n return (\n require('../shared/lib/i18n/normalize-locale-path') as typeof import('../shared/lib/i18n/normalize-locale-path')\n ).normalizeLocalePath(pathname, locales)\n }\n return { pathname, detectedLocale: undefined }\n}\n","import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n","import type { detectDomainLocale as Fn } from '../shared/lib/i18n/detect-domain-locale'\n\nexport const detectDomainLocale: typeof Fn = (...args) => {\n if (process.env.__NEXT_I18N_SUPPORT) {\n return (\n require('../shared/lib/i18n/detect-domain-locale') as typeof import('../shared/lib/i18n/detect-domain-locale')\n ).detectDomainLocale(...args)\n }\n}\n","import type { DomainLocale } from '../server/config'\nimport type { normalizeLocalePath as NormalizeFn } from './normalize-locale-path'\nimport type { detectDomainLocale as DetectFn } from './detect-domain-locale'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function getDomainLocale(\n path: string,\n locale?: string | false,\n locales?: readonly string[],\n domainLocales?: readonly DomainLocale[]\n) {\n if (process.env.__NEXT_I18N_SUPPORT) {\n const normalizeLocalePath: typeof NormalizeFn = (\n require('./normalize-locale-path') as typeof import('./normalize-locale-path')\n ).normalizeLocalePath\n const detectDomainLocale: typeof DetectFn = (\n require('./detect-domain-locale') as typeof import('./detect-domain-locale')\n ).detectDomainLocale\n\n const target = locale || normalizeLocalePath(path, locales).detectedLocale\n const domain = detectDomainLocale(domainLocales, undefined, target)\n if (domain) {\n const proto = `http${domain.http ? '' : 's'}://`\n const finalLocale = target === domain.defaultLocale ? '' : `/${target}`\n return `${proto}${domain.domain}${normalizePathTrailingSlash(\n `${basePath}${finalLocale}${path}`\n )}`\n }\n return false\n } else {\n return false\n }\n}\n","import { addPathPrefix } from '../shared/lib/router/utils/add-path-prefix'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function addBasePath(path: string, required?: boolean): string {\n return normalizePathTrailingSlash(\n process.env.__NEXT_MANUAL_CLIENT_BASE_PATH && !required\n ? path\n : addPathPrefix(path, basePath)\n )\n}\n","let errorOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const errors = new Set<string>()\n errorOnce = (msg: string) => {\n if (!errors.has(msg)) {\n console.error(msg)\n }\n errors.add(msg)\n }\n}\n\nexport { errorOnce }\n","'use client'\n\nimport type {\n NextRouter,\n PrefetchOptions as RouterPrefetchOptions,\n} from '../shared/lib/router/router'\n\nimport React, { createContext, useContext } from 'react'\nimport type { UrlObject } from 'url'\nimport { resolveHref } from './resolve-href'\nimport { isLocalURL } from '../shared/lib/router/utils/is-local-url'\nimport { formatUrl } from '../shared/lib/router/utils/format-url'\nimport { isAbsoluteUrl } from '../shared/lib/utils'\nimport { addLocale } from './add-locale'\nimport { RouterContext } from '../shared/lib/router-context.shared-runtime'\nimport type { AppRouterInstance } from '../shared/lib/app-router-context.shared-runtime'\nimport { useIntersection } from './use-intersection'\nimport { getDomainLocale } from './get-domain-locale'\nimport { addBasePath } from './add-base-path'\nimport { useMergedRef } from './use-merged-ref'\nimport { errorOnce } from '../shared/lib/utils/error-once'\n\ntype Url = string | UrlObject\ntype RequiredKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? never : K\n}[keyof T]\ntype OptionalKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? K : never\n}[keyof T]\n\ntype OnNavigateEventHandler = (event: { preventDefault: () => void }) => void\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 `<Link />` 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 * - \"auto\", null, undefined (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 | 'auto' | null | 'unstable_forceStale'\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 * @deprecated This will be removed in v16\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<HTMLAnchorElement>\n /**\n * Optional event handler for when Link is touched.\n */\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n /**\n * Optional event handler for when Link is clicked.\n */\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n /**\n * Optional event handler for when the `<Link>` is navigated.\n */\n onNavigate?: OnNavigateEventHandler\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 type generation runs.\n// WARNING: This should be an interface to prevent TypeScript from inlining it\n// in declarations of libraries dependending on Next.js.\n// Not trivial to reproduce so only convert to an interface when needed.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface LinkProps<RouteInferType = any> extends InternalLinkProps {}\ntype LinkPropsRequired = RequiredKeys<LinkProps>\ntype LinkPropsOptional = OptionalKeys<InternalLinkProps>\n\nconst prefetched = new Set<string>()\n\ntype PrefetchOptions = RouterPrefetchOptions & {\n /**\n * bypassPrefetchedCheck will bypass the check to see if the `href` has\n * already been fetched.\n */\n bypassPrefetchedCheck?: boolean\n}\n\nfunction prefetch(\n router: NextRouter,\n href: string,\n as: string,\n options: PrefetchOptions\n): void {\n if (typeof window === 'undefined') {\n return\n }\n\n if (!isLocalURL(href)) {\n return\n }\n\n // We should only dedupe requests when experimental.optimisticClientCache is\n // disabled.\n if (!options.bypassPrefetchedCheck) {\n const locale =\n // Let the link's locale prop override the default router locale.\n typeof options.locale !== 'undefined'\n ? options.locale\n : // Otherwise fallback to the router's locale.\n 'locale' in router\n ? router.locale\n : undefined\n\n const prefetchedKey = href + '%' + as + '%' + locale\n\n // If we've already fetched the key, then don't prefetch it again!\n if (prefetched.has(prefetchedKey)) {\n return\n }\n\n // Mark this URL as prefetched.\n prefetched.add(prefetchedKey)\n }\n\n // Prefetch the JSON 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 router.prefetch(href, as, options).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 locale?: string | false,\n onNavigate?: OnNavigateEventHandler\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 (\n (isAnchorNodeName && isModifiedEvent(e)) ||\n e.currentTarget.hasAttribute('download')\n ) {\n // ignore click for browser’s default behavior\n return\n }\n\n if (!isLocalURL(href)) {\n if (replace) {\n // browser default behavior does not replace the history state\n // so we need to do it manually\n e.preventDefault()\n location.replace(href)\n }\n\n // ignore click for browser’s default behavior\n return\n }\n\n e.preventDefault()\n\n const navigate = () => {\n if (onNavigate) {\n let isDefaultPrevented = false\n\n onNavigate({\n preventDefault: () => {\n isDefaultPrevented = true\n },\n })\n\n if (isDefaultPrevented) {\n return\n }\n }\n\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 locale,\n scroll: routerScroll,\n })\n } else {\n router[replace ? 'replace' : 'push'](as || href, {\n scroll: routerScroll,\n })\n }\n }\n\n navigate()\n}\n\ntype LinkPropsReal = React.PropsWithChildren<\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 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 `<a>` 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: `<Link>`](https://nextjs.org/docs/app/api-reference/components/link)\n */\nconst Link = React.forwardRef<HTMLAnchorElement, LinkPropsReal>(\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 locale,\n onClick,\n onNavigate,\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 = <a>{children}</a>\n }\n\n const router = React.useContext(RouterContext)\n\n const prefetchEnabled = prefetchProp !== false\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 \\`<Link>\\`, but got \\`${args.actual}\\` instead.` +\n (typeof window !== 'undefined'\n ? // TODO: Remove this addendum if Owner Stacks are available\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<LinkPropsRequired, true> = {\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<LinkPropsOptional, true> = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n locale: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true,\n onNavigate: 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 (key === 'locale') {\n if (props[key] && valType !== 'string') {\n throw createPropError({\n key,\n expected: '`string`',\n actual: valType,\n })\n }\n } else if (\n key === 'onClick' ||\n key === 'onMouseEnter' ||\n key === 'onTouchStart' ||\n key === 'onNavigate'\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 === 'legacyBehavior'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else if (key === 'prefetch') {\n if (\n props[key] != null &&\n valType !== 'boolean' &&\n props[key] !== 'auto'\n ) {\n throw createPropError({\n key,\n expected: '`boolean | \"auto\"`',\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 const { href, as } = React.useMemo(() => {\n if (!router) {\n const resolvedHref = formatStringOrUrl(hrefProp)\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref,\n }\n }\n\n const [resolvedHref, resolvedAs] = resolveHref(router, hrefProp, true)\n\n return {\n href: resolvedHref,\n as: asProp ? resolveHref(router, asProp) : resolvedAs || resolvedHref,\n }\n }, [router, hrefProp, asProp])\n\n const previousHref = React.useRef<string>(href)\n const previousAs = React.useRef<string>(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 <Link> 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 <Link> 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 <Link> 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 <Link> 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 <Link> with <a> child. Please remove <a> or use <Link legacyBehavior>.\\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 | null) => {\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, as, { locale })\n }, [as, href, isVisible, locale, prefetchEnabled, router?.locale, router])\n\n const childProps: {\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n onMouseEnter: React.MouseEventHandler<HTMLAnchorElement>\n onClick: React.MouseEventHandler<HTMLAnchorElement>\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(\n e,\n router,\n href,\n as,\n replace,\n shallow,\n scroll,\n locale,\n onNavigate\n )\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 prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true,\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 prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true,\n })\n },\n }\n\n // If child is an <a> 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 domain and locale.\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 const curLocale = typeof locale !== 'undefined' ? locale : router?.locale\n\n // we only render domain locales if we are currently on a domain locale\n // so that locale links are still visitable in development/preview envs\n const localeDomain =\n router?.isLocaleDomain &&\n getDomainLocale(as, curLocale, router?.locales, router?.domainLocales)\n\n childProps.href =\n localeDomain ||\n addBasePath(addLocale(as, curLocale, router?.defaultLocale))\n }\n\n if (legacyBehavior) {\n if (process.env.NODE_ENV === 'development') {\n errorOnce(\n '`legacyBehavior` is deprecated and will be removed in a future ' +\n 'release. A codemod is available to upgrade your components:\\n\\n' +\n 'npx @next/codemod@latest new-link .\\n\\n' +\n 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components'\n )\n }\n return React.cloneElement(child, childProps)\n }\n\n return (\n <a {...restProps} {...childProps}>\n {children}\n </a>\n )\n }\n)\n\nconst LinkStatusContext = createContext<{\n pending: boolean\n}>({\n // We do not support link status in the Pages Router, so we always return false\n pending: false,\n})\n\nexport const useLinkStatus = () => {\n // This behaviour is like React's useFormStatus. When the component is not under\n // a <form> tag, it will get the default value, instead of throwing an error.\n return useContext(LinkStatusContext)\n}\n\nexport default Link\n","module.exports = require('./dist/client/link')\n","export * from './components'\nexport * from './contexts'\nexport * from './hooks'\nexport * from './i18n'\nexport * from './utils'\n","import type { SVGProps } from 'react'\nimport { clsx } from 'clsx'\n\nexport type HelpwaveProps = SVGProps<SVGSVGElement> & {\n color?: string,\n animate?: 'none' | 'loading' | 'pulse' | 'bounce',\n size?: 'sm' | 'md' | 'lg',\n}\n\n/**\n * The helpwave loading spinner based on the svg logo.\n */\nexport const HelpwaveLogo = ({\n color = 'currentColor',\n size,\n animate = 'none',\n ...props\n}: HelpwaveProps) => {\n const isLoadingAnimation = animate === 'loading'\n let svgAnimationKey = ''\n\n if (animate === 'pulse') {\n svgAnimationKey = 'animate-pulse'\n } else if (animate === 'bounce') {\n svgAnimationKey = 'animate-bounce'\n }\n\n return (\n <svg\n {...props}\n viewBox=\"0 0 1024 1024\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeWidth={65}\n className={clsx({\n 'max-w-16 max-h-16': size === 'lg',\n 'max-w-12 max-h-12': size === 'md',\n 'max-w-8 max-h-8': size === 'sm',\n }, props.className)}\n >\n <g className={clsx(svgAnimationKey)}>\n <path className={clsx({ 'animate-wave-big-left-up': isLoadingAnimation })}\n d=\"M146 644.214C146 498.088 253.381 379.629 385.843 379.629\" stroke={color} strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-big-right-down': isLoadingAnimation })}\n d=\"M625.686 645.272C493.224 645.272 385.843 526.813 385.843 380.687\" stroke={color}\n strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-left-up': isLoadingAnimation })}\n d=\"M533.585 613.522C533.585 508.895 610.47 424.079 705.312 424.079\" stroke={color}\n strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-right-down': isLoadingAnimation })}\n d=\"M878 615.639C782.628 615.639 705.313 530.822 705.313 426.196\" stroke={color}\n strokeDasharray=\"1000\"/>\n </g>\n </svg>\n )\n}\n","import { HelpwaveLogo } from './HelpwaveLogo'\nimport type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\ntype Size = 'sm' | 'md' | 'lg'\n\nexport type HelpwaveBadgeProps = HTMLAttributes<HTMLSpanElement> & {\n size?: Size,\n}\n\n/**\n * A Badge with the helpwave logo and the helpwave name\n */\nexport const HelpwaveBadge = ({\n size = 'sm',\n ...props\n}: HelpwaveBadgeProps) => {\n return (\n <span\n {...props}\n className={clsx(\n 'flex flex-row items-center font-bold font-space rounded-md',\n {\n 'px-2 py-1': size === 'sm' || size === 'md',\n 'px-4 py-1': size === 'lg',\n 'gap-x-1': size === 'sm',\n 'gap-x-2 text-lg': size === 'md',\n 'gap-x-2 text-xl': size === 'lg'\n }, props.className\n )}\n >\n <HelpwaveLogo size={size}/>\n helpwave\n </span>\n )\n}\n","import type { HTMLAttributes } from 'react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { UserIcon } from 'lucide-react'\nimport { Visibility } from '../layout/Visibility'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ImageConfig = {\n avatarUrl: string,\n alt: string,\n}\n\n\nexport type AvatarProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n image?: ImageConfig,\n name?: string,\n size?: AvatarSize,\n}\n\n/**\n * A component for showing a profile picture\n */\nexport const Avatar = ({\n image: initialImage,\n name,\n size = 'md',\n ...props\n}: AvatarProps) => {\n const [hasError, setHasError] = useState(false)\n const [hasLoaded, setHasLoaded] = useState(false)\n const [image, setImage] = useState(initialImage)\n\n const displayName = useMemo(() => {\n const maxLetters = size === 'sm' ? 1 : 2\n return (name ?? '')\n .split(' ')\n .filter((_, index) => index < maxLetters)\n .map(value => value[0])\n .join('')\n .toUpperCase()\n }, [name, size])\n\n const isShowingImage = !!image && (!hasError || !hasLoaded)\n const dataName = props['data-name'] ?? 'avatar'\n\n useEffect(() => {\n if(initialImage?.avatarUrl !== image?.avatarUrl) {\n setHasError(false)\n setHasLoaded(false)\n }\n setImage(initialImage)\n }, [image?.avatarUrl, initialImage])\n\n return (\n <div\n {...props}\n data-name={dataName}\n data-size={props['data-size'] ?? size ?? undefined}\n >\n <Visibility isVisible={isShowingImage}>\n <img\n key={image?.avatarUrl}\n src={image?.avatarUrl}\n alt={image?.alt}\n\n onLoad={() => setHasLoaded(true)}\n onError={() => setHasError(true)}\n\n data-name={`${dataName}-image`}\n data-error={hasError ? '' : undefined}\n data-loaded={hasLoaded ? '' : undefined}\n />\n </Visibility>\n {name ? displayName : (<UserIcon />)}\n </div>\n )\n}\n\nexport type AvatarGroupProps = HTMLAttributes<HTMLDivElement> & {\n avatars: Omit<AvatarProps, 'size'>[],\n showTotalNumber?: boolean,\n size?: AvatarSize,\n}\n\n/**\n * A component for showing a group of Avatar's\n */\nexport const AvatarGroup = ({\n avatars,\n showTotalNumber = true,\n size = 'md',\n ...props\n}: AvatarGroupProps) => {\n const maxShownProfiles = 5\n const displayedProfiles = avatars.length < maxShownProfiles ? avatars : avatars.slice(0, maxShownProfiles)\n const notDisplayedProfiles = avatars.length - maxShownProfiles\n const group = (\n <div data-name=\"avatar-group-container\">\n {displayedProfiles.map((avatar, index) => (\n <Avatar\n {...avatar}\n key={index}\n size={size}\n data-group=\"\"\n />\n ))}\n </div>\n )\n\n\n return (\n <div\n {...props}\n data-name=\"avatar-group\"\n data-size={size ?? undefined}\n >\n {group}\n {showTotalNumber && notDisplayedProfiles > 0 && (\n <span\n data-name=\"avatar-group-more\"\n data-size={size}\n >\n {`+ ${notDisplayedProfiles}`}\n </span>\n )}\n </div>\n )\n}","import type { PropsWithChildren } from 'react'\n\nexport type VisibilityProps = PropsWithChildren & {\n isVisible?: boolean,\n}\n\nexport function Visibility({ children, isVisible }: VisibilityProps) {\n return (<>{isVisible && children}</>)\n}","import type { ButtonHTMLAttributes } from 'react'\nimport { forwardRef } from 'react'\n\n/**\n * The different sizes for a button\n */\ntype ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ButtonColoringStyle = 'outline' | 'solid' | 'text' | 'tonal' | null\n\ntype ButtonLayout = 'icon' | 'default' | null\n\nconst buttonColorsList = ['primary', 'secondary', 'positive', 'warning', 'negative', 'neutral'] as const\n\n/**\n * The allowed colors for the Button\n */\nexport type ButtonColor = typeof buttonColorsList[number] | null\n\nexport const ButtonUtil = {\n colors: buttonColorsList,\n}\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n /**\n * @default 'medium'\n */\n size?: ButtonSize,\n layout?: ButtonLayout,\n color?: ButtonColor,\n /**\n * @default 'solid'\n */\n coloringStyle?: ButtonColoringStyle,\n allowClickEventPropagation?: boolean,\n}\n\n/**\n * A button with a solid background and different sizes\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function SolidButton({\n children,\n layout = 'default',\n size = 'md',\n color = 'primary',\n coloringStyle = 'solid',\n disabled,\n allowClickEventPropagation = false,\n ...props\n}, ref) {\n return (\n <button\n {...props}\n ref={ref}\n disabled={disabled}\n\n onClick={event => {\n if(!allowClickEventPropagation) {\n event.stopPropagation()\n }\n props.onClick?.(event)\n }}\n\n type={props['type'] ?? 'button'}\n\n data-name={props['data-name'] ?? 'button'}\n data-disabled={disabled ? '': undefined}\n data-size={size ?? undefined}\n data-layout={layout ?? undefined}\n data-color={color ?? undefined}\n data-coloringstyle={coloringStyle ?? undefined}\n >\n {children}\n </button>\n )\n})\n","import type { HTMLAttributes } from 'react'\nimport { ButtonUtil } from '@/src/components/user-interaction/Button'\n\ntype ChipSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ChipColoringStyle = 'solid' | 'tonal' | null\n\nconst chipColors = ButtonUtil.colors\nexport type ChipColor = typeof chipColors[number]\n\nexport const ChipUtil = {\n colors: chipColors,\n}\n\nexport type ChipProps = HTMLAttributes<HTMLDivElement> & {\n color?: ChipColor,\n coloringStyle?: ChipColoringStyle,\n size?: ChipSize,\n}\n\n/**\n * A component for displaying a single chip\n */\nexport const Chip = ({\n children,\n color = 'neutral',\n coloringStyle = 'solid',\n size = 'md',\n ...props\n}: ChipProps) => {\n return (\n <div\n {...props}\n\n data-name={props['data-name'] ?? 'chip'}\n data-color={color ?? undefined}\n data-coloringstyle={coloringStyle ?? undefined}\n data-size={size ?? undefined}\n >\n {children}\n </div>\n )\n}\n\nexport type ChipListProps = HTMLAttributes<HTMLUListElement> & {\n list: ChipProps[],\n}\n\n/**\n * A component for displaying a list of chips\n */\nexport const ChipList = ({\n list,\n ...props\n}: ChipListProps) => {\n return (\n <ul {...props} data-name={props['data-name'] ?? 'chip-list'}>\n {list.map((value, index) => (\n <li key={index}>\n <Chip\n key={index}\n {...value}\n >\n {value.children}\n </Chip>\n </li>\n ))}\n </ul>\n )\n}\n","import type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type CircleProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'color'> & {\n radius: number,\n className?: string,\n}\n\nexport const Circle = ({\n radius = 20,\n className = 'bg-primary',\n style,\n ...restProps\n}: CircleProps) => {\n const size = radius * 2\n return (\n <div\n className={clsx(`rounded-full`, className)}\n style={{\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }}\n {...restProps}\n />\n )\n}\n","import { ChevronDown } from 'lucide-react'\nimport type { HTMLAttributes } from 'react'\n\nexport type ExpansionIconProps = HTMLAttributes<HTMLDivElement> & {\n isExpanded: boolean,\n disabled?: boolean,\n}\n\nexport const ExpansionIcon = ({\n children,\n isExpanded,\n disabled = false,\n ...props\n}: ExpansionIconProps) => {\n\n return (\n <div\n {...props}\n data-name=\"expansion-icon\"\n data-expanded={isExpanded ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n >\n {children ? (\n children\n ) : (\n <ChevronDown\n aria-hidden={true}\n className=\"size-4\"\n />\n )}\n </div>\n )\n}","export type ProgressIndicatorProps = {\n /*\n The amount of progress that has been made\n Value base 0 to 1\n */\n progress: number,\n strokeWidth?: number,\n size?: keyof typeof sizeMapping,\n direction?: 'clockwise' | 'counterclockwise',\n /*\n Rotation of the starting point of the indicator\n default start at 3 o'clock\n Given in degree\n */\n rotation?: number,\n}\n\nconst sizeMapping = { small: 16, medium: 24, big: 48 }\n\n/**\n * A progress indicator\n *\n * Start rotation is 3 o'clock and fills counterclockwise\n *\n * Progress is given from 0 to 1\n */\nexport const ProgressIndicator = ({\n progress,\n strokeWidth = 5,\n size = 'medium',\n direction = 'counterclockwise',\n rotation = 0\n}: ProgressIndicatorProps) => {\n const currentSize = sizeMapping[size]\n const center = currentSize / 2\n const radius = center - strokeWidth / 2\n const arcLength = 2 * Math.PI * radius\n const arcOffset = arcLength * progress\n if (direction === 'clockwise') {\n rotation += 360 * progress\n }\n return (\n <svg\n style={{\n height: `${currentSize}px`,\n width: `${currentSize}px`,\n transform: `rotate(${rotation}deg)`\n }}\n >\n <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n className=\"stroke-progress-indicator-fill\"\n />\n <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n strokeDasharray={arcLength} strokeDashoffset={arcOffset} className=\"stroke-progress-indicator-background\"\n />\n </svg>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { Circle } from './Circle'\nimport clsx from 'clsx'\n\nexport type RingProps = {\n innerSize: number, // the size of the entire circle including the circleWidth\n width: number,\n className?: string,\n};\n\nexport const Ring = ({\n innerSize = 20,\n width = 7,\n className = 'outline-primary',\n}: RingProps) => {\n return (\n <div\n className={clsx(`bg-transparent rounded-full outline`, className)}\n style={{\n width: `${innerSize}px`,\n height: `${innerSize}px`,\n outlineWidth: `${width}px`,\n }}\n />\n )\n}\n\nexport type AnimatedRingProps = RingProps & {\n fillAnimationDuration?: number, // in seconds, 0 means no animation\n repeating?: boolean,\n onAnimationFinished?: () => void,\n style?: CSSProperties,\n};\n\nexport const AnimatedRing = ({\n innerSize,\n width,\n className,\n fillAnimationDuration = 3,\n repeating = false,\n onAnimationFinished,\n style,\n}: AnimatedRingProps) => {\n const [currentWidth, setCurrentWidth] = useState(0)\n const milliseconds = 1000 * fillAnimationDuration\n\n const animate = useCallback((timestamp: number, startTime: number) => {\n const progress = Math.min((timestamp - startTime) / milliseconds, 1)\n const newWidth = Math.min(width * progress, width)\n\n setCurrentWidth(newWidth)\n\n if (progress < 1) {\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, startTime))\n } else {\n onAnimationFinished?.()\n if (repeating) {\n setCurrentWidth(0)\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, newTimestamp))\n }\n }\n }, [milliseconds, onAnimationFinished, repeating, width])\n\n useEffect(() => {\n if (currentWidth < width) {\n requestAnimationFrame((timestamp) => animate(timestamp, timestamp))\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div\n className=\"flex-row-2 items-center justify-center\"\n style={{\n width: `${innerSize + 2 * width}px`,\n height: `${innerSize + 2 * width}px`,\n ...style,\n }}\n >\n <Ring\n innerSize={innerSize}\n width={currentWidth}\n className={className}\n />\n </div>\n )\n}\n\nexport type RingWaveProps = Omit<AnimatedRingProps, 'innerSize'> & {\n startInnerSize: number,\n endInnerSize: number,\n style?: CSSProperties,\n};\n\nexport const RingWave = ({\n startInnerSize = 20,\n endInnerSize = 30,\n width,\n className,\n fillAnimationDuration = 3,\n repeating = false,\n onAnimationFinished,\n style\n}: RingWaveProps) => {\n const [currentInnerSize, setCurrentInnerSize] = useState(startInnerSize)\n const distance = endInnerSize - startInnerSize\n const milliseconds = 1000 * fillAnimationDuration\n\n const animate = useCallback((timestamp: number, startTime: number) => {\n const progress = Math.min((timestamp - startTime) / milliseconds, 1)\n const newInnerSize = Math.min(\n startInnerSize + distance * progress,\n endInnerSize\n )\n\n setCurrentInnerSize(newInnerSize)\n\n if (progress < 1) {\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, startTime))\n } else {\n onAnimationFinished?.()\n if (repeating) {\n setCurrentInnerSize(startInnerSize)\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, newTimestamp))\n }\n }\n }, [distance, endInnerSize, milliseconds, onAnimationFinished, repeating, startInnerSize])\n\n useEffect(() => {\n if (currentInnerSize < endInnerSize) {\n requestAnimationFrame((timestamp) => animate(timestamp, timestamp))\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div\n className=\"flex-row-2 items-center justify-center\"\n style={{\n width: `${endInnerSize + 2 * width}px`,\n height: `${endInnerSize + 2 * width}px`,\n ...style\n }}\n >\n <Ring\n innerSize={currentInnerSize}\n width={width}\n className={className}\n />\n </div>\n )\n}\n\nexport type RadialRingsProps = {\n circle1ClassName?: string,\n circle2ClassName?: string,\n circle3ClassName?: string,\n waveWidth?: number,\n waveBaseColor?: string,\n sizeCircle1?: number,\n sizeCircle2?: number,\n sizeCircle3?: number,\n};\n\n// TODO use fixed colors here to avoid artifacts\nexport const RadialRings = ({\n circle1ClassName = 'bg-primary/90 outline-primary/90',\n circle2ClassName = 'bg-primary/60 outline-primary/60',\n circle3ClassName = 'bg-primary/40 outline-primary/40',\n waveWidth = 10,\n waveBaseColor = 'outline-white/20',\n sizeCircle1 = 100,\n sizeCircle2 = 200,\n sizeCircle3 = 300\n}: RadialRingsProps) => {\n const [currentRing, setCurrentRing] = useState(0)\n const size = sizeCircle3\n\n return (\n <div\n className=\"relative\"\n style={{\n width: `${sizeCircle3}px`,\n height: `${sizeCircle3}px`,\n }}\n >\n <Circle\n radius={sizeCircle1 / 2}\n className={clsx(circle1ClassName, `absolute z-[10] -translate-y-1/2 -translate-x-1/2`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`\n }}\n />\n {currentRing === 0 ? (\n <AnimatedRing\n innerSize={sizeCircle1}\n width={(sizeCircle2 - sizeCircle1) / 2}\n onAnimationFinished={() =>\n currentRing === 0 ? setCurrentRing(1) : null\n }\n repeating={true}\n className={clsx(circle2ClassName,\n { 'opacity-5': currentRing !== 0 })}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 9\n }}\n />\n ) : null}\n {currentRing === 2 ? (\n <RingWave\n startInnerSize={sizeCircle1 - waveWidth}\n endInnerSize={sizeCircle2}\n width={waveWidth}\n repeating={true}\n className={clsx(waveBaseColor, `opacity-5`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 9,\n }}\n />\n ) : null}\n <Circle\n radius={sizeCircle2 / 2}\n className={clsx(circle2ClassName,\n { 'opacity-20': currentRing < 1 },\n `absolute z-[8] -translate-y-1/2 -translate-x-1/2`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`\n }}\n />\n {currentRing === 1 ? (\n <AnimatedRing\n innerSize={sizeCircle2 - 1} // potentially harmful\n width={(sizeCircle3 - sizeCircle2) / 2}\n onAnimationFinished={() =>\n currentRing === 1 ? setCurrentRing(2) : null\n }\n repeating={true}\n className={clsx(circle3ClassName)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 7,\n }}\n />\n ) : null}\n {currentRing === 2 ? (\n <RingWave\n startInnerSize={sizeCircle2}\n endInnerSize={sizeCircle3 - waveWidth}\n width={waveWidth}\n repeating={true}\n className={clsx(waveBaseColor, `opacity-5`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 7,\n }}\n />\n ) : null}\n <Circle\n radius={sizeCircle3 / 2}\n className={clsx(circle3ClassName,\n { 'opacity-20': currentRing < 2 },\n `absolute z-[6] -translate-y-1/2 -translate-x-1/2`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`\n }}\n />\n </div>\n )\n}\n","import Image from 'next/image'\n\nexport type TagProps = {\n size?: number,\n className?: string,\n}\n\n/**\n * Tag icon from flaticon\n *\n * https://www.flaticon.com/free-icon/price-tag_721550?term=label&page=1&position=8&origin=tag&related_id=721550\n *\n * When using it make attribution\n */\nexport const TagIcon = ({\n className,\n size = 16,\n}: TagProps) => {\n return (\n <Image\n style={{ width: `${size}px`, height: `${size}px`, minWidth: `${size}px`, minHeight: `${size}px` }}\n width={size}\n height={size}\n alt=\"\"\n src=\"https://cdn.helpwave.de/icons/label.png\"\n className={className}\n />\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { useId, useMemo, forwardRef } from 'react'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type FormFieldAriaAttributes = Pick<HTMLAttributes<HTMLElement>, 'aria-labelledby' | 'aria-describedby' | 'aria-disabled' | 'aria-readonly' | 'aria-invalid' | 'aria-errormessage' | 'aria-required'>\n\nexport type FormFieldInteractionStates = {\n invalid: boolean,\n disabled: boolean,\n readOnly: boolean,\n required: boolean,\n}\n\nexport type FormFieldLayoutIds = {\n input: string,\n error: string,\n label: string,\n description: string,\n}\n\nexport type FormFieldLayoutBag = {\n interactionStates: FormFieldInteractionStates,\n ariaAttributes: FormFieldAriaAttributes,\n id: string,\n}\n\nexport type FormFieldLayoutProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & Omit<Partial<FormFieldInteractionStates>, 'invalid'> & {\n children: (bag: FormFieldLayoutBag) => ReactNode,\n ids?: Partial<FormFieldLayoutIds>,\n label?: ReactNode,\n labelProps?: Omit<HTMLAttributes<HTMLLabelElement>, 'children' | 'id'>,\n invalidDescription?: ReactNode,\n invalidDescriptionProps?: Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'id'>,\n description?: ReactNode,\n descriptionProps?: Omit<HTMLAttributes<HTMLParagraphElement>, 'children' | 'id'>,\n}\n\nexport const FormFieldLayout = forwardRef<HTMLDivElement, FormFieldLayoutProps>(function FormFieldLayout({\n children,\n ids: idOverwrites = {},\n required = false,\n disabled = false,\n readOnly = false,\n label,\n labelProps,\n invalidDescription,\n invalidDescriptionProps,\n description,\n descriptionProps,\n ...props\n}, ref) {\n const generatedId = useId()\n\n const ids = useMemo(() => ({\n input: idOverwrites.input ?? `form-field-input-${generatedId}`,\n error: idOverwrites.error ?? `form-field-error-${generatedId}`,\n label: idOverwrites.label ?? `form-field-label-${generatedId}`,\n description: idOverwrites.description ?? `form-field-description-${generatedId}`\n }), [generatedId, idOverwrites])\n\n const describedBy: string = [\n description ? ids.description : undefined,\n invalidDescription ? ids.error : undefined,\n ].filter(Boolean).join(' ')\n\n const invalid = !!invalidDescription\n\n const inputAriaAttributes: FormFieldAriaAttributes = useMemo(() => ({\n 'aria-required': required,\n 'aria-describedby': describedBy,\n 'aria-labelledby': label ? ids.label : undefined,\n 'aria-invalid': invalid,\n 'aria-errormessage': invalid ? ids.error : undefined,\n }), [describedBy, ids.error, ids.label, invalid, label, required])\n\n const state: FormFieldInteractionStates = useMemo(() => ({\n disabled,\n invalid,\n readOnly,\n required,\n }), [disabled, invalid, readOnly, required])\n\n const bag: FormFieldLayoutBag = {\n interactionStates: state,\n ariaAttributes: inputAriaAttributes,\n id: ids.input,\n }\n\n return (\n <div\n {...props}\n ref={ref}\n\n data-name={PropsUtil.dataAttributes.name('form-field-container', props)}\n >\n {label && (\n <label\n {...labelProps}\n id={ids.label}\n htmlFor={ids.input}\n data-name=\"form-field-label\"\n >\n {label}\n {required && <div role=\"none\" className=\"bg-primary w-2 h-2 rounded-full\" />}\n </label>\n )}\n {description && (\n <p\n {...descriptionProps}\n id={ids.description}\n\n data-name=\"form-field-description\"\n >\n {description}\n </p>\n )}\n {children(bag)}\n {invalid && (\n <div\n {...invalidDescriptionProps}\n id={ids.description}\n\n data-name=\"form-field-error\"\n\n role=\"alert\"\n aria-hidden={!invalid}\n aria-live=\"polite\"\n >\n {invalidDescription}\n </div>\n )}\n </div>\n )\n})\n","export const equalSizeGroups = <T>(array: T[], groupSize: number): T[][] => {\n if (groupSize <= 0) {\n console.warn(`group size should be greater than 0: groupSize = ${groupSize}`)\n return [[...array]]\n }\n\n const groups = []\n for (let i = 0; i < array.length; i += groupSize) {\n groups.push(array.slice(i, Math.min(i + groupSize, array.length)))\n }\n return groups\n}\n\nexport type RangeOptions = {\n /** Whether the range can be defined empty via end < start without a warning */\n allowEmptyRange: boolean,\n stepSize: number,\n exclusiveStart: boolean,\n exclusiveEnd: boolean,\n}\n\nconst defaultRangeOptions: RangeOptions = {\n allowEmptyRange: false,\n stepSize: 1,\n exclusiveStart: false,\n exclusiveEnd: true,\n}\n\n/**\n * @param endOrRange The end value or a range [start, end], end is exclusive\n * @param options the options for defining the range\n */\nexport const range = (endOrRange: number | [number, number], options?: Partial<RangeOptions>): number[] => {\n const { allowEmptyRange, stepSize, exclusiveStart, exclusiveEnd } = { ...defaultRangeOptions, ...options }\n let start = 0\n let end: number\n if (typeof endOrRange === 'number') {\n end = endOrRange\n } else {\n start = endOrRange[0]\n end = endOrRange[1]\n }\n if (!exclusiveEnd) {\n end -= 1\n }\n if (exclusiveStart) {\n start += 1\n }\n\n if (end - 1 < start) {\n if (!allowEmptyRange) {\n console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set options.allowEmptyRange to true`)\n }\n return []\n }\n return Array.from({ length: end - start }, (_, index) => index * stepSize + start)\n}\n\n/** Finds the closest match\n * @param list The list of all possible matches\n * @param firstCloser Return whether item1 is closer than item2\n */\nexport const closestMatch = <T>(list: T[], firstCloser: (item1: T, item2: T) => boolean) => {\n return list.reduce((item1, item2) => {\n return firstCloser(item1, item2) ? item1 : item2\n })\n}\n\n/**\n * returns the item in middle of a list and its neighbours before and after\n * e.g. [1,2,3,4,5,6] for item = 1 would return [5,6,1,2,3]\n */\nexport const getNeighbours = <T>(list: T[], item: T, neighbourDistance: number = 2) => {\n const index = list.indexOf(item)\n const totalItems = neighbourDistance * 2 + 1\n if (list.length < totalItems) {\n console.warn('List is to short')\n return list\n }\n\n if (index === -1) {\n console.error('item not found in list')\n return list.splice(0, totalItems)\n }\n\n let start = index - neighbourDistance\n if (start < 0) {\n start += list.length\n }\n const end = (index + neighbourDistance + 1) % list.length\n\n const result: T[] = []\n let ignoreOnce = list.length === totalItems\n for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {\n result.push(list[i]!)\n if (end === i && ignoreOnce) {\n ignoreOnce = false\n }\n }\n return result\n}\n\nexport const createLoopingListWithIndex = <T>(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n if (length < 0) {\n console.warn(`createLoopingList: length must be >= 0, given ${length}`)\n } else if (length === 0) {\n length = list.length\n }\n\n const returnList: [number, T][] = []\n\n if (forwards) {\n for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {\n returnList.push([i, list[i]!])\n }\n } else {\n for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {\n returnList.push([i, list[i]!])\n }\n }\n\n return returnList\n}\n\nexport const createLoopingList = <T>(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item)\n}\n\n/**\n * @param list The list to be changed\n * @param move The shifting applied to the array (can be negative)\n */\nconst moveItems = <T>(list: T[], move: number = 0) => {\n const result = []\n let start = move\n if (start < 0) {\n start = list.length - move\n }\n start = start % list.length\n for (let i = 0; i < list.length; i++) {\n result[i] = list[(i + start) % list.length]\n }\n return result\n}\n\nfunction resolveSingleOrArray<T>(value: T | T[]): T[] {\n if (Array.isArray(value)) {\n return value\n } else if (value) {\n return [value]\n }\n return []\n}\n\nexport const ArrayUtil = {\n unique: <T>(list: T[]): T[] => {\n const seen = new Set<T>()\n return list.filter((item) => {\n if (seen.has(item)) {\n return false\n }\n seen.add(item)\n return true\n })\n },\n difference: <T>(list: T[], removeList: T[]): T[] => {\n const remove = new Set<T>(removeList)\n return list.filter((item) => !remove.has(item))\n },\n moveItems,\n resolveSingleOrArray\n}\n","import type React from 'react'\nimport type { SingleOrArray } from './typing'\nimport { ArrayUtil } from './array'\nimport type { FormFieldInteractionStates } from '../components/form/FieldLayout'\nimport type { HTMLAttributes } from 'react'\n\n///\n/// Data Attributes\n///\n\nfunction bool(isActive: boolean): string | undefined {\n return isActive ? '' : undefined\n}\n\nfunction name(name: string, props: Record<string, unknown> = {}): string {\n return props['data-name'] ? String(props['data-name']) : name\n}\n\ntype InteractionStateDataAttributes = {\n 'data-disabled': string | undefined,\n 'data-invalid': string | undefined,\n 'data-readonly': string | undefined,\n 'data-required': string | undefined,\n}\nfunction interactionStatesData(interactionStates: Partial<FormFieldInteractionStates>): Partial<InteractionStateDataAttributes> {\n return {\n 'data-disabled': bool(!!interactionStates.disabled),\n 'data-invalid': bool(!!interactionStates.invalid),\n 'data-readonly': bool(!!interactionStates.readOnly),\n 'data-required': bool(!!interactionStates.required),\n }\n}\n\nconst dataAttributes = {\n bool,\n name,\n interactionStates: interactionStatesData,\n}\n\n///\n/// DOM Event handling\n///\n\ntype MouseEventExtenderProps<T> = {\n fromProps?: React.MouseEventHandler<T>,\n extensions: SingleOrArray<React.MouseEventHandler<T>>,\n}\n\nfunction mouseEventExtender<T>({\n fromProps,\n extensions\n}: MouseEventExtenderProps<T>): React.MouseEventHandler<T> {\n return (event) => {\n fromProps?.(event)\n ArrayUtil.resolveSingleOrArray(extensions)\n .forEach(element => element(event))\n }\n}\n\ntype KeyoardEventExtenderProps<T> = {\n fromProps: React.KeyboardEventHandler<T>,\n extensions: SingleOrArray<React.KeyboardEventHandler<T>>,\n}\n\nfunction keyboardEventExtender<T>({\n fromProps,\n extensions,\n}: KeyoardEventExtenderProps<T>): React.KeyboardEventHandler<T> {\n return (event) => {\n fromProps?.(event)\n ArrayUtil.resolveSingleOrArray(extensions)\n .forEach(element => element(event))\n }\n}\n\nconst extender = {\n mouseEvent: mouseEventExtender,\n keyboardEvent: keyboardEventExtender\n}\n\n///\n/// ARIA & Accessibility\n///\n\nfunction click<T>(onClick: () => void) {\n const keyboardEventHandler: React.KeyboardEventHandler<T> = (event) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n onClick()\n }\n }\n\n return {\n onClick: onClick,\n onKeyDown: keyboardEventHandler,\n }\n}\n\nfunction close<T>(onClose: () => void): React.KeyboardEventHandler<T> {\n return (event) => {\n if (event.key === 'Escape') {\n onClose()\n }\n }\n}\n\ntype NavigateType<T> = {\n left?: (event: React.KeyboardEvent<T>) => void,\n right?: (event: React.KeyboardEvent<T>) => void,\n up?: (event: React.KeyboardEvent<T>) => void,\n down?: (event: React.KeyboardEvent<T>) => void,\n}\nfunction navigate<T>({\n left,\n right,\n up,\n down,\n}: NavigateType<T>): React.KeyboardEventHandler<T> {\n return (event) => {\n switch (event.key) {\n case 'ArrowLeft':\n left(event)\n break\n case 'ArrowRight':\n right(event)\n break\n case 'ArrowUp':\n up(event)\n break\n case 'ArrowDown':\n down(event)\n break\n }\n }\n}\n\ntype InteractionStateARIAAttributes = Pick<HTMLAttributes<HTMLDivElement>, 'aria-disabled' | 'aria-invalid' | 'aria-readonly' | 'aria-required'>\n\nfunction interactionStatesAria(\n interactionStates: Partial<FormFieldInteractionStates>,\n props: Partial<InteractionStateARIAAttributes> = {}\n): Partial<InteractionStateARIAAttributes> {\n return {\n 'aria-disabled': props['aria-disabled'] ?? interactionStates.disabled,\n 'aria-invalid': props['aria-invalid'] ?? interactionStates.invalid,\n 'aria-readonly': props['aria-readonly'] ?? interactionStates.readOnly,\n 'aria-required': props['aria-required'] ?? interactionStates.required,\n }\n}\n\nconst aria = {\n close,\n click,\n navigate,\n interactionStates: interactionStatesAria,\n}\n\nexport const PropsUtil = {\n extender,\n dataAttributes,\n aria,\n}","import type { PropsWithChildren, ReactNode } from 'react'\nimport { createContext, useCallback, useContext, useSyncExternalStore } from 'react'\nimport type { FormValue } from './FormStore'\nimport type { UseCreateFormResult } from './useCreateForm'\nimport type { FormFieldDataHandling } from './FormField'\n\nexport type FormContextType<T extends FormValue> = UseCreateFormResult<T>\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const FormContext = createContext<FormContextType<any> | null>(null)\n\nexport type FormProviderProps<T extends FormValue> = PropsWithChildren & {\n state: FormContextType<T>,\n}\n\nexport const FormProvider = <T extends FormValue>({ children, state }: FormProviderProps<T>) => {\n return (\n <FormContext.Provider value={state}>\n {children}\n </FormContext.Provider>\n )\n}\n\nexport function useForm<T extends FormValue>() {\n const ctx = useContext(FormContext)\n if (!ctx) throw new Error('FormContext is only available inside a <Form>')\n return ctx as FormContextType<T>\n}\n\nexport type FormFieldResult<T> = {\n value: T,\n error: ReactNode,\n dataProps: FormFieldDataHandling<T>,\n registerRef: (el: HTMLElement | null) => void,\n}\n\nexport function useFormField<T extends FormValue, K extends keyof T>(key: K): FormFieldResult<T[K]> | null {\n const context = useContext(FormContext)\n\n const subscribe = useCallback((cb: () => void) => {\n if (!context) return () => { }\n return context.store.subscribe(key, cb)\n }, [context, key])\n\n const value = useSyncExternalStore(\n subscribe,\n () => context ? context.store.getValue(key) : undefined\n )\n\n const error = useSyncExternalStore(\n subscribe,\n () => context ? context.store.getError(key) : undefined\n )\n\n if (!context) return null\n\n const { registerRef, getDataProps } = context\n\n return {\n value,\n error,\n dataProps: getDataProps(key),\n registerRef: registerRef(key),\n }\n}","import type { FormFieldAriaAttributes, FormFieldInteractionStates } from './FieldLayout'\nimport { FormFieldLayout, type FormFieldLayoutProps } from './FieldLayout'\nimport { useFormField } from './FormContext'\nimport type { ReactNode } from 'react'\nimport type { FormValue } from './FormStore'\n\nexport type FormFieldFocusableElementProps = FormFieldAriaAttributes & {\n id: string,\n ref: (element: HTMLElement | null) => void,\n}\n\nexport type FormFieldBag<T extends FormValue, K extends keyof T> = {\n dataProps: FormFieldDataHandling<T[K]>,\n focusableElementProps: FormFieldFocusableElementProps,\n interactionStates: FormFieldInteractionStates,\n}\n\nexport interface FormFieldProps<T extends FormValue, K extends keyof T> extends Omit<FormFieldLayoutProps, 'invalidDescription' | 'children'> {\n children: (bag: FormFieldBag<T, K>) => ReactNode,\n name: K,\n}\n\nexport type FormFieldDataHandling<T> = {\n value: T,\n onValueChange: (value: T) => void,\n onEditComplete: (value: T) => void,\n}\n\nexport const FormField = <T extends FormValue, K extends keyof T>({ children, name, ...props }: FormFieldProps<T, K>) => {\n const formField = useFormField<T, K>(name)\n\n if (!formField) {\n throw new Error('<FormField> can only be used inside a FormContext try wrapping your app in a <FormProvider>')\n }\n\n return (\n <FormFieldLayout {...props} invalidDescription={formField.error}>\n {(formFieldLayoutBag) => children({\n dataProps: formField.dataProps,\n focusableElementProps: {\n id: formFieldLayoutBag.id,\n ...formFieldLayoutBag.ariaAttributes,\n ref: formField.registerRef,\n },\n interactionStates: formFieldLayoutBag.interactionStates\n })}\n </FormFieldLayout>\n )\n}","import type { ReactNode } from 'react'\n\nexport type FormValidationBehaviour = 'always' | 'touched' | 'submit'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FormValue = Record<string, any>\n\nexport type FormEvent<T extends FormValue> = {\n type: 'submit',\n key: 'ALL',\n values: T,\n} | {\n type: 'submitError',\n key: 'ALL',\n values: T,\n errors: Partial<Record<keyof T, ReactNode>>,\n} | {\n type: 'reset',\n key: 'ALL',\n values: T,\n errors: Partial<Record<keyof T, ReactNode>>,\n} | {\n type: 'onChange',\n key: keyof T,\n value: T[keyof T],\n} | {\n type: 'onError',\n key: keyof T,\n value: T[keyof T],\n error: ReactNode,\n}\n\nexport type FormEventListener<T extends FormValue> = (event: FormEvent<T>) => void\n\nexport type FormValidator<T extends FormValue> = (value: T[keyof T]) => ReactNode\n\nexport type FormStoreProps<T extends FormValue> = {\n initialValues: T,\n hasTriedSubmitting?: boolean,\n validators?: Partial<{ [K in keyof T]: (v: T[K]) => ReactNode }>,\n validationBehaviour?: FormValidationBehaviour,\n}\n\nexport class FormStore<T extends FormValue> {\n private values: T\n private initialValues: T\n private validators: Partial<{ [K in keyof T]: FormValidator<T> }>\n private validationBehaviour: FormValidationBehaviour\n\n private hasTriedSubmitting: boolean = false\n private errors: Partial<Record<keyof T, ReactNode>> = {}\n private touched: Partial<Record<keyof T, boolean>> = {}\n\n private listeners = new Map<keyof T | 'ALL', Set<FormEventListener<T>>>()\n\n constructor({\n initialValues,\n hasTriedSubmitting,\n validators = {},\n validationBehaviour = 'touched',\n }: FormStoreProps<T>) {\n this.initialValues = initialValues\n this.values = { ...initialValues }\n this.hasTriedSubmitting = hasTriedSubmitting\n this.validators = validators\n this.validationBehaviour = validationBehaviour\n this.validateAll()\n }\n\n // Values\n getValue<K extends keyof T>(key: K): T[K] {\n return this.values[key]\n }\n\n getAllValues(): T {\n return { ...this.values }\n }\n\n setValue<K extends keyof T>(key: K, value: T[K]) {\n if (this.values[key] === value) return\n\n this.values[key] = value\n this.validate(key)\n this.notify({ type: 'onChange', key, value })\n }\n\n setValues(values: Partial<T>) {\n Object.keys(values).forEach(key => this.setValue(key, values[key]))\n }\n\n // Touched\n getTouched(key: keyof T): boolean {\n return !!this.touched[key]\n }\n\n setTouched(key: keyof T, isTouched: boolean = true) {\n if (this.touched[key] === isTouched) return\n\n this.touched[key] = isTouched\n this.validate(key)\n }\n\n // Error and Validation\n getHasError() : boolean {\n return Object.values(this.errors).some(value => value !== undefined && value !== null)\n }\n\n getError(key: keyof T): ReactNode {\n return this.errors[key]\n }\n\n private setError(key: keyof T, error: ReactNode) {\n if (this.errors[key] === error) return\n\n if (error === undefined || error === null) {\n delete this.errors[key]\n } else {\n this.errors[key] = error\n }\n\n this.notify({ type: 'onError', key, value: this.values[key], error })\n }\n\n changeValidationBehavoir(validationBehaviour: FormValidationBehaviour) {\n if(validationBehaviour === this.validationBehaviour) return\n this.validationBehaviour = validationBehaviour\n this.validateAll()\n }\n\n changeValidators(validators: Partial<Record<keyof T, FormValidator<T>>>) {\n this.validators = { ...this.validators, ...validators }\n this.validateAll()\n }\n\n validate(key: keyof T) {\n const validator = this.validators[key]\n\n const shouldValidate =\n this.validationBehaviour === 'always' ||\n (this.validationBehaviour === 'touched' && this.touched[key]) ||\n (this.validationBehaviour === 'submit' && this.hasTriedSubmitting)\n\n if (!validator || !shouldValidate) {\n this.setError(key, undefined)\n return\n }\n\n const error = validator(this.values[key])\n this.setError(key, error)\n }\n\n validateAll() {\n Object.keys(this.initialValues).forEach(key => {\n this.validate(key)\n })\n }\n\n // Obeserver\n subscribe(key: keyof T | 'ALL', listener: FormEventListener<T>): () => void {\n if (!this.listeners.has(key)) {\n this.listeners.set(key, new Set())\n }\n this.listeners.get(key)!.add(listener)\n\n return () => {\n this.listeners.get(key)?.delete(listener)\n if (this.listeners.get(key)?.size === 0) {\n this.listeners.delete(key)\n }\n }\n }\n\n private notify(event: FormEvent<T>) {\n const key = event.key\n if(key !== 'ALL') {\n this.listeners.get(key)?.forEach((listener) => listener(event))\n }\n this.listeners.get('ALL')?.forEach((listener) => listener(event))\n }\n\n // Form\n submit() {\n this.hasTriedSubmitting = true\n\n // Mark all as touched on submit\n Object.keys(this.initialValues).forEach((k) => {\n this.touched[k as keyof T] = true\n this.validate(k as keyof T)\n })\n\n const hasErrors = Object.keys(this.errors).length > 0\n\n if (hasErrors) {\n this.notify({\n type: 'submitError',\n key: 'ALL',\n errors: this.errors,\n values: this.values\n })\n } else {\n this.notify({\n type: 'submit',\n key: 'ALL',\n values: this.values\n })\n }\n }\n\n reset() {\n this.values = { ...this.initialValues }\n this.hasTriedSubmitting = false\n this.touched = {}\n Object.keys(this.initialValues).forEach(key => {\n this.notify({ type: 'onChange', key: key, value: this.values[key] })\n })\n this.validateAll()\n this.notify({ type: 'reset', key: 'ALL', values: this.values, errors: this.errors })\n }\n}","import { useCallback, useEffect, useRef, type ReactNode } from 'react'\nimport type { FormEvent, FormStoreProps, FormValue } from './FormStore'\nimport { FormStore } from './FormStore'\nimport type { FormFieldDataHandling } from './FormField'\n\nexport type UseCreateFormProps<T extends FormValue> = FormStoreProps<T> & {\n onFormSubmit: (values: T) => void,\n onFormError?: (values: T, errors: Partial<Record<keyof T, ReactNode>>) => void,\n onValueChange?: (values: T) => void,\n /* Whether to scroll and focus the first element when submitting with an error or resetting */\n scrollToElements?: boolean,\n scrollOptions?: ScrollIntoViewOptions,\n}\n\nexport type UseCreateFormResult<T extends FormValue> = {\n store: FormStore<T>,\n reset: () => void,\n submit: () => void,\n update: (value: Partial<T>) => void,\n validateAll: () => void,\n getDataProps: <K extends keyof T>(key: K) => FormFieldDataHandling<T[K]>,\n getError: (key: keyof T) => ReactNode,\n getValue: <K extends keyof T>(key: K) => T[K],\n registerRef: (key: keyof T) => (el: HTMLElement | null) => void,\n}\n\nexport function useCreateForm<T extends FormValue>({\n onFormSubmit,\n onFormError,\n onValueChange,\n initialValues,\n hasTriedSubmitting,\n validators,\n validationBehaviour,\n scrollToElements = true,\n scrollOptions = { behavior: 'smooth', block: 'center' },\n}: UseCreateFormProps<T>) : UseCreateFormResult<T> {\n const storeRef = useRef<FormStore<T>>(\n new FormStore<T>({\n initialValues,\n hasTriedSubmitting,\n validators,\n validationBehaviour,\n })\n )\n\n useEffect(() => {\n storeRef.current.changeValidationBehavoir(validationBehaviour)\n }, [validationBehaviour])\n\n useEffect(() => {\n storeRef.current.changeValidators(validators)\n }, [validators])\n\n const fieldRefs = useRef<Partial<Record<keyof T, HTMLElement | null>>>({})\n const registerRef = useCallback((key: keyof T) => {\n return (el: HTMLElement | null) => {\n fieldRefs.current[key] = el\n }\n }, [])\n\n useEffect(() => {\n const handleUpdate = (event: FormEvent<T>) => {\n if (event.type === 'submit') {\n onFormSubmit(event.values)\n } else if (event.type === 'submitError') {\n onFormError?.(event.values, event.errors)\n\n if (scrollToElements) {\n const errorInputs = (Object.keys(event.errors) as (keyof T)[])\n .filter((key) => event.errors[key])\n .map((key) => fieldRefs.current[key])\n .filter((el): el is HTMLElement => el !== null && el !== undefined)\n\n if (errorInputs.length > 0) {\n errorInputs.sort((a, b) => {\n const position = a.compareDocumentPosition(b)\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n return 0\n })\n\n errorInputs[0].scrollIntoView(scrollOptions)\n errorInputs[0].focus()\n }\n }\n } else if (event.type === 'reset') {\n if (scrollToElements) {\n const inputs = Object.values(fieldRefs.current).filter(\n (el): el is HTMLElement => el !== null && el !== undefined\n )\n if (inputs.length > 0) {\n inputs.sort((a, b) => {\n const position = a.compareDocumentPosition(b)\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n return 0\n })\n\n inputs[0].scrollIntoView(scrollOptions)\n inputs[0].focus()\n }\n }\n } else if (event.type === 'onChange') {\n onValueChange?.(storeRef.current.getAllValues())\n }\n }\n\n const unsubscribe = storeRef.current.subscribe('ALL', handleUpdate)\n return () => {\n unsubscribe()\n }\n }, [onFormError, onFormSubmit, onValueChange, scrollOptions, scrollToElements])\n\n const getDataProps = useCallback(<K extends keyof T>(key: K): FormFieldDataHandling<T[K]> => {\n return {\n value: storeRef.current.getValue(key),\n onValueChange: (val: T[K]) => storeRef.current.setValue(key, val),\n onEditComplete: (val: T[K]) => {\n storeRef.current.setValue(key, val)\n storeRef.current.setTouched(key)\n },\n }\n },[])\n\n return {\n store: storeRef.current,\n\n reset: () => storeRef.current.reset(),\n submit: () => storeRef.current.submit(),\n update: (value: Partial<T>) => storeRef.current.setValues(value),\n validateAll: () => storeRef.current.validateAll(),\n\n getDataProps,\n getError: (key: keyof T) => storeRef.current.getError(key),\n getValue: <K extends keyof T>(key: K) => storeRef.current.getValue(key),\n registerRef\n }\n}","import type { HTMLAttributes, ReactNode } from 'react'\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport clsx from 'clsx'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '@/src/utils/array'\nimport { Button } from '../user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\n//\n// CarouselContext\n//\ntype CarouselContextType = {\n id: string,\n currentIndex: number,\n slideCount: number,\n isLooping: boolean,\n}\n\nconst CarouselContext = createContext<CarouselContextType | null>(null)\n\nconst useCarouselContext = () => {\n const context = useContext(CarouselContext)\n if (!context) {\n console.error('useCarouselContext must be used within CarouselContext')\n }\n return context\n}\n\n//\n// CarouselTab\n//\ntype CarouselTabsProps = {\n onChange: (index: number) => void,\n}\n\nexport default function CarouselTabs({\n onChange,\n}: CarouselTabsProps) {\n const translation = useHightideTranslation()\n const { id, slideCount, currentIndex, isLooping } = useCarouselContext()\n\n const tabRefs = useRef<(HTMLButtonElement | null)[]>([])\n\n const handleKeyDown = (event: React.KeyboardEvent, index: number) => {\n let newIndex = index\n if (event.key === 'ArrowRight') {\n newIndex = isLooping ? (index + 1) % slideCount : Math.max(index + 1, slideCount - 1)\n } else if (event.key === 'ArrowLeft') {\n newIndex = isLooping ? (index - 1 + slideCount) % slideCount : Math.max(index - 1, 0)\n } else {\n return\n }\n event.preventDefault()\n onChange(newIndex)\n tabRefs.current[newIndex]?.focus()\n }\n\n return (\n <div\n className=\"flex-row-1 items-center justify-center w-full my-2\"\n role=\"tablist\"\n aria-label={translation('slideNavigation')}\n id={`${id}-tablist`}\n >\n {range(slideCount).map((index) => {\n const isSelected = currentIndex === index\n return (\n <button\n id={`${id}-tab-${index}`}\n key={index}\n ref={(el) => {\n tabRefs.current[index] = el\n }}\n onClick={() => onChange(index)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n\n className={clsx(\n 'w-8 min-w-8 h-3 min-h-3 first:rounded-l-md last:rounded-r-md',\n {\n 'bg-carousel-dot-disabled hover:bg-carousel-dot-active': currentIndex !== index,\n 'bg-carousel-dot-active hover:brightness-90': currentIndex === index,\n }\n )}\n\n type=\"button\"\n role=\"tab\"\n tabIndex={isSelected ? 0 : -1}\n aria-label={translation('showSlide', { index: (index + 1) })}\n aria-selected={isSelected}\n aria-controls={`slide-${index}`}\n aria-disabled={isSelected}\n />\n )\n })}\n </div>\n )\n}\n\n//\n// CarouselSlide\n//\nexport interface CarouselSlideProps extends HTMLAttributes<HTMLDivElement> {\n isSelected: boolean,\n index: number,\n}\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n function CarouselSlide({\n index,\n isSelected,\n ...props\n }, ref) {\n const translation = useHightideTranslation()\n const { id, slideCount } = useCarouselContext()\n\n return (\n <div\n {...props}\n ref={ref}\n id={`${id}-slide-${index}`}\n\n className={clsx('focus-style-none group/slide', props.className)}\n\n tabIndex={isSelected ? 0 : undefined}\n role=\"group\"\n aria-roledescription={translation('slide')}\n aria-label={translation('slideOf', {\n index: (index + 1),\n length: (slideCount),\n })}\n aria-hidden={isSelected ? undefined : true}\n />\n )\n }\n)\n\n//\n// Carousel\n//\ntype DragState = {\n dragStartX: number,\n dragOffsetX: number,\n}\n\ntype ItemType = {\n item: ReactNode,\n index: number,\n}\n\nexport type CarouselProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: ReactNode[],\n animationTime?: number,\n isLooping?: boolean,\n isAutoPlaying?: boolean,\n autoLoopingTimeOut?: number,\n autoLoopAnimationTime?: number,\n hintNext?: boolean,\n arrows?: boolean,\n dots?: boolean,\n /**\n * Percentage that is allowed to be scrolled further\n */\n overScrollThreshold?: number,\n blurColor?: string,\n heightClassName?: string,\n slideClassName?: string,\n slideContainerProps?: HTMLAttributes<HTMLDivElement>,\n onSlideChanged?: (index: number) => void,\n}\n\nexport const Carousel = ({\n children,\n animationTime = 200,\n isLooping = false,\n isAutoPlaying = false,\n autoLoopingTimeOut = 5000,\n autoLoopAnimationTime = 1000,\n hintNext = false,\n arrows = false,\n dots = true,\n blurColor = 'from-background',\n heightClassName = 'h-96',\n slideClassName = 'w-[70%] desktop:w-1/2',\n slideContainerProps,\n onSlideChanged,\n ...props\n}: CarouselProps) => {\n const translation = useHightideTranslation()\n const slideRefs = useRef<HTMLDivElement[]>([])\n const [currentIndex, setCurrentIndex] = useState<number>(0)\n const [hasFocus, setHasFocus] = useState(false)\n const [dragState, setDragState] = useState<DragState>()\n const isPaused = hasFocus\n const carouselContainerRef = useRef<HTMLDivElement>(null)\n const [disableClick, setDisableClick] = useState(false)\n\n const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n\n const length = useMemo(() => children.length, [children])\n const paddingItemCount = 3 // The number of items to append left and right of the list to allow for clean transition when looping\n\n const generatedId = 'carousel' + useId()\n const id = props.id ?? generatedId\n\n // Validation\n if (isAutoPlaying && !isLooping) {\n console.error('When isAutoLooping is true, isLooping should also be true')\n isLooping = true\n }\n autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut) // time between transitions\n animationTime = Math.max(100, animationTime) // in ms, must be > 0\n autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n useEffect(() => {\n const carousel = carouselContainerRef.current\n\n if (carousel) {\n function onFocus() {\n setHasFocus(true)\n }\n\n function onBlur() {\n setHasFocus(false)\n }\n\n\n carousel?.addEventListener('focusin', onFocus)\n carousel?.addEventListener('focusout', onBlur)\n return () => {\n carousel?.removeEventListener('focusin', onFocus)\n carousel?.removeEventListener('focusin', onFocus)\n }\n }\n }, [])\n\n const getStyleOffset = (index: number) => {\n const baseOffset = -50 + (index - currentIndex) * 100\n return `${baseOffset}%`\n }\n\n const canGoLeft = () => {\n return isLooping || currentIndex !== 0\n }\n\n const canGoRight = useCallback(() => {\n return isLooping || currentIndex !== length - 1\n }, [currentIndex, isLooping, length])\n\n const left = () => {\n if (canGoLeft()) {\n setCurrentIndex((currentIndex + length - 1) % length)\n }\n }\n\n const right = useCallback(() => {\n if (canGoRight()) {\n setCurrentIndex((currentIndex + length + 1) % length)\n }\n }, [canGoRight, currentIndex, length])\n\n useEffect(() => {\n if (!timeOut.current && !isPaused) {\n if (autoLoopingTimeOut > 0) {\n timeOut.current = setTimeout(() => {\n right()\n timeOut.current = undefined\n }, autoLoopingTimeOut)\n } else {\n right()\n }\n }\n if ((isPaused || !!dragState) && timeOut.current) {\n clearTimeout(timeOut.current)\n timeOut.current = undefined\n }\n }, [right, isPaused, autoLoopingTimeOut, dragState])\n\n\n let items: ItemType[] = children.map((item, index) => ({\n index,\n item\n }))\n let before: ItemType[] = []\n let after: ItemType[] = []\n if (isLooping) {\n before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n index,\n item\n }))\n after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n index,\n item\n }))\n\n items = [...before, ...items, ...after]\n }\n\n const handlePointerDown = (e: React.PointerEvent) => {\n setDragState({\n dragOffsetX: 0,\n dragStartX: e.clientX,\n })\n }\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (!dragState) return\n setDragState(prevState => ({ dragStartX: prevState.dragStartX, dragOffsetX: e.clientX - prevState.dragStartX }))\n }\n\n const handlePointerUp = () => {\n if (!dragState) return\n if (dragState.dragOffsetX > 50) {\n left()\n } else if (dragState.dragOffsetX < -50) {\n right()\n }\n setDragState(undefined)\n }\n\n useEffect(() => {\n setDisableClick(!dragState)\n }, [dragState])\n\n useEffect(() => {\n onSlideChanged?.(currentIndex)\n }, [currentIndex]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <CarouselContext.Provider value={{ id, currentIndex, slideCount: length, isLooping }}>\n <div\n ref={carouselContainerRef}\n {...props}\n className={clsx('flex-col-2 items-center w-full', props.className)}\n\n id={id}\n role=\"region\"\n aria-roledescription={translation('slide')}\n >\n <div\n {...slideContainerProps}\n className={clsx(`relative w-full overflow-hidden`, heightClassName, slideContainerProps?.className)}\n >\n {hintNext ? (\n <div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerLeave={handlePointerUp}\n className={clsx(`flex-row-2 relative h-full`, heightClassName)}\n >\n <div className=\"flex-row-2 relative h-full w-full px-2 overflow-hidden\">\n {items.map(({\n item,\n index\n }, listIndex) => {\n const isInItems = before.length <= listIndex && listIndex < items.length - after.length\n\n return (\n <CarouselSlide\n ref={isInItems ? slideRefs[index] : undefined}\n key={listIndex}\n index={index}\n isSelected={isInItems && currentIndex === index}\n className={clsx(\n `absolute left-[50%] h-full overflow-hidden transition-transform ease-in-out`,\n slideClassName\n )}\n onClick={() => !disableClick && setCurrentIndex(index)}\n style={{\n translate: `calc(${getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0))} + ${dragState ? dragState.dragOffsetX : 0}px)`,\n transitionDuration: dragState ? '0ms' : ((isAutoPlaying && !isPaused ? autoLoopAnimationTime : animationTime) + 'ms'),\n }}\n >\n {item}\n </CarouselSlide>\n )\n })}\n </div>\n <div\n className={clsx(`hidden desktop:block pointer-events-none absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n />\n <div\n className={clsx(`hidden desktop:block pointer-events-none absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n />\n </div>\n ) : (\n <div\n ref={slideRefs[currentIndex]}\n className={clsx('px-16 h-full')}\n\n tabIndex={0}\n role=\"group\"\n aria-roledescription={translation('slide')}\n aria-label={translation('slideOf', {\n index: (currentIndex + 1),\n length: items.length\n })}\n >\n {children[currentIndex]}\n </div>\n )}\n {arrows && (\n <>\n <Button\n layout=\"icon\"\n color=\"neutral\"\n className={clsx('absolute z-10 left-2 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoLeft() })}\n disabled={!canGoLeft()}\n onClick={() => left()}\n >\n <ChevronLeft size={24}/>\n </Button>\n <Button\n layout=\"icon\"\n color=\"neutral\"\n className={clsx('absolute z-10 right-2 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoRight() })}\n disabled={!canGoRight()}\n onClick={() => right()}\n >\n <ChevronRight size={24}/>\n </Button>\n </>\n )}\n </div>\n {dots && (<CarouselTabs onChange={setCurrentIndex}/>)}\n </div>\n </CarouselContext.Provider>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport { LocalizationUtil } from '../i18n/util'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport type { LocalizationConfig } from '@/src/contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/contexts/HightideConfigContext'\n\nexport type LocaleContextValue = {\n locale: HightideTranslationLocales,\n setLocale: Dispatch<SetStateAction<HightideTranslationLocales>>,\n}\n\nexport const LocaleContext = createContext<LocaleContextValue | null>(null)\n\ntype LocaleWithSystem = HightideTranslationLocales | 'system'\n\nexport type LocaleProviderProps = PropsWithChildren & Partial<LocalizationConfig> & {\n locale?: LocaleWithSystem,\n onChangedLocale?: (locale: HightideTranslationLocales) => void,\n}\n\nexport const LocaleProvider = ({\n children,\n locale,\n defaultLocale,\n onChangedLocale\n}: LocaleProviderProps) => {\n const {\n value: storedLocale,\n setValue: setStoredLocale,\n deleteValue: deleteStoredLocale,\n } = useLocalStorage<LocaleWithSystem>('locale', 'system')\n const { config } = useHightideConfig()\n const [localePreference, setLocalePreference] = useState<LocaleWithSystem>('system')\n\n const resolvedLocale = useMemo(() => {\n if (locale && locale !== 'system') {\n return locale\n }\n if (storedLocale && storedLocale !== 'system') {\n return storedLocale\n }\n if (localePreference !== 'system') {\n return localePreference\n }\n return config.locale.defaultLocale ?? defaultLocale\n }, [config.locale.defaultLocale, defaultLocale, locale, localePreference, storedLocale])\n\n useEffect(() => {\n if (!locale) return\n if (locale === 'system') {\n deleteStoredLocale()\n } else {\n setStoredLocale(locale)\n }\n }, [locale]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n onChangedLocale?.(resolvedLocale)\n }, [resolvedLocale]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const localesToTestAgainst = Object.values(LocalizationUtil.locals)\n\n const detectLanguage = () => {\n const matchingBrowserLanguage = window.navigator.languages\n .map(locale =>\n localesToTestAgainst.find(\n (test) => locale === test || locale.split('-')[0] === LocalizationUtil.localToLanguage(test)\n ))\n .filter((entry): entry is HightideTranslationLocales => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0]\n setLocalePreference(firstMatch)\n }\n detectLanguage()\n\n window.addEventListener('languagechange', detectLanguage)\n return () => {\n window.removeEventListener('languagechange', detectLanguage)\n }\n }, [])\n\n return (\n <LocaleContext.Provider value={{\n locale: resolvedLocale,\n setLocale: (newLocale) => {\n if (locale !== 'system') {\n console.warn('LocaleProvider: Attempting to change the ' +\n \"locale while setting a fixed locale won't have any effect. \" +\n 'Change the locale provided to the LocaleProvider instead.')\n }\n setStoredLocale(newLocale)\n }\n }}>\n {children}\n </LocaleContext.Provider>\n )\n}\n\nexport const useLocale = () => {\n const context = useContext(LocaleContext)\n if (!context) {\n throw new Error('useLocale must be used within LocaleContext. Try adding a LocaleProvider around your app.')\n }\n return context\n}\n\nexport const useLanguage = () => {\n const context = useContext(LocaleContext)\n if (!context) {\n throw new Error('useLanguage must be used within LocaleContext. Try adding a LocaleProvider around your app.')\n }\n return { language: LocalizationUtil.localToLanguage(context.locale) }\n}\n","'use client'\n\nimport type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useState } from 'react'\nimport { LocalStorageService } from '@/src/utils/storage'\nimport { resolveSetState } from '@/src/utils/resolveSetState'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\n\ntype UseLocalStorageResult<T> = {\n value: T,\n setValue: SetValue<T>,\n deleteValue: () => void,\n}\n\n/**\n * @param key Key under which to save the data\n * @param backupValue Used if the storage is unavailable or no value is present\n *\n * The backup value will never be saved to the storage unless you explicitly\n */\nexport const useLocalStorage = <T>(key: string, backupValue: T): UseLocalStorageResult<T> => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return backupValue\n }\n const storageService = new LocalStorageService()\n try {\n const value = storageService.get<T>(key)\n return value || backupValue\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_) {\n console.warn('useLocalStorage: Error while reading the stored value. Make sure your typing is correct.')\n storageService.delete(key)\n console.info(`useLocalStorage: deleted erroneous value for key: ${key}`)\n return backupValue\n }\n }, [backupValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(action => {\n const newValue = resolveSetState(action, storedValue)\n const storageService = new LocalStorageService()\n storageService.set(key, newValue)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n const deleteValue = () => {\n const storageService = new LocalStorageService()\n storageService.delete(key)\n setStoredValue(backupValue)\n }\n\n return { value: storedValue, setValue, deleteValue }\n}","class StorageService {\n // this seems to be a bug in eslint as 'paramter-properties' is a special syntax of typescript\n\n constructor(private storage: Storage) {\n }\n\n public get<T>(key: string): T | null {\n const value = this.storage.getItem(key)\n if (value === null) {\n return null\n }\n return JSON.parse(value)\n }\n\n public set<T>(key: string, value: T) {\n this.storage.setItem(key, JSON.stringify(value))\n }\n\n public delete(key: string) {\n this.storage.removeItem(key)\n }\n\n public deleteAll() {\n this.storage.clear()\n }\n}\n\nexport class LocalStorageService extends StorageService {\n constructor() {\n super(window.localStorage)\n }\n}\n\nexport class SessionStorageService extends StorageService {\n constructor() {\n super(window.sessionStorage)\n }\n}\n","import type { SetStateAction } from 'react'\n\nexport function resolveSetState<T>(action: SetStateAction<T>, prev: T): T {\n return typeof action === 'function' ? (action as (prev: T) => T)(prev) : action\n}","// AUTO-GENERATED. DO NOT EDIT.\n/* eslint-disable @stylistic/quote-props */\n/* eslint-disable no-useless-escape */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { Translation } from '@helpwave/internationalization'\nimport { TranslationGen } from '@helpwave/internationalization'\n\nexport const hightideTranslationLocales = ['de-DE', 'en-US'] as const\n\nexport type HightideTranslationLocales = typeof hightideTranslationLocales[number]\n\nexport type HightideTranslationEntries = {\n 'add': string,\n 'age': string,\n 'all': string,\n 'apply': string,\n 'back': string,\n 'cancel': string,\n 'carousel': string,\n 'change': string,\n 'chooseLanguage': string,\n 'chooseSlide': string,\n 'chooseTheme': string,\n 'clear': string,\n 'clearValue': string,\n 'click': string,\n 'clickToCopy': string,\n 'clickToSelect': string,\n 'close': string,\n 'confirm': string,\n 'copied': string,\n 'copy': string,\n 'create': string,\n 'decline': string,\n 'delete': string,\n 'discard': string,\n 'discardChanges': string,\n 'done': string,\n 'edit': string,\n 'endDate': string,\n 'enterText': string,\n 'entryDate': string,\n 'error': string,\n 'errorOccurred': string,\n 'exit': string,\n 'fieldRequiredError': string,\n 'filter': string,\n 'goodToSeeYou': string,\n 'identifier': string,\n 'invalidEmail': string,\n 'invalidEmailError': string,\n 'language': string,\n 'less': string,\n 'loading': string,\n 'locale': string,\n 'max': string,\n 'maxLengthError': string,\n 'min': string,\n 'minLengthError': string,\n 'more': string,\n 'name': string,\n 'next': string,\n 'no': string,\n 'none': string,\n 'notEmpty': string,\n 'nothingFound': string,\n 'of': string,\n 'optional': string,\n 'outOfRangeNumber': (values: { min: number, max: number }) => string,\n 'outOfRangeSelectionItems': (values: { min: number, max: number }) => string,\n 'outOfRangeString': (values: { min: number, max: number }) => string,\n 'pleaseWait': string,\n 'previous': string,\n 'pThemes': (values: { count: number }) => string,\n 'remove': string,\n 'removeProperty': string,\n 'required': string,\n 'reset': string,\n 'rSortingOrderAfter': (values: { otherSortings: number }) => string,\n 'save': string,\n 'saved': string,\n 'search': string,\n 'select': string,\n 'selectOption': string,\n 'sGender': (values: { gender: string }) => string,\n 'show': string,\n 'showLess': string,\n 'showMore': string,\n 'showSlide': (values: { index: number }) => string,\n 'slide': string,\n 'slideNavigation': string,\n 'slideOf': (values: { index: number, length: number }) => string,\n 'startDate': string,\n 'sThemeMode': (values: { theme: string }) => string,\n 'street': string,\n 'submit': string,\n 'success': string,\n 'text': string,\n 'time.ago': string,\n 'time.agoDays': (values: { days: number }) => string,\n 'time.april': string,\n 'time.august': string,\n 'time.century': (values: { count: number }) => string,\n 'time.day': (values: { count: number }) => string,\n 'time.decade': (values: { count: number }) => string,\n 'time.december': string,\n 'time.february': string,\n 'time.hour': (values: { count: number }) => string,\n 'time.in': string,\n 'time.inDays': (values: { days: number }) => string,\n 'time.january': string,\n 'time.july': string,\n 'time.june': string,\n 'time.march': string,\n 'time.may': string,\n 'time.microsecond': (values: { count: number }) => string,\n 'time.millisecond': (values: { count: number }) => string,\n 'time.minute': (values: { count: number }) => string,\n 'time.month': (values: { count: number }) => string,\n 'time.nanosecond': (values: { count: number }) => string,\n 'time.november': string,\n 'time.october': string,\n 'time.second': (values: { count: number }) => string,\n 'time.september': string,\n 'time.sMonthName': (values: { month: string }) => string,\n 'time.today': string,\n 'time.tomorrow': string,\n 'time.year': (values: { count: number }) => string,\n 'time.yesterday': string,\n 'tooFewSelectionItems': (values: { min: number }) => string,\n 'tooLong': (values: { max: number }) => string,\n 'tooManySelectionItems': (values: { max: number }) => string,\n 'tooShort': (values: { min: number }) => string,\n 'unsavedChanges': string,\n 'unsavedChangesSaveQuestion': string,\n 'update': string,\n 'value': string,\n 'welcome': string,\n 'yes': string,\n}\n\nexport const hightideTranslation: Translation<HightideTranslationLocales, Partial<HightideTranslationEntries>> = {\n 'de-DE': {\n 'add': `Hinzufügen`,\n 'age': `Alter`,\n 'all': `Alle`,\n 'apply': `Anwenden`,\n 'back': `Zurück`,\n 'cancel': `Abbrechen`,\n 'carousel': `Karussell`,\n 'change': `Ändern`,\n 'chooseLanguage': `Wähle deine bevorzugte Sprache`,\n 'chooseSlide': `Wähle die angezeigte Slide aus`,\n 'chooseTheme': `Wähle dein bevorzugtes Farbschema.`,\n 'clear': `Löschen`,\n 'clearValue': `Wert löschen`,\n 'click': `Klicken`,\n 'clickToCopy': `Zum kopieren klicken`,\n 'clickToSelect': `Zum Auswählen drücken`,\n 'close': `Schließen`,\n 'confirm': `Bestätigen`,\n 'copied': `Kopiert`,\n 'copy': `Kopieren`,\n 'create': `Erstellen`,\n 'decline': `Ablehnen`,\n 'delete': `Löschen`,\n 'discard': `Verwerfen`,\n 'discardChanges': `Änderungen Verwerfen`,\n 'done': `Fertig`,\n 'edit': `Bearbeiten`,\n 'endDate': `Ende`,\n 'enterText': `Text hier eingeben`,\n 'entryDate': `Eintragsdatum`,\n 'error': `Fehler`,\n 'errorOccurred': `Ein Fehler ist aufgetreten`,\n 'exit': `Beenden`,\n 'fieldRequiredError': `Dieses Feld ist erforderlich.`,\n 'filter': `Filter`,\n 'goodToSeeYou': `Schön dich zu sehen`,\n 'identifier': `Identifikator`,\n 'invalidEmail': `Die E-Mail ist ungültig.`,\n 'invalidEmailError': `Bitte geben Sie eine gültige E-Mail-Adresse ein.`,\n 'language': `Sprache`,\n 'less': `Weniger`,\n 'loading': `Lädt`,\n 'locale': `Locale`,\n 'max': `Max`,\n 'maxLengthError': `Maximale Länge überschritten.`,\n 'min': `Min`,\n 'minLengthError': `Mindestlänge nicht erreicht.`,\n 'more': `Mehr`,\n 'name': `Name`,\n 'next': `Weiter`,\n 'no': `Nein`,\n 'none': `Nichts`,\n 'notEmpty': `Das Feld darf nicht leer sein.`,\n 'nothingFound': `Nichts gefunden`,\n 'of': `von`,\n 'optional': `Optional`,\n 'outOfRangeNumber': ({ min, max }): string => {\n return `Der Wert muss zwischen ${min} und ${max} liegen.`\n },\n 'outOfRangeSelectionItems': ({ min, max }): string => {\n return `Es müssen zwischen ${min} und ${max} Elemente ausgewählt werden.`\n },\n 'outOfRangeString': ({ min, max }): string => {\n return `Der Wert muss zwischen ${min} und ${max} Zeichen lang sein.`\n },\n 'pleaseWait': `Bitte warten...`,\n 'previous': `Vorherige`,\n 'pThemes': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Farbschema`,\n 'other': `Farbschemas`,\n })\n },\n 'remove': `Entfernen`,\n 'removeProperty': `Eigenschaft entfernen`,\n 'required': `Erforderlich`,\n 'reset': `Zurücksetzen`,\n 'rSortingOrderAfter': ({ otherSortings }): string => {\n let _out: string = ''\n _out += `Angewendet `\n _out += TranslationGen.resolvePlural(otherSortings, {\n '=0': `als primäre Sortierung`,\n '=1': `nach ${otherSortings} anderen Sortierung`,\n 'other': `nach ${otherSortings} anderen Sortierungen`,\n })\n return _out\n },\n 'save': `Speichern`,\n 'saved': `Gespeichert`,\n 'search': `Suche`,\n 'select': `Select`,\n 'selectOption': `Option auswählen`,\n 'sGender': ({ gender }): string => {\n return TranslationGen.resolveSelect(gender, {\n 'male': `Männlich`,\n 'female': `Weiblich`,\n 'other': `Divers`,\n })\n },\n 'show': `Anzeigen`,\n 'showLess': `Weniger anzeigen`,\n 'showMore': `Mehr anzeigen`,\n 'showSlide': ({ index }): string => {\n return `Zeige Slide ${index}`\n },\n 'slide': `Slide`,\n 'slideNavigation': `Slide Navigation`,\n 'slideOf': ({ index, length }): string => {\n return `Slide ${index} von ${length} slides`\n },\n 'startDate': `Start`,\n 'sThemeMode': ({ theme }): string => {\n return TranslationGen.resolveSelect(theme, {\n 'dark': `Dunkel`,\n 'light': `Hell`,\n 'system': `System`,\n })\n },\n 'street': `Straße`,\n 'submit': `Abschicken`,\n 'success': `Erfolg`,\n 'text': `Text`,\n 'time.ago': `vor`,\n 'time.agoDays': ({ days }): string => {\n return `var ${days} Tagen`\n },\n 'time.april': `April`,\n 'time.august': `August`,\n 'time.century': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Jahrhundert`,\n 'other': `Jahrhunderte`,\n })\n },\n 'time.day': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Tag`,\n 'other': `Tage`,\n })\n },\n 'time.decade': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Jahrzehnt`,\n 'other': `Jahrzehnte`,\n })\n },\n 'time.december': `December`,\n 'time.february': `Febuar`,\n 'time.hour': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Stunde`,\n 'other': `Stunden`,\n })\n },\n 'time.in': `in`,\n 'time.inDays': ({ days }): string => {\n return `in ${days} Tagen`\n },\n 'time.january': `Januar`,\n 'time.july': `Juli`,\n 'time.june': `Juni`,\n 'time.march': `März`,\n 'time.may': `Mai`,\n 'time.microsecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Mikrosekunde`,\n 'other': `Mikrosekunden`,\n })\n },\n 'time.millisecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Millisekunde`,\n 'other': `Millisekunden`,\n })\n },\n 'time.minute': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Minute`,\n 'other': `Minuten`,\n })\n },\n 'time.month': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Monat`,\n 'other': `Monate`,\n })\n },\n 'time.nanosecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Nanosekunde`,\n 'other': `Nanosekunden`,\n })\n },\n 'time.november': `November`,\n 'time.october': `October`,\n 'time.second': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Sekunde`,\n 'other': `Sekunden`,\n })\n },\n 'time.september': `September`,\n 'time.sMonthName': ({ month }): string => {\n return TranslationGen.resolveSelect(month, {\n 'january': `Januar`,\n 'february': `Februar`,\n 'march': `März`,\n 'april': `April`,\n 'may': `Mai`,\n 'june': `Juni`,\n 'july': `Juli`,\n 'august': `August`,\n 'september': `September`,\n 'october': `Oktober`,\n 'november': `November`,\n 'december': `Dezember`,\n 'other': `Unbekannter Monat`,\n })\n },\n 'time.today': `Heute`,\n 'time.tomorrow': `Morgen`,\n 'time.year': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Jahr`,\n 'other': `Jahre`,\n })\n },\n 'time.yesterday': `Gestern`,\n 'tooFewSelectionItems': ({ min }): string => {\n return `Es müssen mindestens ${min} Elemente ausgewählt werden.`\n },\n 'tooLong': ({ max }): string => {\n return `Der Wert darf höchstens ${max} Zeichen enthalten.`\n },\n 'tooManySelectionItems': ({ max }): string => {\n return `Es müssen maximal ${max} Elemente ausgewählt werden.`\n },\n 'tooShort': ({ min }): string => {\n return `Der Wert muss mindestens ${min} Zeichen enthalten.`\n },\n 'unsavedChanges': `Ungespeicherte Änderungen`,\n 'unsavedChangesSaveQuestion': `Möchtest du die Änderungen speichern?`,\n 'update': `Update`,\n 'value': `Wert`,\n 'welcome': `Willkommen`,\n 'yes': `Ja`\n },\n 'en-US': {\n 'add': `Add`,\n 'age': `Age`,\n 'all': `All`,\n 'apply': `Apply`,\n 'back': `Back`,\n 'cancel': `Cancel`,\n 'carousel': `Carousel`,\n 'change': `Change`,\n 'chooseLanguage': `Choose your language`,\n 'chooseSlide': `Choose slide to display`,\n 'chooseTheme': `Choose your preferred color theme.`,\n 'clear': `Clear`,\n 'clearValue': `Clear Value`,\n 'click': `Click`,\n 'clickToCopy': `Click to Copy`,\n 'clickToSelect': `Click to select`,\n 'close': `Close`,\n 'confirm': `Confirm`,\n 'copied': `Copied`,\n 'copy': `Copy`,\n 'create': `Create`,\n 'decline': `Decline`,\n 'delete': `Delete`,\n 'discard': `Discard`,\n 'discardChanges': `Discard Changes`,\n 'done': `Done`,\n 'edit': `Edit`,\n 'endDate': `End`,\n 'enterText': `Enter text here`,\n 'entryDate': `Entry Date`,\n 'error': `Error`,\n 'errorOccurred': `An error occurred`,\n 'exit': `Exit`,\n 'fieldRequiredError': `This field is required.`,\n 'filter': `Filter`,\n 'goodToSeeYou': `Good to see you`,\n 'identifier': `Identifier`,\n 'invalidEmail': `The email is not valid.`,\n 'invalidEmailError': `Please enter a valid email address.`,\n 'language': `Language`,\n 'less': `Less`,\n 'loading': `Loading`,\n 'locale': `Locale`,\n 'max': `Max`,\n 'maxLengthError': `Maximum length exceeded.`,\n 'min': `Min`,\n 'minLengthError': `Minimum length not met.`,\n 'more': `More`,\n 'name': `Name`,\n 'next': `Next`,\n 'no': `No`,\n 'none': `None`,\n 'notEmpty': `The field cannot be empty.`,\n 'nothingFound': `Nothing found`,\n 'of': `of`,\n 'optional': `Optional`,\n 'outOfRangeNumber': ({ min, max }): string => {\n return `The value must be between ${min} and ${max}.`\n },\n 'outOfRangeSelectionItems': ({ min, max }): string => {\n return `Between ${min} and ${max} items must be selected.`\n },\n 'outOfRangeString': ({ min, max }): string => {\n return `The value needs to have between ${min} and ${max} characters.`\n },\n 'pleaseWait': `Please wait...`,\n 'previous': `Previous`,\n 'pThemes': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Theme`,\n 'other': `Themes`,\n })\n },\n 'remove': `Remove`,\n 'removeProperty': `Remove Property`,\n 'required': `Required`,\n 'reset': `Reset`,\n 'rSortingOrderAfter': ({ otherSortings }): string => {\n let _out: string = ''\n _out += `Applied `\n _out += TranslationGen.resolvePlural(otherSortings, {\n '=0': `as the first sorting`,\n '=1': `after ${otherSortings} other sorting`,\n 'other': `after ${otherSortings} other sortings`,\n })\n return _out\n },\n 'save': `Save`,\n 'saved': `Saved`,\n 'search': `Search`,\n 'select': `Select`,\n 'selectOption': `Select an option`,\n 'sGender': ({ gender }): string => {\n return TranslationGen.resolveSelect(gender, {\n 'male': `Male`,\n 'female': `Female`,\n 'other': `Other`,\n })\n },\n 'show': `Show`,\n 'showLess': `Show less`,\n 'showMore': `Show more`,\n 'showSlide': ({ index }): string => {\n return `Show Slide ${index}`\n },\n 'slide': `Slide`,\n 'slideNavigation': `Slide navigation`,\n 'slideOf': ({ index, length }): string => {\n return `Slide ${index} of ${length} slides`\n },\n 'startDate': `Start`,\n 'sThemeMode': ({ theme }): string => {\n return TranslationGen.resolveSelect(theme, {\n 'dark': `Dark`,\n 'light': `Light`,\n 'system': `System`,\n })\n },\n 'street': `Street`,\n 'submit': `Submit`,\n 'success': `Success`,\n 'text': `Text`,\n 'time.ago': `ago`,\n 'time.agoDays': ({ days }): string => {\n return `days ${days} ago`\n },\n 'time.april': `April`,\n 'time.august': `August`,\n 'time.century': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Century`,\n 'other': `Centuries`,\n })\n },\n 'time.day': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Day`,\n 'other': `Days`,\n })\n },\n 'time.decade': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Decade`,\n 'other': `Decades`,\n })\n },\n 'time.december': `December`,\n 'time.february': `Febuary`,\n 'time.hour': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Hour`,\n 'other': `Hours`,\n })\n },\n 'time.in': `in`,\n 'time.inDays': ({ days }): string => {\n return `in ${days} days`\n },\n 'time.january': `January`,\n 'time.july': `July`,\n 'time.june': `June`,\n 'time.march': `March`,\n 'time.may': `May`,\n 'time.microsecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Microsecond`,\n 'other': `Microseconds`,\n })\n },\n 'time.millisecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Millisecond`,\n 'other': `Milliseconds`,\n })\n },\n 'time.minute': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Minute`,\n 'other': `Minutes`,\n })\n },\n 'time.month': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Month`,\n 'other': `Months`,\n })\n },\n 'time.nanosecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Nanosecond`,\n 'other': `Nanoseconds`,\n })\n },\n 'time.november': `November`,\n 'time.october': `October`,\n 'time.second': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Second`,\n 'other': `Seconds`,\n })\n },\n 'time.september': `September`,\n 'time.sMonthName': ({ month }): string => {\n return TranslationGen.resolveSelect(month, {\n 'january': `January`,\n 'february': `February`,\n 'march': `March`,\n 'april': `April`,\n 'may': `May`,\n 'june': `June`,\n 'july': `July`,\n 'august': `August`,\n 'september': `September`,\n 'october': `October`,\n 'november': `November`,\n 'december': `December`,\n 'other': `Unknown Month`,\n })\n },\n 'time.today': `Today`,\n 'time.tomorrow': `Tomorrow`,\n 'time.year': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Year`,\n 'other': `Years`,\n })\n },\n 'time.yesterday': `Yesterday`,\n 'tooFewSelectionItems': ({ min }): string => {\n return `Select at least ${min} items.`\n },\n 'tooLong': ({ max }): string => {\n return `The value requires less than ${max} characters.`\n },\n 'tooManySelectionItems': ({ max }): string => {\n return `Select at most ${max} items.`\n },\n 'tooShort': ({ min }): string => {\n return `The value requires at least ${min} characters.`\n },\n 'unsavedChanges': `Unsaved Changes`,\n 'unsavedChangesSaveQuestion': `Do you want to save your changes?`,\n 'update': `Update`,\n 'value': `Value`,\n 'welcome': `Welcome`,\n 'yes': `Yes`\n }\n}\n\n","import type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport { hightideTranslationLocales } from '@/src/i18n/translations'\n\n/**\n * The supported locales' names in their respective language\n */\nconst localsNames: Record<HightideTranslationLocales, string> = {\n 'en-US': 'English (US)',\n 'de-DE': 'Deutsch',\n}\n\nfunction localeToLanguage(locale: HightideTranslationLocales) {\n return locale.split('-')[0]\n}\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LocalizationUtil = {\n locals: hightideTranslationLocales,\n localToLanguage: localeToLanguage,\n languagesLocalNames: localsNames,\n}\n","import { createContext, type PropsWithChildren, useContext, useState } from 'react'\nimport type { ResolvedTheme } from '@/src/contexts/ThemeContext'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport type { DeepPartial } from '@/src/utils/typing'\n\nexport type TooltipConfig = {\n /**\n * Number of milliseconds until the tooltip appears\n */\n appearDelay: number,\n /**\n * Number of milliseconds until the tooltip disappears\n */\n disappearDelay: number,\n}\n\nexport type ThemeConfig = {\n /**\n * The initial theme to show when:\n * 1. The system preference is not or cannot be loaded\n * 2. The user has not set an app preference\n */\n initialTheme: ResolvedTheme,\n}\n\nexport type LocalizationConfig = {\n /**\n * The initial locale to use when:\n * 1. The system preference is not or cannot be loaded\n * 2. The user has not set an app preference\n */\n defaultLocale: HightideTranslationLocales,\n}\n\nexport type HightideConfig = {\n tooltip: TooltipConfig,\n theme: ThemeConfig,\n locale: LocalizationConfig,\n}\n\nconst defaultConfig: HightideConfig = {\n tooltip: {\n appearDelay: 200,\n disappearDelay: 400,\n },\n theme: {\n initialTheme: 'light'\n },\n locale: {\n defaultLocale: 'de-DE',\n }\n}\n\nfunction mergeConfig(config: HightideConfig, overwrite: DeepPartial<HightideConfig>): HightideConfig {\n return {\n locale: {\n ...config.locale,\n ...overwrite?.locale\n },\n theme: {\n ...config.theme,\n ...overwrite.theme,\n },\n tooltip: {\n ...config.tooltip,\n ...overwrite.tooltip,\n }\n }\n}\n\ntype ConfigType = {\n config: HightideConfig,\n setConfig: (configOverwrite: DeepPartial<HightideConfig>) => void,\n}\n\nexport const HightideConfigContext = createContext<ConfigType | null>(null)\n\nexport type HightideConfigProviderProps = PropsWithChildren & DeepPartial<HightideConfig>\n\nexport const HightideConfigProvider = ({\n children,\n ...initialOverwrite\n}: HightideConfigProviderProps) => {\n const [config, setConfig] = useState<HightideConfig>(mergeConfig(defaultConfig, initialOverwrite))\n\n return (\n <HightideConfigContext.Provider\n value={{\n config,\n setConfig: (value) => setConfig(prevState => mergeConfig(prevState, value)),\n }}\n >\n {children}\n </HightideConfigContext.Provider>\n )\n}\n\nexport const useHightideConfig = () => {\n const context = useContext(HightideConfigContext)\n if (!context) {\n return {\n config: defaultConfig,\n setConfig: () => {\n console.error('useHightideConfig.setConfig is not available without a HightideConfigProvider. Try wrapping your app a HightideConfigProvider.')\n }\n }\n }\n return context\n}","import { useLocale } from '@/src/contexts/LocaleContext'\nimport type {\n PartialTranslationExtension,\n Translation,\n TranslationEntries\n} from '@helpwave/internationalization'\nimport { combineTranslation, ICUUtil } from '@helpwave/internationalization'\nimport { ArrayUtil } from '@/src/utils/array'\nimport type { SingleOrArray } from '@/src/utils/typing'\nimport type { HightideTranslationEntries, HightideTranslationLocales } from '@/src/i18n/translations'\nimport { hightideTranslation } from '@/src/i18n/translations'\nimport { useMemo } from 'react'\n\n/**\n * Use for translations where you know that all values are ICU strings.\n *\n * This most likely is the case for Translations provided by a backend,\n * for more dynamic and typesafe translation use useTranslation instead\n */\nexport function useICUTranslation<L extends string, T extends Record<string, string>>(\n translations: Translation<L, T>[] | Translation<L, T>,\n locale: L\n) {\n translations = Array.isArray(translations) ? translations : [translations]\n\n return function translate(\n key: string,\n values?: Record<string, object>\n ): string {\n try {\n for (let i = 0; i < translations.length; i++) {\n const localizedTranslation = translations[i][locale]\n if (!localizedTranslation) continue\n\n const msg = localizedTranslation[key]\n if (typeof msg === 'string') {\n return ICUUtil.interpret(msg, values)\n }\n }\n console.warn(`useTranslation: No translation for key \"${key}\" found.`)\n } catch (e) {\n console.error(`useTranslation: Error translating key \"${String(key)}\"`, e)\n }\n\n return `{{${String(locale)}:${String(key)}}}`\n }\n}\n\ntype UseHidetideTranslationOverwrites = {\n locale?: HightideTranslationLocales,\n}\n\ntype HidetideTranslationExtension<L extends string, T extends TranslationEntries>\n = PartialTranslationExtension<L, HightideTranslationLocales, T, HightideTranslationEntries>\n/**\n * A wrapper for the useHightideTranslation to load and specify the translations for the library\n */\nexport function useHightideTranslation<L extends string, T extends TranslationEntries>(\n extensions?: SingleOrArray<HidetideTranslationExtension<L,T>>,\n overwrites?: UseHidetideTranslationOverwrites\n) {\n const { locale: inferredLocale } = useLocale()\n const locale = overwrites?.locale ?? inferredLocale\n\n return useMemo(() => combineTranslation<L | HightideTranslationLocales, T & HightideTranslationEntries>([\n ... ArrayUtil.resolveSingleOrArray(extensions),\n hightideTranslation as HidetideTranslationExtension<L,T>\n ], locale),\n [locale, extensions])\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nexport type DividerInserterProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: ReactNode[],\n divider: (index: number) => ReactNode,\n}\n\n/**\n * A Component for inserting a divider in the middle of each child element\n *\n * undefined elements are removed\n */\nexport const DividerInserter = ({\n children,\n divider,\n className,\n ...restProps\n}: DividerInserterProps) => {\n const nodes: ReactNode[] = []\n\n for (let index = 0; index < children.length; index++) {\n const element = children[index]\n if (element !== undefined) {\n nodes.push(element)\n if (index < children.length - 1) {\n nodes.push(divider(index))\n }\n }\n }\n\n return (\n <div className={clsx(className)} {...restProps}>\n {nodes}\n </div>\n )\n}\n","'use client'\n\nimport type { RefObject } from 'react'\nimport { useCallback, useEffect, useId, useRef, useState } from 'react'\nimport { useIsMounted } from '@/src/hooks/focus/useIsMounted'\n\nconst createFocusGuard = () => {\n const div = document.createElement('div')\n Object.assign(div.style, {\n opacity: '0',\n outline: 'none',\n boxShadow: 'none',\n position: 'fixed',\n pointerEvents: 'none',\n touchAction: 'none',\n })\n div.tabIndex = 0\n div.setAttribute('data-hw-focus-guard', '')\n document.body.appendChild(div)\n return div\n}\n\nfunction getContainedFocusableElements(element: HTMLElement) {\n return element?.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])')\n}\n\ntype ListenerType = {\n id: string,\n pause: () => void,\n unpause: () => void,\n focus: () => void,\n focusLast: () => void,\n container: RefObject<HTMLElement>,\n initialFocusElement: RefObject<HTMLElement>,\n}\n\nclass FocusTrapService {\n // The last entry is always the active one\n private listeners: ListenerType[] = []\n\n public getActive(): ListenerType | undefined {\n if (this.listeners.length === 0) return undefined\n return this.listeners[this.listeners.length - 1]\n }\n\n private focusElement() {\n const active = this.getActive()\n if(!active) return\n const { container, initialFocusElement } = active\n const containerElement = container.current\n // Try in the following order\n // 1. Focus the initial element\n // 2. Focus the first focusable element in the container\n // 3. Focus the container\n if (initialFocusElement?.current) {\n initialFocusElement.current.focus()\n } else {\n const elements = getContainedFocusableElements(containerElement)\n if (elements && elements.length > 0) {\n const first = elements.item(0) as HTMLElement\n first.focus()\n } else {\n containerElement.focus()\n }\n }\n }\n\n private onFocusIn = (event: FocusEvent) => {\n const active = this.getActive()\n if(!active || !active.container.current) return\n const { container } = active\n if (!container.current.contains(event.target as HTMLElement)) {\n this.focusElement()\n }\n }\n\n private removeGuards() {\n document.querySelectorAll('[data-hw-focus-guard]').forEach((node) => node.remove())\n }\n\n private addGuards() {\n document.body.insertAdjacentElement('afterbegin', createFocusGuard())\n document.body.insertAdjacentElement('beforeend', createFocusGuard())\n }\n\n private activate() {\n document.addEventListener('focusin', this.onFocusIn)\n this.addGuards()\n }\n\n private deactivate() {\n document.removeEventListener('focusin', this.onFocusIn)\n this.removeGuards()\n }\n\n register(listener: ListenerType) {\n this.listeners.push(listener)\n if (this.listeners.length === 1) {\n this.activate()\n }\n const active = listener\n this.listeners.forEach((listener) => {\n const { focus, pause } = listener\n if (listener === active) {\n focus()\n } else {\n pause()\n }\n })\n }\n\n unregister(id: string) {\n const index = this.listeners.findIndex(trap => trap.id === id)\n if (index !== -1) {\n const isActive = index === this.listeners.length - 1\n const listener = this.listeners[index]\n this.listeners = this.listeners.filter(listener => listener.id !== id)\n if (isActive) {\n // Deactivate all focus traps\n this.deactivate()\n // Focus last element in previous focus context\n listener.focusLast()\n // Activate and pause remaining focus traps\n const active = this.getActive()\n this.listeners.forEach((listener) => {\n const { pause, unpause } = listener\n if (listener === active) {\n unpause()\n } else {\n pause()\n }\n })\n // Reactivate\n if (this.listeners.length > 0) {\n this.activate()\n }\n }\n } else {\n console.warn(`Unable to unregister id ${id}: not found`)\n }\n }\n}\n\nconst service = new FocusTrapService()\n\nexport type UseFocusTrapProps = {\n container: RefObject<HTMLElement>,\n active?: boolean,\n initialFocus?: RefObject<HTMLElement>,\n /**\n * Whether to focus the first element when the initialFocus isn't provided\n *\n * Focuses the container instead\n */\n focusFirst?: boolean,\n}\n\nexport const useFocusTrap = ({\n container,\n active = true,\n initialFocus,\n focusFirst = true,\n}: UseFocusTrapProps) => {\n const lastFocusRef = useRef<HTMLElement>(null)\n const [paused, setPaused] = useState(false)\n const isMounted = useIsMounted()\n const id = useId()\n\n const focusElement = useCallback(() => {\n const containerElement = container.current\n // Try in the following order\n // 1. Focus the initial element\n // 2. Focus the first focusable element in the container\n // 3. Focus the container\n if (initialFocus?.current) {\n initialFocus.current.focus()\n } else {\n const elements = getContainedFocusableElements(containerElement)\n if (elements && elements.length > 0) {\n const first = elements.item(0) as HTMLElement\n first.focus()\n } else {\n containerElement.focus()\n }\n }\n }, [container, initialFocus])\n\n useEffect(() => {\n if (active && isMounted) {\n if (!lastFocusRef.current) {\n lastFocusRef.current = document.activeElement as HTMLElement\n }\n\n function pause() {\n setPaused(true)\n }\n\n function unpause() {\n setPaused(false)\n if (!container.current.contains(document.activeElement as HTMLElement)) {\n focusElement()\n }\n }\n\n function focus() {\n focusElement()\n setPaused(false)\n }\n\n function focusLast() {\n lastFocusRef.current?.focus()\n }\n\n service.register({ id, pause, focus, focusLast, unpause, container, initialFocusElement: initialFocus })\n return () => {\n service.unregister(id)\n lastFocusRef.current = undefined\n }\n }\n }, [active, container, focusElement, id, initialFocus, isMounted])\n\n useEffect(() => {\n if (active && !paused && isMounted) {\n const containerElement = container.current\n\n function onKeyDown(event: KeyboardEvent) {\n const key = event.key\n const elements = getContainedFocusableElements(containerElement)\n const active = document.activeElement as HTMLElement\n const index = [...elements].findIndex(value => value === active)\n if (index === -1 || event.altKey || event.ctrlKey || event.metaKey) {\n return\n }\n if (key === 'Tab') {\n const next = event.shiftKey ? -1 : 1\n const nextIndex = (index + next + elements.length) % elements.length\n const nextElement = elements[nextIndex] as HTMLElement\n nextElement.focus()\n event.preventDefault()\n }\n }\n\n // Register and unregister the listeners\n containerElement.addEventListener('keydown', onKeyDown)\n return () => {\n containerElement.removeEventListener('keydown', onKeyDown)\n }\n }\n }, [active, paused, isMounted, container, initialFocus, focusFirst, focusElement])\n}","'use client'\n\nimport { useEffect, useLayoutEffect, useState } from 'react'\n\nconst isClient = typeof window !== 'undefined' && typeof document !== 'undefined'\nconst useIsomorphicEffect = isClient ? useLayoutEffect : useEffect\n\nexport const useIsMounted = () => {\n const [isMounted, setIsMounted] = useState(false)\n\n useIsomorphicEffect(() => {\n setIsMounted(true)\n return () => {\n setIsMounted(false)\n }\n }, [])\n return isMounted\n}","import { useEffect, useId, useMemo, useState } from 'react'\n\nexport type OverlayItem = {\n id: string,\n tags?: string[],\n}\n\ntype OverlayItemInformation = OverlayItem & {\n zIndex: number,\n position: number,\n tagPositions: Record<string, number>,\n}\n\ntype OverlayRegistryValue = {\n itemInformation: Record<string, OverlayItemInformation>,\n tagItemCounts: Record<string, number>,\n activeId: string | null,\n}\n\ntype OverlayRegistryListenerCallback = (value: OverlayRegistryValue) => void\n\nclass OverlayRegistry {\n private static instance: OverlayRegistry | null = null\n\n static getInstance(): OverlayRegistry {\n if (!OverlayRegistry.instance) {\n OverlayRegistry.instance = new OverlayRegistry()\n }\n return OverlayRegistry.instance\n }\n\n private overlayIds = new Set<string>()\n private overlayItems: Record<string, OverlayItem> = {}\n private listeners = new Set<OverlayRegistryListenerCallback>()\n\n register(item: OverlayItem) {\n this.overlayIds.add(item.id)\n this.overlayItems[item.id] = item\n this.notify()\n }\n\n update(item: OverlayItem) {\n this.overlayItems[item.id] = item\n this.notify()\n }\n\n unregister(item: OverlayItem) {\n this.overlayIds.delete(item.id)\n delete this.overlayItems[item.id]\n this.notify()\n }\n\n addListener(callback: OverlayRegistryListenerCallback) {\n this.listeners.add(callback)\n }\n\n removeListener(callback: OverlayRegistryListenerCallback) {\n this.listeners.delete(callback)\n }\n\n private notify() {\n const itemInformation: Record<string, OverlayItemInformation> = {}\n const ids = [...this.overlayIds]\n const startZIndex = 100\n const tagCount: Record<string, number> = {}\n for (let index = ids.length - 1; index >= 0; index--) {\n const id = ids[index]\n const item = this.overlayItems[id]\n itemInformation[id] = {\n ...item,\n position: index,\n tagPositions: {},\n zIndex: startZIndex + index,\n }\n for(const tag of item.tags ?? []) {\n let position = tagCount[tag]\n if(position === undefined) {\n position = 0\n } else {\n position++\n }\n tagCount[tag] = position\n itemInformation[id].tagPositions[tag] = position\n }\n }\n for (const callback of this.listeners) {\n callback({ activeId: ids[0] ?? null, itemInformation, tagItemCounts: tagCount })\n }\n }\n}\n\nexport type UseOverlayRegistryProps = Partial<OverlayItem> & {\n isActive?: boolean,\n /** Tags cannot change on every render, thus make sure they are wrapped in a useMemo or similar */\n tags?: string[],\n}\n\nexport type UseOverlayRegistryResult = {\n isInFront: boolean,\n zIndex?: number,\n position?: number,\n tagPositions?: Record<string, number>,\n hasAppeared: boolean,\n tagItemCounts: Record<string, number>,\n}\n\nexport const useOverlayRegistry = (props?: UseOverlayRegistryProps): UseOverlayRegistryResult => {\n const generatedId = useId()\n const [hasAppeared, setHasAppeared] = useState<boolean>(props.isActive)\n const item: OverlayItem = useMemo(() => ({\n id: props?.id ?? generatedId,\n tags: props?.tags,\n }), [props?.id, generatedId, props?.tags])\n const [value, setValue] = useState<OverlayRegistryValue>({\n activeId: null,\n itemInformation: {},\n tagItemCounts: {}\n })\n const registry = useMemo(() => OverlayRegistry.getInstance(), [])\n\n useEffect(() => {\n if(!props.isActive) {\n return\n }\n function callback(value: OverlayRegistryValue) {\n setValue(value)\n }\n\n registry.addListener(callback)\n registry.register(item)\n setHasAppeared(true)\n return () => {\n registry.removeListener(callback)\n registry.unregister(item)\n setValue({\n activeId: null,\n itemInformation: {},\n tagItemCounts: {}\n })\n setHasAppeared(false)\n }\n }, [props?.isActive, item, registry])\n\n const itemInformation = value.itemInformation[item.id]\n\n return {\n isInFront: value.activeId === item.id,\n zIndex: itemInformation?.zIndex,\n position: itemInformation?.position,\n tagPositions: itemInformation?.tagPositions,\n hasAppeared,\n tagItemCounts: value.tagItemCounts,\n }\n}","import { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { ReactNode } from 'react'\nimport { useId, useMemo, useRef, type HTMLAttributes } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Visibility } from './Visibility'\nimport { Button } from '../user-interaction/Button'\nimport { X } from 'lucide-react'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type DrawerAligment = 'left' | 'right' | 'bottom' | 'top'\n\nexport type DrawerProps = HTMLAttributes<HTMLDivElement> & {\n isOpen: boolean,\n alignment: DrawerAligment,\n titleElement: ReactNode,\n description: ReactNode,\n isAnimated?: boolean,\n containerClassName?: string,\n backgroundClassName?: string,\n onClose: () => void,\n}\n\nexport const Drawer = ({\n children,\n isOpen = true,\n alignment = 'left',\n titleElement,\n description,\n containerClassName,\n backgroundClassName,\n onClose,\n ...props\n}: DrawerProps) => {\n const translation = useHightideTranslation()\n const generatedId = useId()\n const ids = useMemo(() => ({\n container: `dialog-container-${generatedId}`,\n background: `dialog-background-${generatedId}`,\n content: props.id ?? `dialog-content-${generatedId}`\n }), [generatedId, props.id])\n const ref = useRef<HTMLDivElement>(null)\n\n const { isVisible, transitionState, callbacks } = useTransitionState({ isOpen })\n\n useFocusTrap({\n container: ref,\n active: isVisible,\n focusFirst: true,\n })\n\n const { zIndex, tagPositions, tagItemCounts } = useOverlayRegistry({\n isActive: isVisible,\n tags: useMemo(() => ['drawer'], [])\n })\n const depth = tagPositions && tagItemCounts ? ((tagItemCounts['drawer'] ?? 0) - (tagPositions['drawer'] ?? 0)) : 0\n\n if (!isVisible) return\n\n return createPortal(\n <div\n id={ids.container}\n\n data-name=\"drawer-container\"\n data-open={PropsUtil.dataAttributes.bool(isOpen)}\n\n className={containerClassName}\n style={{ zIndex, '--drawer-depth': depth.toString() } as React.CSSProperties}\n >\n <div\n id={ids.background}\n\n onClick={onClose}\n\n data-name=\"drawer-background\"\n data-state={transitionState}\n data-depth={depth}\n data-alignment={alignment}\n\n aria-hidden={true}\n\n className={backgroundClassName}\n />\n <div\n {...props}\n id={ids.content}\n ref={ref}\n\n onKeyDown={PropsUtil.aria.close(close)}\n {...callbacks}\n\n data-name={PropsUtil.dataAttributes.name('drawer-content', props)}\n data-state={transitionState}\n data-depth={depth}\n data-alignment={alignment}\n\n className={props.className}\n >\n <div className=\"typography-title-lg mr-8\">\n {titleElement}\n </div>\n <Visibility isVisible={!!description}>\n <div className=\"text-description\">\n {description}\n </div>\n </Visibility>\n <div\n className=\"absolute top-0 right-0\"\n style={{\n paddingTop: 'inherit',\n paddingRight: 'inherit'\n }}\n >\n <Button\n layout=\"icon\"\n color=\"neutral\"\n size=\"xs\"\n aria-label={translation('close')}\n onClick={onClose}\n >\n <X />\n </Button>\n </div>\n {children}\n </div>\n </div>\n , document.body\n )\n}","import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type TransitionState = 'opened' | 'closed' | 'opening' | 'closing'\n\ntype UseTransitionStateResult = {\n transitionState: TransitionState,\n isVisible: boolean,\n callbacks: {\n onAnimationStart: () => void,\n onAnimationEnd: () => void,\n onTransitionStart: () => void,\n onTransitionEnd: () => void,\n onTransitionCancel: () => void,\n },\n}\n\ntype UseTransitionStateProps = {\n isOpen: boolean,\n}\n\nexport const useTransitionState = ({ isOpen }: UseTransitionStateProps): UseTransitionStateResult => {\n const [hasTransitionFinished, setHasTransitionFinished] = useState(true)\n const [currentOpen, setCurrentOpen] = useState(isOpen)\n\n const isAnimating = useRef(false)\n const timer = useRef<NodeJS.Timeout | undefined>(undefined)\n\n useEffect(() => {\n if (isOpen === currentOpen) {\n return\n }\n\n setHasTransitionFinished(false)\n setCurrentOpen(isOpen)\n isAnimating.current = false\n\n const checkAnimationStart = () => {\n timer.current = setTimeout(() => {\n if (!isAnimating.current) {\n setHasTransitionFinished(true)\n }\n }, 50)\n }\n checkAnimationStart()\n\n return () => {\n if (timer.current) {\n clearTimeout(timer.current)\n }\n }\n }, [isOpen, currentOpen])\n\n const onStart = useCallback(() => {\n isAnimating.current = true\n }, [])\n\n const onEnd = useCallback(() => {\n setHasTransitionFinished(true)\n isAnimating.current = false\n }, [])\n\n const transitionState: TransitionState = currentOpen\n ? hasTransitionFinished\n ? 'opened'\n : 'opening'\n : hasTransitionFinished\n ? 'closed'\n : 'closing'\n\n return {\n transitionState,\n isVisible: transitionState !== 'closed',\n callbacks: {\n onAnimationStart: onStart,\n onAnimationEnd: onEnd,\n onTransitionStart: onStart,\n onTransitionEnd: onEnd,\n onTransitionCancel: onEnd,\n },\n }\n}","import type { Dispatch, HTMLAttributes, PropsWithChildren, ReactNode, SetStateAction } from 'react'\nimport { useEffect } from 'react'\nimport { useState } from 'react'\nimport { createContext, forwardRef, useCallback, useContext, useId, useMemo } from 'react'\nimport clsx from 'clsx'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Visibility } from './Visibility'\nimport { ExpansionIcon } from '../display-and-visualization/ExpansionIcon'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\n\n//\n// Context\n//\ntype ExpandableContextIdsState = {\n root: string,\n header: string,\n content: string,\n}\n\ntype ExpandableContextState = {\n ids: ExpandableContextIdsState,\n setIds: Dispatch<SetStateAction<ExpandableContextIdsState>>,\n disabled: boolean,\n isExpanded: boolean,\n toggle: () => void,\n setIsExpanded: Dispatch<SetStateAction<boolean>>,\n}\n\nconst ExpandableContext = createContext<ExpandableContextState | null>(null)\n\nfunction useExpandableContext() {\n const context = useContext(ExpandableContext)\n if (!context) {\n throw new Error('Expandable components must be used within an ExpandableRoot')\n }\n return context\n}\n\n//\n// ExpandableRoot\n//\n\nexport type ExpandableRootProps = HTMLAttributes<HTMLDivElement> & {\n isExpanded?: boolean,\n onExpandedChange?: (isExpanded: boolean) => void,\n disabled?: boolean,\n allowContainerToggle?: boolean,\n}\n\nexport const ExpandableRoot = forwardRef<HTMLDivElement, ExpandableRootProps>(function ExpandableRoot({\n children,\n id: providedId,\n isExpanded: controlledExpanded,\n onExpandedChange,\n disabled = false,\n allowContainerToggle = false,\n ...props\n}, ref) {\n const generatedId = useId()\n const [ids, setIds] = useState<ExpandableContextIdsState>({\n root: providedId ?? `expandable-${generatedId}-root`,\n header: `expandable-${generatedId}-header`,\n content: `expandable-${generatedId}-content`\n })\n const [isExpanded, setIsExpanded] = useOverwritableState(controlledExpanded, onExpandedChange)\n\n const toggle = useCallback(() => {\n if (!disabled) {\n setIsExpanded(!isExpanded)\n }\n }, [disabled, isExpanded, setIsExpanded])\n\n const contextValue = useMemo(() => ({\n isExpanded: !!isExpanded,\n toggle,\n setIsExpanded,\n ids,\n setIds,\n disabled\n }), [isExpanded, toggle, setIsExpanded, ids, disabled])\n\n return (\n <ExpandableContext.Provider value={contextValue}>\n <div\n {...props}\n ref={ref}\n id={ids.root}\n\n onClick={(event) => {\n props.onClick?.(event)\n if (allowContainerToggle) {\n toggle()\n }\n }}\n\n data-name=\"expandable-root\"\n data-expanded={isExpanded ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-containertoggleable={allowContainerToggle ? '' : undefined}\n >\n {children}\n </div>\n </ExpandableContext.Provider>\n )\n})\n\n//\n// ExpandableHeader\n//\n\nexport type ExpandableHeaderProps = HTMLAttributes<HTMLDivElement> & {\n isUsingDefaultIcon?: boolean,\n}\n\nexport const ExpandableHeader = forwardRef<HTMLDivElement, ExpandableHeaderProps>(function ExpandableHeader({\n children,\n isUsingDefaultIcon = true,\n ...props\n}, ref) {\n const { isExpanded, toggle, ids, setIds, disabled } = useExpandableContext()\n useEffect(() => {\n if (props.id) {\n setIds(prevState => ({ ...prevState, header: props.id }))\n }\n }, [props.id, setIds])\n\n return (\n <div\n {...props}\n ref={ref}\n id={ids.header}\n\n onClick={event => {\n event.stopPropagation()\n props.onClick?.(event)\n toggle()\n }}\n\n data-name=\"expandable-header\"\n data-expanded={isExpanded ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n\n aria-expanded={isExpanded}\n aria-controls={ids.content}\n aria-disabled={disabled || undefined}\n >\n {children}\n <Visibility isVisible={isUsingDefaultIcon}>\n <ExpansionIcon isExpanded={isExpanded} disabled={disabled} />\n </Visibility>\n </div>\n )\n})\n\n//\n// ExpandableContent\n//\n\nexport type ExpandableContentProps = HTMLAttributes<HTMLDivElement> & {\n forceMount?: boolean,\n}\n\nexport const ExpandableContent = forwardRef<HTMLDivElement, ExpandableContentProps>(function ExpandableContent({\n children,\n forceMount = false,\n ...props\n}, ref) {\n const { isExpanded, ids, setIds } = useExpandableContext()\n useEffect(() => {\n if (props.id) {\n setIds(prevState => ({ ...prevState, content: props.id }))\n }\n }, [props.id, setIds])\n\n const { transitionState, callbacks } = useTransitionState({ isOpen: isExpanded })\n\n return (\n <div\n {...props}\n ref={ref}\n id={ids.content}\n\n {...callbacks}\n\n data-name=\"expandable-content\"\n data-expanded={isExpanded ? '' : undefined}\n data-state={transitionState}\n >\n <Visibility isVisible={forceMount || isExpanded}>\n {children}\n </Visibility>\n </div>\n )\n})\n\n\n//\n// Composite / Legacy Components\n//\n\ntype IconBuilder = (expanded: boolean) => ReactNode\n\nexport type ExpandableProps = PropsWithChildren<{\n id?: string,\n label: ReactNode,\n icon?: IconBuilder,\n isExpanded?: boolean,\n onChange?: (isExpanded: boolean) => void,\n clickOnlyOnHeader?: boolean,\n disabled?: boolean,\n className?: string,\n headerClassName?: string,\n contentClassName?: string,\n contentExpandedClassName?: string,\n}>\n\nexport const Expandable = forwardRef<HTMLDivElement, ExpandableProps>(function Expandable({\n children,\n id,\n label,\n icon,\n isExpanded,\n onChange,\n clickOnlyOnHeader = true,\n disabled = false,\n className,\n headerClassName,\n contentClassName,\n contentExpandedClassName,\n}, ref) {\n\n const defaultIcon = useCallback((expanded: boolean) => <ExpansionIcon isExpanded={expanded} />, [])\n const iconBuilder = icon ?? defaultIcon\n\n return (\n <ExpandableRoot\n ref={ref}\n id={id}\n isExpanded={isExpanded}\n onExpandedChange={onChange}\n disabled={disabled}\n allowContainerToggle={!clickOnlyOnHeader}\n className={className}\n >\n <ExpandableHeader className={headerClassName}>\n {label}\n {/* We use a consumer here because the iconBuilder needs the state which is inside the provider */}\n <ExpandableContext.Consumer>\n {ctx => iconBuilder(ctx?.isExpanded ?? false)}\n </ExpandableContext.Consumer>\n </ExpandableHeader>\n <ExpandableContext.Consumer>\n {ctx => (\n <ExpandableContent\n className={clsx(contentClassName, { [contentExpandedClassName ?? '']: !!ctx?.isExpanded })}\n >\n {children}\n </ExpandableContent>\n )}\n </ExpandableContext.Consumer>\n\n </ExpandableRoot>\n )\n})\n\nexport const ExpandableUncontrolled = forwardRef<HTMLDivElement, ExpandableProps>(function ExpandableUncontrolled({\n isExpanded,\n onChange,\n ...props\n}, ref) {\n const [usedIsExpanded, setUsedIsExpanded] = useOverwritableState(isExpanded, onChange)\n\n return (\n <Expandable\n {...props}\n ref={ref}\n isExpanded={usedIsExpanded}\n onChange={setUsedIsExpanded}\n />\n )\n})","import type React from 'react'\nimport { useEffect, useState } from 'react'\nimport { resolveSetState } from '@/src/utils/resolveSetState'\n\nexport const useOverwritableState = <T>(overwriteValue?: T, onChange?: (value: T) => void): [T, React.Dispatch<React.SetStateAction<T>>] => {\n const [state, setState] = useState<T>(overwriteValue)\n\n useEffect(() => {\n setState(overwriteValue)\n }, [overwriteValue])\n\n const onChangeWrapper: React.Dispatch<React.SetStateAction<T>> = (action) => {\n const resolved = resolveSetState(action, state)\n setState(resolved)\n onChange?.(resolved)\n }\n\n return [state, onChangeWrapper]\n}","import type { ReactNode } from 'react'\nimport type { ExpandableProps } from './Expandable'\nimport { ExpandableContent, ExpandableHeader, ExpandableRoot } from './Expandable'\n\nexport type FAQItem = Pick<ExpandableProps, 'isExpanded' | 'className'> & {\n title: string,\n content: ReactNode,\n}\n\nexport type FAQSectionProps = {\n entries: FAQItem[],\n}\n\n// TODO add a descirption\nexport const FAQSection = ({\n entries,\n}: FAQSectionProps) => {\n return (\n <ul className=\"flex-col-4\">\n {entries.map(({ title, content, ...restProps }, index) => (\n <li key={index}>\n <ExpandableRoot\n {...restProps}\n allowContainerToggle={true}\n >\n <ExpandableHeader>\n {title}\n </ExpandableHeader>\n <ExpandableContent>\n {content}\n </ExpandableContent>\n </ExpandableRoot>\n </li>\n ))}\n </ul>\n )\n}\n","import type { HTMLAttributes, RefObject, ReactNode } from 'react'\nimport { forwardRef, useImperativeHandle, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { clsx } from 'clsx'\nimport type { UseFloatingElementOptions } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\n\nexport type FloatingContainerProps = HTMLAttributes<HTMLDivElement> & UseFloatingElementOptions & {\n anchor?: RefObject<HTMLElement>,\n /**\n * Polls the position of the anchor every 100ms\n *\n * Use sparingly\n */\n backgroundOverlay?: ReactNode,\n}\n\n/**\n * A floating container that aligns to its anchor\n *\n * Notes:\n * - to hide it use the hidden attribute as other means break the functionality\n */\nexport const FloatingContainer = forwardRef<HTMLDivElement, FloatingContainerProps>(function FloatingContainer({\n children,\n backgroundOverlay,\n anchor,\n isPolling = false,\n pollingInterval = 100,\n verticalAlignment = 'afterEnd',\n horizontalAlignment = 'afterStart',\n screenPadding = 16,\n gap = 4,\n ...props\n}, forwardRef) {\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardRef, () => innerRef.current)\n\n const position = useFloatingElement({\n active: !props.hidden,\n containerRef: innerRef,\n anchorRef: anchor,\n isPolling,\n pollingInterval,\n verticalAlignment,\n horizontalAlignment,\n gap,\n screenPadding,\n })\n\n return createPortal(\n <>\n {backgroundOverlay}\n <div\n {...props}\n ref={innerRef}\n\n data-positioned={position && !props.hidden ? '' : undefined}\n\n style={{\n position: 'fixed',\n overflow: 'hidden',\n opacity: position ? undefined : 0, // hide when position calculation isn't done yet\n transition: position ? `top ${pollingInterval}ms linear, left ${pollingInterval}ms linear` : undefined,\n ...position,\n ...props.style\n }}\n className={clsx('motion-safe:duration-100 motion-reduce:duration-0', props.className)}\n >\n {children}\n </div>\n </>,\n document.body\n )\n})","'use client'\n\nimport type { CSSProperties, RefObject } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { clamp } from '@/src/utils/math'\nimport { useIsMounted } from '@/src/hooks/focus/useIsMounted'\n\nexport type FloatingElementAlignment = 'beforeStart' | 'afterStart' | 'center' | 'beforeEnd' | 'afterEnd'\n\ntype RectangleBounds = {\n top: number,\n right: number,\n bottom: number,\n left: number,\n width: number,\n height: number,\n}\n\ntype CalculatePositionOptions = {\n verticalAlignment?: FloatingElementAlignment,\n horizontalAlignment?: FloatingElementAlignment,\n screenPadding?: number,\n gap?: number,\n}\n\ntype CalculatePositionProps = {\n windowRect: RectangleBounds,\n containerRect: RectangleBounds,\n anchorRect: RectangleBounds,\n options: CalculatePositionOptions,\n}\n\ntype UseFloatingElementStyle = {\n left: number,\n top: number,\n maxWidth: number,\n maxHeight: number,\n}\n\nfunction calculatePosition({\n windowRect,\n containerRect,\n anchorRect,\n options,\n}: CalculatePositionProps): UseFloatingElementStyle {\n const { verticalAlignment, horizontalAlignment, gap, screenPadding } = options\n const windowWidth = windowRect.width\n const windowHeight = windowRect.height\n\n const maxWidth = windowWidth - 2 * screenPadding\n const maxHeight = windowHeight - 2 * screenPadding\n\n const width = Math.min(containerRect.width, maxWidth)\n const height = Math.min(containerRect.height, maxHeight)\n\n const leftSuggestion = {\n beforeStart: anchorRect.left - width - gap,\n afterStart: anchorRect.left,\n center: anchorRect.left + anchorRect.width / 2 - width / 2,\n beforeEnd: anchorRect.right - width,\n afterEnd: anchorRect.right + gap,\n }[horizontalAlignment]\n\n const topSuggestion = {\n beforeStart: anchorRect.top - height - gap,\n afterStart: anchorRect.top,\n center: anchorRect.top + anchorRect.height / 2 - height / 2,\n beforeEnd: anchorRect.bottom - height,\n afterEnd: anchorRect.bottom + gap,\n }[verticalAlignment]\n\n const left = clamp(leftSuggestion, [\n screenPadding,\n windowWidth - screenPadding - width,\n ])\n\n const top = clamp(topSuggestion, [\n screenPadding,\n windowHeight - screenPadding - height,\n ])\n\n return {\n left,\n top,\n maxWidth,\n maxHeight,\n }\n}\n\nexport type UseFloatingElementOptions = CalculatePositionOptions & {\n isPolling?: boolean,\n pollingInterval?: number,\n}\n\nexport type UseFloatingElementProps = UseFloatingElementOptions & {\n containerRef: RefObject<HTMLElement>,\n anchorRef: RefObject<HTMLElement>,\n windowRef?: RefObject<HTMLElement>,\n active?: boolean,\n}\n\nexport function useFloatingElement({\n active = true,\n windowRef,\n anchorRef,\n containerRef,\n isPolling = false,\n pollingInterval = 100,\n verticalAlignment = 'afterEnd',\n horizontalAlignment = 'afterStart',\n screenPadding = 16,\n gap = 4,\n}: UseFloatingElementProps) {\n const [style, setStyle] = useState<CSSProperties>()\n const isMounted = useIsMounted()\n\n const calculate = useCallback(() => {\n const containerRect = containerRef.current?.getBoundingClientRect()\n if(!containerRect) {\n return\n }\n const windowRect: RectangleBounds = windowRef?.current?.getBoundingClientRect() ?? {\n top: 0,\n bottom: window.innerHeight,\n left: 0,\n right: window.innerWidth,\n width: window.innerWidth,\n height: window.innerHeight,\n }\n const anchorElement = anchorRef?.current\n if (anchorRef && !anchorElement) {\n console.warn('FloatingContainer anchor provided, but its value is undefined')\n }\n const anchorRect: RectangleBounds = anchorElement?.getBoundingClientRect() ?? windowRect\n\n const calculateProps: CalculatePositionProps = {\n windowRect,\n anchorRect,\n containerRect,\n options: {\n horizontalAlignment,\n verticalAlignment,\n screenPadding,\n gap,\n }\n }\n setStyle(calculatePosition(calculateProps))\n }, [anchorRef, containerRef, gap, horizontalAlignment, screenPadding, verticalAlignment, windowRef])\n\n useEffect(() => {\n if (active && isMounted) {\n calculate()\n } else {\n setStyle(undefined)\n }\n }, [calculate, active, isMounted])\n\n useEffect(() => {\n if(!containerRef.current && active) {\n return\n }\n window.addEventListener('resize', calculate)\n let timeout: NodeJS.Timeout\n if (isPolling) {\n timeout = setInterval(calculate, pollingInterval)\n }\n return () => {\n window.removeEventListener('resize', calculate)\n if (timeout) {\n clearInterval(timeout)\n }\n }\n }, [active, calculate, containerRef, isPolling, pollingInterval])\n\n return style\n}","export const clamp = (value: number, range: [number, number] = [0, 1]): number => {\n const [min, max] = range\n return Math.min(Math.max(value, min), max)\n}\n","import type {\n UIEvent,\n ReactNode\n} from 'react'\nimport {\n useRef,\n useState,\n useLayoutEffect,\n useMemo,\n useCallback\n} from 'react'\nimport clsx from 'clsx'\nimport { range } from '@/src/utils/array'\nimport { Button } from '../user-interaction/Button'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport { Visibility } from './Visibility'\n\nexport interface InfiniteScrollProps {\n itemCount: number,\n /** How many items to keep in the DOM at once (default: 30) */\n bufferSize?: number,\n /** How many items to add tp the DOM when reaching one end at once (default: 7) */\n stepSize?: number,\n /** Pixels from edge to trigger a fetch/shift (default: 30) */\n scrollThreshold?: number,\n /** Initial index to center on or start at (optional) */\n initialIndex?: number,\n /** Render prop for each item */\n children: (index: number) => ReactNode,\n /** Optional classname for the scroll container */\n className?: string,\n /** Optional style for the container */\n style?: React.CSSProperties,\n}\n\nexport function InfiniteScroll({\n children,\n itemCount,\n bufferSize = 30,\n scrollThreshold = 30,\n stepSize = 7,\n initialIndex = 0,\n className,\n style,\n}: InfiniteScrollProps) {\n if (stepSize > bufferSize) {\n throw new Error('InfiniteScroll: stepSize <= bufferSize must hold')\n }\n if (itemCount < 1) {\n throw new Error('InfiniteScroll: itemCount > 0 must hold')\n }\n const items = useMemo(() => range(itemCount), [itemCount])\n const containerRef = useRef<HTMLDivElement>(null)\n const snapshotRef = useRef({ scrollHeight: 0, scrollTop: 0, fromTop: false })\n\n const [windowState, setWindowState] = useState(() => {\n let index = initialIndex\n if (index < 0) {\n index = 0\n }\n\n const halfBuffer = Math.floor(bufferSize / 2)\n const safeStart = Math.max(0, initialIndex - halfBuffer)\n\n return {\n start: safeStart,\n end: Math.min(items.length, safeStart + bufferSize)\n }\n })\n\n const addToStart = useCallback((amount = stepSize) => {\n setWindowState(prev => {\n const newStart = Math.max(0, prev.start - amount)\n const newEnd = Math.min(items.length, newStart + bufferSize)\n return { start: newStart, end: newEnd }\n })\n }, [bufferSize, items.length, stepSize])\n\n const addToEnd = useCallback((amount = stepSize) => {\n setWindowState(prev => {\n const newEnd = Math.min(items.length, prev.end + amount)\n const newStart = Math.max(0, newEnd - bufferSize)\n return { start: newStart, end: newEnd }\n })\n }, [bufferSize, items.length, stepSize])\n\n const handleScroll = (e: UIEvent<HTMLElement>) => {\n const { scrollTop, scrollHeight, clientHeight } = e.currentTarget\n\n if (scrollTop < scrollThreshold && windowState.start > 0) {\n snapshotRef.current = { scrollHeight, scrollTop, fromTop: true }\n addToStart()\n }\n else if (scrollTop + clientHeight > scrollHeight - scrollThreshold && windowState.end < items.length) {\n snapshotRef.current = { scrollHeight, scrollTop, fromTop: false }\n addToEnd()\n }\n }\n\n useLayoutEffect(() => {\n const container = containerRef.current\n if (!container || !snapshotRef.current.fromTop) return\n\n const heightDifference = container.scrollHeight - snapshotRef.current.scrollHeight\n\n if (heightDifference > 0) {\n container.scrollTop = snapshotRef.current.scrollTop + heightDifference\n }\n snapshotRef.current.fromTop = false\n }, [windowState])\n\n const visibleItems = useMemo(() =>\n items.slice(windowState.start, windowState.end),\n [items, windowState])\n\n const isUsingInfiteScroll = itemCount > bufferSize\n\n return (\n <div\n ref={containerRef}\n onScroll={isUsingInfiteScroll ? handleScroll : undefined}\n className={clsx('overflow-y-auto', className)}\n style={style}\n >\n <Visibility isVisible={windowState.start > 0}>\n <Button color=\"neutral\" onClick={() => addToStart()}>\n <ChevronUp/>\n </Button>\n </Visibility>\n {visibleItems.map((index) => children(index))}\n <Visibility isVisible={windowState.end < itemCount - 1}>\n <Button color=\"neutral\" onClick={() => addToEnd()}>\n <ChevronDown/>\n </Button>\n </Visibility>\n </div>\n )\n}","import type { HTMLAttributes, RefObject } from 'react'\nimport React, { createContext, forwardRef, useCallback, useContext, useEffect, useRef, useState } from 'react'\nimport { clsx } from 'clsx'\nimport { match } from '@/src/utils/match'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\n//\n// Context\n//\ntype RegisteredItem = {\n id: string,\n value: string,\n disabled: boolean,\n ref: React.RefObject<HTMLLIElement>,\n}\n\ntype ListBoxContextType = {\n registerItem: (item: RegisteredItem) => void,\n unregisterItem: (id: string) => void,\n\n highlightedId?: string,\n setHighlightedId: (id: string) => void,\n\n onItemClick: (id: string) => void,\n isSelected: (value: string) => boolean,\n}\n\nconst ListBoxContext = createContext<ListBoxContextType | null>(null)\n\nfunction useListBoxContext() {\n const ctx = useContext(ListBoxContext)\n if (!ctx) {\n throw new Error('ListBoxItem must be used within a ListBoxPrimitive')\n }\n return ctx\n}\n\n\n/*\n * ListBoxItem\n */\nexport type ListBoxItemProps = HTMLAttributes<HTMLLIElement> & {\n value: string,\n disabled?: boolean,\n}\n\nexport const ListBoxItem = forwardRef<HTMLLIElement, ListBoxItemProps>(\n function ListBoxItem({ value, disabled = false, children, className, ...rest }, ref) {\n const {\n registerItem,\n unregisterItem,\n highlightedId,\n setHighlightedId,\n onItemClick,\n isSelected,\n } = useListBoxContext()\n\n const itemRef = useRef<HTMLLIElement>(null)\n const id = React.useId()\n\n // Register with parent\n useEffect(() => {\n registerItem({ id, value, disabled, ref: itemRef })\n return () => unregisterItem(id)\n }, [id, value, disabled, registerItem, unregisterItem])\n\n const isHighlighted = highlightedId === id\n const selected = isSelected(value)\n\n return (\n <li\n ref={(node) => {\n itemRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as RefObject<HTMLLIElement | null>).current = node\n }}\n id={id}\n role=\"option\"\n aria-disabled={disabled}\n aria-selected={selected}\n data-highlighted={isHighlighted ? '' : undefined}\n data-selected={selected ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n className={clsx(\n 'flex-row-1 items-center px-2 py-1 rounded-md',\n 'data-highlighted:bg-primary/20',\n 'data-disabled:text-disabled data-disabled:cursor-not-allowed',\n 'not-data-disabled:cursor-pointer',\n className\n )}\n onClick={() => {\n if (!disabled) onItemClick(id)\n }}\n onMouseEnter={() => {\n if (!disabled) {\n setHighlightedId(id)\n }\n }}\n {...rest}\n >\n {children ?? value}\n </li>\n )\n }\n)\n\ntype ListBoxOrientation = 'vertical' | 'horizontal'\n\n//\n// ListBoxPrimitive\n//\nexport type ListBoxPrimitiveProps = HTMLAttributes<HTMLUListElement> & {\n value?: string[],\n onItemClicked?: (value: string) => void,\n onSelectionChanged?: (value: string[]) => void,\n isSelection?: boolean,\n isMultiple?: boolean,\n orientation?: ListBoxOrientation,\n}\n\n\nexport const ListBoxPrimitive = forwardRef<HTMLUListElement, ListBoxPrimitiveProps>(\n function ListBoxPrimitive({\n value,\n onSelectionChanged,\n onItemClicked,\n isSelection = false,\n isMultiple = false,\n orientation = 'vertical',\n ...props\n }, ref) {\n const itemsRef = useRef<RegisteredItem[]>([])\n const [highlightedIndex, setHighlightedIndex] = useState<number | undefined>(undefined)\n\n const registerItem = useCallback((item: RegisteredItem) => {\n itemsRef.current.push(item)\n itemsRef.current.sort((a, b) => {\n const aEl = a.ref.current\n const bEl = b.ref.current\n if (!aEl || !bEl) return 0\n return aEl.compareDocumentPosition(bEl) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n }, [])\n\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter(i => i.id !== id)\n }, [])\n\n const isSelected = useCallback(\n (val: string) => (value ?? []).includes(val),\n [value]\n )\n\n const onItemClickedHandler = useCallback(\n (id: string) => {\n const index = itemsRef.current.findIndex(i => i.id === id)\n if (index === -1) {\n console.error('ListBoxItem provided an invalid id')\n return\n }\n const item = itemsRef.current[index]\n const val = item.value\n onItemClicked?.(val)\n setHighlightedIndex(index)\n if (!isSelection) return\n if (!isMultiple) {\n onSelectionChanged?.([val])\n } else {\n if (isSelected(val)) {\n onSelectionChanged?.((value ?? []).filter(v => v !== val))\n } else {\n onSelectionChanged?.([...(value ?? []), val])\n }\n }\n },\n [onItemClicked, isSelection, isMultiple, onSelectionChanged, isSelected, value]\n )\n\n const setHighlightedId = useCallback((id: string) => {\n const index = itemsRef.current.findIndex(i => i.id === id)\n if (index !== -1) {\n setHighlightedIndex(index)\n }\n }, [])\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (highlightedIndex !== undefined) {\n itemsRef.current[highlightedIndex]?.ref.current?.scrollIntoView({ block: 'nearest', behavior: 'auto' })\n }\n }, [highlightedIndex])\n\n const highlightedItem: RegisteredItem | undefined = itemsRef.current[highlightedIndex]\n const ctxValue: ListBoxContextType = {\n registerItem,\n unregisterItem,\n highlightedId: highlightedItem?.id,\n setHighlightedId,\n onItemClick: onItemClickedHandler,\n isSelected,\n }\n\n const moveHighlight = (delta: number) => {\n if (itemsRef.current.length === 0) return\n let nextIndex = highlightedIndex ?? -1\n for (let i = 0; i < itemsRef.current.length; i++) {\n nextIndex = (nextIndex + delta + itemsRef.current.length) % itemsRef.current.length\n if (!itemsRef.current[nextIndex].disabled) break\n }\n setHighlightedIndex(nextIndex)\n }\n\n return (\n <ListBoxContext.Provider value={ctxValue}>\n <ul\n ref={ref}\n {...props}\n onFocus={event => {\n if (highlightedIndex === undefined) {\n const firstEnabled = itemsRef.current.findIndex(i => !i.disabled)\n setHighlightedIndex(firstEnabled !== -1 ? firstEnabled : undefined)\n }\n props.onFocus?.(event)\n }}\n onBlur={event => {\n setHighlightedIndex(undefined)\n props.onBlur?.(event)\n }}\n onKeyDown={(event) => {\n switch (event.key) {\n case match(orientation, {\n vertical: 'ArrowDown',\n horizontal: 'ArrowUp'\n }):\n moveHighlight(1)\n event.preventDefault()\n break\n case match(orientation, {\n vertical: 'ArrowUp',\n horizontal: 'ArrowDown'\n }):\n moveHighlight(-1)\n event.preventDefault()\n break\n case 'Home':\n setHighlightedIndex(itemsRef.current.findIndex(i => !i.disabled))\n event.preventDefault()\n break\n case 'End':\n for (let i = itemsRef.current.length - 1; i >= 0; i--) {\n if (!itemsRef.current[i].disabled) {\n setHighlightedIndex(i)\n break\n }\n }\n event.preventDefault()\n break\n case 'Enter':\n case ' ':\n if (highlightedIndex !== undefined) {\n event.preventDefault()\n onItemClickedHandler(itemsRef.current[highlightedIndex].id)\n }\n break\n }\n props.onKeyDown?.(event)\n }}\n role=\"listbox\"\n aria-multiselectable={isSelection ? isMultiple : undefined}\n aria-orientation={orientation}\n tabIndex={0}\n >\n {props.children}\n </ul>\n </ListBoxContext.Provider>\n )\n }\n)\n\n/*\n * ListBoxMultiple\n */\nexport type ListBoxMultipleProps = Omit<ListBoxPrimitiveProps, 'isMultiple'>\nexport const ListBoxMultiple = ({ ...props }: ListBoxMultipleProps) => {\n return (\n <ListBoxPrimitive {...props}/>\n )\n}\n\nexport type ListBoxMultipleUncontrolledProps = ListBoxMultipleProps\nexport const ListBoxMultipleUncontrolled = ({\n value: initialValue,\n onSelectionChanged,\n ...props\n}: ListBoxMultipleUncontrolledProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onSelectionChanged)\n\n return (\n <ListBoxMultiple\n {...props}\n value={value}\n onSelectionChanged={setValue}\n />\n )\n}\n\nexport type ListBoxProps = Omit<ListBoxPrimitiveProps, 'isMultiple' | 'value' | 'onSelectionChanged'> & {\n value?: string,\n onSelectionChanged?: (value: string) => void,\n}\nexport const ListBox = forwardRef<HTMLUListElement, ListBoxProps>(function ListBox({\n value,\n onSelectionChanged,\n ...props\n}, ref) {\n return (\n <ListBoxPrimitive\n ref={ref}\n value={value !== undefined ? [value] : undefined}\n onSelectionChanged={(newValue) => {\n onSelectionChanged(newValue[0] ?? value)\n }}\n isMultiple={false}\n {...props}\n />\n )\n})\n\nexport type ListBoxUncontrolledProps = ListBoxProps\nexport const ListBoxUncontrolled = ({\n value: initialValue,\n onSelectionChanged,\n ...props\n}: ListBoxUncontrolledProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onSelectionChanged)\n\n return (\n <ListBox\n {...props}\n value={value}\n onSelectionChanged={setValue}\n />\n )\n}","export const match = <K extends string | number | symbol, V>(key: K, values: Record<K, V>) => {\n return values[key]\n}","type ASTNodeModifierType =\n 'none'\n | 'italic'\n | 'bold'\n | 'underline'\n | 'font-space'\n | 'primary'\n | 'secondary'\n | 'warn'\n | 'positive'\n | 'negative'\n\nconst astNodeInserterType = ['helpwave', 'newline'] as const\ntype ASTNodeInserterType = typeof astNodeInserterType[number]\ntype ASTNodeDefaultType = 'text'\n\ntype ASTNode = {\n type: ASTNodeModifierType,\n children: ASTNode[],\n} | {\n type: ASTNodeInserterType,\n} | {\n type: ASTNodeDefaultType,\n text: string,\n}\n\nexport type ASTNodeInterpreterProps = {\n node: ASTNode,\n isRoot?: boolean,\n className?: string,\n}\nexport const ASTNodeInterpreter = ({\n node,\n isRoot = false,\n className = '',\n}: ASTNodeInterpreterProps) => {\n switch (node.type) {\n case 'newline':\n return <br/>\n case 'text':\n return isRoot ? <span className={className}>{node.text}</span> : node.text\n case 'helpwave':\n return (<span className=\"font-bold font-space no-underline\">helpwave</span>)\n case 'none':\n return isRoot ? (\n <span className={className}>{node.children.map((value, index) => (\n <ASTNodeInterpreter key={index}\n node={value}/>\n ))}</span>\n ) :\n <>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</>\n case 'bold':\n return <b>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</b>\n case 'italic':\n return <i>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</i>\n case 'underline':\n return (<u>{node.children.map((value, index) => (<ASTNodeInterpreter key={index} node={value}/>))}</u>)\n case 'font-space':\n return (\n <span className=\"font-space\">{node.children.map((value, index) => (\n <ASTNodeInterpreter key={index}\n node={value}/>\n ))}</span>\n )\n case 'primary':\n return (\n <span className=\"text-primary\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'secondary':\n return (\n <span className=\"text-secondary\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'warn':\n return (\n <span className=\"text-warning\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'positive':\n return (\n <span className=\"text-positive\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'negative':\n return (\n <span className=\"text-negative\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n default:\n return null\n }\n}\n\nconst modifierIdentifierMapping = [\n { id: 'i', name: 'italic' },\n { id: 'b', name: 'bold' },\n { id: 'u', name: 'underline' },\n { id: 'space', name: 'font-space' },\n { id: 'primary', name: 'primary' },\n { id: 'secondary', name: 'secondary' },\n { id: 'warn', name: 'warn' },\n { id: 'positive', name: 'positive' },\n { id: 'negative', name: 'negative' },\n] as const\n\nconst inserterIdentifierMapping = [\n { id: 'helpwave', name: 'helpwave' },\n { id: 'newline', name: 'newline' }\n] as const\nconst parseMarkdown = (\n text: string,\n commandStart: string = '\\\\',\n open: string = '{',\n close: string = '}'\n): ASTNode => {\n let start = text.indexOf(commandStart)\n const children: ASTNode[] = []\n\n // parse the text step by step\n while (text !== '') {\n if (start === -1) {\n children.push({\n type: 'text',\n text\n })\n break\n }\n children.push(parseMarkdown(text.substring(0, start)))\n text = text.substring(start)\n if (text.length <= 1) {\n children.push({\n type: 'text',\n text\n })\n text = ''\n continue\n }\n const simpleReplace = [commandStart, open, close]\n if (simpleReplace.some(value => text[1] === value)) {\n children.push({\n type: 'text',\n text: simpleReplace.find(value => text[1] === value)!\n })\n text = text.substring(2)\n start = text.indexOf(commandStart)\n continue\n }\n const inserter = inserterIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n if (inserter) {\n children.push({\n type: inserter.name,\n })\n text = text.substring(inserter.id.length + 1)\n start = text.indexOf(commandStart)\n continue\n }\n const modifier = modifierIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n if (modifier) {\n // check brackets\n if (text[modifier.id.length + 1] !== open) {\n children.push({\n type: 'text',\n text: text.substring(0, modifier.id.length + 1)\n })\n text = text.substring(modifier.id.length + 2)\n start = text.indexOf(commandStart)\n continue\n }\n let closing = -1\n let index = modifier.id.length + 2\n let counter = 1\n let escaping = false\n while (index < text.length) {\n if (text[index] === open && !escaping) {\n counter++\n }\n if (text[index] === close && !escaping) {\n counter--\n if (counter === 0) {\n closing = index\n break\n }\n }\n escaping = text[index] === commandStart\n index++\n }\n\n if (closing !== -1) {\n children.push({\n type: modifier.name,\n children: [parseMarkdown(text.substring(modifier.id.length + 2, closing))]\n })\n text = text.substring(closing + 1)\n start = text.indexOf(commandStart)\n continue\n }\n }\n // nothing could be applied to command start\n children.push({\n type: 'text',\n text: text[0]!\n })\n text = text.substring(1)\n start = text.indexOf(commandStart)\n }\n\n return {\n type: 'none',\n children\n }\n}\n\nconst optimizeTree = (node: ASTNode) => {\n if (node.type === 'text') {\n return !node.text ? undefined : node\n }\n if (astNodeInserterType.some(value => value === node.type)) {\n return node\n }\n\n const currentNode = node as\n { type: ASTNodeModifierType, children: ASTNode[] }\n\n if (currentNode.children.length === 0) {\n return undefined\n }\n\n let children: ASTNode[] = []\n for (let i = 0; i < currentNode.children.length; i++) {\n const child = optimizeTree(currentNode.children[i]!)\n if (!child) {\n continue\n }\n if (child.type === 'none') {\n children.push(...child.children)\n } else {\n children.push(child)\n }\n }\n\n currentNode.children = children\n children = []\n\n for (let i = 0; i < currentNode.children.length; i++) {\n const child = currentNode.children[i]!\n if (child) {\n if (child.type === 'text' && children[children.length - 1]?.type === 'text') {\n (children[children.length - 1]! as { type: ASTNodeDefaultType, text: string }).text += child.text\n } else {\n children.push(child)\n }\n }\n }\n currentNode.children = children\n return currentNode\n}\n\nexport type MarkdownInterpreterProps = {\n text: string,\n className?: string,\n}\n\nexport const MarkdownInterpreter = ({ text, className }: MarkdownInterpreterProps) => {\n const tree = parseMarkdown(text)\n const optimizedTree = optimizeTree(tree)!\n return <ASTNodeInterpreter node={optimizedTree} isRoot={true} className={className}/>\n}\n","import type { Dispatch, HTMLAttributes, KeyboardEvent, PropsWithChildren, ReactNode, RefObject, SetStateAction } from 'react'\nimport { useCallback, useId, useState } from 'react'\nimport { createContext, useContext, useEffect, useRef } from 'react'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { createPortal } from 'react-dom'\nimport { Visibility } from './Visibility'\n\nexport interface TabInfo {\n id: string,\n labelId: string,\n label: ReactNode,\n}\n\ntype TabState = {\n activeId: string | null,\n infos: TabInfo[],\n}\n\ntype PortalState = {\n id: string,\n ref: RefObject<HTMLElement>,\n}\n\nexport interface TabContextType {\n tabs: {\n activeId: string | null,\n setActiveId: Dispatch<SetStateAction<string | null>>,\n register: (info: TabInfo) => void,\n unregister: (id: string) => void,\n info?: TabInfo[],\n },\n portal: {\n id: string | null,\n element: HTMLElement | null,\n setPortal: (state: PortalState | null) => void,\n },\n}\n\nconst TabContext = createContext<TabContextType | null>(null)\n\nexport function useTabContext(): TabContextType {\n const context = useContext(TabContext)\n if (!context) throw new Error('useTabContext must be used inside a <TabView>')\n return context\n}\n\nexport type TabSwitcherProps = PropsWithChildren\n\n//\n// TabSwitcher\n//\nexport function TabSwitcher({ children }: TabSwitcherProps) {\n const [state, setState] = useState<TabState>({\n activeId: null,\n infos: [],\n })\n const [portalState, setPortalState] = useState<PortalState>(null)\n\n const register = (info: TabInfo) => {\n setState(prevState => ({\n activeId: prevState.activeId ?? info.id,\n infos: [...prevState.infos, info],\n }))\n }\n const unregister = useCallback((id: string) => {\n setState(prevState => {\n const infos = prevState.infos.filter(value => value.id !== id)\n let activeId = prevState.activeId\n if (activeId === id) {\n const index = prevState.infos.findIndex(value => value.id === id)\n if (infos.length > 0) {\n const newIndex = index % infos.length\n activeId = infos[newIndex].id\n } else {\n activeId = null\n }\n }\n return {\n activeId,\n infos,\n }\n })\n }, [])\n\n const registerPortal = useCallback((state: PortalState) => {\n setPortalState(state)\n }, [])\n\n return (\n <TabContext.Provider\n value={{\n tabs: {\n activeId: state.activeId,\n setActiveId: (activeId: string) => {\n setState(prevState => ({ ...prevState, activeId }))\n },\n register,\n unregister,\n info: state.infos,\n },\n portal: {\n id: portalState?.id ?? null,\n element: portalState?.ref.current ?? null,\n setPortal: registerPortal,\n }\n }}\n >\n {children}\n </TabContext.Provider>\n )\n}\n\n//\n// TabList\n//\ntype TabListProps = HTMLAttributes<HTMLUListElement>\n\nexport function TabList({ ...props }: TabListProps) {\n const { tabs } = useTabContext()\n const { info, activeId, setActiveId: setActive } = tabs\n const refs = useRef<Record<string, HTMLLIElement | null>>({})\n\n const onKeyDown = (e: KeyboardEvent<HTMLUListElement>) => {\n const idx = info.findIndex((tab) => tab.id === activeId)\n if (idx === -1) return\n\n let nextIdx = idx\n if (e.key === 'ArrowRight') {\n nextIdx = (idx + 1) % info.length\n } else if (e.key === 'ArrowLeft') {\n nextIdx = (idx - 1 + info.length) % info.length\n } else {\n return\n }\n\n const nextId = info[nextIdx].id\n setActive(nextId)\n refs.current[nextId]?.focus()\n }\n\n return (\n <ul\n {...props}\n\n onKeyDown={onKeyDown}\n\n data-name={PropsUtil.dataAttributes.name('tab-list', props)}\n\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n >\n {info.map((tabInfo) => (\n <li\n key={tabInfo.id}\n ref={(el) => {\n refs.current[tabInfo.id] = el\n }}\n id={tabInfo.labelId}\n\n {...PropsUtil.aria.click(() => setActive(tabInfo.id))}\n\n data-name=\"tab-list-item\"\n data-active={PropsUtil.dataAttributes.bool(activeId === tabInfo.id)}\n\n role=\"tab\"\n aria-selected={activeId === tabInfo.id}\n aria-controls={activeId}\n tabIndex={activeId === tabInfo.id ? 0 : -1}\n >\n {tabInfo.label}\n </li>\n ))}\n </ul>\n )\n}\n\n\n//\n// TabView\n//\ntype TabViewProps = HTMLAttributes<HTMLDivElement>\n\nexport function TabView({ ...props }: TabViewProps) {\n const generated = useId()\n const id = props.id ?? 'tab-view-' + generated\n const { portal } = useTabContext()\n const { setPortal } = portal\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n setPortal({ id, ref })\n return () => setPortal(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id])\n\n return (\n <div\n {...props}\n ref={ref}\n id={id}\n data-name={PropsUtil.dataAttributes.name('tab-view', props)}\n />\n )\n}\n\ntype TabProps = HTMLAttributes<HTMLDivElement> & {\n label: string,\n}\n\n//\n// TabPanel\n//\nexport function TabPanel({ label, ...props }: TabProps) {\n const { tabs, portal } = useTabContext()\n const { register, unregister, activeId } = tabs\n const generatedId = useId()\n const id = props.id ?? 'tab-panel-' + generatedId\n const labelId = 'tab-list-button-' + generatedId\n\n useEffect(() => {\n register({ id, label, labelId })\n return () => unregister(id)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, label, labelId])\n\n const isActive = activeId === id\n\n const content = (\n <div\n {...props}\n id={id}\n hidden={!isActive}\n\n data-name={PropsUtil.dataAttributes.name('tab-panel')}\n\n role=\"tabpanel\"\n aria-labelledby={labelId}\n >\n <Visibility isVisible={isActive}>\n {props.children}\n </Visibility>\n </div>\n )\n\n if (portal.element) {\n return createPortal(content, portal.element)\n }\n\n return content\n}","import clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '../user-interaction/Button'\n\ntype TextImageColor = 'primary' | 'secondary' | 'dark'\n\nexport type TextImageProps = {\n title: string,\n description: string,\n imageUrl: string,\n onShowMoreClicked?: () => void,\n color?: TextImageColor,\n badge?: string,\n contentClassName?: string,\n className?: string,\n}\n\n/**\n * A Component for layering a Text upon an image\n */\nexport const TextImage = ({\n title,\n description,\n imageUrl,\n onShowMoreClicked,\n color = 'primary',\n badge,\n contentClassName = '',\n className = '',\n}: TextImageProps) => {\n const translation = useHightideTranslation()\n\n const chipColorMapping: Record<TextImageColor, string> = {\n primary: 'text-text-image-primary-background bg-text-image-primary-text',\n secondary: 'text-text-image-secondary-background bg-text-image-secondary-text',\n dark: 'text-text-image-dark-background bg-text-image-dark-text',\n }\n\n const colorMapping: Record<TextImageColor, string> = {\n primary: 'text-text-image-primary-text bg-linear-to-r from-30% from-text-image-primary-background to-text-image-primary-background/55',\n secondary: 'text-text-image-secondary-text bg-linear-to-r from-30% from-text-image-secondary-background to-text-image-secondary-background/55',\n dark: 'text-text-image-dark-text bg-linear-to-r from-30% from-text-image-dark-background to-text-image-dark-background/55',\n }\n\n return (\n <div\n className={clsx('rounded-2xl w-full', className)}\n style={{\n backgroundImage: `url(${imageUrl})`,\n backgroundSize: 'cover',\n }}>\n <div\n className={clsx(`flex-col-2 px-6 py-12 rounded-2xl h-full`, colorMapping[color], contentClassName)}\n >\n {badge && (\n <div className={clsx(`chip-full mb-2 py-2 px-4 w-fit`, chipColorMapping[color])}>\n <span className=\"text-lg font-bold\">{badge}</span>\n </div>\n )}\n <div className=\"flex-col-1 overflow-hidden\">\n <span className=\"typography-title-lg\">{title}</span>\n <span className=\"text-ellipsis overflow-hidden\">{description}</span>\n </div>\n {onShowMoreClicked && (\n <div className=\"flex-row-2 mt-2 underline\">\n <Button\n color=\"neutral\"\n coloringStyle=\"text\"\n onClick={onShowMoreClicked}\n >\n {translation('showMore')}\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n}\n","export type VerticalDividerProps = {\n width?: number,\n height?: number,\n strokeWidth?: number,\n dashGap?: number,\n dashLength?: number,\n}\n\n/**\n * A Component for creating a vertical Divider\n */\nexport const VerticalDivider = ({\n width = 1,\n height = 100,\n strokeWidth = 4,\n dashGap = 4,\n dashLength = 4,\n}: VerticalDividerProps) => {\n return (\n <div style={{ width: width + 'px', height: height + 'px' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <line\n opacity=\"0.5\"\n x1={width / 2}\n y1={height}\n x2={width / 2}\n y2=\"0\"\n stroke=\"url(#paint_linear)\"\n strokeWidth={strokeWidth}\n strokeDasharray={`${dashLength} ${dashLength + dashGap}`}\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint_linear\"\n x1={width / 2}\n y1=\"0\"\n x2={width / 2}\n y2={height}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopOpacity=\"0\" stopColor=\"currentColor\"/>\n <stop offset=\"0.5\" stopColor=\"currentColor\"/>\n <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity=\"0\"/>\n </linearGradient>\n </defs>\n </svg>\n </div>\n )\n}\n","import type { PropsWithChildren } from 'react'\nimport type { ButtonColor } from '../../user-interaction/Button'\nimport { Button } from '../../user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport clsx from 'clsx'\nimport type { DialogProps } from './Dialog'\nimport { Dialog } from './Dialog'\n\nexport type ConfirmDialogType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n text?: string,\n color?: ButtonColor,\n disabled?: boolean,\n}\n\nexport type ConfirmDialogProps = Omit<DialogProps, 'onClose'> & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onConfirm: () => void,\n onDecline?: () => void,\n confirmType?: ConfirmDialogType,\n /**\n * Order: Cancel, Decline, Confirm\n */\n buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Dialog for asking the user for confirmation\n */\nexport const ConfirmDialog = ({\n children,\n onCancel,\n onConfirm,\n onDecline,\n confirmType = 'positive',\n buttonOverwrites,\n className,\n ...restProps\n}: PropsWithChildren<ConfirmDialogProps>) => {\n const translation = useHightideTranslation()\n\n const mapping: Record<ConfirmDialogType, ButtonColor> = {\n neutral: 'neutral',\n negative: 'negative',\n positive: 'positive',\n primary: 'primary',\n }\n\n return (\n <Dialog {...restProps} onClose={onCancel} className={clsx('justify-between', className)}>\n <div className=\"flex-col-2 grow\">\n {children}\n </div>\n <div className=\"flex-row-4 mt-3 justify-end\">\n {onCancel && (\n <Button\n color={buttonOverwrites?.[0].color ?? 'neutral'}\n onClick={onCancel}\n disabled={buttonOverwrites?.[0].disabled ?? false}\n >\n {buttonOverwrites?.[0].text ?? translation('cancel')}\n </Button>\n )}\n {onDecline && (\n <Button\n color={buttonOverwrites?.[1].color ?? 'negative'}\n onClick={onDecline}\n\n disabled={buttonOverwrites?.[1].disabled ?? false}\n >\n {buttonOverwrites?.[1].text ?? translation('decline')}\n </Button>\n )}\n <Button\n color={buttonOverwrites?.[2].color ?? mapping[confirmType]}\n onClick={onConfirm}\n disabled={buttonOverwrites?.[2].disabled ?? false}\n >\n {buttonOverwrites?.[2].text ?? translation('confirm')}\n </Button>\n </div>\n </Dialog>\n )\n}\n","'use client'\n\nimport type { HTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport { useId, useMemo } from 'react'\nimport { useRef } from 'react'\nimport { X } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { useLogOnce } from '@/src/hooks/useLogOnce'\nimport { createPortal } from 'react-dom'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { Visibility } from '../Visibility'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type DialogPosition = 'top' | 'center' | 'none'\n\nexport type DialogProps = HTMLAttributes<HTMLDivElement> & {\n /** Whether the dialog is currently open */\n isOpen: boolean,\n /** Title of the Dialog used for accessibility */\n titleElement: ReactNode,\n /** Description of the Dialog used for accessibility */\n description: ReactNode,\n /** Callback when the dialog tries to close */\n onClose?: () => void,\n /** Styling for the background */\n backgroundClassName?: string,\n /** If true shows a close button and sends onClose on background clicks */\n isModal?: boolean,\n position?: DialogPosition,\n isAnimated?: boolean,\n containerClassName?: string,\n}\n\n/**\n * A generic dialog window which is managed by its parent\n */\nexport const Dialog = ({\n children,\n isOpen,\n titleElement,\n description,\n isModal = true,\n onClose,\n backgroundClassName,\n position = 'center',\n containerClassName,\n ...props\n}: PropsWithChildren<DialogProps>) => {\n const translation = useHightideTranslation()\n const generatedId = useId()\n const ids = useMemo(() => ({\n container: `dialog-container-${generatedId}`,\n background: `dialog-background-${generatedId}`,\n content: props.id ?? `dialog-content-${generatedId}`\n }), [generatedId, props.id])\n const ref = useRef<HTMLDivElement>(null)\n\n const onCloseWrapper = () => {\n if (!isModal) return\n onClose?.()\n }\n\n useLogOnce('Dialog: onClose should be defined for modal dialogs', isModal && !onClose)\n\n const { isVisible, transitionState, callbacks } = useTransitionState({ isOpen })\n\n useFocusTrap({\n container: ref,\n active: isVisible,\n focusFirst: true,\n })\n\n const { zIndex } = useOverlayRegistry({\n isActive: isVisible,\n })\n\n if (!isVisible) return\n\n return createPortal(\n <div\n id={ids.container}\n\n data-name=\"dialog-container\"\n data-open={PropsUtil.dataAttributes.bool(isOpen)}\n\n className={containerClassName}\n style={{ zIndex }}\n >\n <div\n id={ids.background}\n\n onClick={onCloseWrapper}\n\n data-name=\"dialog-background\"\n data-state={transitionState}\n\n aria-hidden={true}\n\n className={backgroundClassName}\n />\n <div\n {...props}\n id={ids.content}\n ref={ref}\n\n onKeyDown={event => {\n if (event.key === 'Escape') {\n onCloseWrapper()\n }\n }}\n {...callbacks}\n\n data-name={PropsUtil.dataAttributes.name('dialog-content', props)}\n data-state={transitionState}\n data-position={position}\n\n className={props.className}\n >\n <div className=\"typography-title-lg mr-8\">\n {titleElement}\n </div>\n <Visibility isVisible={!!description}>\n <div className=\"text-description\">\n {description}\n </div>\n </Visibility>\n <Visibility isVisible={isModal}>\n <div\n className=\"absolute top-0 right-0\"\n style={{\n paddingTop: 'inherit',\n paddingRight: 'inherit'\n }}\n >\n <Button\n layout=\"icon\"\n color=\"neutral\"\n size=\"xs\"\n aria-label={translation('close')}\n onClick={onCloseWrapper}\n >\n <X />\n </Button>\n </div>\n </Visibility>\n {children}\n </div>\n </div>\n , document.body\n )\n}","import { useEffect, useState } from 'react'\n\ntype OptionsResolved = {\n type?: 'info' | 'error' | 'warning',\n}\n\nconst defaultOptions: OptionsResolved = {\n type: 'warning',\n}\n\ntype Options = Partial<OptionsResolved>\n\nexport const useLogOnce = (\n message: string,\n condition: boolean,\n options?: Options\n) => {\n const [hasLogged, setHasLogged] = useState<boolean>(false)\n const { type } = { ...defaultOptions, ...options }\n\n useEffect(() => {\n if (!hasLogged && condition) {\n switch (type) {\n case 'info':\n console.info(message)\n break\n case 'error':\n console.error(message)\n break\n case 'warning':\n console.warn(message)\n break\n }\n setHasLogged(true)\n }\n }, [condition]) // eslint-disable-line react-hooks/exhaustive-deps\n}","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { ConfirmDialogProps } from '@/src/components/layout/dialog/ConfirmDialog'\nimport { ConfirmDialog } from '@/src/components/layout/dialog/ConfirmDialog'\n\ntype DiscardChangesDialogProps =\n Omit<ConfirmDialogProps, 'onDecline' | 'onConfirm' | 'buttonOverwrites' | 'titleElement' | 'description'>\n & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onSave: () => void,\n onDontSave: () => void,\n titleOverwrite?: ReactNode,\n descriptionOverwrite?: ReactNode,\n}\n\nexport const DiscardChangesDialog = ({\n children,\n onCancel,\n onSave,\n onDontSave,\n titleOverwrite,\n descriptionOverwrite,\n ...props\n}: PropsWithChildren<DiscardChangesDialogProps>) => {\n const translation = useHightideTranslation()\n return (\n <ConfirmDialog\n {...props}\n titleElement={titleOverwrite ?? translation('unsavedChanges')}\n description={descriptionOverwrite ?? translation('unsavedChangesSaveQuestion')}\n onConfirm={onSave}\n onCancel={onCancel}\n onDecline={onDontSave}\n buttonOverwrites={[{ text: translation('cancel') }, { text: translation('discardChanges') }, { text: translation('save') }]}\n >\n {children}\n </ConfirmDialog>\n )\n}\n","import type { InputHTMLAttributes } from 'react'\nimport React, { forwardRef, useImperativeHandle, useRef } from 'react'\nimport type { UseDelayOptionsResolved } from '@/src/hooks/useDelay'\nimport { useDelay } from '@/src/hooks/useDelay'\nimport { useFocusManagement } from '@/src/hooks/focus/useFocusManagement'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { FormFieldInteractionStates } from '../../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type EditCompleteOptionsResolved = {\n onBlur: boolean,\n afterDelay: boolean,\n allowEnterComplete?: boolean,\n} & Omit<UseDelayOptionsResolved, 'disabled'>\n\nexport type EditCompleteOptions = Partial<EditCompleteOptionsResolved>\n\nconst defaultEditCompleteOptions: EditCompleteOptionsResolved = {\n allowEnterComplete: false,\n onBlur: true,\n afterDelay: false,\n delay: 2500\n}\n\nexport type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'value'>\n & Partial<FormFieldDataHandling<string>>\n & Partial<FormFieldInteractionStates>\n & { editCompleteOptions?: EditCompleteOptions }\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input({\n invalid = false,\n onValueChange,\n onEditComplete,\n editCompleteOptions,\n ...props\n}, forwardedRef) {\n const {\n onBlur: allowEditCompleteOnBlur,\n afterDelay,\n delay,\n allowEnterComplete\n } = { ...defaultEditCompleteOptions, ...editCompleteOptions }\n\n const {\n restartTimer,\n clearTimer\n } = useDelay({ delay, disabled: !afterDelay })\n\n const innerRef = useRef<HTMLInputElement>(null)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n const { focusNext } = useFocusManagement()\n\n return (\n <input\n {...props}\n ref={innerRef}\n\n onKeyDown={event => {\n props.onKeyDown?.(event)\n if (!allowEnterComplete) {\n return\n }\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n innerRef.current?.blur()\n onEditComplete?.((event.target as HTMLInputElement).value)\n focusNext()\n }\n }}\n onBlur={event => {\n props.onBlur?.(event)\n if (allowEditCompleteOnBlur) {\n onEditComplete?.(event.target.value)\n clearTimer()\n }\n }}\n onChange={event => {\n props.onChange?.(event)\n const value = event.target.value\n restartTimer(() => {\n innerRef.current?.blur()\n onEditComplete?.(value)\n })\n onValueChange?.(value)\n }}\n\n data-name={PropsUtil.dataAttributes.name('input', props)}\n data-value={PropsUtil.dataAttributes.bool(!!props.value)}\n {...PropsUtil.dataAttributes.interactionStates({ ...props, invalid })}\n\n {...PropsUtil.aria.interactionStates({ ...props, invalid }, props)}\n />\n )\n})\n\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed by the component itself\n */\nexport const InputUncontrolled = forwardRef<HTMLInputElement, InputProps>(function InputUncontrolled({\n value,\n onValueChange,\n ...props\n}, ref) {\n const [usedValue, setUsedValue] = useOverwritableState(value, onValueChange)\n\n return (\n <Input\n {...props}\n ref={ref}\n value={usedValue}\n onValueChange={setUsedValue}\n />\n )\n})\n","import { useEffect, useState } from 'react'\n\nexport type UseDelayOptionsResolved = {\n delay: number,\n disabled: boolean,\n}\n\nexport type UseDelayOptions = Partial<UseDelayOptionsResolved>\n\nconst defaultOptions: UseDelayOptionsResolved = {\n delay: 3000,\n disabled: false,\n}\n\nexport function useDelay(options?: UseDelayOptions) {\n const [timer, setTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n const { delay, disabled }: UseDelayOptionsResolved = {\n ...defaultOptions,\n ...options\n }\n\n const clearTimer = () => {\n clearTimeout(timer)\n setTimer(undefined)\n }\n\n const restartTimer = (onDelayFinish: () => void) => {\n if(disabled) {\n return\n }\n clearTimeout(timer)\n setTimer(setTimeout(() => {\n onDelayFinish()\n setTimer(undefined)\n }, delay))\n }\n\n useEffect(() => {\n return () => {\n clearTimeout(timer)\n }\n }, [timer])\n\n useEffect(() => {\n if(disabled){\n clearTimeout(timer)\n setTimer(undefined)\n }\n }, [disabled, timer])\n\n return { restartTimer, clearTimer, hasActiveTimer: !!timer }\n}","import { useCallback } from 'react'\n\nexport function useFocusManagement() {\n const getFocusableElements = useCallback((): HTMLElement[] => {\n return Array.from(\n document.querySelectorAll(\n 'input, button, select, textarea, a[href], [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter(\n (el): el is HTMLElement =>\n el instanceof HTMLElement &&\n !el.hasAttribute('disabled') &&\n !el.hasAttribute('hidden') &&\n el.tabIndex !== -1\n )\n }, [])\n\n const getNextFocusElement = useCallback((): HTMLElement | undefined => {\n const elements = getFocusableElements()\n if(elements.length === 0) {\n return undefined\n }\n let nextElement = elements[0]\n if(document.activeElement instanceof HTMLElement) {\n const currentIndex = elements.indexOf(document.activeElement)\n nextElement = elements[(currentIndex + 1) % elements.length]\n }\n return nextElement\n }, [getFocusableElements])\n\n const focusNext = useCallback(() => {\n const nextElement = getNextFocusElement()\n nextElement?.focus()\n }, [getNextFocusElement])\n\n const getPreviousFocusElement = useCallback((): HTMLElement | undefined => {\n const elements = getFocusableElements()\n if(elements.length === 0) {\n return undefined\n }\n let previousElement = elements[0]\n if(document.activeElement instanceof HTMLElement) {\n const currentIndex = elements.indexOf(document.activeElement)\n if(currentIndex === 0) {\n previousElement = elements[elements.length - 1]\n } else {\n previousElement = elements[currentIndex - 1]\n }\n }\n return previousElement\n }, [getFocusableElements])\n\n const focusPrevious = useCallback(() => {\n const previousElement = getPreviousFocusElement()\n if (previousElement) previousElement.focus()\n }, [getPreviousFocusElement])\n\n return {\n getFocusableElements,\n getNextFocusElement,\n getPreviousFocusElement,\n focusNext,\n focusPrevious,\n }\n}","import type { InputProps } from '../../user-interaction/input/Input'\nimport { Input } from '../../user-interaction/input/Input'\nimport type { ConfirmDialogProps } from '@/src/components/layout/dialog/ConfirmDialog'\nimport { ConfirmDialog } from '@/src/components/layout/dialog/ConfirmDialog'\n\nexport type InputModalProps = ConfirmDialogProps & {\n inputs: InputProps[],\n}\n\n/**\n * A modal for receiving multiple inputs\n */\nexport const InputDialog = ({\n inputs,\n buttonOverwrites,\n ...props\n}: InputModalProps) => {\n return (\n <ConfirmDialog\n buttonOverwrites={buttonOverwrites}\n {...props}\n >\n {inputs.map((inputProps, index) => <Input key={`input ${index}`} {...inputProps}/>)}\n </ConfirmDialog>\n )\n}\n","import type { ButtonHTMLAttributes, HTMLAttributes, PropsWithChildren, ReactNode, RefObject } from 'react'\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { match } from '@/src/utils/match'\nimport { CheckIcon, Plus, XIcon } from 'lucide-react'\nimport { Chip } from '@/src/components/display-and-visualization/Chip'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { UseFloatingElementOptions } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport { createPortal } from 'react-dom'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\n\n//\n// Context\n//\ntype RegisteredOption = {\n value: string,\n label: ReactNode,\n disabled: boolean,\n ref: React.RefObject<HTMLLIElement>,\n}\n\ntype HighlightStartPositionBehavior = 'first' | 'last'\ntype SelectIconAppearance = 'left' | 'right' | 'none'\n\ntype InternalSelectContextState = {\n isOpen: boolean,\n options: RegisteredOption[],\n highlightedValue?: string,\n}\n\ntype SelectContextState = InternalSelectContextState & {\n id: string,\n value: string[],\n disabled: boolean,\n invalid: boolean,\n selectedOptions: RegisteredOption[],\n}\n\ntype SelectConfiguration = {\n isMultiSelect: boolean,\n iconAppearance: SelectIconAppearance,\n}\n\ntype ToggleOpenOptions = {\n highlightStartPositionBehavior?: HighlightStartPositionBehavior,\n}\n\nconst defaultToggleOpenOptions: ToggleOpenOptions = {\n highlightStartPositionBehavior: 'first',\n}\n\ntype SelectContextType = {\n state: SelectContextState,\n config: SelectConfiguration,\n item: {\n register: (item: RegisteredOption) => void,\n unregister: (value: string) => void,\n toggleSelection: (value: string, isSelected?: boolean) => void,\n highlightItem: (value: string) => void,\n moveHighlightedIndex: (delta: number) => void,\n },\n trigger: {\n ref: React.RefObject<HTMLElement>,\n register: (element: React.RefObject<HTMLElement>) => void,\n unregister: () => void,\n toggleOpen: (isOpen?: boolean, options?: ToggleOpenOptions) => void,\n },\n}\n\nconst SelectContext = createContext<SelectContextType | null>(null)\n\nfunction useSelectContext() {\n const ctx = useContext(SelectContext)\n if (!ctx) {\n throw new Error('SelectContext must be used within a ListBoxPrimitive')\n }\n return ctx\n}\n\n\n//\n// SelectRoot\n//\nexport type SelectRootProps = PropsWithChildren & {\n id?: string,\n value?: string,\n onValueChange?: (value: string) => void,\n values?: string[],\n onValuesChange?: (value: string[]) => void,\n isOpen?: boolean,\n disabled?: boolean,\n invalid?: boolean,\n isMultiSelect?: boolean,\n iconAppearance?: SelectIconAppearance,\n}\n\nexport const SelectRoot = ({\n children,\n id,\n value,\n onValueChange,\n values,\n onValuesChange,\n isOpen = false,\n disabled = false,\n invalid = false,\n isMultiSelect = false,\n iconAppearance = 'left',\n}: SelectRootProps) => {\n const triggerRef = useRef<HTMLElement>(null)\n const generatedId = useId()\n const usedId = id ?? generatedId\n\n const [internalState, setInternalState] = useState<InternalSelectContextState>({\n isOpen,\n options: [],\n })\n\n const selectedValues = useMemo(() => isMultiSelect ? (values ?? []) : [value].filter(Boolean),\n [isMultiSelect, value, values])\n const selectedOptions = useMemo(() =>\n selectedValues.map(value => internalState.options.find(option => value === option.value)).filter(Boolean),\n [selectedValues, internalState.options])\n const state: SelectContextState = {\n ...internalState,\n id: usedId,\n disabled,\n invalid,\n value: selectedValues,\n selectedOptions,\n }\n\n const config: SelectConfiguration = {\n isMultiSelect,\n iconAppearance,\n }\n\n const registerItem = useCallback((item: RegisteredOption) => {\n setInternalState(prev => {\n const updatedOptions = [...prev.options, item]\n updatedOptions.sort((a, b) => {\n const aEl = a.ref.current\n const bEl = b.ref.current\n if (!aEl || !bEl) return 0\n return aEl.compareDocumentPosition(bEl) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n return {\n ...prev,\n options: updatedOptions,\n }\n })\n }, [])\n\n const unregisterItem = useCallback((value: string) => {\n setInternalState(prev => {\n const updatedOptions = prev.options.filter(i => i.value !== value)\n return {\n ...prev,\n options: updatedOptions,\n }\n })\n }, [])\n\n // Setting isSelected to false only works for multiselects\n const toggleSelection = (value: string, isSelected?: boolean) => {\n if (disabled) {\n return\n }\n const option = state.options.find(i => i.value === value)\n if (!option) {\n console.error(`SelectOption with value: ${value} not found`)\n return\n }\n\n let newValue: string[]\n if (isMultiSelect) {\n const isSelectedBefore = state.value.includes(value)\n const isSelectedAfter = isSelected ?? !isSelectedBefore\n if (!isSelectedAfter) {\n newValue = state.value.filter(v => v !== value)\n } else {\n newValue = [...state.value, value]\n }\n } else {\n newValue = [value]\n }\n\n if (!isMultiSelect) {\n onValueChange?.(newValue[0])\n } else {\n onValuesChange?.(newValue)\n }\n\n setInternalState(prevState => ({\n ...prevState,\n highlightedValue: value,\n }))\n }\n\n const highlightItem = (value: string) => {\n if (disabled) {\n return\n }\n setInternalState(prevState => ({\n ...prevState,\n highlightedValue: value,\n }))\n }\n\n const registerTrigger = useCallback((ref: React.RefObject<HTMLElement>) => {\n triggerRef.current = ref.current\n }, [])\n\n const unregisterTrigger = useCallback(() => {\n triggerRef.current = null\n }, [])\n\n const toggleOpen = (isOpen?: boolean, toggleOpenOptions?: ToggleOpenOptions) => {\n const { highlightStartPositionBehavior } = { ...defaultToggleOpenOptions, ...toggleOpenOptions }\n let firstSelectedValue: string | undefined\n let firstEnabledValue: string | undefined\n for (let i = 0; i < state.options.length; i++) {\n const currentOption = state.options[highlightStartPositionBehavior === 'first' ? i : state.options.length - i - 1]\n if (!currentOption.disabled) {\n if (!firstEnabledValue) {\n firstEnabledValue = currentOption.value\n }\n if (selectedValues.includes(currentOption.value)) {\n firstSelectedValue = currentOption.value\n break\n }\n }\n }\n setInternalState(prevState => ({\n ...prevState,\n isOpen: isOpen ?? !prevState.isOpen,\n highlightedValue: firstSelectedValue ?? firstEnabledValue\n }))\n }\n\n const moveHighlightedIndex = (delta: number) => {\n let highlightedIndex = state.options.findIndex(value => value.value === internalState.highlightedValue)\n if (highlightedIndex === -1) {\n highlightedIndex = 0\n }\n const optionLength = state.options.length\n const startIndex = (highlightedIndex + (delta % optionLength) + optionLength) % optionLength\n const isForward = delta >= 0\n let highlightedValue = state.options[startIndex].value\n for (let i = 0; i < state.options.length; i++) {\n const index = (startIndex + (isForward ? i : -i) + optionLength) % optionLength\n if (!state.options[index].disabled) {\n highlightedValue = state.options[index].value\n break\n }\n }\n\n setInternalState(prevState => ({\n ...prevState,\n highlightedValue,\n }))\n }\n\n useEffect(() => {\n if (!internalState.highlightedValue) return\n const highlighted = internalState.options.find(value => value.value === internalState.highlightedValue)\n if (highlighted) {\n highlighted.ref.current?.scrollIntoView({ behavior: 'instant', block: 'nearest' })\n } else {\n console.error(`SelectRoot: Could not find highlighted value (${internalState.highlightedValue})`)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalState.highlightedValue])\n\n const contextValue: SelectContextType = {\n state,\n config,\n item: {\n register: registerItem,\n unregister: unregisterItem,\n toggleSelection,\n highlightItem,\n moveHighlightedIndex,\n },\n trigger: {\n ref: triggerRef,\n register: registerTrigger,\n unregister: unregisterTrigger,\n toggleOpen,\n },\n }\n\n return (\n <SelectContext.Provider value={contextValue}>\n {children}\n </SelectContext.Provider>\n )\n}\n\n//\n// SelectOption\n//\nexport type SelectOptionProps = Omit<HTMLAttributes<HTMLLIElement>, 'children'> & {\n value: string,\n disabled?: boolean,\n iconAppearance?: SelectIconAppearance,\n children?: ReactNode,\n}\n\nexport const SelectOption = forwardRef<HTMLLIElement, SelectOptionProps>(\n function SelectOption({ children, value, disabled = false, iconAppearance, className, ...restProps }, ref) {\n const { state, config, item, trigger } = useSelectContext()\n const { register, unregister, toggleSelection, highlightItem } = item\n const itemRef = useRef<HTMLLIElement>(null)\n\n iconAppearance ??= config.iconAppearance\n\n const label = children ?? value\n\n // Register with parent\n useEffect(() => {\n register({\n value,\n label,\n disabled,\n ref: itemRef,\n })\n return () => unregister(value)\n }, [value, disabled, register, unregister, children, label])\n\n const isHighlighted = state.highlightedValue === value\n const isSelected = state.value.includes(value)\n\n return (\n <li\n {...restProps}\n ref={(node) => {\n itemRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as RefObject<HTMLLIElement | null>).current = node\n }}\n id={value}\n role=\"option\"\n aria-disabled={disabled}\n aria-selected={isSelected}\n data-highlighted={isHighlighted ? '' : undefined}\n data-selected={isSelected ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n className={clsx(\n 'flex-row-1 items-center px-2 py-1 rounded-md',\n 'data-highlighted:bg-primary/20',\n 'data-disabled:text-disabled data-disabled:cursor-not-allowed',\n 'not-data-disabled:cursor-pointer',\n className\n )}\n onClick={(event) => {\n if (!disabled) {\n toggleSelection(value)\n if (!config.isMultiSelect) {\n trigger.toggleOpen(false)\n }\n restProps.onClick?.(event)\n }\n }}\n onMouseEnter={(event) => {\n if (!disabled) {\n highlightItem(value)\n restProps.onMouseEnter?.(event)\n }\n }}\n >\n {iconAppearance === 'left' && (state.value.length > 0 || config.isMultiSelect) && (\n <CheckIcon\n className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n aria-hidden={true}\n />\n )}\n {label}\n {iconAppearance === 'right' && (state.value.length > 0 || config.isMultiSelect) && (\n <CheckIcon\n className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n aria-hidden={true}\n />\n )}\n </li>\n )\n }\n)\n\n///\n/// SelectButton\n///\ntype SelectButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n placeholder?: ReactNode,\n selectedDisplay?: (value: string[]) => ReactNode,\n}\n\nexport const SelectButton = forwardRef<HTMLButtonElement, SelectButtonProps>(function SelectButton(\n { placeholder, selectedDisplay, ...props }, ref\n) {\n const translation = useHightideTranslation()\n const { state, trigger } = useSelectContext()\n const { register, unregister, toggleOpen } = trigger\n\n const innerRef = useRef<HTMLButtonElement>(null)\n useImperativeHandle(ref, () => innerRef.current)\n\n useEffect(() => {\n register(innerRef)\n return () => unregister()\n }, [register, unregister])\n\n const disabled = !!props?.disabled || !!state.disabled\n const invalid = state.invalid\n const hasValue = state.value.length > 0\n\n return (\n <button\n {...props}\n ref={innerRef}\n id={state.id} // TODO allow for a custom id here\n disabled={disabled}\n type=\"button\"\n\n onClick={(event) => {\n props.onClick?.(event)\n toggleOpen(!state.isOpen)\n }}\n onKeyDown={event => {\n props.onKeyDown?.(event)\n switch (event.key) {\n case 'ArrowDown':\n toggleOpen(true, { highlightStartPositionBehavior: 'first' })\n event.preventDefault()\n event.stopPropagation()\n break\n case 'ArrowUp':\n toggleOpen(true, { highlightStartPositionBehavior: 'last' })\n event.preventDefault()\n event.stopPropagation()\n break\n }\n }}\n\n data-name={props['data-name'] ?? 'select-button'}\n data-value={hasValue ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-invalid={invalid ? '' : undefined}\n\n aria-invalid={invalid}\n aria-disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={state.isOpen}\n aria-controls={state.isOpen ? `${state.id}-listbox` : undefined}\n >\n {hasValue ?\n selectedDisplay?.(state.value) ?? (\n <div className={clsx('flex flex-wrap gap-x-1 gap-y-2')}>\n {state.selectedOptions.map(({ value, label }, index) => (\n <span key={value} className=\"flex-row-0\">\n {label}\n {index < state.value.length - 1 && (<span>{','}</span>)}\n </span>\n ))}\n </div>\n )\n : placeholder ?? translation('clickToSelect')\n }\n <ExpansionIcon isExpanded={state.isOpen}/>\n </button>\n )\n})\n\n///\n/// SelectChipDisplay\n///\ntype SelectChipDisplayProps = HTMLAttributes<HTMLDivElement> & {\n disabled?: boolean,\n placeholder?: ReactNode,\n}\n\nexport const SelectChipDisplay = forwardRef<HTMLDivElement, SelectChipDisplayProps>(function SelectChipDisplay(\n { ...props }, ref\n) {\n const { state, trigger, item } = useSelectContext()\n const { register, unregister, toggleOpen } = trigger\n\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(ref, () => innerRef.current)\n\n useEffect(() => {\n register(innerRef)\n return () => unregister()\n }, [register, unregister])\n\n const disabled = !!props?.disabled || !!state.disabled\n const invalid = state.invalid\n\n return (\n <div\n {...props}\n ref={innerRef}\n\n onClick={(event) => {\n toggleOpen()\n props.onClick?.(event)\n }}\n\n data-name={props['data-name'] ?? 'select-button-chips'}\n data-value={state.value.length > 0 ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-invalid={invalid ? '' : undefined}\n\n aria-invalid={invalid}\n aria-disabled={disabled}\n >\n {state.selectedOptions.map(({ value, label }) => (\n <Chip key={value} className=\"gap-x-2\">\n {label}\n <Button\n // TODO add label to indicate purpose to screen reader\n onClick={() => {\n item.toggleSelection(value, false)\n }}\n size=\"xs\"\n color=\"negative\"\n coloringStyle=\"text\"\n layout=\"icon\"\n className=\"flex-row-0 items-center\"\n >\n <XIcon className=\"size-5\"/>\n </Button>\n </Chip>\n ))}\n <Button\n id={state.id} // TODO allow for a custom id here\n onClick={(event) => {\n event.stopPropagation()\n toggleOpen()\n }}\n onKeyDown={event => {\n switch (event.key) {\n case 'ArrowDown':\n toggleOpen(true, { highlightStartPositionBehavior: 'first' })\n break\n case 'ArrowUp':\n toggleOpen(true, { highlightStartPositionBehavior: 'last' })\n }\n }}\n layout=\"icon\"\n size=\"sm\"\n color=\"neutral\"\n\n aria-invalid={invalid}\n aria-disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={state.isOpen}\n aria-controls={state.isOpen ? `${state.id}-listbox` : undefined}\n\n className=\"size-9\"\n >\n <Plus/>\n </Button>\n </div>\n )\n})\n\n\n///\n/// SelectContent\n///\ntype Orientation = 'vertical' | 'horizontal'\n\nexport type SelectContentProps = HTMLAttributes<HTMLUListElement> & {\n alignment?: Pick<UseFloatingElementOptions, 'gap' | 'horizontalAlignment' | 'verticalAlignment'>,\n orientation?: Orientation,\n containerClassName?: string,\n}\n\nexport const SelectContent = forwardRef<HTMLUListElement, SelectContentProps>(\n function SelectContent({\n alignment,\n orientation = 'vertical',\n containerClassName,\n ...props\n }, ref) {\n const innerRef = useRef<HTMLUListElement>(null)\n useImperativeHandle(ref, () => innerRef.current)\n\n const { trigger, state, config, item } = useSelectContext()\n\n const position = useFloatingElement({\n active: state.isOpen,\n anchorRef: trigger.ref,\n containerRef: innerRef,\n ...alignment,\n })\n\n useFocusTrap({\n container: innerRef,\n active: state.isOpen && !!position,\n })\n\n\n const { zIndex } = useOverlayRegistry({ isActive: state.isOpen })\n\n return createPortal(\n <div\n id={`select-container-${state.id}`}\n className={clsx('fixed inset-0 w-screen h-screen', containerClassName)}\n style={{ zIndex: zIndex }}\n hidden={!state.isOpen}\n >\n <div\n id={`select-background-${state.id}`}\n onClick={() => trigger.toggleOpen(false)}\n className={clsx('fixed inset-0 w-screen h-screen')}\n />\n <ul\n {...props}\n id={`${state.id}-listbox`}\n ref={innerRef}\n onKeyDown={(event) => {\n switch (event.key) {\n case 'Escape':\n trigger.toggleOpen(false)\n event.preventDefault()\n event.stopPropagation()\n break\n case match(orientation, {\n vertical: 'ArrowDown',\n horizontal: 'ArrowUp'\n }):\n item.moveHighlightedIndex(1)\n event.preventDefault()\n break\n case match(orientation, {\n vertical: 'ArrowUp',\n horizontal: 'ArrowDown'\n }):\n item.moveHighlightedIndex(-1)\n event.preventDefault()\n break\n case 'Home':\n // TODO support later by selecting the first not disabled entry\n event.preventDefault()\n break\n case 'End':\n // TODO support later by selecting the last not disabled entry\n event.preventDefault()\n break\n case 'Enter': // Fall through\n case ' ':\n if (state.highlightedValue) {\n item.toggleSelection(state.highlightedValue)\n if (!config.isMultiSelect) {\n trigger.toggleOpen(false)\n }\n event.preventDefault()\n }\n break\n }\n }}\n\n className={clsx('flex-col-0 p-2 bg-menu-background text-menu-text rounded-md shadow-hw-bottom focus-outline-within overflow-auto', props.className)}\n style={{\n opacity: position ? undefined : 0,\n position: 'fixed',\n ...position\n }}\n\n role=\"listbox\"\n aria-multiselectable={config.isMultiSelect}\n aria-orientation={orientation}\n tabIndex={position ? 0 : undefined}\n >\n {props.children}\n </ul>\n </div>, document.body\n )\n }\n)\n\n//\n// Select\n//\nexport type SelectProps = Omit<SelectRootProps, 'isMultiSelect' | 'values' | 'onValuesChange'> & {\n contentPanelProps?: SelectContentProps,\n buttonProps?: Omit<SelectButtonProps, 'selectedDisplay'> & { selectedDisplay?: (value: string) => ReactNode },\n}\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select({\n children,\n contentPanelProps,\n buttonProps,\n ...props\n}, ref) {\n return (\n <SelectRoot {...props} isMultiSelect={false}>\n <SelectButton\n ref={ref}\n {...buttonProps}\n selectedDisplay={values => {\n const value = values[0]\n if (!buttonProps?.selectedDisplay) return undefined\n return buttonProps.selectedDisplay(value)\n }}\n />\n <SelectContent {...contentPanelProps}>{children}</SelectContent>\n </SelectRoot>\n )\n})\n\n\nexport type SelectUncontrolledProps = SelectProps\nexport const SelectUncontrolled = forwardRef<HTMLButtonElement, SelectUncontrolledProps>(function SelectUncontrolled({\n value: initialValue,\n onValueChange,\n ...props\n}, ref) {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <Select\n {...props}\n ref={ref}\n value={value}\n onValueChange={setValue}\n />\n )\n})\n\n\n//\n// MultiSelect\n//\nexport type MultiSelectProps = Omit<SelectRootProps, 'isMultiSelect' | 'value' | 'values' | 'onValueChange' | 'onValuesChange'> & {\n value?: string[],\n onValueChange?: (value: string[]) => void,\n contentPanelProps?: SelectContentProps,\n buttonProps?: SelectButtonProps,\n}\n\nexport const MultiSelect = forwardRef<HTMLButtonElement, MultiSelectProps>(function MultiSelect({\n children,\n value,\n onValueChange,\n contentPanelProps,\n buttonProps,\n ...props\n}, ref) {\n return (\n <SelectRoot {...props} values={value} onValuesChange={onValueChange} isMultiSelect={true}>\n <SelectButton ref={ref} {...buttonProps} />\n <SelectContent {...contentPanelProps}>{children}</SelectContent>\n </SelectRoot>\n )\n})\n\n\nexport const MultiSelectUncontrolled = forwardRef<HTMLButtonElement, MultiSelectProps>(function MultiSelectUncontrolled({\n value: initialValue,\n onValueChange,\n ...props\n}, ref) {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <MultiSelect\n {...props}\n ref={ref}\n value={value}\n onValueChange={setValue}\n />\n )\n})\n\n\n//\n// MultiSelectChipDisplay\n//\nexport type MultiSelectChipDisplayProps = Omit<SelectRootProps, 'isMultiSelect' | 'value' | 'values' | 'onValueChange' | 'onValuesChange'> & {\n value?: string[],\n onValueChange?: (value: string[]) => void,\n contentPanelProps?: SelectContentProps,\n chipDisplayProps?: SelectChipDisplayProps,\n}\n\nexport const MultiSelectChipDisplay = forwardRef<HTMLDivElement, MultiSelectChipDisplayProps>(function MultiSelectChipDisplay({\n children,\n value,\n onValueChange,\n contentPanelProps,\n chipDisplayProps,\n ...props\n}, ref) {\n return (\n <SelectRoot {...props} values={value} onValuesChange={onValueChange} isMultiSelect={true}>\n <SelectChipDisplay ref={ref} {...chipDisplayProps} />\n <SelectContent {...contentPanelProps}>{children}</SelectContent>\n </SelectRoot>\n )\n})\n\n\nexport type MultiSelectChipDisplayUncontrolledProps = MultiSelectChipDisplayProps\nexport const MultiSelectChipDisplayUncontrolled = forwardRef<HTMLDivElement, MultiSelectChipDisplayUncontrolledProps>(function MultiSelectChipDisplayUncontrolled({\n value: initialValue,\n onValueChange,\n ...props\n}, ref) {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <MultiSelectChipDisplay\n {...props}\n ref={ref}\n value={value}\n onValueChange={setValue}\n />\n )\n})","import type { PropsWithChildren, ReactNode } from 'react'\nimport type { DialogProps } from '@/src/components/layout/dialog/Dialog'\nimport { Dialog } from '@/src/components/layout/dialog/Dialog'\nimport { LocalizationUtil } from '@/src/i18n/util'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { Select, SelectOption } from '@/src/components/user-interaction/Select'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\n\ntype LanguageDialogProps = Omit<DialogProps, 'titleElement' | 'description'> & PropsWithChildren<{\n titleOverwrite?: ReactNode,\n descriptionOverwrite?: ReactNode,\n}>\n\n/**\n * A Dialog for selecting the Language\n *\n * The State of open needs to be managed by the parent\n */\nexport const LanguageDialog = ({\n onClose,\n titleOverwrite,\n descriptionOverwrite,\n ...props\n}: LanguageDialogProps) => {\n const { locale, setLocale } = useLocale()\n const translation = useHightideTranslation()\n\n return (\n <Dialog\n titleElement={titleOverwrite ?? translation('language')}\n description={descriptionOverwrite ?? translation('chooseLanguage')}\n onClose={onClose}\n {...props}\n >\n <div className=\"w-64\">\n <Select\n value={locale}\n onValueChange={(language: string) => setLocale(language as HightideTranslationLocales)}\n buttonProps={{\n selectedDisplay: locale => LocalizationUtil.languagesLocalNames[locale]\n }}\n >\n {LocalizationUtil.locals.map((local) => (\n <SelectOption key={local} value={local}>{LocalizationUtil.languagesLocalNames[local]}</SelectOption>\n ))}\n </Select>\n <div className=\"flex-row-4 mt-3 justify-end\">\n <Button color=\"positive\" onClick={onClose}>\n {translation('done')}\n </Button>\n </div>\n </div>\n </Dialog>\n )\n}\n","import { type PropsWithChildren, type ReactNode } from 'react'\nimport type { DialogProps } from '@/src/components/layout/dialog/Dialog'\nimport { Dialog } from '@/src/components/layout/dialog/Dialog'\nimport { MonitorCog, MoonIcon, SunIcon } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { ThemeType } from '@/src/contexts/ThemeContext'\nimport { ThemeUtil, useTheme } from '@/src/contexts/ThemeContext'\nimport { Select, SelectOption } from '@/src/components/user-interaction/Select'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype ThemeIconProps = {\n theme: ThemeType,\n className?: string,\n}\nconst ThemeIcon = ({ theme, className }: ThemeIconProps) => {\n if (theme === 'dark') {\n return (\n <MoonIcon className={clsx('w-4 h-4', className)}/>\n )\n } else if (theme === 'light') {\n return (\n <SunIcon className={clsx('w-4 h-4', className)}/>\n )\n } else {\n return (\n <MonitorCog className={clsx('w-4 h-4', className)}/>\n )\n }\n}\n\ntype ThemeDialogProps = Omit<DialogProps, 'titleElement' | 'description'> & {\n titleOverwrite?: ReactNode,\n descriptionOverwrite?: ReactNode,\n}\n\n/**\n * A Dialog for selecting the Theme\n *\n * The State of open needs to be managed by the parent\n */\nexport const ThemeDialog = ({\n onClose,\n titleOverwrite,\n descriptionOverwrite,\n ...props\n}: PropsWithChildren<ThemeDialogProps>) => {\n const { theme, setTheme } = useTheme()\n const translation = useHightideTranslation()\n\n return (\n <Dialog\n titleElement={titleOverwrite ?? translation('pThemes', { count: 1 })}\n description={descriptionOverwrite ?? translation('chooseTheme')}\n onClose={onClose}\n {...props}\n >\n <div className=\"w-64\">\n <Select\n value={theme}\n onValueChange={(theme) => setTheme(theme as ThemeType)}\n iconAppearance=\"right\"\n buttonProps={{\n selectedDisplay: (value) => (\n <div className=\"flex-row-2 items-center\">\n <ThemeIcon theme={theme}/>\n {translation('sThemeMode', { theme: value })}\n </div>\n ),\n className: 'min-w-32',\n }}\n >\n {ThemeUtil.themes.map((theme) => (\n <SelectOption key={theme} value={theme} className=\"gap-x-6 justify-between\">\n <div className=\"flex-row-2 items-center\">\n <ThemeIcon theme={theme}/>\n {translation('sThemeMode', { theme: theme })}\n </div>\n </SelectOption>\n ))}\n </Select>\n <div className=\"flex-row-4 mt-3 justify-end\">\n <Button autoFocus color=\"positive\" onClick={onClose}>\n {translation('done')}\n </Button>\n </div>\n </div>\n </Dialog>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport type { ThemeConfig } from '@/src/contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/contexts/HightideConfigContext'\n\nconst themes = ['light', 'dark', 'system'] as const\n\nexport type ThemeType = typeof themes[number]\nexport type ResolvedTheme = Exclude<ThemeType, 'system'>\n\nexport const ThemeUtil = {\n themes,\n}\n\ntype ThemeContextType = {\n theme: ThemeType,\n resolvedTheme: ResolvedTheme,\n setTheme: Dispatch<SetStateAction<ThemeType>>,\n}\n\nexport const ThemeContext = createContext<ThemeContextType | null>(null)\n\nexport type ThemeProviderProps = PropsWithChildren & Partial<ThemeConfig> & {\n /**\n * Only set this if you want to control the theme yourself\n */\n theme?: ThemeType,\n}\n\nexport const ThemeProvider = ({ children, theme, initialTheme }: ThemeProviderProps) => {\n const {\n value: storedTheme,\n setValue: setStoredTheme,\n deleteValue: deleteStoredTheme\n } = useLocalStorage<ThemeType>('theme', 'system')\n const { config } = useHightideConfig()\n const [themePreference, setThemePreference] = useState<ThemeType>('system')\n\n const resolvedTheme = useMemo((): ResolvedTheme => {\n if (theme && theme !== 'system') {\n return theme\n }\n if (storedTheme && storedTheme !== 'system') {\n return storedTheme\n }\n if (themePreference !== 'system') {\n return themePreference\n }\n return initialTheme ?? config.theme.initialTheme\n }, [config.theme.initialTheme, initialTheme, storedTheme, theme, themePreference])\n\n useEffect(() => {\n if(!theme) return\n if (theme === 'system') {\n deleteStoredTheme()\n } else {\n setStoredTheme(theme)\n }\n }, [theme]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', resolvedTheme)\n }, [resolvedTheme])\n\n const getPreference = useCallback(() => {\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches\n const prefersLight = window.matchMedia('(prefers-color-scheme: light)').matches\n setThemePreference(prefersDark ? 'dark' : (prefersLight ? 'light' : 'system'))\n }, [])\n\n useEffect(() => {\n getPreference()\n }, [getPreference])\n\n useEffect(() => {\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const lightQuery = window.matchMedia('(prefers-color-scheme: light)')\n const noPrefQuery = window.matchMedia('(prefers-color-scheme: no-preference)')\n darkQuery.addEventListener('change', getPreference)\n lightQuery.addEventListener('change', getPreference)\n noPrefQuery.addEventListener('change', getPreference)\n return () => {\n darkQuery.removeEventListener('change', getPreference)\n lightQuery.removeEventListener('change', getPreference)\n noPrefQuery.removeEventListener('change', getPreference)\n }\n }, [getPreference])\n\n return (\n <ThemeContext.Provider\n value={{\n theme: storedTheme,\n resolvedTheme,\n setTheme: (newTheme) => {\n if (theme && theme !== 'system') {\n console.warn('ThemeProvider: Attempting to change the ' +\n \"theme while setting a fixed theme won't have any effect. \" +\n 'Change the theme provided to the ThemeProvider instead.')\n }\n setStoredTheme(newTheme)\n }\n }}\n >\n {children}\n </ThemeContext.Provider>\n )\n}\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext)\n if (!context) {\n throw new Error('useTheme must be used within ThemeContext. Try adding a ThemeProvider around your app.')\n }\n return context\n}\n","import { AlertOctagon } from 'lucide-react'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\nexport type ErrorComponentProps = {\n errorText?: string,\n classname?: string,\n}\n\n/**\n * The Component to show when an error occurred\n */\nexport const ErrorComponent = ({\n errorText,\n classname\n}: ErrorComponentProps) => {\n const translation = useHightideTranslation()\n return (\n <div className={clsx('flex-col-4 items-center justify-center w-full h-24', classname)}>\n <AlertOctagon size={64} className=\"text-warning\"/>\n {errorText ?? `${translation('errorOccurred')} :(`}\n </div>\n )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useState } from 'react'\nimport { LoadingContainer } from '@/src/components/layout/loading/LoadingContainer'\nimport { clsx } from 'clsx'\n\nexport type LoadingAndErrorComponentProps = PropsWithChildren<{\n isLoading?: boolean,\n hasError?: boolean,\n loadingComponent?: ReactNode,\n errorComponent?: ReactNode,\n /**\n * in milliseconds\n */\n minimumLoadingDuration?: number,\n className?: string,\n}>\n\n/**\n * A Component that shows the Error and Loading animation, when appropriate and the children otherwise\n */\nexport const LoadingAndErrorComponent = ({\n children,\n isLoading = false,\n hasError = false,\n loadingComponent,\n errorComponent,\n minimumLoadingDuration = 200,\n className\n}: LoadingAndErrorComponentProps) => {\n const [isInMinimumLoading, setIsInMinimumLoading] = useState(false)\n const [hasUsedMinimumLoading, setHasUsedMinimumLoading] = useState(false)\n if (minimumLoadingDuration && !isInMinimumLoading && !hasUsedMinimumLoading) {\n setIsInMinimumLoading(true)\n setTimeout(() => {\n setIsInMinimumLoading(false)\n setHasUsedMinimumLoading(true)\n }, minimumLoadingDuration)\n }\n\n if (isLoading || (minimumLoadingDuration && isInMinimumLoading)) {\n return <>{(loadingComponent ?? <LoadingContainer className={clsx(className)}/>)}</>\n }\n if (hasError) {\n return <>{(errorComponent ?? <LoadingContainer className={clsx('bg-negative', className)}/>)}</>\n }\n return <>{children}</>\n}\n","import { clsx } from 'clsx'\n\nexport type LoadingComponentProps = {\n className?: string,\n}\n\nexport const LoadingContainer = ({ className }: LoadingComponentProps) => {\n return (\n <div className={clsx('relative overflow-hidden shimmer bg-disabled/30 rounded-md', className)}/>\n )\n}","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport clsx from 'clsx'\nimport { HelpwaveLogo } from '@/src/components/branding/HelpwaveLogo'\n\nexport type LoadingAnimationProps = {\n loadingText?: string,\n classname?: string,\n}\n\n/**\n * A Component to show when loading data\n */\nexport const LoadingAnimation = ({\n loadingText,\n classname\n}: LoadingAnimationProps) => {\n const translation = useHightideTranslation()\n return (\n <div className={clsx('flex-col-2 items-center justify-center w-full h-24', classname)}>\n <HelpwaveLogo animate=\"loading\"/>\n {loadingText ?? `${translation('loading')}...`}\n </div>\n )\n}\n","import { ArrayUtil } from '@/src/utils/array'\nimport Link from 'next/link'\nimport type { ComponentProps, HTMLAttributes, ReactNode } from 'react'\n\nexport type BreadCrumbLinkProps = ComponentProps<typeof Link>\n\nexport const BreadCrumbLink = ({ ...props } : BreadCrumbLinkProps) => {\n return (\n <Link\n {...props}\n data-name={props['data-name'] ?? 'breadcrumb-link'}\n />\n )\n}\n\nconst BreadCrumbDivider = () => {\n return (\n <span data-name=\"breadcrumb-divider\">/</span>\n )\n}\n\n\ntype BreadCrumbGroupProps = HTMLAttributes<HTMLUListElement> & {\n divider?: ReactNode | null,\n}\n\n/**\n * A component for showing a hierarchical link structure with an independent link on each element\n *\n * e.g. Organizations/Ward/<id>\n */\nexport const BreadCrumbGroup = ({ children, divider, ...props }: BreadCrumbGroupProps) => {\n const items = ArrayUtil.resolveSingleOrArray(children)\n\n return (\n <ul {...props} data-name={props['data-name'] ?? 'breadcrumb'}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n return (\n <li key={index} data-name=\"breadcrumb-item\">\n {item}\n {!isLast && divider !== null && (divider ?? <BreadCrumbDivider/>)}\n </li>\n )\n })}\n </ul>\n )\n}\n\nexport type Crumb = {\n href: string,\n label: ReactNode,\n}\n\nexport type BreadCrumbProps = {\n crumbs: Crumb[],\n}\n\nexport const BreadCrumbs = ({ crumbs }: BreadCrumbProps) => {\n return (\n <BreadCrumbGroup>\n {crumbs.map(( { href, label }, index) => (<BreadCrumbLink key={index} href={href}>{label}</BreadCrumbLink>))}\n </BreadCrumbGroup>\n )\n}","import { Menu as MenuIcon, XIcon } from 'lucide-react'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport { useEffect } from 'react'\nimport React, { useCallback, useId, useRef, useState } from 'react'\nimport Link from 'next/link'\nimport clsx from 'clsx'\nimport type { UseFloatingElementOptions } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\n\ntype SimpleNavigationItem = {\n label: ReactNode,\n link: string,\n external?: boolean,\n}\n\n// TODO allow for nesting deeper than one level\ntype SubItemNavigationItem = {\n label: ReactNode,\n items?: SimpleNavigationItem[],\n}\n\nexport type NavigationItemType = SimpleNavigationItem | SubItemNavigationItem\n\nfunction isSubItem(item: NavigationItemType): item is SubItemNavigationItem {\n return 'items' in item && Array.isArray(item.items)\n}\n\n///\n/// NavigationItemWithSubItem\n///\ntype NavigationItemWithSubItemProps = SubItemNavigationItem & UseFloatingElementOptions\n\nconst NavigationItemWithSubItem = ({\n items,\n label,\n horizontalAlignment = 'center',\n ...options\n}: NavigationItemWithSubItemProps) => {\n const [isOpen, setOpen] = useState(false)\n const containerRef = useRef<HTMLUListElement>(null)\n const triggerRef = useRef<HTMLButtonElement>(null)\n const id = useId()\n\n const style = useFloatingElement({\n active: isOpen,\n containerRef,\n anchorRef: triggerRef,\n horizontalAlignment,\n ...options,\n })\n\n const onBlur = useCallback((event: React.FocusEvent) => {\n // If focus moves outside the menu + trigger, close\n const nextFocus = event.relatedTarget as Node | null\n if (\n !containerRef.current?.contains(nextFocus) &&\n !triggerRef.current?.contains(nextFocus)\n ) {\n setOpen(false)\n }\n }, [])\n\n const { zIndex } = useOverlayRegistry()\n // TODO at arrow key navigation\n\n return (\n <>\n <button\n id={'navigation-' + id}\n ref={triggerRef}\n type=\"button\"\n\n onClick={() => {\n setOpen(!isOpen)\n }}\n onBlur={onBlur}\n\n className=\"link flex-row-1\"\n\n aria-haspopup=\"true\"\n aria-expanded={isOpen}\n aria-controls={'navigation-items-' + id}\n >\n {label}\n <ExpansionIcon isExpanded={isOpen} />\n </button>\n <ul\n id={'navigation-items-' + id}\n ref={containerRef}\n\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n setOpen(false)\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n onBlur={onBlur}\n\n hidden={!isOpen}\n className={clsx(\n 'fixed flex-col-4 p-4 bg-surface text-on-surface shadow-side shadow-hw-bottom rounded-md',\n { 'opacity-0': !style }\n )}\n style={{ ...style, zIndex }}\n >\n {items.map(({ link, label, external }, index) => (\n <li key={index}>\n <Link\n href={link}\n target={external ? '_blank' : undefined}\n className=\"flex-row-0 link w-full\"\n >\n {label}\n </Link>\n </li>\n ))}\n </ul>\n </>\n )\n}\n\n///\n/// NavigationItemList\n///\nexport type NavigationItemListProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {\n items: NavigationItemType[],\n}\n\nexport const NavigationItemList = ({ items, ...restProps }: NavigationItemListProps) => {\n return (\n <ul {...restProps} className={clsx('flex-row-6 items-center', restProps.className)}>\n {items.map((item, index) => (\n <li key={index}>\n {isSubItem(item) ? (\n <NavigationItemWithSubItem {...item} />\n ) : (\n <Link href={item.link} target={item.external ? '_blank' : undefined} className=\"link\">{item.label}</Link>\n )}\n </li>\n ))}\n </ul>\n )\n}\n\n///\n/// Navigation\n///\nexport type NavigationProps = NavigationItemListProps\n\nexport const Navigation = ({ ...props }: NavigationProps) => {\n const [isMobileOpen, setIsMobileOpen] = useState(false)\n const id = useId()\n const menuRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n menuRef.current?.focus()\n }, [isMobileOpen])\n\n const { zIndex } = useOverlayRegistry({ isActive: isMobileOpen })\n\n return (\n <nav>\n <NavigationItemList\n {...props}\n className={clsx('hidden', { 'desktop:flex': !isMobileOpen }, props.className)}\n />\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => setIsMobileOpen(true)}\n\n className=\"desktop:hidden\"\n\n aria-haspopup=\"true\"\n aria-expanded={isMobileOpen}\n aria-controls={'navigation-menu-' + id}\n >\n <MenuIcon className=\"w-6 h-6\"/>\n </Button>\n <div\n id={'navigation-menu-' + id}\n ref={menuRef}\n hidden={!isMobileOpen}\n\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n setIsMobileOpen(false)\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n\n className={clsx(\n 'flex-col-8 items-center justify-center fixed inset-0 p-8 w-screen h-screen bg-surface text-on-surface', {\n 'desktop:hidden': isMobileOpen,\n },\n props.className\n )}\n style={{ zIndex }}\n >\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => setIsMobileOpen(false)}\n >\n <XIcon/>\n </Button>\n <NavigationItemList {...props} className={clsx('flex-col-8', props.className)}/>\n </div>\n </nav>\n )\n}","import { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { clamp } from '@/src/utils/math'\nimport type { CSSProperties } from 'react'\nimport { useEffect, useState } from 'react'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\n\nexport type PaginationProps = {\n pageIndex: number, // starts with 0\n pageCount: number,\n onPageChanged: (page: number) => void,\n className?: string,\n style?: CSSProperties,\n}\n\n/**\n * A Component showing the pagination allowing first, before, next and last page navigation\n */\nexport const Pagination = ({\n pageIndex,\n pageCount,\n onPageChanged,\n className,\n style,\n}: PaginationProps) => {\n const translation = useHightideTranslation()\n const [value, setValue] = useState<string>((pageIndex + 1).toString())\n\n const noPages = pageCount === 0\n const onFirstPage = pageIndex === 0 && !noPages\n const onLastPage = pageIndex === pageCount - 1\n\n useEffect(() => {\n if (noPages) {\n setValue('0')\n } else {\n setValue((pageIndex + 1).toString())\n }\n }, [pageIndex, noPages])\n\n const changePage = (page: number) => {\n onPageChanged(page)\n }\n\n return (\n <div className={clsx('flex-row-1', className)} style={style}>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(0)} disabled={onFirstPage || noPages}\n >\n <ChevronFirst/>\n </Button>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(pageIndex - 1)} disabled={onFirstPage || noPages}\n >\n <ChevronLeft/>\n </Button>\n <div className=\"flex-row-2 min-w-56 items-center justify-center mx-2 text-center\">\n <Input\n value={value}\n className={clsx(\n 'w-24 text-center font-bold input-indicator-hidden h-10'\n )}\n type=\"number\"\n min={1}\n max={pageCount}\n disabled={noPages}\n onValueChange={value => {\n if (value) {\n setValue(clamp(Number(value), [1, pageCount]).toString())\n } else {\n setValue(value)\n }\n }}\n onEditComplete={value => {\n changePage(clamp(Number(value) - 1, [0, pageCount - 1]))\n }}\n editCompleteOptions={{ delay: 800 }}\n />\n <span className=\"select-none w-10\">{translation('of')}</span>\n <span\n className=\"flex-row-2 w-24 items-center justify-center select-none h-10 bg-input-background text-input-text rounded-md font-bold\"\n >\n {pageCount}\n </span>\n </div>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(pageIndex + 1)} disabled={onLastPage || noPages}\n >\n <ChevronRight/>\n </Button>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(pageCount - 1)} disabled={onLastPage || noPages}\n >\n <ChevronLast/>\n </Button>\n </div>\n )\n}\n","import { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { range } from '@/src/utils/array'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport clsx from 'clsx'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\nexport type StepperState = {\n currentStep: number,\n seenSteps: Set<number>,\n}\n\nexport type StepperBarProps = {\n state?: StepperState,\n numberOfSteps: number,\n disabledSteps?: Set<number>,\n onChange: (state: StepperState) => void,\n onFinish: () => void,\n finishText?: string,\n showDots?: boolean,\n className?: string,\n}\n\nconst defaultState: StepperState = {\n currentStep: 0,\n seenSteps: new Set([0])\n}\n\n/**\n * A Component for stepping\n */\nexport const StepperBar = ({\n state = defaultState,\n numberOfSteps,\n disabledSteps = new Set(),\n onChange,\n onFinish,\n finishText,\n showDots = true,\n className = '',\n}: StepperBarProps) => {\n const translation = useHightideTranslation()\n const dots = range(numberOfSteps + 1) // +1 for last finish step\n const { currentStep, seenSteps } = state ?? defaultState\n\n const update = (newStep: number) => {\n seenSteps.add(newStep)\n onChange({ currentStep: newStep, seenSteps })\n }\n\n return (\n <div\n className={clsx('flex-row-2 justify-between',className)}\n >\n <div className=\"flex-row-2 flex-[2] justify-start\">\n <Button\n disabled={currentStep === 0 || disabledSteps.has(currentStep)}\n onClick={() => {\n update(currentStep - 1)\n }}\n className=\"flex-row-1 items-center justify-center\"\n >\n <ChevronLeft size={14}/>\n {translation('back')}\n </Button>\n </div>\n <div className=\"flex-row-2 flex-[5] justify-center items-center\">\n {showDots && dots.map((value, index) => {\n const seen = seenSteps.has(index)\n return (\n <div\n key={index}\n onClick={() => seen && update(index)}\n className={clsx('rounded-full w-4 h-4', {\n 'bg-stepperbar-dot-active hover:brightness-75': index === currentStep && seen && !disabledSteps.has(currentStep),\n 'bg-stepperbar-dot-normal hover:bg-stepperbar-dot-active': index !== currentStep && seen && !disabledSteps.has(currentStep),\n 'bg-stepperbar-dot-disabled': !seen || disabledSteps.has(currentStep),\n },\n {\n 'cursor-pointer': seen,\n 'cursor-not-allowed': !seen || disabledSteps.has(currentStep),\n })}\n />\n )\n })}\n </div>\n {currentStep !== numberOfSteps && (\n <div className=\"flex-row-2 flex-[2] justify-end\">\n <Button\n onClick={() => update(currentStep + 1)}\n className=\"flex-row-1 items-center justify-center\"\n disabled={disabledSteps.has(currentStep)}\n >\n {translation('next')}\n <ChevronRight size={14}/>\n </Button>\n </div>\n )}\n {currentStep === numberOfSteps && (\n <div className=\"flex-row-2 flex-[2] justify-end\">\n <Button\n disabled={disabledSteps.has(currentStep)}\n onClick={onFinish}\n className=\"flex-row-1 items-center justify-center\"\n >\n <Check size={14}/>\n {finishText ?? translation('confirm')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nexport const StepperBarUncontrolled = ({ state, onChange, ...props }: StepperBarProps) => {\n const [usedState, setUsedState] = useOverwritableState<StepperState>(state, onChange)\n\n return (\n <StepperBar\n {...props}\n state={usedState}\n onChange={setUsedState}\n />\n )\n}","import { PropsUtil } from '@/src/utils/propsUtil'\nimport { Minus } from 'lucide-react'\nimport type { HTMLAttributes } from 'react'\n\nexport type FillerCellProps = HTMLAttributes<HTMLDivElement>\n\nexport const FillerCell = ({ ...props }: FillerCellProps) => {\n return (\n <div\n {...props}\n data-name={PropsUtil.dataAttributes.name('table-filler-cell')}\n >\n <Minus className=\"max-w-4 max-h-4\" />\n </div>\n )\n}","const dateRange = (row, columnId, filterValue: [Date | null, Date | null]) => {\n const [min, max] = filterValue\n const value = row.getValue(columnId)\n\n const date = value instanceof Date ? value : new Date(value)\n if (isNaN(date.getTime())) return false // Invalid date\n\n if (min && date < min) return false\n if (max && date > max) return false\n\n return true\n}\n\n\nexport const TableFilters = {\n dateRange\n}","import type { ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type {\n ColumnDef,\n ColumnFiltersState,\n ColumnSizingInfoState,\n ColumnSizingState,\n FilterFn,\n InitialTableState,\n PaginationState,\n Row,\n RowData,\n RowSelectionState,\n Table as ReactTable,\n TableOptions,\n TableState\n} from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\nimport { range } from '@/src/utils/array'\nimport { clamp } from '@/src/utils/math'\nimport { TableCell } from '@/src/components/layout/table/TableCell'\nimport { TableFilters } from '@/src/components/layout/table/Filter'\nimport { useResizeCallbackWrapper } from '@/src/hooks/useResizeCallbackWrapper'\nimport { TableSortButton } from '@/src/components/layout/table/TableSortButton'\nimport type { TableFilterType } from '@/src/components/layout/table/TableFilterButton'\nimport { TableFilterButton } from '@/src/components/layout/table/TableFilterButton'\nimport { FillerCell } from '@/src/components/layout/table/FillerCell'\nimport { Pagination } from '@/src/components/layout/navigation/Pagination'\nimport { Checkbox } from '@/src/components/user-interaction/Checkbox'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Visibility } from '../Visibility'\nimport { BagFunctionUtil, type BagFunctionOrValue } from '@/src/utils/bagFunctions'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> {\n className?: string,\n filterType?: TableFilterType,\n }\n\n interface TableMeta<TData> {\n headerRowClassName?: string,\n bodyRowClassName?: BagFunctionOrValue<TData, string>,\n }\n\n\n interface FilterFns {\n dateRange: FilterFn<unknown>,\n }\n}\n\nexport type TableProps<T> = {\n data: T[],\n columns: ColumnDef<T>[],\n fillerRow?: (columnId: string, table: ReactTable<T>) => ReactNode,\n initialState?: Omit<InitialTableState, 'columnSizing' | 'columnSizingInfo'>,\n className?: string,\n tableContainerClassName?: string,\n onRowClick?: (row: Row<T>, table: ReactTable<T>) => void,\n state?: Omit<TableState, 'columnSizing' | 'columnSizingInfo'>,\n tableClassName?: string,\n} & Partial<TableOptions<T>>\n\n/**\n * The standard table\n */\nexport const Table = <T,>({\n data,\n fillerRow,\n initialState,\n onRowClick,\n className,\n tableClassName,\n tableContainerClassName,\n defaultColumn,\n state,\n columns,\n ...tableOptions\n}: TableProps<T>) => {\n const ref = useRef<HTMLDivElement>(null)\n const tableRef = useRef<HTMLTableElement>(null)\n\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>(columns.reduce((previousValue, currentValue) => {\n return {\n ...previousValue,\n [currentValue.id]: currentValue.minSize ?? defaultColumn.minSize,\n }\n }, {}))\n const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>()\n const [pagination, setPagination] = useState<PaginationState>({\n pageSize: 10,\n pageIndex: 0,\n ...initialState?.pagination\n })\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(initialState?.columnFilters)\n\n const computedColumnMinWidths = useMemo(() => {\n return columns.reduce((previousValue, column) => {\n return {\n ...previousValue,\n // every column is at least 12px wide\n [column.id]: (column.minSize ?? defaultColumn?.minSize ?? 12)\n }\n }, {})\n }, [columns, defaultColumn])\n\n const computedColumnMaxWidths = useMemo(() => {\n return columns.reduce((previousValue, column) => {\n return {\n ...previousValue,\n [column.id]: (column.maxSize ?? defaultColumn?.maxSize)\n }\n }, {})\n }, [columns, defaultColumn])\n\n const tableMinWidth = useMemo(() => {\n return columns.reduce((sum, column) => {\n return sum + computedColumnMinWidths[column.id]\n }, 0)\n }, [columns, computedColumnMinWidths])\n\n const updateColumnSizes = useMemo(() => {\n return (previous: ColumnSizingState) => {\n const updateSizing = {\n ...columnSizing,\n ...previous\n }\n\n const containerWidth = ref.current.offsetWidth\n\n // enforce min and max constraints\n columns.forEach((column) => {\n updateSizing[column.id] = clamp(updateSizing[column.id], [computedColumnMinWidths[column.id], computedColumnMaxWidths[column.id] ?? containerWidth])\n })\n\n // table width of the current sizing\n const width = columns\n .reduce((previousValue, currentValue) => previousValue + updateSizing[currentValue.id], 0)\n\n if (width > containerWidth) {\n if (tableMinWidth >= containerWidth) {\n return columns.reduce((previousValue, currentValue) => ({\n ...previousValue,\n [currentValue.id]: computedColumnMinWidths[currentValue.id]\n }), {})\n }\n\n let reduceableColumns = columns\n .map(value => value.id)\n .filter(id => updateSizing[id] - computedColumnMinWidths[id] > 0)\n\n let spaceToReduce = width - containerWidth\n\n while (spaceToReduce > 0 && reduceableColumns.length > 0) {\n let maxReduceAmount = reduceableColumns.reduce((previousValue, id) => Math.max(previousValue, updateSizing[id] - computedColumnMinWidths[id]), 0)\n if (maxReduceAmount * reduceableColumns.length > spaceToReduce) {\n maxReduceAmount = spaceToReduce / reduceableColumns.length\n }\n\n reduceableColumns.forEach(id => {\n updateSizing[id] -= maxReduceAmount\n })\n\n spaceToReduce -= maxReduceAmount * reduceableColumns.length\n reduceableColumns = reduceableColumns.filter(id => updateSizing[id] - computedColumnMinWidths[id] > 0)\n }\n } else if (width <= containerWidth) {\n let distributableWidth = containerWidth - width\n\n // check max width violations\n const violatingColumns = columns.filter(value =>\n computedColumnMaxWidths[value.id] && (updateSizing[value.id] > computedColumnMaxWidths[value.id]))\n\n const violationColumnsAmount = violatingColumns.reduce(\n (previousValue, column) => previousValue + updateSizing[column.id] - computedColumnMaxWidths[column.id], 0\n )\n distributableWidth += violationColumnsAmount\n\n let enlargeableColumns = columns\n .filter(col => !computedColumnMaxWidths[col.id] || updateSizing[col.id] < computedColumnMaxWidths[col.id])\n .map(value => value.id)\n\n while (distributableWidth > 0 && enlargeableColumns.length > 0) {\n let minEnlargeableAmount = enlargeableColumns.reduce((previousValue, id) => Math.min(previousValue, computedColumnMaxWidths[id] ? computedColumnMaxWidths[id] - updateSizing[id] : distributableWidth), distributableWidth)\n if (minEnlargeableAmount * enlargeableColumns.length > distributableWidth) {\n minEnlargeableAmount = distributableWidth / enlargeableColumns.length\n }\n\n enlargeableColumns.forEach(id => {\n updateSizing[id] += minEnlargeableAmount\n })\n\n distributableWidth -= minEnlargeableAmount * enlargeableColumns.length\n enlargeableColumns = enlargeableColumns.filter(id => !computedColumnMaxWidths[id] || updateSizing[id] < computedColumnMaxWidths[id])\n }\n\n if (distributableWidth > 0) {\n updateSizing[columns[columns.length - 1].id] += distributableWidth\n }\n }\n return updateSizing\n }\n }, [columns, computedColumnMaxWidths, computedColumnMinWidths, tableMinWidth]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const table = useReactTable({\n data,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: initialState,\n defaultColumn: {\n minSize: 60,\n maxSize: 700,\n cell: ({ cell }) => {\n return (<TableCell>{cell.getValue() as string}</TableCell>)\n },\n ...defaultColumn,\n },\n columns,\n state: {\n columnSizing,\n columnSizingInfo,\n pagination,\n columnFilters,\n ...state\n },\n filterFns: {\n ...tableOptions?.filterFns,\n dateRange: TableFilters.dateRange,\n },\n onColumnSizingInfoChange: updaterOrValue => {\n setColumnSizingInfo(updaterOrValue)\n if (tableOptions.onColumnSizingInfoChange) {\n tableOptions?.onColumnSizingInfoChange(updaterOrValue)\n }\n },\n onColumnSizingChange: updaterOrValue => {\n setColumnSizing(previous => {\n const newSizing = typeof updaterOrValue === 'function' ? updaterOrValue(previous) : updaterOrValue\n return updateColumnSizes(newSizing)\n })\n if (tableOptions.onColumnSizingChange) {\n tableOptions.onColumnSizingChange(updaterOrValue)\n }\n },\n onPaginationChange: updaterOrValue => {\n setPagination(updaterOrValue)\n if (tableOptions.onPaginationChange) {\n tableOptions.onPaginationChange(updaterOrValue)\n }\n },\n onColumnFiltersChange: updaterOrValue => {\n setColumnFilters(updaterOrValue)\n table.toggleAllRowsSelected(false)\n if (tableOptions.onColumnFiltersChange) {\n tableOptions.onColumnFiltersChange(updaterOrValue)\n }\n },\n autoResetPageIndex: false,\n columnResizeMode: 'onChange',\n ...tableOptions,\n })\n\n const [hasInitializedSizing, setHasInitializedSizing] = useState(false)\n useEffect(() => {\n if (!hasInitializedSizing && ref.current) {\n setHasInitializedSizing(true)\n table.setColumnSizing(updateColumnSizes(columnSizing))\n }\n }, [columnSizing, hasInitializedSizing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useResizeCallbackWrapper(useCallback(() => {\n table.setColumnSizing(updateColumnSizes)\n }, [updateColumnSizes])) // eslint-disable-line react-hooks/exhaustive-deps\n\n const pageCount = table.getPageCount()\n useEffect(() => {\n const totalPages = pageCount\n if (totalPages === 0) {\n if (pagination.pageIndex !== 0) {\n table.setPagination(prevState => ({\n ...prevState,\n pageIndex: 0,\n }))\n }\n } else if (pagination.pageIndex >= totalPages) {\n table.setPagination((prev) => ({\n ...prev,\n pageIndex: totalPages - 1,\n }))\n }\n }, [data, pageCount, pagination.pageSize, pagination.pageIndex]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const columnSizeVars = useMemo(() => {\n const headers = table.getFlatHeaders()\n const colSizes: { [key: string]: number } = {}\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i]!\n colSizes[`--header-${header.id}-size`] = header.getSize()\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize()\n }\n\n return colSizes\n }, [table.getState().columnSizingInfo, table.getState().columnSizing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div ref={ref} data-name={PropsUtil.dataAttributes.name('table-container')} className={className}>\n <div data-name={PropsUtil.dataAttributes.name('table-scroll-wrapper')} className={tableContainerClassName}>\n <table\n ref={tableRef}\n\n data-name={PropsUtil.dataAttributes.name('table')}\n\n style={{\n ...columnSizeVars,\n width: Math.floor(Math.max(table.getTotalSize() - columns.length, ref.current?.offsetWidth ?? table.getTotalSize())),\n }}\n\n className={tableClassName}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <colgroup key={headerGroup.id}>\n {headerGroup.headers.map(header => (\n <col\n key={header.id}\n style={{\n width: `calc(var(--header-${header?.id}-size) * 1px)`,\n minWidth: header.column.columnDef.minSize,\n maxWidth: header.column.columnDef.maxSize,\n }}\n />\n ))}\n </colgroup>\n ))}\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id} data-name={PropsUtil.dataAttributes.name('table-header-row')} className={table.options.meta?.headerRowClassName}>\n {headerGroup.headers.map(header => {\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n\n data-name={PropsUtil.dataAttributes.name('table-header-cell')}\n className={clsx('group/table-header-cell', header.column.columnDef.meta?.className)}\n >\n <Visibility isVisible={!header.isPlaceholder}>\n <div className=\"flex-row-1 items-center\">\n <Visibility isVisible={header.column.getCanSort()}>\n <TableSortButton\n sortDirection={header.column.getIsSorted()}\n sortingIndexDisplay={{\n index: header.column.getIsSorted() ? (header.column.getSortIndex() + 1) : -1,\n sortingsCount: table.getState().sorting.length,\n }}\n onClick={() => {\n const sorted = header.column.getIsSorted()\n const isMulti = header.column.getCanMultiSort()\n if (!isMulti) {\n table.resetSorting()\n }\n if (!sorted) {\n header.column.toggleSorting(true, isMulti)\n return\n } else if (sorted === 'desc') {\n header.column.toggleSorting(false, isMulti)\n }\n if (sorted === 'asc') {\n header.column.clearSorting()\n }\n }}\n />\n </Visibility>\n <Visibility isVisible={header.column.getCanFilter() && !!header.column.columnDef.meta?.filterType}>\n <TableFilterButton\n column={header.column}\n filterType={header.column.columnDef.meta?.filterType}\n />\n </Visibility>\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </div>\n </Visibility>\n <Visibility isVisible={header.column.getCanResize()}>\n <div\n onPointerDown={header.getResizeHandler()}\n onDoubleClick={() => {\n header.column.resetSize()\n }}\n\n data-name=\"table-resize-indicator\"\n data-active={PropsUtil.dataAttributes.bool(\n !!columnSizingInfo?.columnSizingStart\n && !!columnSizingInfo?.columnSizingStart?.find(([id, _]) => id === header.column.id)\n )}\n data-disabled={PropsUtil.dataAttributes.bool(\n !!columnSizingInfo?.columnSizingStart\n && (columnSizingInfo.columnSizingStart?.length ?? 0) > 0\n && !columnSizingInfo.columnSizingStart?.find(([id, _]) => id === header.column.id)\n )}\n />\n </Visibility>\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr\n key={row.id}\n onClick={() => onRowClick?.(row, table)}\n data-name=\"table-body-row\"\n className={BagFunctionUtil.resolve(table.options.meta?.bodyRowClassName, row.original)}\n >\n {row.getVisibleCells().map(cell => {\n return (\n <td key={cell.id} data-name=\"table-body-cell\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </td>\n )\n })}\n </tr>\n )\n })}\n {range(table.getState().pagination.pageSize - table.getRowModel().rows.length, { allowEmptyRange: true }).map((row, index) => {\n return (\n <tr key={'filler-row-' + index}>\n {columns.map((column) => {\n return (\n <td key={column.id}>\n {fillerRow ? fillerRow(column.id, table) : (<FillerCell />)}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n <div className=\"flex-row-2 justify-center\">\n <Pagination\n pageIndex={table.getState().pagination.pageIndex}\n pageCount={table.getPageCount()}\n onPageChanged={page => table.setPageIndex(page)}\n />\n </div>\n </div>\n )\n}\n\n\nexport type TableUncontrolledProps<T> = TableProps<T>\n\nexport const TableUncontrolled = <T,>({ data, ...props }: TableUncontrolledProps<T>) => {\n const [usedDate] = useOverwritableState<T[]>(data)\n\n return (\n <Table\n {...props}\n data={usedDate}\n />\n )\n}\n\n\nexport type TableWithSelectionProps<T> = TableProps<T> & {\n rowSelection: RowSelectionState,\n disableClickRowClickSelection?: boolean,\n selectionRowId?: string,\n}\n\nexport const TableWithSelection = <T,>({\n columns,\n state,\n fillerRow,\n rowSelection,\n disableClickRowClickSelection = false,\n selectionRowId = 'selection',\n onRowClick,\n meta,\n ...props\n}: TableWithSelectionProps<T>) => {\n const columnsWithSelection = useMemo<ColumnDef<T>[]>(() => {\n return [\n {\n id: selectionRowId,\n header: ({ table }) => {\n return (\n <Checkbox\n value={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onValueChange={value => {\n const newValue = !!value\n table.toggleAllRowsSelected(newValue)\n }}\n />\n )\n },\n cell: ({ row }) => {\n return (\n <Checkbox\n disabled={!row.getCanSelect()}\n value={row.getIsSelected()}\n onValueChange={row.getToggleSelectedHandler()}\n />\n )\n },\n size: 60,\n minSize: 60,\n maxSize: 60,\n enableResizing: false,\n enableSorting: false,\n },\n ...columns,\n ]\n }, [columns, selectionRowId])\n\n return (\n <Table\n columns={columnsWithSelection}\n fillerRow={(columnId, table) => {\n if (columnId === selectionRowId) {\n return (<Checkbox value={false} disabled={true} className=\"max-w-6\" />)\n }\n return fillerRow ? fillerRow(columnId, table) : (<FillerCell />)\n }}\n state={{\n rowSelection,\n ...state\n }}\n onRowClick={(row, table) => {\n if (!disableClickRowClickSelection) {\n row.toggleSelected()\n }\n onRowClick?.(row, table)\n }}\n meta={{\n ...meta,\n bodyRowClassName: clsx(\n { 'cursor-pointer': !disableClickRowClickSelection },\n meta?.bodyRowClassName\n )\n }}\n {...props}\n />\n )\n}","import { clsx } from 'clsx'\nimport type { PropsWithChildren } from 'react'\n\nexport type TableCellProps = PropsWithChildren<{\n className?: string,\n}>\n\nexport const TableCell = ({\n children,\n className,\n}: TableCellProps) => {\n return (\n <span className={clsx('block max-w-full overflow-ellipsis truncate', className)}>\n {children}\n </span>\n )\n}","import { useEffect } from 'react'\n\n/**\n * A hook that wraps the event listener attachment\n *\n * Make sure your callback is stable (doesn't change every render)\n * This can easily be achieved by wrapping it in a useCallback() and using it inside the useResizeCallbackWrapper\n *\n * @param callback Called when the window resizes\n */\nexport const useResizeCallbackWrapper = (callback: (event: UIEvent) => void) => {\n useEffect(() => {\n window.addEventListener('resize', callback)\n\n return () => {\n window.removeEventListener('resize', callback)\n }\n }, [callback])\n}","import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react'\nimport type { ButtonProps } from '../../user-interaction/Button'\nimport { Button } from '../../user-interaction/Button'\nimport clsx from 'clsx'\nimport type { SortDirection } from '@tanstack/react-table'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { Tooltip } from '@/src/components/user-interaction/Tooltip'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype SortingIndexDisplay = {\n index: number,\n sortingsCount: number,\n}\n\nexport type TableSortButtonProps = ButtonProps & {\n sortDirection: SortDirection | false,\n sortingIndexDisplay?: SortingIndexDisplay,\n invert?: boolean,\n}\n\n/**\n * An Extension of the normal button that displays the sorting state right of the content\n */\nexport const TableSortButton = ({\n sortDirection,\n invert = false,\n color = 'neutral',\n size = 'xs',\n className,\n sortingIndexDisplay,\n ...props\n}: TableSortButtonProps) => {\n const translation = useHightideTranslation()\n const { sortingsCount, index } = sortingIndexDisplay\n\n let icon = <ChevronsUpDown className=\"size-4\"/>\n if (sortDirection) {\n let usedSortDirection = sortDirection\n if (invert) {\n usedSortDirection = usedSortDirection === 'desc' ? 'asc' : 'desc'\n }\n icon = usedSortDirection === 'asc' ?\n (<ChevronUp className=\"size-4\"/>) : (<ChevronDown className=\"size-4\"/>)\n }\n\n const hasSortingIndex = !!sortingIndexDisplay && sortingsCount > 1 && index > 0\n\n return (\n <Tooltip tooltip={translation('rSortingOrderAfter', { otherSortings: index - 1 } )} disabled={!hasSortingIndex}>\n <Button\n layout={hasSortingIndex ? 'default' : 'icon'}\n color={color}\n size={size}\n className={clsx('relative', className)}\n {...props}\n >\n <Visibility isVisible={hasSortingIndex}>\n <div\n className={clsx('absolute bottom-0 right-1/2 translate-x-1/2 translate-y-2/3 z-1 primary coloring-solid rounded-full h-4 w-5 text-sm')}\n >\n {`${index}.`}\n </div>\n </Visibility>\n {icon}\n </Button>\n </Tooltip>\n )\n}","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { clsx } from 'clsx'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport type { FloatingElementAlignment } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport { createPortal } from 'react-dom'\nimport type { TooltipConfig } from '@/src/contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/contexts/HightideConfigContext'\nimport type { UseOverlayRegistryProps } from '@/src/hooks/useOverlayRegistry'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\ntype TooltipState = {\n isShown: boolean,\n timer: NodeJS.Timeout | null,\n}\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type TooltipProps = PropsWithChildren & Partial<TooltipConfig> & {\n tooltip: ReactNode,\n /**\n * Class names of additional styling properties for the tooltip\n */\n tooltipClassName?: string,\n /**\n * Class names of additional styling properties for the container from which the tooltip will be created\n */\n containerClassName?: string,\n position?: Position,\n disabled?: boolean,\n}\n\n/**\n * A Component for showing a tooltip when hovering over Content\n * @param tooltip The tooltip to show can be a text or any ReactNode\n * @param children The Content for which the tooltip should be created\n * @param tooltipClassName Additional ClassNames for the Container of the tooltip\n * @param containerClassName Additional ClassNames for the Container holding the content\n * @param position The direction of the tooltip relative to the Container\n * @constructor\n */\nexport const Tooltip = ({\n tooltip,\n children,\n appearDelay: appearDelayOverwrite,\n disappearDelay: disappearDelayOverwrite,\n tooltipClassName,\n containerClassName,\n position = 'bottom',\n disabled = false,\n}: TooltipProps) => {\n const [state, setState] = useState<TooltipState>({\n isShown: false,\n timer: null,\n })\n const { config } = useHightideConfig()\n const appearDelay = useMemo(\n () => appearDelayOverwrite ?? config.tooltip.appearDelay,\n [config.tooltip.appearDelay, appearDelayOverwrite]\n )\n const disappearDelay = useMemo(\n () => disappearDelayOverwrite ?? config.tooltip.disappearDelay,\n [config.tooltip.disappearDelay, disappearDelayOverwrite]\n )\n const anchorRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const triangleRef = useRef<HTMLDivElement>(null)\n\n const isActive = !disabled && state.isShown\n\n const { isVisible, transitionState, callbacks } = useTransitionState(\n useMemo(() => ({ isOpen: isActive }), [isActive])\n )\n\n const verticalAlignment: FloatingElementAlignment = useMemo(() =>\n position === 'top' ? 'beforeStart' : position === 'bottom' ? 'afterEnd' : 'center',\n [position])\n\n const horizontalAlignment: FloatingElementAlignment = useMemo(() =>\n position === 'left' ? 'beforeStart' : position === 'right' ? 'afterEnd' : 'center',\n [position])\n\n const css = useFloatingElement(useMemo(() => ({\n active: isActive || isVisible,\n anchorRef: anchorRef,\n containerRef,\n horizontalAlignment,\n verticalAlignment,\n }), [horizontalAlignment, isActive, isVisible, verticalAlignment]))\n\n const cssTriangle = useFloatingElement(useMemo(() => ({\n active: isActive || isVisible,\n anchorRef: anchorRef,\n containerRef: triangleRef,\n horizontalAlignment,\n verticalAlignment,\n }), [horizontalAlignment, isActive, isVisible, verticalAlignment]))\n\n const regsitryOptions: UseOverlayRegistryProps = useMemo(() => ({ isActive }), [isActive])\n const { zIndex } = useOverlayRegistry(regsitryOptions)\n const { zIndex: zIndexTriangle } = useOverlayRegistry(regsitryOptions)\n\n const onEnter = useCallback(() => {\n setState(prevState => {\n if (prevState.isShown) {\n clearTimeout(prevState.timer)\n return {\n ...prevState,\n timer: null\n }\n }\n return {\n ...prevState,\n timer: setTimeout(() => {\n setState(prevState => {\n clearTimeout(prevState.timer)\n return { ...prevState, isShown: true, timer: null }\n })\n }, appearDelay)\n }\n })\n }, [appearDelay])\n\n const onLeave = useCallback(() => {\n setState(prevState => {\n if (!prevState.isShown) {\n clearTimeout(prevState.timer)\n return {\n ...prevState,\n timer: null\n }\n }\n clearTimeout(prevState.timer)\n return {\n ...prevState,\n timer: setTimeout(() => {\n setState(prevState => {\n clearTimeout(prevState.timer)\n return { ...prevState, isShown: false, timer: null }\n })\n }, disappearDelay)\n }\n })\n }, [disappearDelay])\n\n return (\n <div\n ref={anchorRef}\n className={clsx('relative inline-block', containerClassName)}\n onPointerEnter={onEnter}\n onPointerLeave={onLeave}\n >\n {children}\n <Visibility isVisible={isActive || isVisible}>\n {createPortal(\n <div\n ref={containerRef}\n\n {...callbacks}\n onPointerEnter={onEnter}\n\n data-name={PropsUtil.dataAttributes.name('tooltip')}\n data-state={transitionState}\n\n className={tooltipClassName}\n style={{ ...css, zIndex }}\n >\n {tooltip}\n </div>\n , document.body\n )}\n {createPortal(\n <div\n ref={triangleRef}\n\n data-name=\"tooltip-triangle\"\n data-state={transitionState}\n data-position={position}\n\n style={{ ...cssTriangle, zIndex: zIndexTriangle }}\n />\n , document.body\n )}\n </Visibility>\n </div>\n )\n}\n","import { Button } from '../../user-interaction/Button'\nimport { Input } from '../../user-interaction/input/Input'\nimport { FilterIcon } from 'lucide-react'\nimport { Menu } from '../../user-interaction/Menu'\nimport { useEffect, useState } from 'react'\nimport type { Column } from '@tanstack/react-table'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\nexport type TableFilterType = 'text' | 'range' | 'dateRange'\n\nexport type TableFilterButtonProps<T = unknown> = {\n filterType: TableFilterType,\n column: Column<T>,\n}\n\nexport const TableFilterButton = <T, >({\n filterType,\n column,\n}: TableFilterButtonProps<T>) => {\n const translation = useHightideTranslation()\n const columnFilterValue = column.getFilterValue()\n const [filterValue, setFilterValue] = useState<unknown>(columnFilterValue)\n const hasFilter = !!filterValue\n\n useEffect(() => {\n setFilterValue(columnFilterValue)\n }, [columnFilterValue])\n\n return (\n <Menu\n trigger={({ toggleOpen }, ref) => (\n <div ref={ref} className=\"relative\">\n <Button\n layout=\"icon\"\n color=\"neutral\"\n size=\"xs\"\n onClick={toggleOpen}\n >\n <FilterIcon className=\"size-4\"/>\n </Button>\n {hasFilter && (\n <div\n className=\"absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-primary pointer-events-none\"\n aria-hidden={true}\n />\n )}\n </div>\n )}\n >\n {({ close }) => (\n <div className=\"flex-col-1 p-2 items-start font-normal text-menu-text\">\n <h4 className=\"typography-label-md-semibold\">{translation('filter')}</h4>\n {filterType === 'text' && (\n <Input\n value={(filterValue ?? '') as string}\n autoFocus={true}\n placeholder={translation('text')+'...'}\n onValueChange={setFilterValue}\n className=\"h-10\"\n />\n )}\n {filterType === 'range' && (\n <div className=\"flex-row-2 items-center\">\n <Input\n value={(filterValue as [number, number])?.[0].toString() ?? ''}\n type=\"number\"\n placeholder={translation('min')}\n onValueChange={text => {\n const num = Number(text)\n setFilterValue((old: [number, number]) => [num, old?.[1]])\n }}\n className=\"h-10 input-indicator-hidden w-40\"\n />\n <span className=\"font-bold\">-</span>\n <Input\n value={(filterValue as [number, number])?.[1].toString() ?? ''}\n type=\"number\"\n placeholder={translation('max')}\n onValueChange={text => {\n const num = Number(text)\n setFilterValue((old: [number, number]) => [old?.[0], num])\n }}\n className=\"h-10 input-indicator-hidden w-40\"\n />\n </div>\n )}\n {filterType === 'dateRange' && (\n <>\n <Input\n value={(filterValue as [Date, Date])?.[0] ? (filterValue as [Date, Date])?.[0].toISOString().slice(0, 16) : ''}\n type=\"datetime-local\"\n placeholder={translation('startDate')}\n onValueChange={text => {\n const value = new Date(text)\n setFilterValue((old: [Date, Date]) => [value, old?.[1]])\n }}\n className=\"h-10 w-50\"\n />\n <Input\n value={(filterValue as [Date, Date])?.[1] ? (filterValue as [Date, Date])?.[1].toISOString().slice(0, 16) : ''}\n type=\"datetime-local\"\n placeholder={translation('endDate')}\n onValueChange={text => {\n const value = new Date(text)\n setFilterValue((old: [Date, Date]) => [old?.[0], value])\n }}\n className=\"h-10 w-50\"\n />\n </>\n )}\n <div className=\"flex-row-2 justify-end w-full\">\n {hasFilter && (\n <Button color=\"negative\" size=\"sm\" onClick={() => {\n column.setFilterValue(undefined)\n close()\n }}>\n {translation('remove')}\n </Button>\n )}\n <Button size=\"sm\" onClick={() => {\n column.setFilterValue(filterValue)\n close()\n }}>\n {translation('apply')}\n </Button>\n </div>\n </div>\n )}\n </Menu>\n )\n}","import { type PropsWithChildren, type ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\nimport { createPortal } from 'react-dom'\nimport type { PopoverHorizontalAlignment, PopoverVerticalAlignment } from '@/src/hooks/usePopoverPosition'\nimport { usePopoverPosition } from '@/src/hooks/usePopoverPosition'\nimport { useHoverState } from '@/src/hooks/useHoverState'\nimport { useOutsideClick } from '@/src/hooks/useOutsideClick'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\n\nexport type MenuItemProps = {\n onClick?: () => void,\n alignment?: 'left' | 'right',\n isDisabled?: boolean,\n className?: string,\n}\n// TODO differentiate between buttons, links and toggleable items here\nexport const MenuItem = ({\n children,\n onClick,\n alignment = 'left',\n isDisabled = false,\n className\n}: PropsWithChildren<MenuItemProps>) => (\n <div\n className={clsx('block px-3 py-1.5 first:rounded-t-md last:rounded-b-md text-sm font-semibold text-nowrap', {\n 'text-right': alignment === 'right',\n 'text-left': alignment === 'left',\n 'text-disabled cursor-not-allowed': isDisabled,\n 'text-menu-text hover:bg-primary/20': !isDisabled,\n 'cursor-pointer': !!onClick,\n }, className)}\n onClick={onClick}\n >\n {children}\n </div>\n)\n\nfunction getScrollableParents(element) {\n const scrollables = []\n let parent = element.parentElement\n while (parent) {\n scrollables.push(parent)\n parent = parent.parentElement\n }\n return scrollables\n}\n\nexport type MenuBag = {\n isOpen: boolean,\n disabled: boolean,\n toggleOpen: () => void,\n close: () => void,\n}\n\nexport type MenuProps = {\n children: (bag: MenuBag) => ReactNode | ReactNode,\n trigger: (bag: MenuBag, ref: (el: HTMLElement | null) => void) => ReactNode,\n /**\n * @default 'l'\n */\n alignmentHorizontal?: PopoverHorizontalAlignment,\n alignmentVertical?: PopoverVerticalAlignment,\n showOnHover?: boolean,\n menuClassName?: string,\n disabled?: boolean,\n}\n\n/**\n * A Menu Component to allow the user to see different functions\n */\nexport const Menu = ({\n trigger,\n children,\n alignmentHorizontal = 'leftInside',\n alignmentVertical = 'bottomOutside',\n showOnHover = false,\n disabled = false,\n menuClassName = '',\n}: MenuProps) => {\n const { isHovered: isOpen, setIsHovered: setIsOpen } = useHoverState({ isDisabled: !showOnHover || disabled })\n const triggerRef = useRef<HTMLElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n useOutsideClick([triggerRef, menuRef], () => setIsOpen(false))\n\n const [isHidden, setIsHidden] = useState<boolean>(true)\n const bag: MenuBag = {\n isOpen,\n close: () => setIsOpen(false),\n toggleOpen: () => setIsOpen(prevState => !prevState),\n disabled,\n }\n\n const menuPosition = usePopoverPosition(\n triggerRef.current?.getBoundingClientRect(),\n { verticalAlignment: alignmentVertical, horizontalAlignment: alignmentHorizontal, disabled }\n )\n\n useEffect(() => {\n if (!isOpen) return\n\n const triggerEl = triggerRef.current\n if (!triggerEl) return\n\n const scrollableParents = getScrollableParents(triggerEl)\n\n const close = () => setIsOpen(false)\n scrollableParents.forEach((parent) => {\n parent.addEventListener('scroll', close)\n })\n window.addEventListener('resize', close)\n\n return () => {\n scrollableParents.forEach((parent) => {\n parent.removeEventListener('scroll', close)\n })\n window.removeEventListener('resize', close)\n }\n }, [isOpen, setIsOpen])\n\n useEffect(() => {\n if (isOpen) {\n setIsHidden(false)\n }\n }, [isOpen])\n\n const { zIndex } = useOverlayRegistry({\n isActive: isOpen,\n })\n\n return (\n <>\n {trigger(bag, useCallback((el) => triggerRef.current = el, []))}\n {createPortal((\n <div\n ref={menuRef}\n onClick={e => e.stopPropagation()}\n className={clsx(\n 'absolute rounded-md bg-menu-background text-menu-text shadow-around-lg shadow-strong z-[300]',\n {\n 'animate-pop-in': isOpen,\n 'animate-pop-out': !isOpen,\n 'hidden': isHidden,\n },\n menuClassName\n )}\n onAnimationEnd={() => {\n if (!isOpen) {\n setIsHidden(true)\n }\n }}\n style={{\n ...menuPosition,\n zIndex\n }}\n >\n {BagFunctionUtil.resolve<MenuBag>(children, bag)}\n </div>\n ), document.body)}\n </>\n )\n}\n\n","import type { ReactNode } from 'react'\n\nexport type BagFunction<B, V = ReactNode> = (bag: B) => V\n\nexport type BagFunctionOrValue<B, V> = BagFunction<B, V> | V\n\nexport type BagFunctionOrNode<B> = BagFunction<B> | ReactNode\n\nexport type PropsWithBagFunction<B, P = unknown> = P & { children?: BagFunction<B> }\n\nexport type PropsWithBagFunctionOrChildren<B, P = unknown> = P & { children?: BagFunctionOrNode<B> }\n\n/**\n * Resolves a BagFunction\n *\n * If V is a function this resolver does not work\n * @param bagFunctionOrValue Function or Value\n * @param bag Values for function resolvers\n * @returns The Value or the result of the function\n */\nconst resolve = <B, V = ReactNode>(bagFunctionOrValue: BagFunctionOrValue<B, V>, bag: B): V => {\n if (typeof bagFunctionOrValue === 'function') {\n return (bagFunctionOrValue as BagFunction<B,V>)(bag)\n }\n\n return bagFunctionOrValue\n}\n\nexport const BagFunctionUtil = {\n resolve\n}","import type { CSSProperties } from 'react'\n\nexport type PopoverHorizontalAlignment = 'leftOutside' | 'leftInside' | 'rightOutside' | 'rightInside' | 'center'\nexport type PopoverVerticalAlignment = 'topOutside' | 'topInside' | 'bottomOutside' | 'bottomInside' | 'center'\n\ntype PopoverPositionOptionsResolved = {\n edgePadding: number,\n outerGap: number,\n verticalAlignment: PopoverVerticalAlignment,\n horizontalAlignment: PopoverHorizontalAlignment,\n disabled: boolean,\n}\n\ntype PopoverPositionOptions = Partial<PopoverPositionOptionsResolved>\n\nconst defaultPopoverPositionOptions: PopoverPositionOptionsResolved = {\n edgePadding: 16,\n outerGap: 4,\n horizontalAlignment: 'leftInside',\n verticalAlignment: 'bottomOutside',\n disabled: false,\n}\n\nexport const usePopoverPosition = (trigger?: DOMRect, options?: PopoverPositionOptions): CSSProperties => {\n const {\n edgePadding,\n outerGap,\n verticalAlignment,\n horizontalAlignment,\n disabled\n }: PopoverPositionOptionsResolved = { ...defaultPopoverPositionOptions, ...options }\n\n if (disabled || !trigger) {\n return {}\n }\n\n const left: number = {\n leftOutside: trigger.left - outerGap,\n leftInside: trigger.left,\n rightOutside: trigger.right + outerGap,\n rightInside: trigger.right,\n center: trigger.left + trigger.width / 2,\n }[horizontalAlignment]\n\n const top: number = {\n topOutside: trigger.top - outerGap,\n topInside: trigger.top,\n bottomOutside: trigger.bottom + outerGap,\n bottomInside: trigger.bottom,\n center: trigger.top + trigger.height / 2,\n }[verticalAlignment]\n\n const translateX: string | undefined = {\n leftOutside: '-100%',\n leftInside: undefined,\n rightOutside: undefined,\n rightInside: '-100%',\n center: '-50%',\n }[horizontalAlignment]\n\n const translateY: string | undefined = {\n topOutside: '-100%',\n topInside: undefined,\n bottomOutside: undefined,\n bottomInside: '-100%',\n center: '-50%',\n }[verticalAlignment]\n\n return {\n left: Math.max(left, edgePadding),\n top: Math.max(top, edgePadding),\n translate: [translateX ?? '0', translateY ?? '0'].join(' ')\n }\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useEffect, useState } from 'react'\n\ntype UseHoverStateProps = {\n /**\n * The delay after which the menu is closed in milliseconds\n *\n * default: 200ms\n */\n closingDelay: number,\n /**\n * Whether the hover state management should be disabled\n *\n * default: false\n */\n isDisabled: boolean,\n}\n\ntype UseHoverStateReturnType = {\n /**\n * Whether the element is hovered\n */\n isHovered: boolean,\n /**\n * Function to change the current hover status\n */\n setIsHovered: Dispatch<SetStateAction<boolean>>,\n /**\n * Handlers to pass on to the component that should be hovered\n */\n handlers: {\n onMouseEnter: () => void,\n onMouseLeave: () => void,\n },\n}\n\nconst defaultUseHoverStateProps: UseHoverStateProps = {\n closingDelay: 200,\n isDisabled: false,\n}\n\n/**\n * @param props See UseHoverStateProps\n *\n * A react hook for managing the hover state of a component. The handlers provided should be\n * forwarded to the component which should be hovered over\n */\nexport const useHoverState = (props: Partial<UseHoverStateProps> | undefined = undefined): UseHoverStateReturnType => {\n const { closingDelay, isDisabled } = { ...defaultUseHoverStateProps, ...props }\n\n const [isHovered, setIsHovered] = useState(false)\n const [timer, setTimer] = useState<NodeJS.Timeout>()\n\n const onMouseEnter = () => {\n if (isDisabled) {\n return\n }\n clearTimeout(timer)\n setIsHovered(true)\n }\n\n const onMouseLeave = () => {\n if (isDisabled) {\n return\n }\n setTimer(setTimeout(() => {\n setIsHovered(false)\n }, closingDelay))\n }\n\n useEffect(() => {\n if (timer) {\n return () => {\n clearTimeout(timer)\n }\n }\n })\n\n useEffect(() => {\n if (timer) {\n clearTimeout(timer)\n }\n }, [isDisabled]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n isHovered, setIsHovered, handlers: { onMouseEnter, onMouseLeave }\n }\n}\n","import type { RefObject } from 'react'\nimport { useEffect } from 'react'\n\nexport const useOutsideClick = <Ts extends RefObject<HTMLElement>[]>(refs: Ts, handler: () => void) => {\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n // returning means not \"not clicking outside\"\n\n // if no target exists, return\n if (event.target === null) return\n // if the target is a ref's element or descendent thereof, return\n if (refs.some((ref) => !ref.current || ref.current.contains(event.target as Node))) {\n return\n }\n\n handler()\n }\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [refs, handler])\n}\n","import { Check, Minus } from 'lucide-react'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { useCallback, type HTMLAttributes } from 'react'\nimport { Visibility } from '../layout/Visibility'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../form/FormField'\n\ntype CheckBoxSize = 'sm' | 'md' | 'lg' | null\n\nexport type CheckboxProps = HTMLAttributes<HTMLDivElement>\n & Partial<FormFieldInteractionStates>\n & Partial<FormFieldDataHandling<boolean>>\n & {\n indeterminate?: boolean,\n size?: CheckBoxSize,\n alwaysShowCheckIcon?: boolean,\n }\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by the parent\n */\nexport const Checkbox = ({\n value = false,\n indeterminate = false,\n required = false,\n invalid = false,\n disabled = false,\n readOnly = false,\n onValueChange,\n onEditComplete,\n size = 'md',\n alwaysShowCheckIcon = false,\n ...props\n}: CheckboxProps) => {\n const onChangeWrapper = useCallback(() => {\n onValueChange?.(!value)\n onEditComplete?.(!value)\n }, [onEditComplete, onValueChange, value])\n\n return (\n <div\n {...props}\n\n onClick={(event) => {\n if (!disabled) {\n onChangeWrapper()\n props.onClick?.(event)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) return\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onChangeWrapper()\n props.onKeyDown?.(event)\n }\n }}\n\n data-name={PropsUtil.dataAttributes.name('checkbox', props)}\n data-checked={!indeterminate ? value : 'indeterminate'}\n data-size={size ?? undefined}\n {...PropsUtil.dataAttributes.interactionStates({ disabled, invalid, readOnly, required })}\n\n role=\"checkbox\"\n tabIndex={disabled ? -1 : 0}\n\n aria-checked={indeterminate ? 'mixed' : value}\n {...PropsUtil.aria.interactionStates({ disabled, invalid, readOnly, required }, props)}\n >\n <Visibility isVisible={indeterminate}>\n <Minus data-name=\"checkbox-indicator\" aria-hidden={true} />\n </Visibility>\n <Visibility isVisible={!indeterminate && (alwaysShowCheckIcon || value)}>\n <Check data-name=\"checkbox-indicator\" aria-hidden={true} />\n </Visibility>\n </div>\n )\n}\n\nexport type CheckboxUncontrolledProps = CheckboxProps\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by this component\n */\nexport const CheckboxUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: CheckboxUncontrolledProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <Checkbox\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}","import type { CSSProperties, PropsWithChildren } from 'react'\nimport { useState } from 'react'\nimport { clsx } from 'clsx'\nimport { writeToClipboard } from '@/src/utils/writeToClipboard'\nimport { CheckIcon, Copy } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type CopyToClipboardWrapperProps = PropsWithChildren<{\n textToCopy: string,\n /**\n * Class names of additional styling properties for the tooltip\n */\n tooltipClassName?: string,\n /**\n * Class names of additional styling properties for the container from which the tooltip will be created\n */\n containerClassName?: string,\n position?: Position,\n zIndex?: number,\n}>\n\n/**\n * A Component for showing a tooltip when hovering over Content\n * @param tooltip The tooltip to show can be a text or any ReactNode\n * @param children The Content for which the tooltip should be created\n * @param tooltipClassName Additional ClassNames for the Container of the tooltip\n * @param containerClassName Additional ClassNames for the Container holding the content\n * @param position The direction of the tooltip relative to the Container\n * @param zIndex The z Index of the tooltip (you may require this when stacking modal)\n * @constructor\n */\nexport const CopyToClipboardWrapper = ({\n children,\n textToCopy,\n tooltipClassName = '',\n containerClassName = '',\n position = 'bottom',\n zIndex = 10,\n}: CopyToClipboardWrapperProps) => {\n const translation = useHightideTranslation()\n const [isShowingIndication, setIsShowingIndication] = useState(false)\n const [isShowingConfirmation, setIsShowingConfirmation] = useState(false)\n\n const positionClasses = {\n top: `bottom-full left-1/2 -translate-x-1/2 mb-[6px]`,\n bottom: `top-full left-1/2 -translate-x-1/2 mt-[6px]`,\n left: `right-full top-1/2 -translate-y-1/2 mr-[6px]`,\n right: `left-full top-1/2 -translate-y-1/2 ml-[6px]`\n }\n\n const triangleSize = 6\n const triangleClasses = {\n top: `top-full left-1/2 -translate-x-1/2 border-t-tooltip-background border-l-transparent border-r-transparent`,\n bottom: `bottom-full left-1/2 -translate-x-1/2 border-b-tooltip-background border-l-transparent border-r-transparent`,\n left: `left-full top-1/2 -translate-y-1/2 border-l-tooltip-background border-t-transparent border-b-transparent`,\n right: `right-full top-1/2 -translate-y-1/2 border-r-tooltip-background border-t-transparent border-b-transparent`\n }\n\n const triangleStyle: Record<Position, CSSProperties> = {\n top: { borderWidth: `${triangleSize}px ${triangleSize}px 0 ${triangleSize}px` },\n bottom: { borderWidth: `0 ${triangleSize}px ${triangleSize}px ${triangleSize}px` },\n left: { borderWidth: `${triangleSize}px 0 ${triangleSize}px ${triangleSize}px` },\n right: { borderWidth: `${triangleSize}px ${triangleSize}px ${triangleSize}px 0` }\n }\n\n return (\n <div\n className={clsx('relative inline-block cursor-copy', containerClassName)}\n onMouseEnter={() => {\n setIsShowingIndication(true)\n }}\n onMouseLeave={() => {\n setIsShowingIndication(false)\n setIsShowingConfirmation(false)\n }}\n onClick={() => {\n writeToClipboard(textToCopy).catch(console.error)\n setIsShowingIndication(false)\n setIsShowingConfirmation(true)\n }}\n >\n {children}\n <div\n className={clsx(\n `absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap\n shadow-around-md bg-tooltip-background cursor-default pointer-events-none`,\n 'transition-opacity duration-200',\n positionClasses[position],\n tooltipClassName\n )}\n style={{\n zIndex,\n opacity: (isShowingIndication || isShowingConfirmation) ? 1 : 0,\n }}\n >\n {isShowingConfirmation && (\n <div className=\"flex-row-1\">\n <CheckIcon size={16} className=\"text-positive\"/>\n {translation('copied')}\n </div>\n )}\n {isShowingIndication && (\n <div className=\"flex-row-1 text-description\">\n <Copy size={16}/>\n {translation('clickToCopy')}\n </div>\n )}\n <div\n className={clsx(`absolute w-0 h-0`, triangleClasses[position])}\n style={{ ...triangleStyle[position], zIndex: zIndex + 1 }}\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nexport const writeToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text)\n}","import { useCallback, useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { getNeighbours, range } from '@/src/utils/array'\nimport { clamp } from '@/src/utils/math'\n\nexport type ScrollPickerProps<T> = {\n options: T[],\n mapping: (value: T) => string,\n selected?: T,\n onChange?: (value: T) => void,\n disabled?: boolean,\n}\n\ntype AnimationData<T> = {\n /** The index we scroll to */\n targetIndex: number,\n /** The index we are currently showing centered */\n currentIndex: number,\n items: T[],\n /** From -0.5 to 0.5 */\n transition: number,\n velocity: number,\n animationVelocity: number,\n lastTimeStamp?: number,\n lastScrollTimeStamp?: number,\n}\n\nconst up = 1\nconst down = -1\ntype Direction = 1 | -1\n\n/**\n * A component for picking an option by scrolling\n */\nexport const ScrollPicker = <T, >({\n options,\n mapping,\n selected,\n onChange,\n disabled = false,\n}: ScrollPickerProps<T>) => {\n let selectedIndex = 0\n if (selected && options.indexOf(selected) !== -1) {\n selectedIndex = options.indexOf(selected)\n }\n const [{\n currentIndex,\n transition,\n items,\n lastTimeStamp\n }, setAnimation] = useState<AnimationData<T>>({\n targetIndex: selectedIndex,\n currentIndex: disabled ? selectedIndex : 0,\n velocity: 0,\n animationVelocity: Math.floor(options.length / 2),\n transition: 0,\n items: options,\n })\n\n const itemsShownCount = 5\n const shownItems = getNeighbours(range(items.length), currentIndex).map(index => ({\n name: mapping(items[index]!), index\n }))\n\n const itemHeight = 40\n const distance = 8\n\n const containerHeight = itemHeight * (itemsShownCount - 2) + distance * (itemsShownCount - 2 + 1)\n\n const getDirection = useCallback((targetIndex: number, currentIndex: number, transition: number, length: number): Direction => {\n if (targetIndex === currentIndex) {\n return transition > 0 ? up : down\n }\n let distanceForward = targetIndex - currentIndex\n if (distanceForward < 0) {\n distanceForward += length\n }\n return distanceForward >= length / 2 ? down : up\n }, [])\n\n const animate = useCallback((timestamp: number, startTime: number | undefined) => {\n setAnimation((prevState) => {\n const {\n targetIndex,\n currentIndex,\n transition,\n animationVelocity,\n velocity,\n items,\n lastScrollTimeStamp\n } = prevState\n if (disabled) {\n return { ...prevState, currentIndex: targetIndex, velocity: 0, lastTimeStamp: timestamp }\n }\n if ((targetIndex === currentIndex && velocity === 0 && transition === 0) || !startTime) {\n return { ...prevState, lastTimeStamp: timestamp }\n }\n const progress = (timestamp - startTime) / 1000 // to seconds\n const direction = getDirection(targetIndex, currentIndex, transition, items.length)\n\n let newVelocity = velocity\n let usedVelocity\n let newCurrentIndex = currentIndex\n const isAutoScrolling = velocity <= 10 && (!lastScrollTimeStamp || timestamp - lastScrollTimeStamp > 50)\n\n const newLastScrollTimeStamp = velocity !== 0 ? timestamp : lastScrollTimeStamp\n\n // manual scrolling\n if (isAutoScrolling) {\n usedVelocity = direction * animationVelocity\n } else {\n usedVelocity = velocity\n newVelocity = velocity * 0.5 // drag loss\n if (Math.abs(newVelocity) <= 0.05) {\n newVelocity = 0\n }\n }\n\n let newTransition = transition + usedVelocity * progress\n const changeThreshold = 0.5\n\n while (newTransition >= changeThreshold) {\n if (newCurrentIndex === targetIndex && newTransition >= changeThreshold && isAutoScrolling) {\n newTransition = 0\n break\n }\n newCurrentIndex = (currentIndex + 1) % items.length\n newTransition -= 1\n }\n if (newTransition >= changeThreshold) {\n newTransition = 0\n }\n while (newTransition <= -changeThreshold) {\n if (newCurrentIndex === targetIndex && newTransition <= -changeThreshold && isAutoScrolling) {\n newTransition = 0\n break\n }\n newCurrentIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1\n newTransition += 1\n }\n let newTargetIndex = targetIndex\n if (!isAutoScrolling) {\n newTargetIndex = newCurrentIndex\n }\n\n if ((currentIndex !== newTargetIndex || newTargetIndex !== targetIndex) && newTargetIndex === newCurrentIndex) {\n onChange?.(items[newCurrentIndex]!)\n }\n return {\n targetIndex: newTargetIndex,\n currentIndex: newCurrentIndex,\n animationVelocity,\n transition: newTransition,\n velocity: newVelocity,\n items,\n lastTimeStamp: timestamp,\n lastScrollTimeStamp: newLastScrollTimeStamp\n }\n })\n }, [disabled, getDirection, onChange])\n\n useEffect(() => {\n // constant update\n requestAnimationFrame((timestamp) => animate(timestamp, lastTimeStamp))\n })\n\n const opacity = (transition: number, index: number, itemsCount: number) => {\n const max = 100\n const min = 0\n const distance = max - min\n\n let opacityValue = min\n const unitTransition = clamp((transition) / 0.5)\n if (index === 1 || index === itemsCount - 2) {\n if (index === 1 && transition > 0) {\n opacityValue += Math.floor(unitTransition * distance)\n }\n if (index === itemsCount - 2 && transition < 0) {\n opacityValue += Math.floor(unitTransition * distance)\n }\n } else {\n opacityValue = max\n }\n\n // TODO this is not the right value for the bottom entry\n return clamp(1 - (opacityValue / max))\n }\n\n return (\n <div\n className=\"relative overflow-hidden\"\n style={{ height: containerHeight }}\n onWheel={event => {\n if (event.deltaY !== 0) {\n const deltaY = clamp(event.deltaY,[-itemHeight*2/3, itemHeight*2/3])\n // TODO slower increase\n setAnimation(({ velocity, ...animationData }) =>\n ({ ...animationData, velocity: velocity + deltaY }))\n }\n }}\n >\n <div className=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2\">\n <div\n className=\"absolute z-[1] top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2 w-full min-w-[40px] border border-divider/50 border-y-2 border-x-0 \"\n style={{ height: `${itemHeight}px` }}\n />\n <div\n className=\"flex-col-2 select-none\"\n style={{\n transform: `translateY(${-transition * (distance + itemHeight)}px)`,\n columnGap: `${distance}px`,\n }}\n >\n {shownItems.map(({ name, index }, arrayIndex) => (\n <div\n key={index}\n className={clsx(\n `flex-col-2 items-center justify-center rounded-md`,\n {\n 'text-primary font-bold': currentIndex === index,\n 'text-on-background': currentIndex === index,\n 'cursor-pointer': !disabled,\n 'cursor-not-allowed': disabled,\n }\n )}\n style={{\n opacity: currentIndex !== index ? opacity(transition, arrayIndex, shownItems.length) : undefined,\n height: `${itemHeight}px`,\n maxHeight: `${itemHeight}px`,\n }}\n onClick={() => !disabled && setAnimation(prevState => ({ ...prevState, targetIndex: index }))}\n >\n {name}\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","import type { LabelHTMLAttributes, ReactNode, TextareaHTMLAttributes } from 'react'\nimport { forwardRef, useId } from 'react'\nimport clsx from 'clsx'\nimport { useDelay, type UseDelayOptions } from '@/src/hooks/useDelay'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type TextareaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>\n & Partial<FormFieldDataHandling<string>>\n & Partial<FormFieldInteractionStates>\n & { saveDelayOptions?: UseDelayOptions }\n\n/**\n * A Textarea component for inputting longer texts\n *\n * The State is managed by the parent\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea({\n invalid = false,\n onValueChange,\n onEditComplete,\n saveDelayOptions,\n ...props\n}, ref) {\n const { restartTimer, clearTimer } = useDelay(saveDelayOptions)\n\n const onEditCompleteWrapper = (text: string) => {\n onEditComplete?.(text)\n clearTimer()\n }\n\n return (\n <textarea\n {...props}\n ref={ref}\n\n onChange={(event) => {\n const value = event.target.value\n restartTimer(() => {\n onEditCompleteWrapper(value)\n })\n props.onChange?.(event)\n onValueChange?.(value)\n }}\n onBlur={(event) => {\n props.onBlur?.(event)\n onEditCompleteWrapper(event.target.value)\n }}\n\n data-name={PropsUtil.dataAttributes.name('textarea', props)}\n data-value={PropsUtil.dataAttributes.bool(!!props.value)}\n {...PropsUtil.dataAttributes.interactionStates({ ...props, invalid })}\n\n {...PropsUtil.aria.interactionStates({ ...props, invalid }, props)}\n />\n )\n})\n\n/**\n * A Textarea component that is not controlled by its parent\n */\nexport const TextareaUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: TextareaProps) => {\n const [value, setValue] = useOverwritableState<string>(initialValue, onValueChange)\n\n return (\n <Textarea\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}\n\nexport type TextareaWithHeadlineProps = Omit<TextareaProps, 'defaultStyle'> & {\n headline: ReactNode,\n headlineProps: Omit<LabelHTMLAttributes<HTMLLabelElement>, 'children'>,\n containerClassName?: string,\n}\n\nexport const TextareaWithHeadline = ({\n id,\n headline,\n headlineProps,\n disabled,\n className,\n containerClassName,\n ...props\n}: TextareaWithHeadlineProps) => {\n const genId = useId()\n const usedId = id ?? genId\n\n return (\n <div\n className={clsx(\n 'group flex-col-3 border-2 rounded-lg',\n {\n 'bg-input-background text-input-text hover:border-primary focus-within:border-primary': !disabled,\n 'border-disabled-border bg-disabled-background cursor-not-allowed': disabled,\n },\n containerClassName\n )}\n >\n {headline && (\n <label {...headlineProps} htmlFor={usedId} className={clsx('typography-lable-md text-label', headlineProps.className)}>\n {headline}\n </label>\n )}\n <Textarea\n {...props}\n id={usedId}\n className={clsx(\n 'border-transparent focus:ring-0 focus-visible:ring-0 resize-none h-32',\n className\n )}\n />\n </div>\n )\n}","import { useState } from 'react'\nimport { ArrowDown, ArrowUp, Calendar, ChevronDown } from 'lucide-react'\nimport type { WeekDay } from '@/src/utils/date'\nimport { addDuration, isInTimeSpan, subtractDuration } from '@/src/utils/date'\nimport clsx from 'clsx'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { DayPickerProps } from '@/src/components/user-interaction/date/DayPicker'\nimport { DayPicker } from '@/src/components/user-interaction/date/DayPicker'\nimport type { YearMonthPickerProps } from '@/src/components/user-interaction/date/YearMonthPicker'\nimport { YearMonthPicker } from '@/src/components/user-interaction/date/YearMonthPicker'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { LocalizationUtil } from '@/src/i18n/util'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\ntype DisplayMode = 'yearMonth' | 'day'\n\nexport type DatePickerProps = Partial<FormFieldDataHandling<Date>> & {\n start?: Date,\n end?: Date,\n initialDisplay?: DisplayMode,\n weekStart?: WeekDay,\n dayPickerProps?: Omit<DayPickerProps, 'displayedMonth' | 'onChange' | 'selected' | 'weekStart'>,\n yearMonthPickerProps?: Omit<YearMonthPickerProps, 'displayedYearMonth' | 'onChange' | 'start' | 'end'>,\n className?: string,\n}\n\n/**\n * A Component for picking a date\n */\nexport const DatePicker = ({\n value = new Date(),\n start,\n end,\n initialDisplay = 'day',\n weekStart,\n onValueChange,\n onEditComplete,\n yearMonthPickerProps,\n dayPickerProps,\n className\n}: DatePickerProps) => {\n const { locale } = useLocale()\n const [displayedMonth, setDisplayedMonth] = useState<Date>(new Date(value.getFullYear(), value.getMonth(), 1))\n const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplay)\n\n return (\n <div className={clsx('flex-col-3', className)}>\n <div className=\"flex-row-2 items-center justify-between\">\n <Button\n size=\"sm\"\n coloringStyle=\"text\"\n className={clsx('flex-row-1 items-center cursor-pointer select-none', {\n 'text-disabled': displayMode !== 'day',\n })}\n onClick={() => setDisplayMode(displayMode === 'day' ? 'yearMonth' : 'day')}\n >\n {`${new Intl.DateTimeFormat(LocalizationUtil.localToLanguage(locale), { month: 'long' }).format(displayedMonth)} ${displayedMonth.getFullYear()}`}\n <ChevronDown size={16}/>\n </Button>\n {displayMode === 'day' && (\n <div className=\"flex-row-2 justify-end\">\n <Button\n size=\"sm\"\n coloringStyle=\"tonal\"\n onClick={() => {\n const newDate = new Date()\n newDate.setHours(value.getHours(), value.getMinutes())\n onValueChange(newDate)\n setDisplayedMonth(newDate)\n }}\n >\n <Calendar className=\"size-5\"/>\n </Button>\n <Button\n size=\"sm\"\n disabled={!isInTimeSpan(subtractDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(subtractDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowUp size={20}/>\n </Button>\n <Button\n size=\"sm\"\n disabled={!isInTimeSpan(addDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(addDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowDown size={20}/>\n </Button>\n </div>\n )}\n </div>\n {displayMode === 'yearMonth' ? (\n <YearMonthPicker\n {...yearMonthPickerProps}\n value={value}\n start={start}\n end={end}\n onValueChange={newDate => {\n setDisplayedMonth(newDate)\n setDisplayMode('day')\n }}\n onEditComplete={newDate => {\n setDisplayedMonth(newDate)\n setDisplayMode('day')\n }}\n className=\"h-60 max-h-60\"\n />\n ) : (\n <DayPicker\n {...dayPickerProps}\n value={value}\n displayedMonth={displayedMonth}\n start={start}\n end={end}\n weekStart={weekStart}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n className=\"h-60 max-h-60\"\n />\n )}\n </div>\n )\n}\n\n/**\n * Example for the Date Picker\n */\nexport const DatePickerUncontrolled = ({\n value,\n onValueChange,\n ...props\n}: DatePickerProps) => {\n const [date, setDate] = useOverwritableState<Date>(value, onValueChange)\n\n return (\n <DatePicker\n {...props}\n value={date}\n onValueChange={setDate}\n />\n )\n}\n","import { equalSizeGroups } from '@/src/utils/array'\nimport type { DurationJSON } from '@/src/utils/duration'\n\nconst monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nconst weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const\nexport type WeekDay = typeof weekDayList[number]\n\nexport const formatDate = (date: Date) => {\n const year = date.getFullYear().toString().padStart(4, '0')\n const month = (date.getMonth() + 1).toString().padStart(2, '0')\n const day = (date.getDate()).toString().padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport const formatDateTime = (date: Date) => {\n const dateString = formatDate(date)\n const hours = date.getHours().toString().padStart(2, '0')\n const minutes = date.getMinutes().toString().padStart(2, '0')\n return `${dateString}T${hours}:${minutes}`\n}\n\nexport const changeDuration = (date: Date, duration: Partial<DurationJSON>, isAdding?: boolean): Date => {\n const {\n years = 0,\n months = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n milliseconds = 0,\n } = duration\n\n // Check ranges\n if (years < 0) {\n console.error(`Range error years must be greater than 0: received ${years}`)\n return new Date(date)\n }\n if (months < 0 || months > 11) {\n console.error(`Range error month must be 0 <= month <= 11: received ${months}`)\n return new Date(date)\n }\n if (days < 0) {\n console.error(`Range error days must be greater than 0: received ${days}`)\n return new Date(date)\n }\n if (hours < 0 || hours > 23) {\n console.error(`Range error hours must be 0 <= hours <= 23: received ${hours}`)\n return new Date(date)\n }\n if (minutes < 0 || minutes > 59) {\n console.error(`Range error minutes must be 0 <= minutes <= 59: received ${minutes}`)\n return new Date(date)\n }\n if (seconds < 0 || seconds > 59) {\n console.error(`Range error seconds must be 0 <= seconds <= 59: received ${seconds}`)\n return new Date(date)\n }\n if (milliseconds < 0) {\n console.error(`Range error seconds must be greater than 0: received ${milliseconds}`)\n return new Date(date)\n }\n\n const multiplier = isAdding ? 1 : -1\n\n const newDate = new Date(date)\n\n newDate.setFullYear(newDate.getFullYear() + multiplier * years)\n\n newDate.setMonth(newDate.getMonth() + multiplier * months)\n\n newDate.setDate(newDate.getDate() + multiplier * days)\n\n newDate.setHours(newDate.getHours() + multiplier * hours)\n\n newDate.setMinutes(newDate.getMinutes() + multiplier * minutes)\n\n newDate.setSeconds(newDate.getSeconds() + multiplier * seconds)\n\n newDate.setMilliseconds(newDate.getMilliseconds() + multiplier * milliseconds)\n\n return newDate\n}\n\nexport const addDuration = (date: Date, duration: Partial<DurationJSON>): Date => {\n return changeDuration(date, duration, true)\n}\n\nexport const subtractDuration = (date: Date, duration: Partial<DurationJSON>): Date => {\n return changeDuration(date, duration, false)\n}\n\nexport const getBetweenDuration = (startDate: Date, endDate: Date): Partial<DurationJSON> => {\n const durationInMilliseconds = endDate.getTime() - startDate.getTime()\n\n const millisecondsInSecond = 1000\n const millisecondsInMinute = 60 * millisecondsInSecond\n const millisecondsInHour = 60 * millisecondsInMinute\n const millisecondsInDay = 24 * millisecondsInHour\n const millisecondsInMonth = 30 * millisecondsInDay // Rough estimation, can be adjusted\n\n const years = Math.floor(durationInMilliseconds / (365.25 * millisecondsInDay))\n const months = Math.floor(durationInMilliseconds / millisecondsInMonth)\n const days = Math.floor(durationInMilliseconds / millisecondsInDay)\n const hours = Math.floor((durationInMilliseconds % millisecondsInDay) / millisecondsInHour)\n const seconds = Math.floor((durationInMilliseconds % millisecondsInHour) / millisecondsInSecond)\n const milliseconds = durationInMilliseconds % millisecondsInSecond\n\n return {\n years,\n months,\n days,\n hours,\n seconds,\n milliseconds,\n }\n}\n\n/** Checks if a given date is in the range of two dates\n *\n * An undefined value for startDate or endDate means no bound for the start or end respectively\n */\nexport const isInTimeSpan = (value: Date, startDate?: Date, endDate?: Date): boolean => {\n if (startDate && endDate) {\n console.assert(startDate <= endDate)\n return startDate <= value && value <= endDate\n } else if (startDate) {\n return startDate <= value\n } else if (endDate) {\n return endDate >= value\n } else {\n return true\n }\n}\n\n/** Compare two dates on the year, month, day */\nconst equalDate = (date1: Date, date2: Date) => {\n return date1.getFullYear() === date2.getFullYear()\n && date1.getMonth() === date2.getMonth()\n && date1.getDate() === date2.getDate()\n}\n\nexport const getWeeksForCalenderMonth = (date: Date, weekStart: WeekDay, weeks: number = 6) => {\n const month = date.getMonth()\n const year = date.getFullYear()\n\n const dayList: Date[] = []\n let currentDate = new Date(year, month, 1) // Start of month\n const weekStartIndex = weekDayList.indexOf(weekStart)\n\n // Move the current day to the week before\n while (currentDate.getDay() !== weekStartIndex) {\n currentDate = subtractDuration(currentDate, { days: 1 })\n }\n\n while (dayList.length < 7 * weeks) {\n const date = new Date(currentDate)\n date.setHours(date.getHours(), date.getMinutes()) // To make sure we are not overwriting the time\n dayList.push(date)\n currentDate = addDuration(currentDate, { days: 1 })\n }\n\n // weeks\n return equalSizeGroups(dayList, 7)\n}\n\nconst formatGerman = (date: Date, showTime: boolean) => {\n const d = new Intl.DateTimeFormat('de-DE', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }).format(date)\n\n if (!showTime) return d\n\n const t = new Intl.DateTimeFormat('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n }).format(date)\n\n return `${d} um ${t} Uhr`\n}\n\nconst formatAbsolute = (date: Date, locale: string, showTime: boolean) => {\n if (locale === 'de-DE') {\n return formatGerman(date, showTime)\n }\n\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n }\n\n if (showTime) {\n options.hour = 'numeric'\n options.minute = 'numeric'\n }\n\n return new Intl.DateTimeFormat(locale, options).format(date)\n}\n\nconst formatRelative = (date: Date, locale: string, showTime: boolean) => {\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' })\n const now = new Date()\n const diffInSeconds = (date.getTime() - now.getTime()) / 1000\n\n if (Math.abs(diffInSeconds) < 60) return rtf.format(Math.round(diffInSeconds), 'second')\n if (Math.abs(diffInSeconds) < 3600) return rtf.format(Math.round(diffInSeconds / 60), 'minute')\n if (Math.abs(diffInSeconds) < 86400) return rtf.format(Math.round(diffInSeconds / 3600), 'hour')\n if (Math.abs(diffInSeconds) < 604800) return rtf.format(Math.round(diffInSeconds / 86400), 'day')\n\n return formatAbsolute(date, locale, showTime)\n}\n\nexport const DateUtils = {\n monthsList,\n weekDayList,\n equalDate,\n formatAbsolute,\n formatRelative\n}","import type { WeekDay } from '@/src/utils/date'\nimport { DateUtils, getWeeksForCalenderMonth, isInTimeSpan } from '@/src/utils/date'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { useMemo } from 'react'\n\nexport type DayPickerProps = Partial<FormFieldDataHandling<Date>> & {\n displayedMonth: Date,\n start?: Date,\n end?: Date,\n weekStart?: WeekDay,\n markToday?: boolean,\n className?: string,\n}\n\n/**\n * A component for selecting a day of a month\n */\nexport const DayPicker = ({\n displayedMonth,\n value,\n start: providedStart,\n end: providedEnd,\n onValueChange,\n onEditComplete,\n weekStart = 'monday',\n markToday = true,\n className = ''\n}: DayPickerProps) => {\n const { locale } = useLocale()\n const month = displayedMonth.getMonth()\n const weeks = getWeeksForCalenderMonth(displayedMonth, weekStart)\n\n // TODO add keyboard navigation here\n\n const end = useMemo(() => {\n if(!providedEnd) return\n return new Date(providedEnd.getFullYear(), providedEnd.getMonth(), providedEnd.getDate())\n }, [providedEnd])\n\n const start = useMemo(() => {\n if(!providedStart) return\n return new Date(providedStart.getFullYear(), providedStart.getMonth(), providedStart.getDate())\n }, [providedStart])\n\n return (\n <div className={className} data-name=\"day-picker-container\">\n <div data-name=\"day-picker-header-row\">\n {weeks[0]!.map((weekDay, index) => (\n <div key={index} data-name=\"day-picker-header-item\">\n {new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(weekDay).substring(0, 2)}\n </div>\n ))}\n </div>\n {weeks.map((week, index) => (\n <div key={index} data-name=\"day-picker-body-row\">\n {week.map((date) => {\n const isSelected = !!value && DateUtils.equalDate(value, date)\n const isToday = DateUtils.equalDate(new Date(), date)\n const isSameMonth = date.getMonth() === month\n const isDayValid = isInTimeSpan(date, start, end)\n return (\n <button\n key={date.getDate()}\n\n disabled={!isDayValid}\n\n onClick={() => {\n const newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n value.getHours(),\n value.getMinutes(),\n value.getSeconds()\n )\n onValueChange?.(newDate)\n onEditComplete?.(newDate)\n }}\n\n data-name=\"day-picker-body-item\"\n data-selected={PropsUtil.dataAttributes.bool(isSelected)}\n data-invalid={PropsUtil.dataAttributes.bool(!isDayValid)}\n data-today={PropsUtil.dataAttributes.bool(isToday && markToday)}\n data-samemonth={PropsUtil.dataAttributes.bool(isSameMonth)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n ))}\n </div>\n )\n}\n\nexport const DayPickerUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: DayPickerProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <DayPicker\n value={value}\n onValueChange={setValue}\n {...props}\n />\n )\n}\n","import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { equalSizeGroups, range } from '@/src/utils/array'\nimport clsx from 'clsx'\nimport { ExpandableContent, ExpandableHeader, ExpandableRoot } from '@/src/components/layout/Expandable'\nimport { addDuration, DateUtils, subtractDuration } from '@/src/utils/date'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { InfiniteScroll } from '../../layout/InifiniteScroll'\n\n// A performance optimized component for displayig the year rows\nconst YearRow = memo(function YearRow({\n year,\n selectedMonthIndex,\n minTimestamp,\n maxTimestamp,\n monthNames,\n onSelect\n}: {\n year: number,\n selectedMonthIndex?: number,\n minTimestamp?: number,\n maxTimestamp?: number,\n monthNames: string[],\n onSelect: (date: Date) => void,\n}) {\n const ref = useRef<HTMLDivElement>(null)\n const isSelectedYear = selectedMonthIndex !== undefined\n const [isExpanded, setIsExpanded] = useState(false)\n\n useEffect(() => {\n if (isSelectedYear) {\n ref.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n }\n }, [isSelectedYear])\n\n const monthGrid = useMemo(() => equalSizeGroups([...DateUtils.monthsList], 3), [])\n\n return (\n <ExpandableRoot\n ref={isSelectedYear ? ref : undefined}\n isExpanded={isExpanded}\n onExpandedChange={setIsExpanded}\n >\n <ExpandableHeader className={clsx('px-2', { 'text-primary font-bold': isSelectedYear })}>\n {year}\n </ExpandableHeader>\n <ExpandableContent className=\"gap-y-1 px-2 expadable-content-h-39\">\n {isExpanded && monthGrid.map((group, groupIdx) => (\n <div key={groupIdx} className=\"flex-row-1\">\n {group.map(month => {\n const monthIndex = DateUtils.monthsList.indexOf(month)\n\n const currentTimestamp = new Date(year, monthIndex).getTime()\n const isAfterStart = minTimestamp === undefined || currentTimestamp >= minTimestamp\n const isBeforeEnd = maxTimestamp === undefined || currentTimestamp <= maxTimestamp\n const isValid = isAfterStart && isBeforeEnd\n const isSelectedMonth = monthIndex === selectedMonthIndex\n\n return (\n <Button\n key={month}\n disabled={!isValid}\n color={isSelectedMonth && isValid ? 'primary' : 'neutral'}\n className=\"flex-1\"\n size=\"sm\"\n onClick={() => {\n if (isValid) {\n onSelect(new Date(year, monthIndex))\n }\n }}\n >\n {monthNames[monthIndex]}\n </Button>\n )\n })}\n </div>\n ))}\n </ExpandableContent>\n </ExpandableRoot>\n )\n})\n\nconst defaultStart = subtractDuration(new Date(), { years: 100 })\nconst defaultEnd = addDuration(new Date(), { years: 100 })\n\nexport type YearMonthPickerProps = Partial<FormFieldDataHandling<Date>> & {\n start?: Date,\n end?: Date,\n className?: string,\n}\n\nexport const YearMonthPicker = ({\n value = new Date(),\n start = defaultStart,\n end = defaultEnd,\n onValueChange,\n onEditComplete,\n className,\n}: YearMonthPickerProps) => {\n const { locale } = useLocale()\n\n const monthNames = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { month: 'short' })\n return Array.from({ length: 12 }, (_, i) => formatter.format(new Date(2000, i, 1)))\n }, [locale])\n\n const years = useMemo(() =>\n range([start.getFullYear(), end.getFullYear()], { exclusiveEnd: false }),\n [start, end])\n\n const minTimestamp = useMemo(() =>{\n if(!start) return\n return new Date(start.getFullYear(), start.getMonth(), 1).getTime()\n }, [start])\n const maxTimestamp = useMemo(() => {\n if(!end) return\n return new Date(end.getFullYear(), end.getMonth() + 1, 0).getTime()\n }, [end])\n\n const callbackRefs = useRef({ onValueChange, onEditComplete })\n useLayoutEffect(() => {\n callbackRefs.current = { onValueChange, onEditComplete }\n })\n const handleSelect = useCallback((newDate: Date) => {\n const { onValueChange, onEditComplete } = callbackRefs.current\n\n onValueChange?.(newDate)\n onEditComplete?.(newDate)\n }, [])\n\n return (\n <InfiniteScroll\n itemCount={years.length}\n className={clsx('flex-col-1 h-full select-none', className)}\n initialIndex={years.findIndex(year => year === value.getFullYear())}\n >\n {(index => {\n const year = years[index]\n const isSelectedYear = value.getFullYear() === year\n const selectedMonthIndex = isSelectedYear ? value.getMonth() : undefined\n\n return (\n <YearRow\n key={year}\n year={year}\n selectedMonthIndex={selectedMonthIndex}\n minTimestamp={minTimestamp}\n maxTimestamp={maxTimestamp}\n monthNames={monthNames}\n onSelect={handleSelect}\n />\n )\n })}\n </InfiniteScroll>\n )\n}\n\nexport const YearMonthPickerUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: YearMonthPickerProps) => {\n const [value, setValue] = useOverwritableState<Date>(initialValue, onValueChange)\n\n return (\n <YearMonthPicker\n value={value}\n onValueChange={setValue}\n {...props}\n />\n )\n}\n","import { type ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { WeekDay } from '@/src/utils/date'\nimport type { TimePickerProps, TimePickerMinuteIncrement } from './TimePicker'\nimport { TimePicker } from './TimePicker'\nimport type { DatePickerProps } from './DatePicker'\nimport { DatePicker } from './DatePicker'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\nexport type DateTimePickerMode = 'date' | 'time' | 'dateTime'\n\nexport type DateTimePickerProps = Partial<FormFieldDataHandling<Date>> & {\n mode?: DateTimePickerMode,\n start?: Date,\n end?: Date,\n is24HourFormat?: boolean,\n minuteIncrement?: TimePickerMinuteIncrement,\n markToday?: boolean,\n weekStart?: WeekDay,\n datePickerProps?: Omit<DatePickerProps, 'onChange' | 'value' | 'start' | 'end'>,\n timePickerProps?: Omit<TimePickerProps, 'onChange' | 'time' | 'is24HourFormat' | 'minuteIncrement'>,\n}\n\n/**\n * A Component for picking a Date and Time\n */\nexport const DateTimePicker = ({\n value = new Date(),\n start,\n end,\n mode = 'dateTime',\n is24HourFormat,\n minuteIncrement,\n weekStart,\n onValueChange,\n onEditComplete,\n timePickerProps,\n datePickerProps,\n}: DateTimePickerProps) => {\n const useDate = mode === 'dateTime' || mode === 'date'\n const useTime = mode === 'dateTime' || mode === 'time'\n\n let dateDisplay: ReactNode\n let timeDisplay: ReactNode\n\n if (useDate) {\n dateDisplay = (\n <DatePicker\n {...datePickerProps}\n className=\"min-w-80\"\n yearMonthPickerProps={{ className: 'h-full grow' }}\n start={start}\n end={end}\n weekStart={weekStart}\n value={value}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n />\n )\n }\n if (useTime) {\n timeDisplay = (\n <TimePicker\n {...timePickerProps}\n is24HourFormat={is24HourFormat}\n minuteIncrement={minuteIncrement}\n className={clsx({ 'justify-between': mode === 'time' })}\n value={value}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n />\n )\n }\n\n return (\n <div className=\"flex-row-2 min-h-71 max-h-71\">\n {dateDisplay}\n {timeDisplay}\n </div>\n )\n}\n\nexport const DateTimePickerUncontrolled = ({ value: initialValue, onValueChange, ...props }: DateTimePickerProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <DateTimePicker\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}","import { useEffect, useRef } from 'react'\nimport { closestMatch, range } from '@/src/utils/array'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\nexport type TimePickerMinuteIncrement = '1min' | '5min' | '10min' | '15min' | '30min'\n\n// TODO add start, and end constraints\nexport type TimePickerProps = Partial<FormFieldDataHandling<Date>> & {\n is24HourFormat?: boolean,\n minuteIncrement?: TimePickerMinuteIncrement,\n className?: string,\n}\n\nexport const TimePicker = ({\n value = new Date(),\n onValueChange,\n onEditComplete,\n is24HourFormat = true,\n minuteIncrement = '5min',\n className,\n}: TimePickerProps) => {\n const minuteRef = useRef<HTMLButtonElement>(null)\n const hourRef = useRef<HTMLButtonElement>(null)\n\n const isPM = value.getHours() > 11\n const hours = is24HourFormat ? range(24) : range(12)\n let minutes = range(60)\n\n switch (minuteIncrement) {\n case '5min':\n minutes = minutes.filter(value => value % 5 === 0)\n break\n case '10min':\n minutes = minutes.filter(value => value % 10 === 0)\n break\n case '15min':\n minutes = minutes.filter(value => value % 15 === 0)\n break\n case '30min':\n minutes = minutes.filter(value => value % 30 === 0)\n break\n }\n\n const closestMinute = closestMatch(minutes, (item1, item2) => Math.abs(item1 - value.getMinutes()) < Math.abs(item2 - value.getMinutes()))\n const hour = value.getHours()\n\n useEffect(() => {\n minuteRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n })\n }, [closestMinute])\n\n useEffect(() => {\n hourRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n })\n }, [hour])\n\n const onChangeWrapper = (transformer: (newDate: Date) => void) => {\n const newDate = new Date(value)\n transformer(newDate)\n onValueChange?.(newDate)\n onEditComplete?.(newDate)\n }\n\n return (\n <div data-name=\"time-picker-container\" className={className}>\n <div data-name=\"time-picker-value-column\">\n {hours.map(hour => {\n const isSelected = hour === value.getHours() - (!is24HourFormat && isPM ? 12 : 0)\n return (\n <Button\n size=\"sm\"\n color={isSelected ? 'primary' : 'neutral'}\n key={hour}\n ref={isSelected ? hourRef : undefined}\n onClick={() => onChangeWrapper(newDate => newDate.setHours(hour + (!is24HourFormat && isPM ? 12 : 0)))}\n >\n {hour.toString().padStart(2, '0')}\n </Button>\n )\n })}\n </div>\n <div data-name=\"time-picker-value-column\">\n {minutes.map(minute => {\n const isSelected = minute === closestMinute\n return (\n <Button\n size=\"sm\"\n color={isSelected ? 'primary' : 'neutral'}\n key={minute + minuteIncrement} // minute increment so that scroll works\n ref={isSelected ? minuteRef : undefined}\n onClick={() => onChangeWrapper(newDate => newDate.setMinutes(minute))}\n >\n {minute.toString().padStart(2, '0')}\n </Button>\n )\n })}\n </div>\n {!is24HourFormat && (\n <div data-name=\"time-picker-value-column\">\n <Button\n size=\"sm\"\n color={!isPM ? 'primary' : 'neutral'}\n onClick={() => onChangeWrapper(newDate => isPM && newDate.setHours(newDate.getHours() - 12))}\n >\n AM\n </Button>\n <Button\n size=\"sm\"\n color={isPM ? 'primary' : 'neutral'}\n onClick={() => onChangeWrapper(newDate => !isPM && newDate.setHours(newDate.getHours() + 12))}\n >\n PM\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nexport const TimePickerUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: TimePickerProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <TimePicker\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}\n","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype TimeDisplayMode = 'daysFromToday' | 'date'\n\ntype TimeDisplayProps = {\n date: Date,\n mode?: TimeDisplayMode,\n}\n\n/**\n * A Component for displaying time and dates in a unified fashion\n */\nexport const TimeDisplay = ({\n date,\n mode = 'daysFromToday'\n}: TimeDisplayProps) => {\n const translation = useHightideTranslation()\n const difference = new Date().setHours(0, 0, 0, 0).valueOf() - new Date(date).setHours(0, 0, 0, 0).valueOf()\n const isBefore = difference > 0\n const differenceInDays = Math.floor(Math.abs(difference) / (1000 * 3600 * 24))\n\n let displayString\n if (differenceInDays === 0) {\n displayString = translation('time.today')\n } else if (differenceInDays === 1) {\n displayString = isBefore ? translation('time.yesterday') : translation('time.tomorrow')\n } else {\n displayString = isBefore ? translation('time.agoDays', { days: differenceInDays }) : translation('time.inDays', { days: differenceInDays })\n }\n const monthToTranslation: { [key: number]: string } = {\n 0: translation('time.january'),\n 1: translation('time.february'),\n 2: translation('time.march'),\n 3: translation('time.april'),\n 4: translation('time.may'),\n 5: translation('time.june'),\n 6: translation('time.july'),\n 7: translation('time.august'),\n 8: translation('time.september'),\n 9: translation('time.october'),\n 10: translation('time.november'),\n 11: translation('time.december')\n } as const\n\n let fullString\n if (mode === 'daysFromToday') {\n fullString = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')} - ${displayString}`\n } else {\n fullString = `${date.getDate()}. ${monthToTranslation[date.getMonth()]} ${date.getFullYear()}`\n }\n\n return (<span>{fullString}</span>)\n}\n","import type { HTMLAttributes } from 'react'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { CalendarIcon } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { useOutsideClick } from '@/src/hooks/useOutsideClick'\nimport type { DateTimePickerProps } from '@/src/components/user-interaction/date/DateTimePicker'\nimport { DateTimePicker } from '@/src/components/user-interaction/date/DateTimePicker'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { DateUtils } from '@/src/utils/date'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\nexport type DateTimeInputProps = Omit<InputProps, keyof FormFieldDataHandling<string>>\n& Partial<FormFieldDataHandling<Date>>\n& {\n onRemove?: () => void,\n // TODO allow mode = time\n mode?: 'date' | 'dateTime',\n containerProps?: HTMLAttributes<HTMLDivElement>,\n pickerProps?: Omit<DateTimePickerProps, keyof FormFieldDataHandling<Date> | 'mode'>,\n}\n\nexport const DateTimeInput = ({\n value,\n onValueChange,\n onEditComplete,\n onRemove,\n containerProps,\n mode = 'date',\n pickerProps,\n ...props\n}: DateTimeInputProps) => {\n const translation = useHightideTranslation()\n const { locale } = useLocale()\n const [isOpen, setIsOpen] = useState(false)\n\n const anchorRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const position = useFloatingElement({\n active: isOpen,\n anchorRef,\n containerRef,\n verticalAlignment: 'afterEnd',\n horizontalAlignment: 'afterStart',\n gap: 4,\n })\n\n useOutsideClick([containerRef, anchorRef], () => {\n setIsOpen(false)\n onEditComplete(value)\n })\n\n const { zIndex } = useOverlayRegistry({ isActive: isOpen })\n\n const isReadOnly = useMemo(() => props.readOnly || props.disabled, [props.readOnly, props.disabled])\n\n useEffect(() => {\n if (isReadOnly) {\n setIsOpen(false)\n }\n }, [isReadOnly])\n\n return (\n <>\n <div {...containerProps} ref={anchorRef} className={clsx('relative w-full', containerProps?.className)}>\n <Input\n {...props}\n placeholder={translation('clickToSelect')}\n value={value ? DateUtils.formatAbsolute(value, locale, mode === 'dateTime') : ''}\n onClick={(event) => {\n setIsOpen(true)\n props.onClick?.(event)\n }}\n readOnly={true}\n className={clsx(\n 'pr-10 w-full',\n { 'hover:cursor-pointer': !isReadOnly },\n props.className\n )}\n />\n <Button\n coloringStyle=\"text\" layout=\"icon\" color=\"neutral\" size=\"sm\"\n className=\"absolute right-1 top-1/2 -translate-y-1/2\"\n disabled={isReadOnly}\n onClick={() => setIsOpen(prevState => !prevState)}\n >\n <CalendarIcon className=\"size-5\"/>\n </Button>\n </div>\n <Visibility isVisible={isOpen}>\n {createPortal(\n <div\n ref={containerRef}\n className=\"fixed flex-col-3 rounded-lg shadow-xl border bg-surface-variant text-on-surface border-divider p-2\"\n style={{\n ...position,\n zIndex,\n opacity: position ? undefined : 0,\n }}\n >\n <DateTimePicker\n {...pickerProps}\n mode={mode}\n value={value}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n />\n <div className=\"flex-row-2 justify-end\">\n <Visibility isVisible={!!onRemove && !!value}>\n <Button\n size=\"md\"\n color=\"negative\"\n onClick={() => {\n onRemove?.()\n setIsOpen(false)\n }}\n className=\"min-w-26\"\n >\n {translation('clear')}\n </Button>\n </Visibility>\n <Visibility isVisible={!value}>\n <Button\n size=\"md\"\n color=\"neutral\"\n onClick={() => setIsOpen(false)}\n className=\"min-w-26\"\n >\n {translation('cancel')}\n </Button>\n </Visibility>\n <Button\n size=\"md\"\n onClick={() => {\n onEditComplete?.(value)\n setIsOpen(false)\n }}\n className=\"min-w-26\"\n >\n {translation('done')}\n </Button>\n </div>\n </div>,\n document.body\n )}\n </Visibility>\n </>\n )\n}\n\nexport const DateTimeInputUncontrolled = ({\n value: initialValue,\n ...props\n}: DateTimeInputProps) => {\n const [value, setValue] = useOverwritableState<Date | undefined>(initialValue)\n\n return (\n <DateTimeInput\n {...props}\n value={value}\n onValueChange={(newDate) => {\n setValue(newDate)\n props.onValueChange?.(newDate)\n }}\n onRemove={() => {\n setValue(undefined)\n props.onRemove?.()\n }}\n />\n )\n}\n","import type { ReactNode } from 'react'\nimport { useId } from 'react'\nimport { forwardRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\ntype InsideLabelInputProps = Omit<InputProps, 'aria-label' | 'aria-labelledby' | 'placeholder'> & {\n label: ReactNode,\n}\n\n/**\n * Text input component with a label inside the input that moves up when editing\n *\n * The State is managed by the parent\n */\nexport const InsideLabelInput = forwardRef<HTMLInputElement, InsideLabelInputProps>(function InsideLabelInput({\n id: customId,\n label,\n ...props\n}, forwardedRef) {\n const { value } = props\n const [isFocused, setIsFocused] = useState(false)\n const generatedId = useId()\n const id = customId ?? generatedId\n\n return (\n <div className={clsx('relative')}>\n <Input\n {...props}\n id={id}\n className={clsx('h-14 px-4 pb-2 py-6.5', props.className)}\n ref={forwardedRef}\n aria-labelledby={id+ '-label'}\n onFocus={event => {\n props.onFocus?.(event)\n setIsFocused(true)\n }}\n onBlur={event => {\n props.onBlur?.(event)\n setIsFocused(false)\n }}\n />\n <label\n id={id+ '-label'}\n aria-hidden={true}\n data-display={isFocused || !!value ? 'small' : 'full'}\n className={clsx(\n // margin left to account for the border which is ignored for absolute positions\n 'absolute left-4 ml-0.5 top-2 transition-all delay-25 pointer-events-none touch-none',\n 'data-[display=small]:top-2 data-[display=small]:h-force-4.5 data-[display=small]:typography-caption-sm data-[display=small]:overflow-y-hidden',\n 'data-[display=full]:top-1/2 data-[display=full]:-translate-y-1/2 data-[display=full]:typography-body-md'\n )}\n >\n {label}\n </label>\n </div>\n )\n})\n\nexport const InsideLabelInputUncontrolled = ({\n value: initialValue,\n ...props\n}: InsideLabelInputProps) => {\n const [value, setValue] = useOverwritableState(initialValue, props.onValueChange)\n\n return (\n <InsideLabelInput\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}\n","import type { InputProps } from './Input'\nimport { InputUncontrolled } from './Input'\nimport { Search } from 'lucide-react'\nimport { clsx } from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { ButtonProps } from '@/src/components/user-interaction/Button'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { HTMLAttributes } from 'react'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\nexport type SearchBarProps = Omit<InputProps, 'onValueChange' | 'onEditComplete'> & {\n onValueChange?: (value: string) => void,\n onSearch: (value: string) => void,\n searchButtonProps?: Omit<ButtonProps, 'onClick'>,\n containerProps?: HTMLAttributes<HTMLDivElement>,\n}\n\nexport const SearchBar = ({\n value: initialValue,\n onSearch,\n onValueChange,\n searchButtonProps,\n containerProps,\n ...inputProps\n}: SearchBarProps) => {\n const translation = useHightideTranslation()\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <div {...containerProps} className={clsx('relative', containerProps?.className)}>\n <InputUncontrolled\n {...inputProps}\n value={value}\n onValueChange={setValue}\n onEditComplete={onSearch}\n placeholder={inputProps.placeholder ?? translation('search')}\n // TODO use data-name=\"searchbar\" and move styling to css\n className={clsx('pr-10 w-full', inputProps.className)}\n />\n <Button\n {...searchButtonProps}\n size=\"sm\"\n layout=\"icon\"\n color=\"neutral\"\n coloringStyle=\"text\"\n onClick={() => onSearch(value)}\n className={clsx('absolute right-1 top-1/2 -translate-y-1/2', searchButtonProps?.className)}\n >\n <Search className=\"w-full h-full\"/>\n </Button>\n </div>\n )\n}","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport { Pencil } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { EditCompleteOptions, InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\ntype ToggleableInputProps = InputProps & {\n initialState?: 'editing' | 'display',\n editCompleteOptions?: Omit<EditCompleteOptions, 'allowEnterComplete'>,\n}\n\n/**\n * A Text input component for inputting text. It changes appearance upon entering the edit mode and switches\n * back to display mode on loss of focus or on enter\n *\n * The State is managed by the parent\n */\nexport const ToggleableInput = forwardRef<HTMLInputElement, ToggleableInputProps>(function ToggleableInput({\n value,\n initialState = 'display',\n editCompleteOptions,\n ...props\n}, forwardedRef) {\n const [isEditing, setIsEditing] = useState(initialState !== 'display')\n\n const innerRef = useRef<HTMLInputElement>(null)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n useEffect(() => {\n if (isEditing) {\n innerRef.current?.focus()\n }\n }, [isEditing])\n\n return (\n <div className={clsx('relative flex-row-2', { 'flex-1': isEditing })}>\n <Input\n {...props}\n ref={innerRef}\n value={value}\n onEditComplete={(text) => {\n props.onEditComplete?.(text)\n setIsEditing(false)\n }}\n onFocus={event => {\n props.onFocus?.(event)\n setIsEditing(true)\n event.target.select()\n }}\n editCompleteOptions={{\n ...editCompleteOptions,\n allowEnterComplete: true\n }}\n\n data-name={props['data-name'] ?? 'togglable-input'}\n data-isEditing={isEditing ? '' : undefined}\n // TODO move to component config\n className={clsx(`w-full rounded-md`, {\n 'text-transparent': !isEditing,\n })}\n />\n {!isEditing && (\n <div className=\"absolute left-0 flex-row-2 items-center pointer-events-none touch-none w-full overflow-hidden\">\n <span className={clsx(' truncate')}>\n {value}\n </span>\n <Pencil className={clsx(`size-force-4`, { 'text-transparent': isEditing })} />\n </div>\n )}\n </div>\n )\n})\n\nexport const ToggleableInputUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...restProps\n}: ToggleableInputProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <ToggleableInput\n value={value}\n onValueChange={setValue}\n {...restProps}\n />\n )\n}\n","import { Check } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from './PropertyBase'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '@/src/components/user-interaction/Button'\n\n\nexport type CheckboxPropertyProps = PropertyField<boolean>\n\n/**\n * An Input component for a boolean values\n */\nexport const CheckboxProperty = ({\n value,\n onValueChange,\n onEditComplete,\n readOnly,\n ...baseProps\n}: CheckboxPropertyProps) => {\n const translation = useHightideTranslation()\n\n return (\n <PropertyBase\n {...baseProps}\n hasValue={value !== undefined}\n readOnly={readOnly}\n icon={<Check size={24}/>}\n >\n {() => (\n <div className=\"flex-row-2 items-center\">\n <Button\n color={value ? 'positive' : 'neutral'} size=\"sm\"\n onClick={() => {\n onValueChange(true)\n onEditComplete(true)\n }}\n className=\"min-w-20\"\n >\n {translation('yes')}\n </Button>\n <Button\n color={!value && value !== undefined ? 'negative' : 'neutral'} size=\"sm\"\n onClick={() => {\n onValueChange(false)\n onEditComplete(false)\n }}\n className=\"min-w-20\"\n >\n {translation('no')}\n </Button>\n </div>\n )}\n </PropertyBase>\n )\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle, Trash, X } from 'lucide-react'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Tooltip } from '../Tooltip'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type PropertyField<T> = {\n name: string,\n required?: boolean,\n readOnly?: boolean,\n allowClear?: boolean,\n value?: T,\n onRemove?: () => void,\n onValueClear?: () => void,\n onValueChange?: (value: T) => void,\n onEditComplete?: (value: T) => void,\n}\n\n\nexport type PropertyBaseProps = {\n children: (props: { required: boolean, hasValue: boolean, invalid: boolean }) => ReactNode,\n name: string,\n required?: boolean,\n readOnly?: boolean,\n allowClear?: boolean,\n allowRemove?: boolean,\n hasValue: boolean,\n onRemove?: () => void,\n onValueClear?: () => void,\n icon?: ReactNode,\n className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n name,\n children,\n required = false,\n hasValue,\n icon,\n readOnly,\n allowClear = true,\n allowRemove = true,\n onRemove,\n onValueClear,\n className,\n}: PropertyBaseProps) => {\n const translation = useHightideTranslation()\n const invalid = required && !hasValue\n\n const isClearEnabled = allowClear && !readOnly\n const isRemoveEnabled = allowRemove && !readOnly\n const showActionsContainer = isClearEnabled || isRemoveEnabled\n\n return (\n <div\n className={className ? `group/property ${className}` : 'group/property'}\n data-name=\"property-root\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <div\n className={className}\n data-name=\"property-title\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <Tooltip tooltip={name} containerClassName=\"min-w-0\">\n <div className=\"flex-row-1 items-center\">\n <div data-name=\"property-title-icon\">{icon}</div>\n <span data-name=\"property-title-text\">{name}</span>\n </div>\n </Tooltip>\n {invalid && (\n <AlertTriangle className=\"size-force-6\"/>\n )}\n </div>\n <div\n className={className}\n data-name=\"property-content\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n {children({ required, hasValue, invalid })}\n {showActionsContainer && (\n <div data-name=\"property-actions\">\n {isClearEnabled && (\n <Tooltip tooltip={translation('clearValue')}>\n <Button\n onClick={onValueClear}\n disabled={!hasValue}\n color=\"negative\"\n coloringStyle=\"text\"\n layout=\"icon\"\n size=\"sm\"\n >\n <X className=\"size-force-5\" />\n </Button>\n </Tooltip>\n )}\n {isRemoveEnabled && (\n <Tooltip tooltip={translation('removeProperty')}>\n <Button\n onClick={onRemove}\n color=\"negative\"\n coloringStyle=\"text\"\n layout=\"icon\"\n size=\"sm\"\n >\n <Trash className=\"size-force-5\" />\n </Button>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { CalendarDays } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from './PropertyBase'\nimport { DateTimeInput } from '../input/DateTimeInput'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type DatePropertyProps = PropertyField<Date>\n& {\n type?: 'dateTime' | 'date',\n}\n\n/**\n * An Input for date properties\n */\nexport const DateProperty = ({\n value,\n onValueChange,\n onEditComplete,\n readOnly,\n type = 'dateTime',\n ...baseProps\n}: DatePropertyProps) => {\n const hasValue = !!value\n\n return (\n <PropertyBase\n {...baseProps}\n hasValue={hasValue}\n icon={<CalendarDays size={24}/>}\n >\n {({ invalid }) => (\n <DateTimeInput\n value={value}\n mode={type}\n readOnly={readOnly}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n data-name=\"property-input\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n />\n )}\n </PropertyBase>\n )\n}\n","import { List } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { MultiSelectChipDisplay } from '@/src/components/user-interaction/Select'\nimport type { PropsWithChildren } from 'react'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type MultiSelectPropertyProps = PropertyField<string[]> & PropsWithChildren\n/**\n * An Input for MultiSelect properties\n */\nexport const MultiSelectProperty = ({\n children,\n value,\n onValueChange,\n onEditComplete,\n ...props\n}: MultiSelectPropertyProps) => {\n const hasValue = value.length > 0\n\n return (\n <PropertyBase\n {...props}\n hasValue={hasValue}\n icon={<List size={24}/>}\n >\n {({ invalid }) => (\n <div\n data-name=\"property-input-wrapper\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <MultiSelectChipDisplay\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value)\n onEditComplete?.(value)\n }}\n disabled={props.readOnly}\n contentPanelProps={{\n className: '!border-none !min-h-10'\n }}\n chipDisplayProps={{\n className: 'flex flex-wrap gap-x-2 gap-y-2 p-0 items-center hover:cursor-pointer border-0',\n }}\n >\n {children}\n </MultiSelectChipDisplay>\n </div>\n )}\n </PropertyBase>\n )\n}\n","import { Binary } from 'lucide-react'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { PropertyField } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type NumberPropertyProps = PropertyField<number>\n& { suffix?: string }\n\n/**\n * An Input for number properties\n */\nexport const NumberProperty = ({\n value,\n onRemove,\n onValueChange,\n onEditComplete,\n readOnly,\n suffix,\n ...baseProps\n}: NumberPropertyProps) => {\n const translation = useHightideTranslation()\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Binary size={24}/>}\n >\n {({ invalid }) => (\n <div\n data-name=\"property-input-wrapper\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <Input\n className=\"w-full pr-8\"\n data-name=\"property-input\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n value={value?.toString() ?? ''}\n type=\"number\"\n readOnly={readOnly}\n placeholder={translation('value')}\n onValueChange={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onValueChange?.(numberValue)\n }\n }}\n onEditComplete={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onEditComplete?.(numberValue)\n }\n }}\n />\n {suffix && (\n <span\n data-name=\"property-suffix\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n {suffix}\n </span>\n )}\n </div>\n )}\n </PropertyBase>\n )\n}\n","import { List } from 'lucide-react'\nimport type { PropsWithChildren } from 'react'\nimport type { PropertyField } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { PropertyBase } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { Select } from '@/src/components/user-interaction/Select'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type SingleSelectPropertyProps = PropertyField<string> & PropsWithChildren\n\n/**\n * An Input for SingleSelect properties\n */\nexport const SingleSelectProperty = ({\n children,\n value,\n onValueChange,\n onEditComplete,\n ...props\n}: SingleSelectPropertyProps) => {\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...props}\n hasValue={hasValue}\n icon={<List size={24}/>}\n >\n {({ invalid }) => (\n <div\n data-name=\"property-input-wrapper\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <Select\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value)\n onEditComplete?.(value)\n }}\n disabled={props.readOnly}\n buttonProps={{\n className: 'flex-row-2 w-full items-center justify-between p-1 border-0',\n }}\n >\n {children}\n </Select>\n </div>\n )}\n </PropertyBase>\n )\n}\n","import { Text } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Textarea } from '@/src/components/user-interaction/Textarea'\nimport type { PropertyField } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type TextPropertyProps = PropertyField<string>\n\n/**\n * An Input for Text properties\n */\nexport const TextProperty = ({\n value,\n readOnly,\n onRemove,\n onValueChange,\n onEditComplete,\n ...baseProps\n}: TextPropertyProps) => {\n const translation = useHightideTranslation()\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Text size={24}/>}\n >\n {({ invalid }) => (\n <Textarea\n className=\"w-full\"\n data-name=\"property-input\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n rows={5}\n value={value ?? ''}\n readOnly={readOnly}\n placeholder={translation('text')}\n onValueChange={(value) => {\n if (!value) {\n onRemove?.()\n } else {\n onValueChange?.(value)\n }\n }}\n onEditComplete={(value) => {\n if (!value) {\n onRemove?.()\n } else {\n onEditComplete?.(value)\n }\n }}\n />\n )}\n </PropertyBase>\n )\n}\n","'use client'\n\nimport type { HTMLAttributes, RefObject } from 'react'\nimport { useRef } from 'react'\nimport { useImperativeHandle } from 'react'\nimport { forwardRef } from 'react'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\n\nexport type FocusTrapProps = HTMLAttributes<HTMLDivElement> & {\n active?: boolean,\n initialFocus?: RefObject<HTMLElement | null>,\n /**\n * Whether to focus the first element when the initialFocus isn't provided\n *\n * Focuses the container instead\n */\n focusFirst?: boolean,\n}\n\n/**\n * A wrapper for the useFocusTrap hook that directly renders it to a div\n */\nexport const FocusTrap = forwardRef<HTMLDivElement, FocusTrapProps>(function FocusTrap({\n active = true,\n initialFocus,\n focusFirst = false,\n ...props\n}, forwardedRef) {\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n useFocusTrap({ container: innerRef, active, initialFocus, focusFirst })\n\n return (\n <div ref={innerRef} {...props}/>\n )\n})","import { useEffect, useState } from 'react'\nimport type { PropsWithBagFunctionOrChildren } from '@/src/utils/bagFunctions'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\n\ntype TransitionBag = {\n isOpen: boolean,\n isTransitioning: boolean,\n isUsingReducedMotion: boolean,\n data: { [key: `data-${string}`]: string | undefined },\n handlers: {\n onTransitionEnd?: () => void,\n onAnimationEnd?: () => void,\n onTransitionCancel?: () => void,\n },\n}\n\nexport type TransitionWrapperProps = PropsWithBagFunctionOrChildren<TransitionBag> & {\n show: boolean,\n includeAnimation?: boolean,\n}\n\n/**\n * Only use when you have a transition happening\n */\nexport function Transition({\n children,\n show,\n includeAnimation = true,\n}: TransitionWrapperProps) {\n const [isOpen, setIsOpen] = useState<boolean>(show)\n const [isTransitioning, setIsTransitioning] = useState<boolean>(!isOpen)\n\n const isUsingReducedMotion = typeof window !== 'undefined' && typeof window.matchMedia === 'function' ?\n window.matchMedia('(prefers-reduced-motion: reduce)').matches : true\n\n useEffect(() => {\n setIsOpen(show)\n setIsTransitioning(true)\n }, [show])\n\n const onAnimationEnd = () => setIsTransitioning(false)\n\n const bag: TransitionBag = {\n isOpen,\n isTransitioning,\n isUsingReducedMotion,\n data: {\n 'data-open': (isOpen && !isTransitioning) ? '' : undefined,\n 'data-opening': (isOpen && isTransitioning) ? '' : undefined,\n 'data-closing': (!isOpen && isTransitioning) ? '' : undefined,\n 'data-closed': (!isOpen && !isTransitioning) ? '' : undefined,\n },\n handlers: {\n onTransitionEnd: () => setIsTransitioning(false),\n onTransitionCancel: () => setIsTransitioning(false),\n onAnimationEnd: includeAnimation ? onAnimationEnd : undefined,\n }\n }\n\n return BagFunctionUtil.resolve(children, bag)\n}","import type { PropsWithChildren } from 'react'\nimport type { HightideConfigProviderProps } from '@/src/contexts/HightideConfigContext'\nimport { HightideConfigProvider } from '@/src/contexts/HightideConfigContext'\nimport type { LocaleProviderProps } from '@/src/contexts/LocaleContext'\nimport { LocaleProvider } from '@/src/contexts/LocaleContext'\nimport type { ThemeProviderProps } from '@/src/contexts/ThemeContext'\nimport { ThemeProvider } from '@/src/contexts/ThemeContext'\n\ntype HightideProviderProps = PropsWithChildren & {\n theme?: Omit<ThemeProviderProps, 'children'>,\n locale?: Omit<LocaleProviderProps, 'children'>,\n config?: Omit<HightideConfigProviderProps, 'children'>,\n}\n\nexport const HightideProvider = ({\n children,\n theme,\n locale,\n config,\n}: HightideProviderProps) => {\n return (\n <LocaleProvider {...locale}>\n <ThemeProvider {...theme}>\n <HightideConfigProvider {...config}>\n {children}\n </HightideConfigProvider>\n </ThemeProvider>\n </LocaleProvider>\n )\n}\n","import { useEffect } from 'react'\n\nconst selectorName = 'data-hw-focus-guard'\n\nfunction FocusGuard() {\n const element = document.createElement('div')\n element.setAttribute(selectorName, '')\n element.tabIndex = 0\n element.style.border = 'none'\n element.style.outline = 'none'\n element.style.boxShadow = 'none'\n element.style.opacity = '0'\n element.style.position = 'fixed'\n element.style.pointerEvents = 'none'\n return element\n}\n\nclass FocusGuardsService {\n private count: number = 0\n\n private static instance: FocusGuardsService\n\n private constructor() {}\n\n static getInstance(): FocusGuardsService {\n if (!FocusGuardsService.instance) {\n FocusGuardsService.instance = new FocusGuardsService()\n }\n return FocusGuardsService.instance\n }\n\n add() {\n const edgeGuards = document.querySelectorAll(`[${selectorName}]`)\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? FocusGuard())\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? FocusGuard())\n this.count++\n }\n\n remove() {\n if (this.count === 1) {\n document.querySelectorAll(`[${selectorName}]`)\n .forEach((node) => node.remove())\n }\n this.count--\n }\n}\n\nexport const useFocusGuards = () => {\n useEffect(() => {\n FocusGuardsService.getInstance().add()\n return () => {\n FocusGuardsService.getInstance().remove()\n }\n }, [])\n}","import type { RefObject } from 'react'\nimport React, { useEffect } from 'react'\n\nexport const useFocusOnceVisible = (\n ref: RefObject<HTMLElement>,\n disable: boolean = false\n) => {\n const [hasUsedFocus, setHasUsedFocus] = React.useState(false)\n\n useEffect(() => {\n if (disable || hasUsedFocus) {\n return\n }\n const observer = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting && !hasUsedFocus) {\n ref.current?.focus()\n setHasUsedFocus(hasUsedFocus)\n }\n }, {\n threshold: 0.1,\n })\n\n if (ref.current) {\n observer.observe(ref.current)\n }\n\n return () => observer.disconnect()\n }, [disable, hasUsedFocus, ref])\n}","import { useReducer } from 'react'\n\nexport const useRerender = () => {\n return useReducer(() => ({}), {})[1]\n}","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { MultiSubjectSearchWithMapping } from '@/src/utils/simpleSearch'\n\nexport type UseSearchProps<T> = {\n list: T[],\n searchMapping: (item: T) => string[],\n initialSearch?: string,\n additionalSearchTags?: string[],\n isSearchInstant?: boolean,\n sortingFunction?: (a: T, b: T) => number,\n filter?: (item: T) => boolean,\n disabled?: boolean,\n}\n\nexport const useSearch = <T>({\n list,\n initialSearch,\n searchMapping,\n additionalSearchTags,\n isSearchInstant = true,\n sortingFunction,\n filter,\n disabled = false,\n}: UseSearchProps<T>) => {\n const [search, setSearch] = useState<string>(initialSearch ?? '')\n const [result, setResult] = useState<T[]>(list)\n const searchTags = useMemo(() => additionalSearchTags ?? [], [additionalSearchTags])\n\n const updateSearch = useCallback((newSearch?: string) => {\n const usedSearch = newSearch ?? search\n if (newSearch) {\n setSearch(search)\n }\n setResult(MultiSubjectSearchWithMapping([usedSearch, ...searchTags], list, searchMapping))\n }, [searchTags, list, search, searchMapping])\n\n useEffect(() => {\n if (isSearchInstant) {\n setResult(MultiSubjectSearchWithMapping([search, ...searchTags], list, searchMapping))\n }\n }, [searchTags, isSearchInstant, list, search, searchMapping, additionalSearchTags])\n\n const filteredResult: T[] = useMemo(() => {\n if (!filter) {\n return result\n }\n return result.filter(filter)\n }, [result, filter])\n\n const sortedAndFilteredResult: T[] = useMemo(() => {\n if (!sortingFunction) {\n return filteredResult\n }\n return filteredResult.sort(sortingFunction)\n }, [filteredResult, sortingFunction])\n\n const usedResult = useMemo(() => {\n if (!disabled) {\n return sortedAndFilteredResult\n }\n return list\n }, [disabled, list, sortedAndFilteredResult])\n\n return {\n result: usedResult,\n hasResult: usedResult.length > 0,\n allItems: list,\n updateSearch,\n search,\n setSearch,\n }\n}","/**\n * Finds all values matching the search values by first mapping the values to a string array and then checking each entry for matches.\n * Returns the list of all matches.\n *\n * @param search The list of search strings e.g. `[name, type]`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to the string properties they fulfil\n *\n * @return The list of objects that match all search strings\n */\nexport const MultiSubjectSearchWithMapping = <T>(search: string[], objects: T[], mapping: (value: T) => (string[] | undefined)) => {\n return objects.filter(object => {\n const mappedSearchKeywords = mapping(object)?.map(value => value.toLowerCase().trim())\n if(!mappedSearchKeywords) {\n return true\n }\n return search.every(searchValue => !!mappedSearchKeywords.find(value => !!value && value.includes(searchValue.toLowerCase().trim())))\n })\n}\n\n/**\n * Finds all values matching the search value by first mapping the values to a string array and then checking each entry for matches.\n * Returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to the string properties they fulfil, if undefined it is always fulfilled\n *\n * @return The list of objects that match the search string\n */\nexport const MultiSearchWithMapping = <T>(search: string, objects: T[], mapping: (value: T) => (string[] | undefined)) => {\n return objects.filter(object => {\n const mappedSearchKeywords = mapping(object)?.map(value => value.toLowerCase().trim())\n if(!mappedSearchKeywords) {\n return true\n }\n return !!mappedSearchKeywords.find(value => value.includes(search.toLowerCase().trim()))\n })\n}\n\n/**\n * Finds all values matching the search value by first mapping the values to a string and returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to a string that is compared to the search\n *\n * @return The list of objects that match the search string\n */\nexport const SimpleSearchWithMapping = <T>(search: string, objects: T[], mapping: (value: T) => string) => {\n return MultiSearchWithMapping(search, objects, value => [mapping(value)])\n}\n\n/**\n * Finds all values matching the search value and returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @return The list of objects that match the search string\n */\nexport const SimpleSearch = (search: string, objects: string[]) => {\n return SimpleSearchWithMapping(search, objects, value => value)\n}\n","export const validateEmail = (email: string): boolean => {\n return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(email)\n}\n","import { validateEmail } from '@/src/utils/emailValidation'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useMemo } from 'react'\n\nexport type ValidatorError =\n 'notEmpty'\n | 'invalidEmail'\n | 'tooLong'\n | 'tooShort'\n | 'outOfRangeString'\n | 'outOfRangeNumber'\n | 'outOfRangeSelectionItems'\n | 'tooFewSelectionItems'\n | 'tooManySelectionItems'\nexport type ValidatorResult = ValidatorError | undefined\n\nconst notEmpty = (value: unknown): ValidatorResult => {\n if (!value) {\n return 'notEmpty'\n }\n}\n\ntype BoundsValidatorResult = 'lower' | 'upper' | 'range' | 'none'\nconst boundsValidator = (length: number | undefined, bounds: [number | undefined, number | undefined]): BoundsValidatorResult => {\n const [min, max] = bounds\n\n if (min !== undefined && max !== undefined && (length === undefined || length < min || length > max)) {\n return 'range'\n }\n\n if (min !== undefined && (length === undefined || length < min)) {\n return 'lower'\n }\n\n if (max !== undefined && length !== undefined && length > max) {\n return 'upper'\n }\n\n return 'none'\n}\n\nconst lengthValidator = (value: string | undefined, bounds: [number | undefined, number | undefined]): ValidatorResult => {\n const mapping: Record<BoundsValidatorResult, ValidatorResult> = {\n range: 'outOfRangeString',\n lower: 'tooShort',\n upper: 'tooLong',\n none: undefined\n }\n return mapping[boundsValidator(value?.length, bounds)]\n}\n\nconst selectionValidator = (value: unknown[], bounds: [number | undefined, number | undefined]): ValidatorResult => {\n const mapping: Record<BoundsValidatorResult, ValidatorResult> = {\n range: 'outOfRangeSelectionItems',\n lower: 'tooFewSelectionItems',\n upper: 'tooManySelectionItems',\n none: undefined\n }\n return mapping[boundsValidator(value?.length, bounds)]\n}\n\nconst emailValidator = (value: string | undefined) => {\n if (!value || !validateEmail(value)) {\n return 'invalidEmail'\n }\n}\n\n\nexport const UseValidators = {\n notEmpty: notEmpty,\n length: lengthValidator,\n email: emailValidator,\n selection: selectionValidator,\n}\n\nexport const useTranslatedValidators = () => {\n const translation = useHightideTranslation()\n\n return useMemo(() => ({\n notEmpty: (value: unknown) => {\n const result = notEmpty(value)\n if (result) {\n return translation(result)\n }\n },\n length: (value: string | undefined, length: [number | undefined, number | undefined]) => {\n const [min, max] = length\n const result = lengthValidator(value, length)\n if (result) {\n return translation(result as 'outOfRangeString' | 'tooShort' | 'tooLong', { min, max })\n }\n },\n email: (value: string | undefined) => {\n const result = emailValidator(value ?? '')\n if (result) {\n return translation(result as 'invalidEmail')\n }\n },\n selection: (value: unknown[] | undefined, length: [number | undefined, number | undefined]) => {\n const [min, max] = length\n const result = selectionValidator(value, length)\n if (result) {\n return translation(result as\n 'outOfRangeSelectionItems' | 'tooFewSelectionItems' | 'tooManySelectionItems',\n { min, max })\n }\n }\n }), [translation])\n}","/**\n * A simple function that implements the builder pattern\n * @param value The value to update which gets return with the same reference\n * @param update The updates to apply on the object\n */\nexport const builder = <T>(value: T, update: (value: T) => void): T => {\n update(value)\n return value\n}\n","export type DurationJSON = {\n years: number,\n months: number,\n days: number,\n hours: number,\n minutes: number,\n seconds: number,\n milliseconds: number,\n}\n\nexport class Duration {\n readonly years: number\n readonly months: number\n readonly days: number\n readonly hours: number\n readonly minutes: number\n readonly seconds: number\n readonly milliseconds: number\n\n constructor({\n years = 0,\n months = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n milliseconds = 0,\n }: Partial<DurationJSON> = {}) {\n this.assertRanges({ years, months, days, hours, minutes, seconds, milliseconds })\n\n this.years = years\n this.months = months\n this.days = days\n this.hours = hours\n this.minutes = minutes\n this.seconds = seconds\n this.milliseconds = milliseconds\n }\n\n /** Date arithmetic */\n addTo(date: Date): Date {\n return this.applyTo(date, 1)\n }\n\n subtractFrom(date: Date): Date {\n return this.applyTo(date, -1)\n }\n\n /** Duration arithmetic */\n add(other: Duration): Duration {\n return new Duration({\n years: this.years + other.years,\n months: this.months + other.months,\n days: this.days + other.days,\n hours: this.hours + other.hours,\n minutes: this.minutes + other.minutes,\n seconds: this.seconds + other.seconds,\n milliseconds: this.milliseconds + other.milliseconds,\n })\n }\n\n subtract(other: Duration): Duration {\n return new Duration({\n years: this.years - other.years,\n months: this.months - other.months,\n days: this.days - other.days,\n hours: this.hours - other.hours,\n minutes: this.minutes - other.minutes,\n seconds: this.seconds - other.seconds,\n milliseconds: this.milliseconds - other.milliseconds,\n })\n }\n\n equals(other: Duration): boolean {\n return (\n this.years === other.years &&\n this.months === other.months &&\n this.days === other.days &&\n this.hours === other.hours &&\n this.minutes === other.minutes &&\n this.seconds === other.seconds &&\n this.milliseconds === other.milliseconds\n )\n }\n\n toJSON(): DurationJSON {\n return { ...this }\n }\n\n /** Static difference */\n static difference(start: Date, end: Date): Duration {\n const diff = end.getTime() - start.getTime()\n\n const ms = 1000\n const min = 60 * ms\n const hr = 60 * min\n const day = 24 * hr\n const month = 30 * day\n const year = 365.25 * day\n\n return new Duration({\n years: Math.floor(diff / year),\n months: Math.floor(diff / month),\n days: Math.floor(diff / day),\n hours: Math.floor((diff % day) / hr),\n minutes: Math.floor((diff % hr) / min),\n seconds: Math.floor((diff % min) / ms),\n milliseconds: diff % ms,\n })\n }\n\n private applyTo(date: Date, multiplier: 1 | -1): Date {\n const d = new Date(date)\n\n d.setFullYear(d.getFullYear() + multiplier * this.years)\n d.setMonth(d.getMonth() + multiplier * this.months)\n d.setDate(d.getDate() + multiplier * this.days)\n d.setHours(d.getHours() + multiplier * this.hours)\n d.setMinutes(d.getMinutes() + multiplier * this.minutes)\n d.setSeconds(d.getSeconds() + multiplier * this.seconds)\n d.setMilliseconds(d.getMilliseconds() + multiplier * this.milliseconds)\n\n return d\n }\n\n private assertRanges(d: DurationJSON): void {\n if (d.years < 0) throw new RangeError('years >= 0')\n if (d.months < 0 || d.months > 11) throw new RangeError('months: 0–11')\n if (d.days < 0) throw new RangeError('days >= 0')\n if (d.hours < 0 || d.hours > 23) throw new RangeError('hours: 0–23')\n if (d.minutes < 0 || d.minutes > 59) throw new RangeError('minutes: 0–59')\n if (d.seconds < 0 || d.seconds > 59) throw new RangeError('seconds: 0–59')\n if (d.milliseconds < 0) throw new RangeError('milliseconds >= 0')\n }\n\n valueOf(): number {\n return (\n this.milliseconds +\n this.seconds * 1e3 +\n this.minutes * 6e4 +\n this.hours * 3.6e6 +\n this.days * 8.64e7\n )\n }\n}\n","import { clamp } from './math'\n\nexport type EaseFunction = (t: number) => number\n\nexport class EaseFunctions {\n static cubicBezierGeneric(x1: number, y1: number, x2: number, y2: number): { x: EaseFunction, y: EaseFunction } {\n // Calculate the x and y coordinates using the cubic Bézier formula\n const cx = 3 * x1\n const bx = 3 * (x2 - x1) - cx\n const ax = 1 - cx - bx\n\n const cy = 3 * y1\n const by = 3 * (y2 - y1) - cy\n const ay = 1 - cy - by\n\n // Compute x and y values at parameter t\n const x = (t: number) => ((ax * t + bx) * t + cx) * t\n const y = (t: number) => ((ay * t + by) * t + cy) * t\n\n return {\n x,\n y\n }\n }\n\n static cubicBezier(x1: number, y1: number, x2: number, y2: number): EaseFunction {\n const { y } = EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2)\n return (t: number) => {\n t = clamp(t)\n return y(t) // <= equal to x(t) * 0 + y(t) * 1\n }\n }\n\n static easeInEaseOut(t: number): number {\n return EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t)\n };\n}\n","/**\n * 1 is forwards\n *\n * -1 is backwards\n */\nexport type Direction = 1 | -1\n\nexport class LoopingArrayCalculator {\n length: number\n isLooping: boolean\n allowedOverScroll: number\n\n constructor(length: number, isLooping: boolean = true, allowedOverScroll: number = 0.1) {\n if (allowedOverScroll < 0 || length < 1) {\n throw new Error('Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true')\n }\n\n this.length = length\n this.isLooping = isLooping\n this.allowedOverScroll = allowedOverScroll\n }\n\n getCorrectedPosition(position: number): number {\n if (!this.isLooping) {\n return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position))\n }\n if (position >= this.length) {\n return position % this.length\n }\n if (position < 0) {\n return this.length - (Math.abs(position) % this.length)\n }\n return position\n }\n\n static withoutOffset(position: number): number {\n return position + LoopingArrayCalculator.getOffset(position)\n }\n\n static getOffset(position: number): number {\n return Math.round(position) - position // For example: 45.5 => 46 - 45.5 = 0.5\n }\n\n /**\n * @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)\n */\n getDistanceDirectional(position: number, target: number, direction: Direction): number {\n if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {\n throw new Error('Invalid parameters: position is out of bounds.')\n }\n\n const isForwardInvalid = (direction === 1 && position > target)\n const isBackwardInvalid = (direction === -1 && target < position)\n\n if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {\n return Infinity\n }\n\n if (direction === -1) {\n return this.getDistanceDirectional(target, position, 1)\n }\n\n position = this.getCorrectedPosition(position)\n target = this.getCorrectedPosition(target)\n\n let distance = (target - position) * direction\n if (distance < 0) {\n distance = this.length - (Math.abs(position) % this.length) + target\n }\n\n return distance\n }\n\n getDistanceForward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, 1)\n }\n\n getDistanceBackward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, -1)\n }\n\n getDistance(position: number, target: number): number {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n\n return Math.min(forwardDistance, backwardDistance)\n }\n\n getBestDirection(position: number, target: number): Direction {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n return forwardDistance < backwardDistance ? 1 : -1\n }\n}\n","export const noop = () => undefined\n","async function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nasync function delayed<T>(value: T, ms: number): Promise<T> {\n await sleep(ms)\n return value\n}\n\nexport const PromiseUtils = {\n sleep,\n delayed\n}"],"mappings":"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","names":["exports","warnOnce","_","process","env","NODE_ENV","warnings","Set","msg","has","console","warn","add","exports","getImageBlurSvg","widthInt","heightInt","blurWidth","blurHeight","blurDataURL","objectFit","std","svgWidth","svgHeight","viewBox","preserveAspectRatio","VALID_LOADERS","imageConfigDefault","deviceSizes","imageSizes","path","loader","loaderFile","domains","disableStaticImages","minimumCacheTTL","formats","dangerouslyAllowSVG","contentSecurityPolicy","contentDispositionType","localPatterns","undefined","remotePatterns","qualities","unoptimized","getImgProps","VALID_LOADING_VALUES","undefined","INVALID_BACKGROUND_SIZE_VALUES","isStaticRequire","src","default","isStaticImageData","isStaticImport","allImgs","Map","perfObserver","getInt","x","Number","isFinite","NaN","test","parseInt","getWidths","width","sizes","deviceSizes","allSizes","viewportWidthRe","percentSizes","match","exec","push","length","smallestRatio","Math","min","widths","filter","s","kind","Set","map","w","find","p","generateImgAttrs","config","unoptimized","quality","loader","srcSet","last","i","join","_state","priority","loading","className","height","fill","style","overrideSrc","onLoad","onLoadingComplete","placeholder","blurDataURL","fetchPriority","decoding","layout","objectFit","objectPosition","lazyBoundary","lazyRoot","rest","imgConf","showAltText","blurComplete","defaultLoader","c","imageConfigDefault","imageSizes","sort","a","b","qualities","Error","isDefaultLoader","customImageLoader","obj","_","opts","layoutToStyle","intrinsic","maxWidth","responsive","layoutToSizes","layoutStyle","layoutSizes","staticSrc","widthInt","heightInt","blurWidth","blurHeight","staticImageData","JSON","stringify","ratio","round","isLazy","startsWith","dangerouslyAllowSVG","split","endsWith","qualityInt","process","env","NODE_ENV","output","position","isNaN","includes","String","warnOnce","localPatterns","pathname","VALID_BLUR_EXT","urlStr","url","URL","err","search","legacyKey","legacyValue","Object","entries","window","PerformanceObserver","entryList","entry","getEntries","imgSrc","element","lcpImage","get","observe","type","buffered","console","error","imgStyle","assign","left","top","right","bottom","color","backgroundImage","getImageBlurSvg","backgroundSize","placeholderStyle","backgroundPosition","backgroundRepeat","imgAttributes","fullUrl","e","location","href","set","props","meta","exports","nodeInterop","SideEffect","isServer","window","useClientOnlyLayoutEffect","useLayoutEffect","useClientOnlyEffect","useEffect","props","headManager","reduceComponentsToState","emitChange","mountedInstances","headElements","Children","toArray","Array","from","filter","Boolean","updateHead","add","children","delete","_pendingUpdate","AmpStateContext","React","createContext","process","env","NODE_ENV","displayName","HeadManagerContext","React","createContext","process","env","NODE_ENV","displayName","isInAmpMode","ampFirst","hybrid","hasQuery","exports","module","defaultHead","inAmpMode","head","meta","charSet","push","name","content","onlyReactElement","list","child","type","React","Fragment","concat","Children","toArray","props","children","reduce","fragmentList","fragmentChild","METATYPES","unique","keys","Set","tags","metaTypes","metaCategories","h","isUnique","hasKey","key","indexOf","slice","has","add","i","len","length","metatype","hasOwnProperty","category","categories","reduceComponents","headChildrenElements","reverse","filter","map","c","process","env","NODE_ENV","srcMessage","warnOnce","cloneElement","Head","ampState","useContext","AmpStateContext","headManager","HeadManagerContext","Effect","reduceComponentsToState","isInAmpMode","ImageConfigContext","React","createContext","imageConfigDefault","process","env","NODE_ENV","displayName","RouterContext","React","createContext","process","env","NODE_ENV","displayName","exports","module","t","e","u","n","o","s","r","a","i","X","__nccwpck_require__","hasLocalMatch","matchLocalPattern","pattern","url","search","undefined","makeRe","pathname","dot","test","localPatterns","urlPathAndQuery","URL","some","p","hasRemoteMatch","matchRemotePattern","pattern","url","protocol","undefined","replace","port","hostname","Error","JSON","stringify","makeRe","test","search","pathname","dot","domains","remotePatterns","some","domain","p","DEFAULT_Q","defaultLoader","config","src","width","quality","process","env","NODE_ENV","missingValues","push","length","Error","join","JSON","stringify","startsWith","localPatterns","NEXT_RUNTIME","hasLocalMatch","require","domains","remotePatterns","parsedSrc","URL","err","console","error","hasRemoteMatch","hostname","qualities","includes","q","reduce","prev","cur","Math","abs","path","encodeURIComponent","NEXT_DEPLOYMENT_ID","__next_img_default","useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","exports","module","Image","configEnv","process","env","__NEXT_IMAGE_OPTS","window","globalThis","__NEXT_IMAGE_IMPORTED","handleLoading","img","placeholder","onLoadRef","onLoadingCompleteRef","setBlurComplete","unoptimized","sizesInput","src","p","decode","Promise","resolve","catch","then","parentElement","isConnected","current","event","Event","Object","defineProperty","writable","value","prevented","stopped","nativeEvent","currentTarget","target","isDefaultPrevented","isPropagationStopped","persist","preventDefault","stopPropagation","NODE_ENV","origSrc","URL","searchParams","get","getAttribute","widthViewportRatio","getBoundingClientRect","width","innerWidth","warnOnce","position","getComputedStyle","valid","includes","map","String","join","height","heightModified","toString","widthModified","getDynamicProps","fetchPriority","Boolean","use","fetchpriority","ImageElement","forwardRef","forwardedRef","srcSet","sizes","decoding","className","style","loading","fill","setShowAltText","onLoad","onError","rest","ownRef","useCallback","console","error","complete","ref","useMergedRef","data-nimg","ImagePreload","isAppRouter","imgAttributes","opts","as","imageSrcSet","imageSizes","crossOrigin","referrerPolicy","ReactDOM","preload","Head","link","rel","href","undefined","props","pagesRouter","useContext","RouterContext","configContext","ImageConfigContext","config","useMemo","c","imageConfigDefault","allSizes","deviceSizes","sort","a","b","qualities","onLoadingComplete","useRef","useEffect","blurComplete","useState","showAltText","meta","imgMeta","getImgProps","defaultLoader","imgConf","priority","getImageProps","imgProps","props","getImgProps","defaultLoader","imgConf","process","env","__NEXT_IMAGE_OPTS","key","value","Object","entries","undefined","Image","exports","module","assign","searchParamsToUrlQuery","urlQueryToSearchParams","searchParams","query","key","value","entries","existing","Array","isArray","push","stringifyUrlQueryParam","param","isNaN","String","URLSearchParams","Object","item","append","set","target","searchParamsList","keys","delete","exports","formatUrl","formatWithValidation","urlObjectKeys","slashedProtocols","urlObj","auth","hostname","protocol","pathname","hash","query","host","encodeURIComponent","replace","indexOf","port","String","querystring","urlQueryToSearchParams","search","endsWith","slashes","test","url","process","env","NODE_ENV","Object","keys","forEach","key","includes","console","warn","omit","object","keys","omitted","Object","forEach","key","includes","DecodeError","MiddlewareNotFoundError","MissingStaticPage","NormalizeError","PageNotFoundError","SP","ST","WEB_VITALS","execOnce","getDisplayName","getLocationOrigin","getURL","isAbsoluteUrl","isResSent","loadGetInitialProps","normalizeRepeatedSlashes","stringifyError","fn","used","result","args","ABSOLUTE_URL_REGEX","url","test","protocol","hostname","port","window","location","href","origin","substring","length","Component","displayName","name","res","finished","headersSent","urlParts","split","urlNoQuery","replace","slice","join","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","performance","every","method","constructor","page","code","error","JSON","stringify","stack","exports","removeTrailingSlash","route","replace","exports","parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice","normalizePathTrailingSlash","path","startsWith","process","env","__NEXT_MANUAL_TRAILING_SLASH","pathname","query","hash","parsePath","__NEXT_TRAILING_SLASH","test","removeTrailingSlash","endsWith","pathHasPrefix","path","prefix","pathname","parsePath","startsWith","hasBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","pathHasPrefix","isLocalURL","url","isAbsoluteUrl","locationOrigin","getLocationOrigin","resolved","URL","origin","hasBasePath","pathname","_","getSortedRouteObjects","getSortedRoutes","UrlNode","insert","urlPath","_insert","split","filter","Boolean","smoosh","_smoosh","prefix","childrenPaths","children","keys","sort","slugName","splice","indexOf","restSlugName","optionalRestSlugName","routes","map","c","get","reduce","prev","curr","push","placeholder","r","slice","Error","unshift","urlPaths","slugNames","isCatchAll","length","nextSegment","startsWith","endsWith","handleSlug","previousSlug","nextSlug","forEach","slug","replace","segmentName","isOptional","substring","has","set","Map","normalizedPages","root","pagePath","objects","getter","indexes","pathnames","i","pathname","sorted","exports","ensureLeadingSlash","path","startsWith","DEFAULT_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","isGroupSegment","isParallelRouteSegment","segment","endsWith","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","normalizeAppPath","normalizeRscURL","route","ensureLeadingSlash","split","reduce","pathname","segment","index","segments","isGroupSegment","length","url","replace","INTERCEPTION_ROUTE_MARKERS","extractInterceptionRouteInformation","isInterceptionRouteAppPath","path","split","find","segment","m","startsWith","undefined","interceptingRoute","marker","interceptedRoute","Error","normalizeAppPath","slice","concat","join","splitInterceptingRoute","length","isDynamicRoute","TEST_ROUTE","TEST_STRICT_ROUTE","route","strict","isInterceptionRouteAppPath","extractInterceptionRouteInformation","interceptedRoute","test","getSortedRouteObjects","getSortedRoutes","isDynamicRoute","exports","module","e","n","t","a","i","r","match","hasAdjacentParameterIssues","normalizeAdjacentParameters","normalizeTokensForRegexp","stripParameterSeparators","PARAM_SEPARATOR","route","test","normalized","replace","tokens","map","token","modifier","prefix","suffix","params","cleaned","key","value","Object","entries","RegExp","Array","isArray","item","exports","safeCompile","safePathToRegexp","safeRegexpToFunction","safeRouteMatcher","route","keys","options","pathToRegexp","needsNormalization","hasAdjacentParameterIssues","routeToUse","normalizeAdjacentParameters","error","normalizedRoute","retryError","compile","regexp","originalMatcher","regexpToFunction","pathname","result","params","stripParameterSeparators","matcherFn","getRouteMatcher","re","groups","rawMatcher","pathname","routeMatch","exec","decode","param","decodeURIComponent","DecodeError","params","key","group","Object","entries","match","pos","undefined","repeat","split","map","entry","safeRouteMatcher","ACTION_SUFFIX","APP_DIR_ALIAS","CACHE_ONE_YEAR","DOT_NEXT_ALIAS","ESLINT_DEFAULT_DIRS","GSP_NO_RETURNED_VALUE","GSSP_COMPONENT_MEMBER_ERROR","GSSP_NO_RETURNED_VALUE","HTML_CONTENT_TYPE_HEADER","INFINITE_CACHE","INSTRUMENTATION_HOOK_FILENAME","JSON_CONTENT_TYPE_HEADER","MATCHED_PATH_HEADER","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","NEXT_BODY_SUFFIX","NEXT_CACHE_IMPLICIT_TAG_ID","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_DATA_SUFFIX","NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_META_SUFFIX","NEXT_QUERY_PARAM_PREFIX","NEXT_RESUME_HEADER","NON_STANDARD_NODE_ENV","PAGES_DIR_ALIAS","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","PUBLIC_DIR_MIDDLEWARE_CONFLICT","ROOT_DIR_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_PREFETCH_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","SERVER_PROPS_EXPORT_ERROR","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","SERVER_RUNTIME","SSG_FALLBACK_EXPORT_ERROR","SSG_GET_INITIAL_PROPS_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","TEXT_PLAIN_CONTENT_TYPE_HEADER","UNSTABLE_REVALIDATE_RENAME_ERROR","WEBPACK_LAYERS","WEBPACK_RESOURCE_QUERIES","edge","experimentalEdge","nodejs","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","edgeSSREntry","metadata","metadataRoute","metadataImageMeta","exports","escapeStringRegexp","reHasRegExp","reReplaceRegExp","str","test","replace","PARAMETER_PATTERN","getDynamicParam","parseMatchedParameter","parseParameter","params","segmentKey","dynamicParamType","pagePath","fallbackRouteParams","value","has","get","Array","isArray","map","i","encodeURIComponent","isCatchall","isOptionalCatchall","param","type","treeSegment","split","slice","flatMap","pathSegment","key","join","match","optional","startsWith","endsWith","repeat","getNamedMiddlewareRegex","getNamedRouteRegex","getRouteRegex","getParametrizedRoute","route","includeSuffix","includePrefix","groups","groupIndex","segments","segment","removeTrailingSlash","slice","split","markerMatch","INTERCEPTION_ROUTE_MARKERS","find","m","startsWith","paramMatches","match","PARAMETER_PATTERN","key","optional","repeat","parseMatchedParameter","pos","push","escapeStringRegexp","s","substring","parameterizedRoute","join","normalizedRoute","excludeOptionalTrailingSlash","re","RegExp","buildGetSafeRouteKey","i","routeKey","j","String","fromCharCode","Math","floor","getSafeKeyFromSegment","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","cleanedKey","replace","invalidKey","length","isNaN","parseInt","duplicateKey","interceptionPrefix","pattern","getNamedParametrizedRoute","prefixRouteKeys","hasInterceptionMarker","some","NEXT_INTERCEPTION_MARKER_PREFIX","undefined","NEXT_QUERY_PARAM_PREFIX","namedParameterizedRoute","options","result","namedRegex","catchAll","catchAllRegex","catchAllGroupedRegex","interpolateAs","route","asPathname","query","interpolatedRoute","dynamicRegex","getRouteRegex","dynamicGroups","groups","dynamicMatches","getRouteMatcher","params","Object","keys","every","param","value","repeat","optional","replaced","Array","isArray","replace","map","segment","encodeURIComponent","join","result","resolveHref","router","href","resolveAs","base","urlAsString","formatWithValidation","urlProtoMatch","match","urlAsStringNoProto","slice","length","urlParts","split","console","error","pathname","normalizedUrl","normalizeRepeatedSlashes","isLocalURL","baseBase","startsWith","asPath","isDynamicRoute","routeRegex","getRouteRegex","getRouteMatcher","URL","_","finalUrl","normalizePathTrailingSlash","interpolatedAs","searchParams","query","searchParamsToUrlQuery","result","params","interpolateAs","hash","omit","resolvedHref","origin","addPathPrefix","path","prefix","startsWith","pathname","query","hash","parsePath","addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase","pathHasPrefix","addPathPrefix","addLocale","path","args","process","env","__NEXT_I18N_SUPPORT","normalizePathTrailingSlash","require","cancelIdleCallback","requestIdleCallback","self","bind","window","cb","start","Date","now","setTimeout","didTimeout","timeRemaining","Math","max","id","clearTimeout","useIntersection","hasIntersectionObserver","IntersectionObserver","observers","Map","idList","createObserver","options","id","root","margin","rootMargin","existing","find","obj","instance","get","elements","observer","entries","forEach","entry","callback","target","isVisible","isIntersecting","intersectionRatio","push","set","observe","element","unobserve","delete","size","disconnect","index","findIndex","splice","rootRef","disabled","isDisabled","visible","setVisible","useState","elementRef","useRef","setElement","useCallback","current","useEffect","tagName","idleCallback","requestIdleCallback","cancelIdleCallback","resetVisible","normalizeLocalePath","cache","WeakMap","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length","normalizeLocalePath","pathname","locales","process","env","__NEXT_I18N_SUPPORT","require","detectedLocale","undefined","detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale","detectDomainLocale","args","process","env","__NEXT_I18N_SUPPORT","require","getDomainLocale","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","locale","locales","domainLocales","__NEXT_I18N_SUPPORT","normalizeLocalePath","require","detectDomainLocale","target","detectedLocale","domain","undefined","proto","http","finalLocale","defaultLocale","normalizePathTrailingSlash","addBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","required","normalizePathTrailingSlash","__NEXT_MANUAL_CLIENT_BASE_PATH","addPathPrefix","errorOnce","_","process","env","NODE_ENV","errors","Set","msg","has","console","error","add","exports","module","useLinkStatus","prefetched","Set","prefetch","router","href","as","options","window","isLocalURL","bypassPrefetchedCheck","locale","undefined","prefetchedKey","has","add","catch","err","process","env","NODE_ENV","isModifiedEvent","event","eventTarget","currentTarget","target","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","linkClicked","e","replace","shallow","scroll","onNavigate","nodeName","isAnchorNodeName","toUpperCase","hasAttribute","preventDefault","location","navigate","isDefaultPrevented","routerScroll","formatStringOrUrl","urlObjOrString","formatUrl","Link","React","forwardRef","LinkComponent","props","forwardedRef","children","hrefProp","asProp","childrenProp","prefetchProp","passHref","onClick","onMouseEnter","onMouseEnterProp","onTouchStart","onTouchStartProp","legacyBehavior","restProps","a","useContext","RouterContext","prefetchEnabled","createPropError","args","Error","key","expected","actual","requiredPropsGuard","requiredProps","Object","keys","forEach","_","optionalPropsGuard","optionalProps","valType","useMemo","resolvedHref","resolvedAs","resolveHref","previousHref","useRef","previousAs","child","console","warn","Children","only","type","childRef","ref","setIntersectionRef","isVisible","resetVisible","useIntersection","rootMargin","setIntersectionWithResetRef","useCallback","el","current","setRef","useMergedRef","useEffect","childProps","defaultPrevented","priority","__NEXT_LINK_NO_TOUCH_START","isAbsoluteUrl","curLocale","localeDomain","isLocaleDomain","getDomainLocale","locales","domainLocales","addBasePath","addLocale","defaultLocale","errorOnce","cloneElement","LinkStatusContext","createContext","pending","require_link","exports","module","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","import_jsx_runtime","import_react","name","import_react","import_jsx_runtime","import_jsx_runtime","import_clsx","import_jsx_runtime","clsx","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","Image","import_react","name","close","up","down","import_jsx_runtime","FormFieldLayout","import_react","import_jsx_runtime","import_jsx_runtime","name","import_react","import_react","import_clsx","import_lucide_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","locale","import_internationalization","import_react","import_jsx_runtime","clsx","CarouselSlide","import_clsx","import_jsx_runtime","clsx","import_react","import_react","listener","active","import_react","value","import_react","import_lucide_react","import_react","import_jsx_runtime","import_react","import_clsx","import_react","import_jsx_runtime","ExpandableRoot","ExpandableHeader","ExpandableContent","Expandable","clsx","ExpandableUncontrolled","import_jsx_runtime","import_react","import_react_dom","import_clsx","import_react","range","import_jsx_runtime","FloatingContainer","forwardRef","import_react","import_clsx","import_lucide_react","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","ListBoxItem","React","ListBoxPrimitive","ListBox","import_jsx_runtime","close","import_react","import_react_dom","import_jsx_runtime","state","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","import_clsx","import_react","import_lucide_react","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","clsx","import_jsx_runtime","import_react","import_react","defaultOptions","import_react","import_jsx_runtime","Input","InputUncontrolled","import_jsx_runtime","import_react","import_clsx","import_lucide_react","import_react_dom","import_jsx_runtime","value","isOpen","SelectOption","clsx","SelectButton","SelectChipDisplay","SelectContent","Select","SelectUncontrolled","MultiSelect","MultiSelectUncontrolled","MultiSelectChipDisplay","MultiSelectChipDisplayUncontrolled","import_jsx_runtime","locale","import_lucide_react","import_clsx","import_react","import_jsx_runtime","import_jsx_runtime","clsx","theme","import_lucide_react","import_clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","import_clsx","import_jsx_runtime","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","Link","import_lucide_react","import_react","import_link","import_clsx","import_jsx_runtime","clsx","label","Link","MenuIcon","import_lucide_react","import_clsx","import_react","import_jsx_runtime","clsx","value","import_lucide_react","import_clsx","import_jsx_runtime","clsx","import_lucide_react","import_jsx_runtime","import_react","import_clsx","import_clsx","import_jsx_runtime","import_react","import_lucide_react","import_clsx","import_react","import_clsx","import_react_dom","import_jsx_runtime","prevState","import_jsx_runtime","clsx","import_lucide_react","import_react","import_clsx","import_react_dom","import_react","import_react","import_jsx_runtime","clsx","close","import_react","import_jsx_runtime","close","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","clsx","import_react","import_clsx","import_lucide_react","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","currentIndex","transition","items","distance","name","clsx","import_react","import_clsx","import_jsx_runtime","Textarea","clsx","import_react","import_lucide_react","date","import_clsx","import_react","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","YearRow","clsx","onValueChange","onEditComplete","import_jsx_runtime","clsx","import_clsx","import_react","import_jsx_runtime","value","hour","import_jsx_runtime","clsx","import_jsx_runtime","import_react","import_react_dom","import_lucide_react","import_clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","InsideLabelInput","clsx","import_lucide_react","import_clsx","import_jsx_runtime","import_react","import_lucide_react","import_clsx","import_jsx_runtime","ToggleableInput","clsx","import_lucide_react","import_lucide_react","import_jsx_runtime","name","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","value","import_lucide_react","import_jsx_runtime","value","import_lucide_react","import_jsx_runtime","value","import_lucide_react","import_jsx_runtime","value","import_react","import_jsx_runtime","FocusTrap","import_react","import_jsx_runtime","import_react","import_react","React","import_react","import_react","import_react","resolve"]}
1
+ {"version":3,"sources":["../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/src/shared/lib/utils/warn-once.ts","../node_modules/next/src/shared/lib/image-blur-svg.ts","../node_modules/next/src/shared/lib/image-config.ts","../node_modules/next/src/shared/lib/get-img-props.ts","../node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs","../node_modules/next/src/shared/lib/side-effect.tsx","../node_modules/next/src/shared/lib/amp-context.shared-runtime.ts","../node_modules/next/src/shared/lib/head-manager-context.shared-runtime.ts","../node_modules/next/src/shared/lib/amp-mode.ts","../node_modules/next/src/shared/lib/head.tsx","../node_modules/next/src/shared/lib/image-config-context.shared-runtime.ts","../node_modules/next/src/shared/lib/router-context.shared-runtime.ts","../node_modules/next/dist/compiled/picomatch/index.js","../node_modules/next/src/shared/lib/match-local-pattern.ts","../node_modules/next/src/shared/lib/match-remote-pattern.ts","../node_modules/next/src/shared/lib/image-loader.ts","../node_modules/next/src/client/use-merged-ref.ts","../node_modules/next/src/client/image-component.tsx","../node_modules/next/src/shared/lib/image-external.tsx","../node_modules/next/image.js","../node_modules/next/src/shared/lib/router/utils/querystring.ts","../node_modules/next/src/shared/lib/router/utils/format-url.ts","../node_modules/next/src/shared/lib/router/utils/omit.ts","../node_modules/next/src/shared/lib/utils.ts","../node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts","../node_modules/next/src/shared/lib/router/utils/parse-path.ts","../node_modules/next/src/client/normalize-trailing-slash.ts","../node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts","../node_modules/next/src/client/has-base-path.ts","../node_modules/next/src/shared/lib/router/utils/is-local-url.ts","../node_modules/next/src/shared/lib/router/utils/sorted-routes.ts","../node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts","../node_modules/next/src/shared/lib/segment.ts","../node_modules/next/src/shared/lib/router/utils/app-paths.ts","../node_modules/next/src/shared/lib/router/utils/interception-routes.ts","../node_modules/next/src/shared/lib/router/utils/is-dynamic.ts","../node_modules/next/src/shared/lib/router/utils/index.ts","../node_modules/next/dist/compiled/path-to-regexp/index.js","../node_modules/next/src/lib/route-pattern-normalizer.ts","../node_modules/next/src/shared/lib/router/utils/route-match-utils.ts","../node_modules/next/src/shared/lib/router/utils/route-matcher.ts","../node_modules/next/src/lib/constants.ts","../node_modules/next/src/shared/lib/escape-regexp.ts","../node_modules/next/src/shared/lib/router/utils/get-dynamic-param.ts","../node_modules/next/src/shared/lib/router/utils/route-regex.ts","../node_modules/next/src/shared/lib/router/utils/interpolate-as.ts","../node_modules/next/src/client/resolve-href.ts","../node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts","../node_modules/next/src/shared/lib/router/utils/add-locale.ts","../node_modules/next/src/client/add-locale.ts","../node_modules/next/src/client/request-idle-callback.ts","../node_modules/next/src/client/use-intersection.tsx","../node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts","../node_modules/next/src/client/normalize-locale-path.ts","../node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts","../node_modules/next/src/client/detect-domain-locale.ts","../node_modules/next/src/client/get-domain-locale.ts","../node_modules/next/src/client/add-base-path.ts","../node_modules/next/src/shared/lib/utils/error-once.ts","../node_modules/next/src/client/link.tsx","../node_modules/next/link.js","../src/index.ts","../src/components/branding/HelpwaveLogo.tsx","../src/components/branding/HelpwaveBadge.tsx","../src/components/display-and-visualization/Avatar.tsx","../src/components/layout/Visibility.tsx","../src/components/user-interaction/Button.tsx","../src/components/display-and-visualization/Chip.tsx","../src/components/display-and-visualization/Circle.tsx","../src/components/display-and-visualization/ExpansionIcon.tsx","../src/components/display-and-visualization/ProgressIndicator.tsx","../src/components/display-and-visualization/Ring.tsx","../src/components/display-and-visualization/Tag.tsx","../src/components/form/FieldLayout.tsx","../src/utils/array.ts","../src/utils/propsUtil.ts","../src/components/form/FormContext.tsx","../src/components/form/FormField.tsx","../src/components/form/FormStore.ts","../src/components/form/useCreateForm.tsx","../src/components/layout/Carousel.tsx","../src/contexts/LocaleContext.tsx","../src/hooks/useLocalStorage.ts","../src/utils/storage.ts","../src/utils/resolveSetState.ts","../src/i18n/translations.ts","../src/i18n/util.ts","../src/contexts/HightideConfigContext.tsx","../src/i18n/useHightideTranslation.ts","../src/components/layout/DividerInserter.tsx","../src/hooks/focus/useFocusTrap.ts","../src/hooks/focus/useIsMounted.ts","../src/hooks/useOverlayRegistry.ts","../src/components/layout/Drawer.tsx","../src/hooks/useTransitionState.ts","../src/components/layout/Expandable.tsx","../src/hooks/useOverwritableState.ts","../src/components/layout/FAQSection.tsx","../src/components/layout/FloatingContainer.tsx","../src/hooks/useFloatingElement.ts","../src/utils/math.ts","../src/components/layout/InifiniteScroll.tsx","../src/components/layout/ListBox.tsx","../src/utils/match.ts","../src/components/layout/MarkdownInterpreter.tsx","../src/components/layout/TabSwitcher.tsx","../src/components/layout/TextImage.tsx","../src/components/layout/VerticalDivider.tsx","../src/components/layout/dialog/ConfirmDialog.tsx","../src/components/layout/dialog/Dialog.tsx","../src/hooks/useLogOnce.ts","../src/components/layout/dialog/DiscardChangesDialog.tsx","../src/components/user-interaction/input/Input.tsx","../src/hooks/useDelay.ts","../src/hooks/focus/useFocusManagement.ts","../src/components/layout/dialog/InputDialog.tsx","../src/components/user-interaction/Select.tsx","../src/components/layout/dialog/LanguageDialog.tsx","../src/components/layout/dialog/ThemeDialog.tsx","../src/contexts/ThemeContext.tsx","../src/components/layout/loading/ErrorComponent.tsx","../src/components/layout/loading/LoadingAndErrorComponent.tsx","../src/components/layout/loading/LoadingContainer.tsx","../src/components/layout/loading/LoadingAnimation.tsx","../src/components/layout/navigation/BreadCrumbs.tsx","../src/components/layout/navigation/Navigation.tsx","../src/components/layout/navigation/Pagination.tsx","../src/components/layout/navigation/StepperBar.tsx","../src/components/layout/table/FillerCell.tsx","../src/components/layout/table/Filter.ts","../src/components/layout/table/Table.tsx","../src/components/layout/table/TableCell.tsx","../src/hooks/useResizeCallbackWrapper.ts","../src/components/layout/table/TableSortButton.tsx","../src/components/user-interaction/Tooltip.tsx","../src/components/layout/table/TableFilterButton.tsx","../src/components/user-interaction/Menu.tsx","../src/utils/bagFunctions.ts","../src/hooks/usePopoverPosition.ts","../src/hooks/useHoverState.ts","../src/hooks/useOutsideClick.ts","../src/components/user-interaction/Checkbox.tsx","../src/components/user-interaction/CopyToClipboardWrapper.tsx","../src/utils/writeToClipboard.ts","../src/components/user-interaction/ScrollPicker.tsx","../src/components/user-interaction/Textarea.tsx","../src/components/user-interaction/date/DatePicker.tsx","../src/utils/date.ts","../src/components/user-interaction/date/DayPicker.tsx","../src/components/user-interaction/date/YearMonthPicker.tsx","../src/components/user-interaction/date/DateTimePicker.tsx","../src/components/user-interaction/date/TimePicker.tsx","../src/components/user-interaction/date/TimeDisplay.tsx","../src/components/user-interaction/input/DateTimeInput.tsx","../src/components/user-interaction/input/InsideLabelInput.tsx","../src/components/user-interaction/input/SearchBar.tsx","../src/components/user-interaction/input/ToggleableInput.tsx","../src/components/user-interaction/properties/CheckboxProperty.tsx","../src/components/user-interaction/properties/PropertyBase.tsx","../src/components/user-interaction/properties/DateProperty.tsx","../src/components/user-interaction/properties/MultiSelectProperty.tsx","../src/components/user-interaction/properties/NumberProperty.tsx","../src/components/user-interaction/properties/SelectProperty.tsx","../src/components/user-interaction/properties/TextProperty.tsx","../src/components/utils/FocusTrap.tsx","../src/components/utils/Transition.tsx","../src/contexts/HightideProvider.tsx","../src/hooks/focus/useFocusGuards.ts","../src/hooks/focus/useFocusOnceVisible.ts","../src/hooks/useRerender.ts","../src/hooks/useSearch.ts","../src/utils/simpleSearch.ts","../src/utils/emailValidation.ts","../src/hooks/useValidators.ts","../src/utils/builder.ts","../src/utils/duration.ts","../src/utils/easeFunctions.ts","../src/utils/loopingArray.ts","../src/utils/noop.ts","../src/utils/promise.ts"],"sourcesContent":["\"use strict\";\n\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports._ = _interop_require_default;\n","let warnOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const warnings = new Set<string>()\n warnOnce = (msg: string) => {\n if (!warnings.has(msg)) {\n console.warn(msg)\n }\n warnings.add(msg)\n }\n}\n\nexport { warnOnce }\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","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/app/api-reference/components/image#path) */\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 [Content Security Policy](https://nextjs.org/docs/api-reference/next/image#contentsecuritypolicy) */\n contentSecurityPolicy: string\n\n /** @see [Content Disposition Type](https://nextjs.org/docs/api-reference/next/image#contentdispositiontype) */\n contentDispositionType: 'inline' | 'attachment'\n\n /** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#remotepatterns) */\n remotePatterns: Array<URL | RemotePattern>\n\n /** @see [Local 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 { 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 { CSSProperties, 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<ImageProps, 'src' | 'loader'> & {\n loading: LoadingValue\n width: number | undefined\n height: number | undefined\n style: NonNullable<JSX.IntrinsicElements['img']['style']>\n sizes: string | undefined\n srcSet: string | undefined\n src: string\n}\n\nconst VALID_LOADING_VALUES = ['lazy', 'eager', undefined] as const\n\n// Object-fit values that are not valid background-size values\nconst INVALID_BACKGROUND_SIZE_VALUES = [\n '-moz-initial',\n 'fill',\n 'none',\n 'scale-down',\n undefined,\n]\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<HTMLImageElement> | undefined\nexport type OnLoadingComplete = (img: HTMLImageElement) => void\n\nexport type PlaceholderStyle = Partial<\n Pick<\n CSSProperties,\n | 'backgroundSize'\n | 'backgroundPosition'\n | 'backgroundRepeat'\n | 'backgroundImage'\n >\n>\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 <img>.\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<ImageProps['placeholder']>\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 <img> 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<string, Record<string, string> | undefined> = {\n intrinsic: { maxWidth: '100%', height: 'auto' },\n responsive: { width: '100%', height: 'auto' },\n }\n const layoutToSizes: Record<string, string | undefined> = {\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 (qualityInt && qualityInt !== 75 && !config.qualities) {\n warnOnce(\n `Image with src \"${src}\" is using quality \"${qualityInt}\" which is not configured in images.qualities. This config will be required starting in Next.js 16.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-qualities`\n )\n }\n if (\n src.startsWith('/') &&\n src.includes('?') &&\n (!config?.localPatterns?.length ||\n (config.localPatterns.length === 1 &&\n config.localPatterns[0].pathname === '/_next/static/media/**'))\n ) {\n warnOnce(\n `Image with src \"${src}\" is using a query string which is not configured in images.localPatterns. This config will be required starting in Next.js 16.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`\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 const backgroundSize = !INVALID_BACKGROUND_SIZE_VALUES.includes(\n imgStyle.objectFit\n )\n ? imgStyle.objectFit\n : imgStyle.objectFit === 'fill'\n ? '100% 100%' // the background-size equivalent of `fill`\n : 'cover'\n\n let placeholderStyle: PlaceholderStyle = backgroundImage\n ? {\n backgroundSize,\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 strict\";\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\nexports._ = _interop_require_wildcard;\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 React from 'react'\n\nexport const AmpStateContext: React.Context<any> = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n AmpStateContext.displayName = 'AmpStateContext'\n}\n","import React from 'react'\n\nexport const HeadManagerContext: React.Context<{\n updateHead?: (state: any) => void\n mountedInstances?: any\n updateScripts?: (state: any) => void\n scripts?: any\n getIsSsr?: () => boolean\n\n // Used in app directory, to render script tags as server components.\n appDir?: boolean\n nonce?: string\n}> = React.createContext({})\n\nif (process.env.NODE_ENV !== 'production') {\n HeadManagerContext.displayName = 'HeadManagerContext'\n}\n","export function isInAmpMode({\n ampFirst = false,\n hybrid = false,\n hasQuery = false,\n} = {}): boolean {\n return ampFirst || (hybrid && hasQuery)\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 = [<meta charSet=\"utf-8\" key=\"charset\" />]\n if (!inAmpMode) {\n head.push(\n <meta name=\"viewport\" content=\"width=device-width\" key=\"viewport\" />\n )\n }\n return head\n}\n\nfunction onlyReactElement(\n list: Array<React.ReactElement<any>>,\n child: React.ReactElement | number | string\n): Array<React.ReactElement<any>> {\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<React.ReactElement<any>>,\n fragmentChild: React.ReactElement | number | string\n ): Array<React.ReactElement<any>> => {\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 <title/>\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 (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","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","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","(()=>{\"use strict\";var t={170:(t,e,u)=>{const n=u(510);const isWindows=()=>{if(typeof navigator!==\"undefined\"&&navigator.platform){const t=navigator.platform.toLowerCase();return t===\"win32\"||t===\"windows\"}if(typeof process!==\"undefined\"&&process.platform){return process.platform===\"win32\"}return false};function picomatch(t,e,u=false){if(e&&(e.windows===null||e.windows===undefined)){e={...e,windows:isWindows()}}return n(t,e,u)}Object.assign(picomatch,n);t.exports=picomatch},154:t=>{const e=\"\\\\\\\\/\";const u=`[^${e}]`;const n=\"\\\\.\";const o=\"\\\\+\";const s=\"\\\\?\";const r=\"\\\\/\";const a=\"(?=.)\";const i=\"[^/]\";const c=`(?:${r}|$)`;const p=`(?:^|${r})`;const l=`${n}{1,2}${c}`;const f=`(?!${n})`;const A=`(?!${p}${l})`;const _=`(?!${n}{0,1}${c})`;const R=`(?!${l})`;const E=`[^.${r}]`;const h=`${i}*?`;const g=\"/\";const b={DOT_LITERAL:n,PLUS_LITERAL:o,QMARK_LITERAL:s,SLASH_LITERAL:r,ONE_CHAR:a,QMARK:i,END_ANCHOR:c,DOTS_SLASH:l,NO_DOT:f,NO_DOTS:A,NO_DOT_SLASH:_,NO_DOTS_SLASH:R,QMARK_NO_DOT:E,STAR:h,START_ANCHOR:p,SEP:g};const C={...b,SLASH_LITERAL:`[${e}]`,QMARK:u,STAR:`${u}*?`,DOTS_SLASH:`${n}{1,2}(?:[${e}]|$)`,NO_DOT:`(?!${n})`,NO_DOTS:`(?!(?:^|[${e}])${n}{1,2}(?:[${e}]|$))`,NO_DOT_SLASH:`(?!${n}{0,1}(?:[${e}]|$))`,NO_DOTS_SLASH:`(?!${n}{1,2}(?:[${e}]|$))`,QMARK_NO_DOT:`[^.${e}]`,START_ANCHOR:`(?:^|[${e}])`,END_ANCHOR:`(?:[${e}]|$)`,SEP:\"\\\\\"};const y={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};t.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:y,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(t){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${t.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(t){return t===true?C:b}}},697:(t,e,u)=>{const n=u(154);const o=u(96);const{MAX_LENGTH:s,POSIX_REGEX_SOURCE:r,REGEX_NON_SPECIAL_CHARS:a,REGEX_SPECIAL_CHARS_BACKREF:i,REPLACEMENTS:c}=n;const expandRange=(t,e)=>{if(typeof e.expandRange===\"function\"){return e.expandRange(...t,e)}t.sort();const u=`[${t.join(\"-\")}]`;try{new RegExp(u)}catch(e){return t.map((t=>o.escapeRegex(t))).join(\"..\")}return u};const syntaxError=(t,e)=>`Missing ${t}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`;const parse=(t,e)=>{if(typeof t!==\"string\"){throw new TypeError(\"Expected a string\")}t=c[t]||t;const u={...e};const p=typeof u.maxLength===\"number\"?Math.min(s,u.maxLength):s;let l=t.length;if(l>p){throw new SyntaxError(`Input length: ${l}, exceeds maximum allowed length: ${p}`)}const f={type:\"bos\",value:\"\",output:u.prepend||\"\"};const A=[f];const _=u.capture?\"\":\"?:\";const R=n.globChars(u.windows);const E=n.extglobChars(R);const{DOT_LITERAL:h,PLUS_LITERAL:g,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:y,NO_DOT:$,NO_DOT_SLASH:x,NO_DOTS_SLASH:S,QMARK:H,QMARK_NO_DOT:v,STAR:d,START_ANCHOR:L}=R;const globstar=t=>`(${_}(?:(?!${L}${t.dot?y:h}).)*?)`;const T=u.dot?\"\":$;const O=u.dot?H:v;let k=u.bash===true?globstar(u):d;if(u.capture){k=`(${k})`}if(typeof u.noext===\"boolean\"){u.noextglob=u.noext}const m={input:t,index:-1,start:0,dot:u.dot===true,consumed:\"\",output:\"\",prefix:\"\",backtrack:false,negated:false,brackets:0,braces:0,parens:0,quotes:0,globstar:false,tokens:A};t=o.removePrefix(t,m);l=t.length;const w=[];const N=[];const I=[];let B=f;let G;const eos=()=>m.index===l-1;const D=m.peek=(e=1)=>t[m.index+e];const M=m.advance=()=>t[++m.index]||\"\";const remaining=()=>t.slice(m.index+1);const consume=(t=\"\",e=0)=>{m.consumed+=t;m.index+=e};const append=t=>{m.output+=t.output!=null?t.output:t.value;consume(t.value)};const negate=()=>{let t=1;while(D()===\"!\"&&(D(2)!==\"(\"||D(3)===\"?\")){M();m.start++;t++}if(t%2===0){return false}m.negated=true;m.start++;return true};const increment=t=>{m[t]++;I.push(t)};const decrement=t=>{m[t]--;I.pop()};const push=t=>{if(B.type===\"globstar\"){const e=m.braces>0&&(t.type===\"comma\"||t.type===\"brace\");const u=t.extglob===true||w.length&&(t.type===\"pipe\"||t.type===\"paren\");if(t.type!==\"slash\"&&t.type!==\"paren\"&&!e&&!u){m.output=m.output.slice(0,-B.output.length);B.type=\"star\";B.value=\"*\";B.output=k;m.output+=B.output}}if(w.length&&t.type!==\"paren\"){w[w.length-1].inner+=t.value}if(t.value||t.output)append(t);if(B&&B.type===\"text\"&&t.type===\"text\"){B.output=(B.output||B.value)+t.value;B.value+=t.value;return}t.prev=B;A.push(t);B=t};const extglobOpen=(t,e)=>{const n={...E[e],conditions:1,inner:\"\"};n.prev=B;n.parens=m.parens;n.output=m.output;const o=(u.capture?\"(\":\"\")+n.open;increment(\"parens\");push({type:t,value:e,output:m.output?\"\":C});push({type:\"paren\",extglob:true,value:M(),output:o});w.push(n)};const extglobClose=t=>{let n=t.close+(u.capture?\")\":\"\");let o;if(t.type===\"negate\"){let s=k;if(t.inner&&t.inner.length>1&&t.inner.includes(\"/\")){s=globstar(u)}if(s!==k||eos()||/^\\)+$/.test(remaining())){n=t.close=`)$))${s}`}if(t.inner.includes(\"*\")&&(o=remaining())&&/^\\.[^\\\\/.]+$/.test(o)){const u=parse(o,{...e,fastpaths:false}).output;n=t.close=`)${u})${s})`}if(t.prev.type===\"bos\"){m.negatedExtglob=true}}push({type:\"paren\",extglob:true,value:G,output:n});decrement(\"parens\")};if(u.fastpaths!==false&&!/(^[*!]|[/()[\\]{}\"])/.test(t)){let n=false;let s=t.replace(i,((t,e,u,o,s,r)=>{if(o===\"\\\\\"){n=true;return t}if(o===\"?\"){if(e){return e+o+(s?H.repeat(s.length):\"\")}if(r===0){return O+(s?H.repeat(s.length):\"\")}return H.repeat(u.length)}if(o===\".\"){return h.repeat(u.length)}if(o===\"*\"){if(e){return e+o+(s?k:\"\")}return k}return e?t:`\\\\${t}`}));if(n===true){if(u.unescape===true){s=s.replace(/\\\\/g,\"\")}else{s=s.replace(/\\\\+/g,(t=>t.length%2===0?\"\\\\\\\\\":t?\"\\\\\":\"\"))}}if(s===t&&u.contains===true){m.output=t;return m}m.output=o.wrapOutput(s,m,e);return m}while(!eos()){G=M();if(G===\"\\0\"){continue}if(G===\"\\\\\"){const t=D();if(t===\"/\"&&u.bash!==true){continue}if(t===\".\"||t===\";\"){continue}if(!t){G+=\"\\\\\";push({type:\"text\",value:G});continue}const e=/^\\\\+/.exec(remaining());let n=0;if(e&&e[0].length>2){n=e[0].length;m.index+=n;if(n%2!==0){G+=\"\\\\\"}}if(u.unescape===true){G=M()}else{G+=M()}if(m.brackets===0){push({type:\"text\",value:G});continue}}if(m.brackets>0&&(G!==\"]\"||B.value===\"[\"||B.value===\"[^\")){if(u.posix!==false&&G===\":\"){const t=B.value.slice(1);if(t.includes(\"[\")){B.posix=true;if(t.includes(\":\")){const t=B.value.lastIndexOf(\"[\");const e=B.value.slice(0,t);const u=B.value.slice(t+2);const n=r[u];if(n){B.value=e+n;m.backtrack=true;M();if(!f.output&&A.indexOf(B)===1){f.output=C}continue}}}}if(G===\"[\"&&D()!==\":\"||G===\"-\"&&D()===\"]\"){G=`\\\\${G}`}if(G===\"]\"&&(B.value===\"[\"||B.value===\"[^\")){G=`\\\\${G}`}if(u.posix===true&&G===\"!\"&&B.value===\"[\"){G=\"^\"}B.value+=G;append({value:G});continue}if(m.quotes===1&&G!=='\"'){G=o.escapeRegex(G);B.value+=G;append({value:G});continue}if(G==='\"'){m.quotes=m.quotes===1?0:1;if(u.keepQuotes===true){push({type:\"text\",value:G})}continue}if(G===\"(\"){increment(\"parens\");push({type:\"paren\",value:G});continue}if(G===\")\"){if(m.parens===0&&u.strictBrackets===true){throw new SyntaxError(syntaxError(\"opening\",\"(\"))}const t=w[w.length-1];if(t&&m.parens===t.parens+1){extglobClose(w.pop());continue}push({type:\"paren\",value:G,output:m.parens?\")\":\"\\\\)\"});decrement(\"parens\");continue}if(G===\"[\"){if(u.nobracket===true||!remaining().includes(\"]\")){if(u.nobracket!==true&&u.strictBrackets===true){throw new SyntaxError(syntaxError(\"closing\",\"]\"))}G=`\\\\${G}`}else{increment(\"brackets\")}push({type:\"bracket\",value:G});continue}if(G===\"]\"){if(u.nobracket===true||B&&B.type===\"bracket\"&&B.value.length===1){push({type:\"text\",value:G,output:`\\\\${G}`});continue}if(m.brackets===0){if(u.strictBrackets===true){throw new SyntaxError(syntaxError(\"opening\",\"[\"))}push({type:\"text\",value:G,output:`\\\\${G}`});continue}decrement(\"brackets\");const t=B.value.slice(1);if(B.posix!==true&&t[0]===\"^\"&&!t.includes(\"/\")){G=`/${G}`}B.value+=G;append({value:G});if(u.literalBrackets===false||o.hasRegexChars(t)){continue}const e=o.escapeRegex(B.value);m.output=m.output.slice(0,-B.value.length);if(u.literalBrackets===true){m.output+=e;B.value=e;continue}B.value=`(${_}${e}|${B.value})`;m.output+=B.value;continue}if(G===\"{\"&&u.nobrace!==true){increment(\"braces\");const t={type:\"brace\",value:G,output:\"(\",outputIndex:m.output.length,tokensIndex:m.tokens.length};N.push(t);push(t);continue}if(G===\"}\"){const t=N[N.length-1];if(u.nobrace===true||!t){push({type:\"text\",value:G,output:G});continue}let e=\")\";if(t.dots===true){const t=A.slice();const n=[];for(let e=t.length-1;e>=0;e--){A.pop();if(t[e].type===\"brace\"){break}if(t[e].type!==\"dots\"){n.unshift(t[e].value)}}e=expandRange(n,u);m.backtrack=true}if(t.comma!==true&&t.dots!==true){const u=m.output.slice(0,t.outputIndex);const n=m.tokens.slice(t.tokensIndex);t.value=t.output=\"\\\\{\";G=e=\"\\\\}\";m.output=u;for(const t of n){m.output+=t.output||t.value}}push({type:\"brace\",value:G,output:e});decrement(\"braces\");N.pop();continue}if(G===\"|\"){if(w.length>0){w[w.length-1].conditions++}push({type:\"text\",value:G});continue}if(G===\",\"){let t=G;const e=N[N.length-1];if(e&&I[I.length-1]===\"braces\"){e.comma=true;t=\"|\"}push({type:\"comma\",value:G,output:t});continue}if(G===\"/\"){if(B.type===\"dot\"&&m.index===m.start+1){m.start=m.index+1;m.consumed=\"\";m.output=\"\";A.pop();B=f;continue}push({type:\"slash\",value:G,output:b});continue}if(G===\".\"){if(m.braces>0&&B.type===\"dot\"){if(B.value===\".\")B.output=h;const t=N[N.length-1];B.type=\"dots\";B.output+=G;B.value+=G;t.dots=true;continue}if(m.braces+m.parens===0&&B.type!==\"bos\"&&B.type!==\"slash\"){push({type:\"text\",value:G,output:h});continue}push({type:\"dot\",value:G,output:h});continue}if(G===\"?\"){const t=B&&B.value===\"(\";if(!t&&u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){extglobOpen(\"qmark\",G);continue}if(B&&B.type===\"paren\"){const t=D();let e=G;if(B.value===\"(\"&&!/[!=<:]/.test(t)||t===\"<\"&&!/<([!=]|\\w+>)/.test(remaining())){e=`\\\\${G}`}push({type:\"text\",value:G,output:e});continue}if(u.dot!==true&&(B.type===\"slash\"||B.type===\"bos\")){push({type:\"qmark\",value:G,output:v});continue}push({type:\"qmark\",value:G,output:H});continue}if(G===\"!\"){if(u.noextglob!==true&&D()===\"(\"){if(D(2)!==\"?\"||!/[!=<:]/.test(D(3))){extglobOpen(\"negate\",G);continue}}if(u.nonegate!==true&&m.index===0){negate();continue}}if(G===\"+\"){if(u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){extglobOpen(\"plus\",G);continue}if(B&&B.value===\"(\"||u.regex===false){push({type:\"plus\",value:G,output:g});continue}if(B&&(B.type===\"bracket\"||B.type===\"paren\"||B.type===\"brace\")||m.parens>0){push({type:\"plus\",value:G});continue}push({type:\"plus\",value:g});continue}if(G===\"@\"){if(u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){push({type:\"at\",extglob:true,value:G,output:\"\"});continue}push({type:\"text\",value:G});continue}if(G!==\"*\"){if(G===\"$\"||G===\"^\"){G=`\\\\${G}`}const t=a.exec(remaining());if(t){G+=t[0];m.index+=t[0].length}push({type:\"text\",value:G});continue}if(B&&(B.type===\"globstar\"||B.star===true)){B.type=\"star\";B.star=true;B.value+=G;B.output=k;m.backtrack=true;m.globstar=true;consume(G);continue}let e=remaining();if(u.noextglob!==true&&/^\\([^?]/.test(e)){extglobOpen(\"star\",G);continue}if(B.type===\"star\"){if(u.noglobstar===true){consume(G);continue}const n=B.prev;const o=n.prev;const s=n.type===\"slash\"||n.type===\"bos\";const r=o&&(o.type===\"star\"||o.type===\"globstar\");if(u.bash===true&&(!s||e[0]&&e[0]!==\"/\")){push({type:\"star\",value:G,output:\"\"});continue}const a=m.braces>0&&(n.type===\"comma\"||n.type===\"brace\");const i=w.length&&(n.type===\"pipe\"||n.type===\"paren\");if(!s&&n.type!==\"paren\"&&!a&&!i){push({type:\"star\",value:G,output:\"\"});continue}while(e.slice(0,3)===\"/**\"){const u=t[m.index+4];if(u&&u!==\"/\"){break}e=e.slice(3);consume(\"/**\",3)}if(n.type===\"bos\"&&eos()){B.type=\"globstar\";B.value+=G;B.output=globstar(u);m.output=B.output;m.globstar=true;consume(G);continue}if(n.type===\"slash\"&&n.prev.type!==\"bos\"&&!r&&eos()){m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type=\"globstar\";B.output=globstar(u)+(u.strictSlashes?\")\":\"|$)\");B.value+=G;m.globstar=true;m.output+=n.output+B.output;consume(G);continue}if(n.type===\"slash\"&&n.prev.type!==\"bos\"&&e[0]===\"/\"){const t=e[1]!==void 0?\"|$\":\"\";m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type=\"globstar\";B.output=`${globstar(u)}${b}|${b}${t})`;B.value+=G;m.output+=n.output+B.output;m.globstar=true;consume(G+M());push({type:\"slash\",value:\"/\",output:\"\"});continue}if(n.type===\"bos\"&&e[0]===\"/\"){B.type=\"globstar\";B.value+=G;B.output=`(?:^|${b}|${globstar(u)}${b})`;m.output=B.output;m.globstar=true;consume(G+M());push({type:\"slash\",value:\"/\",output:\"\"});continue}m.output=m.output.slice(0,-B.output.length);B.type=\"globstar\";B.output=globstar(u);B.value+=G;m.output+=B.output;m.globstar=true;consume(G);continue}const n={type:\"star\",value:G,output:k};if(u.bash===true){n.output=\".*?\";if(B.type===\"bos\"||B.type===\"slash\"){n.output=T+n.output}push(n);continue}if(B&&(B.type===\"bracket\"||B.type===\"paren\")&&u.regex===true){n.output=G;push(n);continue}if(m.index===m.start||B.type===\"slash\"||B.type===\"dot\"){if(B.type===\"dot\"){m.output+=x;B.output+=x}else if(u.dot===true){m.output+=S;B.output+=S}else{m.output+=T;B.output+=T}if(D()!==\"*\"){m.output+=C;B.output+=C}}push(n)}while(m.brackets>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\"]\"));m.output=o.escapeLast(m.output,\"[\");decrement(\"brackets\")}while(m.parens>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\")\"));m.output=o.escapeLast(m.output,\"(\");decrement(\"parens\")}while(m.braces>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\"}\"));m.output=o.escapeLast(m.output,\"{\");decrement(\"braces\")}if(u.strictSlashes!==true&&(B.type===\"star\"||B.type===\"bracket\")){push({type:\"maybe_slash\",value:\"\",output:`${b}?`})}if(m.backtrack===true){m.output=\"\";for(const t of m.tokens){m.output+=t.output!=null?t.output:t.value;if(t.suffix){m.output+=t.suffix}}}return m};parse.fastpaths=(t,e)=>{const u={...e};const r=typeof u.maxLength===\"number\"?Math.min(s,u.maxLength):s;const a=t.length;if(a>r){throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${r}`)}t=c[t]||t;const{DOT_LITERAL:i,SLASH_LITERAL:p,ONE_CHAR:l,DOTS_SLASH:f,NO_DOT:A,NO_DOTS:_,NO_DOTS_SLASH:R,STAR:E,START_ANCHOR:h}=n.globChars(u.windows);const g=u.dot?_:A;const b=u.dot?R:A;const C=u.capture?\"\":\"?:\";const y={negated:false,prefix:\"\"};let $=u.bash===true?\".*?\":E;if(u.capture){$=`(${$})`}const globstar=t=>{if(t.noglobstar===true)return $;return`(${C}(?:(?!${h}${t.dot?f:i}).)*?)`};const create=t=>{switch(t){case\"*\":return`${g}${l}${$}`;case\".*\":return`${i}${l}${$}`;case\"*.*\":return`${g}${$}${i}${l}${$}`;case\"*/*\":return`${g}${$}${p}${l}${b}${$}`;case\"**\":return g+globstar(u);case\"**/*\":return`(?:${g}${globstar(u)}${p})?${b}${l}${$}`;case\"**/*.*\":return`(?:${g}${globstar(u)}${p})?${b}${$}${i}${l}${$}`;case\"**/.*\":return`(?:${g}${globstar(u)}${p})?${i}${l}${$}`;default:{const e=/^(.*?)\\.(\\w+)$/.exec(t);if(!e)return;const u=create(e[1]);if(!u)return;return u+i+e[2]}}};const x=o.removePrefix(t,y);let S=create(x);if(S&&u.strictSlashes!==true){S+=`${p}?`}return S};t.exports=parse},510:(t,e,u)=>{const n=u(716);const o=u(697);const s=u(96);const r=u(154);const isObject=t=>t&&typeof t===\"object\"&&!Array.isArray(t);const picomatch=(t,e,u=false)=>{if(Array.isArray(t)){const n=t.map((t=>picomatch(t,e,u)));const arrayMatcher=t=>{for(const e of n){const u=e(t);if(u)return u}return false};return arrayMatcher}const n=isObject(t)&&t.tokens&&t.input;if(t===\"\"||typeof t!==\"string\"&&!n){throw new TypeError(\"Expected pattern to be a non-empty string\")}const o=e||{};const s=o.windows;const r=n?picomatch.compileRe(t,e):picomatch.makeRe(t,e,false,true);const a=r.state;delete r.state;let isIgnored=()=>false;if(o.ignore){const t={...e,ignore:null,onMatch:null,onResult:null};isIgnored=picomatch(o.ignore,t,u)}const matcher=(u,n=false)=>{const{isMatch:i,match:c,output:p}=picomatch.test(u,r,e,{glob:t,posix:s});const l={glob:t,state:a,regex:r,posix:s,input:u,output:p,match:c,isMatch:i};if(typeof o.onResult===\"function\"){o.onResult(l)}if(i===false){l.isMatch=false;return n?l:false}if(isIgnored(u)){if(typeof o.onIgnore===\"function\"){o.onIgnore(l)}l.isMatch=false;return n?l:false}if(typeof o.onMatch===\"function\"){o.onMatch(l)}return n?l:true};if(u){matcher.state=a}return matcher};picomatch.test=(t,e,u,{glob:n,posix:o}={})=>{if(typeof t!==\"string\"){throw new TypeError(\"Expected input to be a string\")}if(t===\"\"){return{isMatch:false,output:\"\"}}const r=u||{};const a=r.format||(o?s.toPosixSlashes:null);let i=t===n;let c=i&&a?a(t):t;if(i===false){c=a?a(t):t;i=c===n}if(i===false||r.capture===true){if(r.matchBase===true||r.basename===true){i=picomatch.matchBase(t,e,u,o)}else{i=e.exec(c)}}return{isMatch:Boolean(i),match:i,output:c}};picomatch.matchBase=(t,e,u)=>{const n=e instanceof RegExp?e:picomatch.makeRe(e,u);return n.test(s.basename(t))};picomatch.isMatch=(t,e,u)=>picomatch(e,u)(t);picomatch.parse=(t,e)=>{if(Array.isArray(t))return t.map((t=>picomatch.parse(t,e)));return o(t,{...e,fastpaths:false})};picomatch.scan=(t,e)=>n(t,e);picomatch.compileRe=(t,e,u=false,n=false)=>{if(u===true){return t.output}const o=e||{};const s=o.contains?\"\":\"^\";const r=o.contains?\"\":\"$\";let a=`${s}(?:${t.output})${r}`;if(t&&t.negated===true){a=`^(?!${a}).*$`}const i=picomatch.toRegex(a,e);if(n===true){i.state=t}return i};picomatch.makeRe=(t,e={},u=false,n=false)=>{if(!t||typeof t!==\"string\"){throw new TypeError(\"Expected a non-empty string\")}let s={negated:false,fastpaths:true};if(e.fastpaths!==false&&(t[0]===\".\"||t[0]===\"*\")){s.output=o.fastpaths(t,e)}if(!s.output){s=o(t,e)}return picomatch.compileRe(s,e,u,n)};picomatch.toRegex=(t,e)=>{try{const u=e||{};return new RegExp(t,u.flags||(u.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===true)throw t;return/$^/}};picomatch.constants=r;t.exports=picomatch},716:(t,e,u)=>{const n=u(96);const{CHAR_ASTERISK:o,CHAR_AT:s,CHAR_BACKWARD_SLASH:r,CHAR_COMMA:a,CHAR_DOT:i,CHAR_EXCLAMATION_MARK:c,CHAR_FORWARD_SLASH:p,CHAR_LEFT_CURLY_BRACE:l,CHAR_LEFT_PARENTHESES:f,CHAR_LEFT_SQUARE_BRACKET:A,CHAR_PLUS:_,CHAR_QUESTION_MARK:R,CHAR_RIGHT_CURLY_BRACE:E,CHAR_RIGHT_PARENTHESES:h,CHAR_RIGHT_SQUARE_BRACKET:g}=u(154);const isPathSeparator=t=>t===p||t===r;const depth=t=>{if(t.isPrefix!==true){t.depth=t.isGlobstar?Infinity:1}};const scan=(t,e)=>{const u=e||{};const b=t.length-1;const C=u.parts===true||u.scanToEnd===true;const y=[];const $=[];const x=[];let S=t;let H=-1;let v=0;let d=0;let L=false;let T=false;let O=false;let k=false;let m=false;let w=false;let N=false;let I=false;let B=false;let G=false;let D=0;let M;let P;let K={value:\"\",depth:0,isGlob:false};const eos=()=>H>=b;const peek=()=>S.charCodeAt(H+1);const advance=()=>{M=P;return S.charCodeAt(++H)};while(H<b){P=advance();let t;if(P===r){N=K.backslashes=true;P=advance();if(P===l){w=true}continue}if(w===true||P===l){D++;while(eos()!==true&&(P=advance())){if(P===r){N=K.backslashes=true;advance();continue}if(P===l){D++;continue}if(w!==true&&P===i&&(P=advance())===i){L=K.isBrace=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(w!==true&&P===a){L=K.isBrace=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===E){D--;if(D===0){w=false;L=K.isBrace=true;G=true;break}}}if(C===true){continue}break}if(P===p){y.push(H);$.push(K);K={value:\"\",depth:0,isGlob:false};if(G===true)continue;if(M===i&&H===v+1){v+=2;continue}d=H+1;continue}if(u.noext!==true){const t=P===_||P===s||P===o||P===R||P===c;if(t===true&&peek()===f){O=K.isGlob=true;k=K.isExtglob=true;G=true;if(P===c&&H===v){B=true}if(C===true){while(eos()!==true&&(P=advance())){if(P===r){N=K.backslashes=true;P=advance();continue}if(P===h){O=K.isGlob=true;G=true;break}}continue}break}}if(P===o){if(M===o)m=K.isGlobstar=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===R){O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===A){while(eos()!==true&&(t=advance())){if(t===r){N=K.backslashes=true;advance();continue}if(t===g){T=K.isBracket=true;O=K.isGlob=true;G=true;break}}if(C===true){continue}break}if(u.nonegate!==true&&P===c&&H===v){I=K.negated=true;v++;continue}if(u.noparen!==true&&P===f){O=K.isGlob=true;if(C===true){while(eos()!==true&&(P=advance())){if(P===f){N=K.backslashes=true;P=advance();continue}if(P===h){G=true;break}}continue}break}if(O===true){G=true;if(C===true){continue}break}}if(u.noext===true){k=false;O=false}let U=S;let X=\"\";let F=\"\";if(v>0){X=S.slice(0,v);S=S.slice(v);d-=v}if(U&&O===true&&d>0){U=S.slice(0,d);F=S.slice(d)}else if(O===true){U=\"\";F=S}else{U=S}if(U&&U!==\"\"&&U!==\"/\"&&U!==S){if(isPathSeparator(U.charCodeAt(U.length-1))){U=U.slice(0,-1)}}if(u.unescape===true){if(F)F=n.removeBackslashes(F);if(U&&N===true){U=n.removeBackslashes(U)}}const Q={prefix:X,input:t,start:v,base:U,glob:F,isBrace:L,isBracket:T,isGlob:O,isExtglob:k,isGlobstar:m,negated:I,negatedExtglob:B};if(u.tokens===true){Q.maxDepth=0;if(!isPathSeparator(P)){$.push(K)}Q.tokens=$}if(u.parts===true||u.tokens===true){let e;for(let n=0;n<y.length;n++){const o=e?e+1:v;const s=y[n];const r=t.slice(o,s);if(u.tokens){if(n===0&&v!==0){$[n].isPrefix=true;$[n].value=X}else{$[n].value=r}depth($[n]);Q.maxDepth+=$[n].depth}if(n!==0||r!==\"\"){x.push(r)}e=s}if(e&&e+1<t.length){const n=t.slice(e+1);x.push(n);if(u.tokens){$[$.length-1].value=n;depth($[$.length-1]);Q.maxDepth+=$[$.length-1].depth}}Q.slashes=y;Q.parts=x}return Q};t.exports=scan},96:(t,e,u)=>{const{REGEX_BACKSLASH:n,REGEX_REMOVE_BACKSLASH:o,REGEX_SPECIAL_CHARS:s,REGEX_SPECIAL_CHARS_GLOBAL:r}=u(154);e.isObject=t=>t!==null&&typeof t===\"object\"&&!Array.isArray(t);e.hasRegexChars=t=>s.test(t);e.isRegexChar=t=>t.length===1&&e.hasRegexChars(t);e.escapeRegex=t=>t.replace(r,\"\\\\$1\");e.toPosixSlashes=t=>t.replace(n,\"/\");e.removeBackslashes=t=>t.replace(o,(t=>t===\"\\\\\"?\"\":t));e.escapeLast=(t,u,n)=>{const o=t.lastIndexOf(u,n);if(o===-1)return t;if(t[o-1]===\"\\\\\")return e.escapeLast(t,u,o-1);return`${t.slice(0,o)}\\\\${t.slice(o)}`};e.removePrefix=(t,e={})=>{let u=t;if(u.startsWith(\"./\")){u=u.slice(2);e.prefix=\"./\"}return u};e.wrapOutput=(t,e={},u={})=>{const n=u.contains?\"\":\"^\";const o=u.contains?\"\":\"$\";let s=`${n}(?:${t})${o}`;if(e.negated===true){s=`(?:^(?!${s}).*$)`}return s};e.basename=(t,{windows:e}={})=>{const u=t.split(e?/[\\\\/]/:\"/\");const n=u[u.length-1];if(n===\"\"){return u[u.length-2]}return n}}};var e={};function __nccwpck_require__(u){var n=e[u];if(n!==undefined){return n.exports}var o=e[u]={exports:{}};var s=true;try{t[u](o,o.exports,__nccwpck_require__);s=false}finally{if(s)delete e[u]}return o.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var u=__nccwpck_require__(170);module.exports=u})();","import type { LocalPattern } from './image-config'\nimport { makeRe } from 'next/dist/compiled/picomatch'\n\n// Modifying this function should also modify writeImagesManifest()\nexport function matchLocalPattern(pattern: LocalPattern, url: URL): boolean {\n if (pattern.search !== undefined) {\n if (pattern.search !== url.search) {\n return false\n }\n }\n\n if (!makeRe(pattern.pathname ?? '**', { dot: true }).test(url.pathname)) {\n return false\n }\n\n return true\n}\n\nexport function hasLocalMatch(\n localPatterns: LocalPattern[] | undefined,\n urlPathAndQuery: string\n): boolean {\n if (!localPatterns) {\n // if the user didn't define \"localPatterns\", we allow all local images\n return true\n }\n const url = new URL(urlPathAndQuery, 'http://n')\n return localPatterns.some((p) => matchLocalPattern(p, url))\n}\n","import type { RemotePattern } from './image-config'\nimport { makeRe } from 'next/dist/compiled/picomatch'\n\n// Modifying this function should also modify writeImagesManifest()\nexport function matchRemotePattern(\n pattern: RemotePattern | URL,\n url: URL\n): boolean {\n if (pattern.protocol !== undefined) {\n if (pattern.protocol.replace(/:$/, '') !== url.protocol.replace(/:$/, '')) {\n return false\n }\n }\n if (pattern.port !== undefined) {\n if (pattern.port !== url.port) {\n return false\n }\n }\n\n if (pattern.hostname === undefined) {\n throw new Error(\n `Pattern should define hostname but found\\n${JSON.stringify(pattern)}`\n )\n } else {\n if (!makeRe(pattern.hostname).test(url.hostname)) {\n return false\n }\n }\n\n if (pattern.search !== undefined) {\n if (pattern.search !== url.search) {\n return false\n }\n }\n\n // Should be the same as writeImagesManifest()\n if (!makeRe(pattern.pathname ?? '**', { dot: true }).test(url.pathname)) {\n return false\n }\n\n return true\n}\n\nexport function hasRemoteMatch(\n domains: string[],\n remotePatterns: Array<RemotePattern | URL>,\n url: URL\n): boolean {\n return (\n domains.some((domain) => url.hostname === domain) ||\n remotePatterns.some((p) => matchRemotePattern(p, url))\n )\n}\n","import type { ImageLoaderPropsWithConfig } from './image-config'\n\nconst DEFAULT_Q = 75\n\nfunction defaultLoader({\n config,\n src,\n width,\n quality,\n}: ImageLoaderPropsWithConfig): string {\n if (process.env.NODE_ENV !== 'production') {\n const missingValues = []\n\n // these should always be provided but make sure they are\n if (!src) missingValues.push('src')\n if (!width) missingValues.push('width')\n\n if (missingValues.length > 0) {\n throw new Error(\n `Next Image Optimization requires ${missingValues.join(\n ', '\n )} to be provided. Make sure you pass them as props to the \\`next/image\\` component. Received: ${JSON.stringify(\n { src, width, quality }\n )}`\n )\n }\n\n if (src.startsWith('//')) {\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)`\n )\n }\n\n if (src.startsWith('/') && config.localPatterns) {\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasLocalMatch } =\n require('./match-local-pattern') as typeof import('./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 } =\n require('./match-remote-pattern') as typeof import('./match-remote-pattern')\n if (\n !hasRemoteMatch(config.domains!, config.remotePatterns!, parsedSrc)\n ) {\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 { useCallback, useRef, type Ref } from 'react'\n\n// This is a compatibility hook to support React 18 and 19 refs.\n// In 19, a cleanup function from refs may be returned.\n// In 18, returning a cleanup function creates a warning.\n// Since we take userspace refs, we don't know ahead of time if a cleanup function will be returned.\n// This implements cleanup functions with the old behavior in 18.\n// We know refs are always called alternating with `null` and then `T`.\n// So a call with `null` means we need to call the previous cleanup functions.\nexport function useMergedRef<TElement>(\n refA: Ref<TElement>,\n refB: Ref<TElement>\n): Ref<TElement> {\n const cleanupA = useRef<(() => void) | null>(null)\n const cleanupB = useRef<(() => void) | null>(null)\n\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (e.g. via `<Link legacyBehavior>`),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return useCallback(\n (current: TElement | null): void => {\n if (current === null) {\n const cleanupFnA = cleanupA.current\n if (cleanupFnA) {\n cleanupA.current = null\n cleanupFnA()\n }\n const cleanupFnB = cleanupB.current\n if (cleanupFnB) {\n cleanupB.current = null\n cleanupFnB()\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current)\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current)\n }\n }\n },\n [refA, refB]\n )\n}\n\nfunction applyRef<TElement>(\n refA: NonNullable<Ref<TElement>>,\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","'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// 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<OnLoad | undefined>\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>\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<OnLoad | undefined>,\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>,\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<string, string | undefined> {\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<HTMLImageElement | null, ImageElementProps>(\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 <img\n {...rest}\n {...getDynamicProps(fetchPriority)}\n // It's intended to keep `loading` before `src` because React updates\n // props in order which causes Safari/Firefox to not lazy load properly.\n // See https://github.com/facebook/react/issues/25883\n loading={loading}\n width={width}\n height={height}\n decoding={decoding}\n data-nimg={fill ? 'fill' : '1'}\n className={className}\n style={style}\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 sizes={sizes}\n srcSet={srcSet}\n src={src}\n ref={ref}\n onLoad={(event) => {\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: ReactDOM.PreloadOptions = {\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 ReactDOM.preload(imgAttributes.src, opts)\n return null\n }\n\n return (\n <Head>\n <link\n key={\n '__nimg-' +\n imgAttributes.src +\n imgAttributes.srcSet +\n imgAttributes.sizes\n }\n rel=\"preload\"\n // Note how we omit the `href` attribute, as it would only be relevant\n // for browsers that do not support `imagesrcset`, and in those cases\n // it would cause the incorrect image to be preloaded.\n //\n // https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset\n href={imgAttributes.srcSet ? undefined : imgAttributes.src}\n {...opts}\n />\n </Head>\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<HTMLImageElement | null, ImageProps>(\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 <ImageElement\n {...imgAttributes}\n unoptimized={imgMeta.unoptimized}\n placeholder={imgMeta.placeholder}\n fill={imgMeta.fill}\n onLoadRef={onLoadRef}\n onLoadingCompleteRef={onLoadingCompleteRef}\n setBlurComplete={setBlurComplete}\n setShowAltText={setShowAltText}\n sizesInput={props.sizes}\n ref={forwardedRef}\n />\n }\n {imgMeta.priority ? (\n <ImagePreload\n isAppRouter={isAppRouter}\n imgAttributes={imgAttributes}\n />\n ) : null}\n </>\n )\n }\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// 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","module.exports = require('./dist/shared/lib/image-external')\n","import type { ParsedUrlQuery } from 'querystring'\n\nexport function searchParamsToUrlQuery(\n searchParams: URLSearchParams\n): ParsedUrlQuery {\n const query: ParsedUrlQuery = {}\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key]\n if (typeof existing === 'undefined') {\n query[key] = value\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n query[key] = [existing, value]\n }\n }\n return query\n}\n\nfunction stringifyUrlQueryParam(param: unknown): string {\n if (typeof param === 'string') {\n return param\n }\n\n if (\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(query: ParsedUrlQuery): URLSearchParams {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, stringifyUrlQueryParam(item))\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value))\n }\n }\n return searchParams\n}\n\nexport function assign(\n target: URLSearchParams,\n ...searchParamsList: URLSearchParams[]\n): URLSearchParams {\n for (const searchParams of searchParamsList) {\n for (const key of searchParams.keys()) {\n target.delete(key)\n }\n\n for (const [key, value] of searchParams.entries()) {\n target.append(key, value)\n }\n }\n\n return target\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","export function omit<T extends { [key: string]: unknown }, K extends keyof T>(\n object: T,\n keys: K[]\n): Omit<T, K> {\n const omitted: { [key: string]: unknown } = {}\n Object.keys(object).forEach((key) => {\n if (!keys.includes(key as K)) {\n omitted[key] = object[key]\n }\n })\n return omitted as Omit<T, K>\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?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly 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?: readonly 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","/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */\nexport function removeTrailingSlash(route: string) {\n return route.replace(/\\/$/, '') || '/'\n}\n","/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n","import { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { parsePath } from '../shared/lib/router/utils/parse-path'\n\n/**\n * Normalizes the trailing slash of a path according to the `trailingSlash` option\n * in `next.config.js`.\n */\nexport const normalizePathTrailingSlash = (path: string) => {\n if (!path.startsWith('/') || process.env.__NEXT_MANUAL_TRAILING_SLASH) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n if (process.env.__NEXT_TRAILING_SLASH) {\n if (/\\.[^/]+\\/?$/.test(pathname)) {\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n } else if (pathname.endsWith('/')) {\n return `${pathname}${query}${hash}`\n } else {\n return `${pathname}/${query}${hash}`\n }\n }\n\n return `${removeTrailingSlash(pathname)}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n","import { pathHasPrefix } from '../shared/lib/router/utils/path-has-prefix'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function hasBasePath(path: string): boolean {\n return pathHasPrefix(path, basePath)\n}\n","import { isAbsoluteUrl, getLocationOrigin } from '../../utils'\nimport { hasBasePath } from '../../../../client/has-base-path'\n\n/**\n * Detects whether a given url is routable by the Next.js router (browser only).\n */\nexport function isLocalURL(url: string): boolean {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!isAbsoluteUrl(url)) return true\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = getLocationOrigin()\n const resolved = new URL(url, locationOrigin)\n return resolved.origin === locationOrigin && hasBasePath(resolved.pathname)\n } catch (_) {\n return false\n }\n}\n","class UrlNode {\n placeholder: boolean = true\n children: Map<string, UrlNode> = new Map()\n slugName: string | null = null\n restSlugName: string | null = null\n optionalRestSlugName: string | null = null\n\n insert(urlPath: string): void {\n this._insert(urlPath.split('/').filter(Boolean), [], false)\n }\n\n smoosh(): string[] {\n return this._smoosh()\n }\n\n private _smoosh(prefix: string = '/'): string[] {\n const childrenPaths = [...this.children.keys()].sort()\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[]'), 1)\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[...]'), 1)\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1)\n }\n\n const routes = childrenPaths\n .map((c) => this.children.get(c)!._smoosh(`${prefix}${c}/`))\n .reduce((prev, curr) => [...prev, ...curr], [])\n\n if (this.slugName !== null) {\n routes.push(\n ...this.children.get('[]')!._smoosh(`${prefix}[${this.slugName}]/`)\n )\n }\n\n if (!this.placeholder) {\n const r = prefix === '/' ? '/' : prefix.slice(0, -1)\n if (this.optionalRestSlugName != null) {\n throw new Error(\n `You cannot define a route with the same specificity as a optional catch-all route (\"${r}\" and \"${r}[[...${this.optionalRestSlugName}]]\").`\n )\n }\n\n routes.unshift(r)\n }\n\n if (this.restSlugName !== null) {\n routes.push(\n ...this.children\n .get('[...]')!\n ._smoosh(`${prefix}[...${this.restSlugName}]/`)\n )\n }\n\n if (this.optionalRestSlugName !== null) {\n routes.push(\n ...this.children\n .get('[[...]]')!\n ._smoosh(`${prefix}[[...${this.optionalRestSlugName}]]/`)\n )\n }\n\n return routes\n }\n\n private _insert(\n urlPaths: string[],\n slugNames: string[],\n isCatchAll: boolean\n ): void {\n if (urlPaths.length === 0) {\n this.placeholder = false\n return\n }\n\n if (isCatchAll) {\n throw new Error(`Catch-all must be the last part of the URL.`)\n }\n\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0]\n\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1)\n\n let isOptional = false\n if (segmentName.startsWith('[') && segmentName.endsWith(']')) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1)\n isOptional = true\n }\n\n if (segmentName.startsWith('…')) {\n throw new Error(\n `Detected a three-dot character ('…') at ('${segmentName}'). Did you mean ('...')?`\n )\n }\n\n if (segmentName.startsWith('...')) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3)\n isCatchAll = true\n }\n\n if (segmentName.startsWith('[') || segmentName.endsWith(']')) {\n throw new Error(\n `Segment names may not start or end with extra brackets ('${segmentName}').`\n )\n }\n\n if (segmentName.startsWith('.')) {\n throw new Error(\n `Segment names may not start with erroneous periods ('${segmentName}').`\n )\n }\n\n function handleSlug(previousSlug: string | null, nextSlug: string) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\n `You cannot use different slug names for the same dynamic path ('${previousSlug}' !== '${nextSlug}').`\n )\n }\n }\n\n slugNames.forEach((slug) => {\n if (slug === nextSlug) {\n throw new Error(\n `You cannot have the same slug name \"${nextSlug}\" repeat within a single dynamic path`\n )\n }\n\n if (slug.replace(/\\W/g, '') === nextSegment.replace(/\\W/g, '')) {\n throw new Error(\n `You cannot have the slug names \"${slug}\" and \"${nextSlug}\" differ only by non-word symbols within a single dynamic path`\n )\n }\n })\n\n slugNames.push(nextSlug)\n }\n\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error(\n `You cannot use both an required and optional catch-all route at the same level (\"[...${this.restSlugName}]\" and \"${urlPaths[0]}\" ).`\n )\n }\n\n handleSlug(this.optionalRestSlugName, segmentName)\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = '[[...]]'\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error(\n `You cannot use both an optional and required catch-all route at the same level (\"[[...${this.optionalRestSlugName}]]\" and \"${urlPaths[0]}\").`\n )\n }\n\n handleSlug(this.restSlugName, segmentName)\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = '[...]'\n }\n } else {\n if (isOptional) {\n throw new Error(\n `Optional route parameters are not yet supported (\"${urlPaths[0]}\").`\n )\n }\n handleSlug(this.slugName, segmentName)\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = '[]'\n }\n }\n\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode())\n }\n\n this.children\n .get(nextSegment)!\n ._insert(urlPaths.slice(1), slugNames, isCatchAll)\n }\n}\n\n/**\n * @deprecated Use `sortSortableRoutes` or `sortPages` instead.\n */\nexport function getSortedRoutes(\n normalizedPages: ReadonlyArray<string>\n): string[] {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode()\n\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath) => root.insert(pagePath))\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh()\n}\n\n/**\n * @deprecated Use `sortSortableRouteObjects` or `sortPageObjects` instead.\n */\nexport function getSortedRouteObjects<T>(\n objects: T[],\n getter: (obj: T) => string\n): T[] {\n // We're assuming here that all the pathnames are unique, that way we can\n // sort the list and use the index as the key.\n const indexes: Record<string, number> = {}\n const pathnames: string[] = []\n for (let i = 0; i < objects.length; i++) {\n const pathname = getter(objects[i])\n indexes[pathname] = i\n pathnames[i] = pathname\n }\n\n // Sort the pathnames.\n const sorted = getSortedRoutes(pathnames)\n\n // Map the sorted pathnames back to the original objects using the new sorted\n // index.\n return sorted.map((pathname) => objects[indexes[pathname]])\n}\n","/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n","import type { Segment } from '../../server/app-render/types'\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\n","import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n","import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\nexport function extractInterceptionRouteInformation(path: string) {\n let interceptingRoute: string | undefined,\n marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined,\n interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n","import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n","export { getSortedRoutes, getSortedRouteObjects } from './sorted-routes'\nexport { isDynamicRoute } from './is-dynamic'\n","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var n=e;Object.defineProperty(n,\"__esModule\",{value:true});n.pathToRegexp=n.tokensToRegexp=n.regexpToFunction=n.match=n.tokensToFunction=n.compile=n.parse=void 0;function lexer(e){var n=[];var r=0;while(r<e.length){var t=e[r];if(t===\"*\"||t===\"+\"||t===\"?\"){n.push({type:\"MODIFIER\",index:r,value:e[r++]});continue}if(t===\"\\\\\"){n.push({type:\"ESCAPED_CHAR\",index:r++,value:e[r++]});continue}if(t===\"{\"){n.push({type:\"OPEN\",index:r,value:e[r++]});continue}if(t===\"}\"){n.push({type:\"CLOSE\",index:r,value:e[r++]});continue}if(t===\":\"){var a=\"\";var i=r+1;while(i<e.length){var o=e.charCodeAt(i);if(o>=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){a+=e[i++];continue}break}if(!a)throw new TypeError(\"Missing parameter name at \".concat(r));n.push({type:\"NAME\",index:r,value:a});r=i;continue}if(t===\"(\"){var c=1;var f=\"\";var i=r+1;if(e[i]===\"?\"){throw new TypeError('Pattern cannot start with \"?\" at '.concat(i))}while(i<e.length){if(e[i]===\"\\\\\"){f+=e[i++]+e[i++];continue}if(e[i]===\")\"){c--;if(c===0){i++;break}}else if(e[i]===\"(\"){c++;if(e[i+1]!==\"?\"){throw new TypeError(\"Capturing groups are not allowed at \".concat(i))}}f+=e[i++]}if(c)throw new TypeError(\"Unbalanced pattern at \".concat(r));if(!f)throw new TypeError(\"Missing pattern at \".concat(r));n.push({type:\"PATTERN\",index:r,value:f});r=i;continue}n.push({type:\"CHAR\",index:r,value:e[r++]})}n.push({type:\"END\",index:r,value:\"\"});return n}function parse(e,n){if(n===void 0){n={}}var r=lexer(e);var t=n.prefixes,a=t===void 0?\"./\":t,i=n.delimiter,o=i===void 0?\"/#?\":i;var c=[];var f=0;var u=0;var p=\"\";var tryConsume=function(e){if(u<r.length&&r[u].type===e)return r[u++].value};var mustConsume=function(e){var n=tryConsume(e);if(n!==undefined)return n;var t=r[u],a=t.type,i=t.index;throw new TypeError(\"Unexpected \".concat(a,\" at \").concat(i,\", expected \").concat(e))};var consumeText=function(){var e=\"\";var n;while(n=tryConsume(\"CHAR\")||tryConsume(\"ESCAPED_CHAR\")){e+=n}return e};var isSafe=function(e){for(var n=0,r=o;n<r.length;n++){var t=r[n];if(e.indexOf(t)>-1)return true}return false};var safePattern=function(e){var n=c[c.length-1];var r=e||(n&&typeof n===\"string\"?n:\"\");if(n&&!r){throw new TypeError('Must have text between two parameters, missing text after \"'.concat(n.name,'\"'))}if(!r||isSafe(r))return\"[^\".concat(escapeString(o),\"]+?\");return\"(?:(?!\".concat(escapeString(r),\")[^\").concat(escapeString(o),\"])+?\")};while(u<r.length){var v=tryConsume(\"CHAR\");var s=tryConsume(\"NAME\");var d=tryConsume(\"PATTERN\");if(s||d){var g=v||\"\";if(a.indexOf(g)===-1){p+=g;g=\"\"}if(p){c.push(p);p=\"\"}c.push({name:s||f++,prefix:g,suffix:\"\",pattern:d||safePattern(g),modifier:tryConsume(\"MODIFIER\")||\"\"});continue}var x=v||tryConsume(\"ESCAPED_CHAR\");if(x){p+=x;continue}if(p){c.push(p);p=\"\"}var h=tryConsume(\"OPEN\");if(h){var g=consumeText();var l=tryConsume(\"NAME\")||\"\";var m=tryConsume(\"PATTERN\")||\"\";var T=consumeText();mustConsume(\"CLOSE\");c.push({name:l||(m?f++:\"\"),pattern:l&&!m?safePattern(g):m,prefix:g,suffix:T,modifier:tryConsume(\"MODIFIER\")||\"\"});continue}mustConsume(\"END\")}return c}n.parse=parse;function compile(e,n){return tokensToFunction(parse(e,n),n)}n.compile=compile;function tokensToFunction(e,n){if(n===void 0){n={}}var r=flags(n);var t=n.encode,a=t===void 0?function(e){return e}:t,i=n.validate,o=i===void 0?true:i;var c=e.map((function(e){if(typeof e===\"object\"){return new RegExp(\"^(?:\".concat(e.pattern,\")$\"),r)}}));return function(n){var r=\"\";for(var t=0;t<e.length;t++){var i=e[t];if(typeof i===\"string\"){r+=i;continue}var f=n?n[i.name]:undefined;var u=i.modifier===\"?\"||i.modifier===\"*\";var p=i.modifier===\"*\"||i.modifier===\"+\";if(Array.isArray(f)){if(!p){throw new TypeError('Expected \"'.concat(i.name,'\" to not repeat, but got an array'))}if(f.length===0){if(u)continue;throw new TypeError('Expected \"'.concat(i.name,'\" to not be empty'))}for(var v=0;v<f.length;v++){var s=a(f[v],i);if(o&&!c[t].test(s)){throw new TypeError('Expected all \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix}continue}if(typeof f===\"string\"||typeof f===\"number\"){var s=a(String(f),i);if(o&&!c[t].test(s)){throw new TypeError('Expected \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix;continue}if(u)continue;var d=p?\"an array\":\"a string\";throw new TypeError('Expected \"'.concat(i.name,'\" to be ').concat(d))}return r}}n.tokensToFunction=tokensToFunction;function match(e,n){var r=[];var t=pathToRegexp(e,r,n);return regexpToFunction(t,r,n)}n.match=match;function regexpToFunction(e,n,r){if(r===void 0){r={}}var t=r.decode,a=t===void 0?function(e){return e}:t;return function(r){var t=e.exec(r);if(!t)return false;var i=t[0],o=t.index;var c=Object.create(null);var _loop_1=function(e){if(t[e]===undefined)return\"continue\";var r=n[e-1];if(r.modifier===\"*\"||r.modifier===\"+\"){c[r.name]=t[e].split(r.prefix+r.suffix).map((function(e){return a(e,r)}))}else{c[r.name]=a(t[e],r)}};for(var f=1;f<t.length;f++){_loop_1(f)}return{path:i,index:o,params:c}}}n.regexpToFunction=regexpToFunction;function escapeString(e){return e.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g,\"\\\\$1\")}function flags(e){return e&&e.sensitive?\"\":\"i\"}function regexpToRegexp(e,n){if(!n)return e;var r=/\\((?:\\?<(.*?)>)?(?!\\?)/g;var t=0;var a=r.exec(e.source);while(a){n.push({name:a[1]||t++,prefix:\"\",suffix:\"\",modifier:\"\",pattern:\"\"});a=r.exec(e.source)}return e}function arrayToRegexp(e,n,r){var t=e.map((function(e){return pathToRegexp(e,n,r).source}));return new RegExp(\"(?:\".concat(t.join(\"|\"),\")\"),flags(r))}function stringToRegexp(e,n,r){return tokensToRegexp(parse(e,r),n,r)}function tokensToRegexp(e,n,r){if(r===void 0){r={}}var t=r.strict,a=t===void 0?false:t,i=r.start,o=i===void 0?true:i,c=r.end,f=c===void 0?true:c,u=r.encode,p=u===void 0?function(e){return e}:u,v=r.delimiter,s=v===void 0?\"/#?\":v,d=r.endsWith,g=d===void 0?\"\":d;var x=\"[\".concat(escapeString(g),\"]|$\");var h=\"[\".concat(escapeString(s),\"]\");var l=o?\"^\":\"\";for(var m=0,T=e;m<T.length;m++){var E=T[m];if(typeof E===\"string\"){l+=escapeString(p(E))}else{var w=escapeString(p(E.prefix));var y=escapeString(p(E.suffix));if(E.pattern){if(n)n.push(E);if(w||y){if(E.modifier===\"+\"||E.modifier===\"*\"){var R=E.modifier===\"*\"?\"?\":\"\";l+=\"(?:\".concat(w,\"((?:\").concat(E.pattern,\")(?:\").concat(y).concat(w,\"(?:\").concat(E.pattern,\"))*)\").concat(y,\")\").concat(R)}else{l+=\"(?:\".concat(w,\"(\").concat(E.pattern,\")\").concat(y,\")\").concat(E.modifier)}}else{if(E.modifier===\"+\"||E.modifier===\"*\"){throw new TypeError('Can not repeat \"'.concat(E.name,'\" without a prefix and suffix'))}l+=\"(\".concat(E.pattern,\")\").concat(E.modifier)}}else{l+=\"(?:\".concat(w).concat(y,\")\").concat(E.modifier)}}}if(f){if(!a)l+=\"\".concat(h,\"?\");l+=!r.endsWith?\"$\":\"(?=\".concat(x,\")\")}else{var A=e[e.length-1];var _=typeof A===\"string\"?h.indexOf(A[A.length-1])>-1:A===undefined;if(!a){l+=\"(?:\".concat(h,\"(?=\").concat(x,\"))?\")}if(!_){l+=\"(?=\".concat(h,\"|\").concat(x,\")\")}}return new RegExp(l,flags(r))}n.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,n,r){if(e instanceof RegExp)return regexpToRegexp(e,n);if(Array.isArray(e))return arrayToRegexp(e,n,r);return stringToRegexp(e,n,r)}n.pathToRegexp=pathToRegexp})();module.exports=e})();","import type { Token } from 'next/dist/compiled/path-to-regexp'\n\n/**\n * Route pattern normalization utilities for path-to-regexp compatibility.\n *\n * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain\n * patterns commonly used in Next.js interception routes. This module provides\n * normalization functions to make Next.js route patterns compatible with the\n * updated library while preserving all functionality.\n */\n\n/**\n * Internal separator used to normalize adjacent parameter patterns.\n * This unique marker is inserted between adjacent parameters and stripped out\n * during parameter extraction to avoid conflicts with real URL content.\n */\nconst PARAM_SEPARATOR = '_NEXTSEP_'\n\n/**\n * Detects if a route pattern needs normalization for path-to-regexp compatibility.\n */\nexport function hasAdjacentParameterIssues(route: string): boolean {\n if (typeof route !== 'string') return false\n\n // Check for interception route markers followed immediately by parameters\n // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc.\n // These patterns cause \"Must have text between two parameters\" errors\n if (/\\/\\(\\.{1,3}\\):[^/\\s]+/.test(route)) {\n return true\n }\n\n // Check for basic adjacent parameters without separators\n // Pattern: :param1:param2 (but not :param* or other URL patterns)\n if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) {\n return true\n }\n\n return false\n}\n\n/**\n * Normalizes route patterns that have adjacent parameters without text between them.\n * Inserts a unique separator that can be safely stripped out later.\n */\nexport function normalizeAdjacentParameters(route: string): string {\n let normalized = route\n\n // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param\n normalized = normalized.replace(\n /(\\([^)]*\\)):([^/\\s]+)/g,\n `$1${PARAM_SEPARATOR}:$2`\n )\n\n // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2\n normalized = normalized.replace(/:([^:/\\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`)\n\n return normalized\n}\n\n/**\n * Normalizes tokens that have repeating modifiers (* or +) but empty prefix and suffix.\n *\n * path-to-regexp 6.3.0+ introduced validation that throws:\n * \"Can not repeat without prefix/suffix\"\n *\n * This occurs when a token has modifier: '*' or '+' with both prefix: '' and suffix: ''\n */\nexport function normalizeTokensForRegexp(tokens: Token[]): Token[] {\n return tokens.map((token) => {\n // Token union type: Token = string | TokenObject\n // Literal path segments are strings, parameters/wildcards are objects\n if (\n typeof token === 'object' &&\n token !== null &&\n // Not all token objects have 'modifier' property (e.g., simple text tokens)\n 'modifier' in token &&\n // Only repeating modifiers (* or +) cause the validation error\n // Other modifiers like '?' (optional) are fine\n (token.modifier === '*' || token.modifier === '+') &&\n // Token objects can have different shapes depending on route pattern\n 'prefix' in token &&\n 'suffix' in token &&\n // Both prefix and suffix must be empty strings\n // This is what causes the validation error in path-to-regexp\n token.prefix === '' &&\n token.suffix === ''\n ) {\n // Add minimal prefix to satisfy path-to-regexp validation\n // We use '/' as it's the most common path delimiter and won't break route matching\n // The prefix gets used in regex generation but doesn't affect parameter extraction\n return {\n ...token,\n prefix: '/',\n }\n }\n return token\n })\n}\n\n/**\n * Strips normalization separators from extracted route parameters.\n * Used by both server and client code to clean up parameters after route matching.\n */\nexport function stripParameterSeparators(\n params: Record<string, any>\n): Record<string, any> {\n const cleaned: Record<string, any> = {}\n\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === 'string') {\n // Remove the separator if it appears at the start of parameter values\n cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n } else if (Array.isArray(value)) {\n // Handle array parameters (from repeated route segments)\n cleaned[key] = value.map((item) =>\n typeof item === 'string'\n ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n : item\n )\n } else {\n cleaned[key] = value\n }\n }\n\n return cleaned\n}\n","/**\n * Client-safe utilities for route matching that don't import server-side\n * utilities to avoid bundling issues with Turbopack\n */\n\nimport type {\n Key,\n TokensToRegexpOptions,\n ParseOptions,\n TokensToFunctionOptions,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n pathToRegexp,\n compile,\n regexpToFunction,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n hasAdjacentParameterIssues,\n normalizeAdjacentParameters,\n stripParameterSeparators,\n} from '../../../../lib/route-pattern-normalizer'\n\n/**\n * Client-safe wrapper around pathToRegexp that handles path-to-regexp 6.3.0+ validation errors.\n * This includes both \"Can not repeat without prefix/suffix\" and \"Must have text between parameters\" errors.\n */\nexport function safePathToRegexp(\n route: string | RegExp | Array<string | RegExp>,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n if (typeof route !== 'string') {\n return pathToRegexp(route, keys, options)\n }\n\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return pathToRegexp(routeToUse, keys, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return pathToRegexp(normalizedRoute, keys, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around compile that handles path-to-regexp 6.3.0+ validation errors.\n * No server-side error reporting to avoid bundling issues.\n */\nexport function safeCompile(\n route: string,\n options?: TokensToFunctionOptions & ParseOptions\n) {\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return compile(routeToUse, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return compile(normalizedRoute, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around regexpToFunction that automatically cleans parameters.\n */\nexport function safeRegexpToFunction<\n T extends Record<string, any> = Record<string, any>,\n>(regexp: RegExp, keys?: Key[]): (pathname: string) => { params: T } | false {\n const originalMatcher = regexpToFunction<T>(regexp, keys || [])\n\n return (pathname: string) => {\n const result = originalMatcher(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return {\n ...result,\n params: stripParameterSeparators(result.params as any) as T,\n }\n }\n}\n\n/**\n * Safe wrapper for route matcher functions that automatically cleans parameters.\n * This is client-safe and doesn't import path-to-regexp.\n */\nexport function safeRouteMatcher<T extends Record<string, any>>(\n matcherFn: (pathname: string) => false | T\n): (pathname: string) => false | T {\n return (pathname: string) => {\n const result = matcherFn(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return stripParameterSeparators(result) as T\n }\n}\n","import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\nimport { safeRouteMatcher } from './route-match-utils'\n\nexport interface RouteMatchFn {\n (pathname: string): false | Params\n}\n\ntype RouteMatcherOptions = {\n // We only use the exec method of the RegExp object. This helps us avoid using\n // type assertions that the passed in properties are of the correct type.\n re: Pick<RegExp, 'exec'>\n groups: Record<string, Group>\n}\n\nexport function getRouteMatcher({\n re,\n groups,\n}: RouteMatcherOptions): RouteMatchFn {\n const rawMatcher = (pathname: string) => {\n const routeMatch = re.exec(pathname)\n if (!routeMatch) return false\n\n const decode = (param: string) => {\n try {\n return decodeURIComponent(param)\n } catch {\n throw new DecodeError('failed to decode param')\n }\n }\n\n const params: Params = {}\n for (const [key, group] of Object.entries(groups)) {\n const match = routeMatch[group.pos]\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry) => decode(entry))\n } else {\n params[key] = decode(match)\n }\n }\n }\n\n return params\n }\n\n // Wrap with safe matcher to handle parameter cleaning\n return safeRouteMatcher(rawMatcher)\n}\n","import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_PREFETCH_SUFFIX = '.prefetch.rsc'\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\n\n// in seconds\nexport const CACHE_ONE_YEAR = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record<string, ServerRuntime> = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n","// regexp is based on https://github.com/sindresorhus/escape-string-regexp\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g\n\nexport function escapeStringRegexp(str: string) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&')\n }\n return str\n}\n","import type { DynamicParam } from '../../../../server/app-render/app-render'\nimport type { DynamicParamTypesShort } from '../../../../server/app-render/types'\nimport type { FallbackRouteParams } from '../../../../server/request/fallback-params'\n\n/**\n *\n * Shared logic on client and server for creating a dynamic param value.\n *\n * This code needs to be shared with the client so it can extract dynamic route\n * params from the URL without a server request.\n *\n * Because everything in this module is sent to the client, we should aim to\n * keep this code as simple as possible. The special case handling for catchall\n * and optional is, alas, unfortunate.\n */\nexport function getDynamicParam(\n params: { [key: string]: any },\n segmentKey: string,\n dynamicParamType: DynamicParamTypesShort,\n pagePath: string,\n fallbackRouteParams: FallbackRouteParams | null\n): DynamicParam {\n let value = params[segmentKey]\n\n if (fallbackRouteParams && fallbackRouteParams.has(segmentKey)) {\n value = fallbackRouteParams.get(segmentKey)\n } else if (Array.isArray(value)) {\n value = value.map((i) => encodeURIComponent(i))\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value)\n }\n\n if (!value) {\n const isCatchall = dynamicParamType === 'c'\n const isOptionalCatchall = dynamicParamType === 'oc'\n\n if (isCatchall || isOptionalCatchall) {\n // handle the case where an optional catchall does not have a value,\n // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard`\n if (isOptionalCatchall) {\n return {\n param: segmentKey,\n value: null,\n type: dynamicParamType,\n treeSegment: [segmentKey, '', dynamicParamType],\n }\n }\n\n // handle the case where a catchall or optional catchall does not have a value,\n // e.g. `/foo/bar/hello` and `@slot/[...catchall]` or `@slot/[[...catchall]]` is matched\n value = pagePath\n .split('/')\n // remove the first empty string\n .slice(1)\n // replace any dynamic params with the actual values\n .flatMap((pathSegment) => {\n const param = parseParameter(pathSegment)\n // if the segment matches a param, return the param value\n // otherwise, it's a static segment, so just return that\n return params[param.key] ?? param.key\n })\n\n return {\n param: segmentKey,\n value,\n type: dynamicParamType,\n // This value always has to be a string.\n treeSegment: [segmentKey, value.join('/'), dynamicParamType],\n }\n }\n }\n\n return {\n param: segmentKey,\n // The value that is passed to user code.\n value: value,\n // The value that is rendered in the router tree.\n treeSegment: [\n segmentKey,\n Array.isArray(value) ? value.join('/') : value,\n dynamicParamType,\n ],\n type: dynamicParamType,\n }\n}\n\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n * - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n * - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n * - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n * - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */\nexport const PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/\n\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[[...slug]]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[[foo]]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `[bar]` -> `{ key: 'bar', repeat: false, optional: false }`\n * - `fizz` -> `{ key: 'fizz', repeat: false, optional: false }`\n * @param param - The parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseParameter(param: string) {\n const match = param.match(PARAMETER_PATTERN)\n\n if (!match) {\n return parseMatchedParameter(param)\n }\n\n return parseMatchedParameter(match[2])\n}\n\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseMatchedParameter(param: string) {\n const optional = param.startsWith('[') && param.endsWith(']')\n if (optional) {\n param = param.slice(1, -1)\n }\n const repeat = param.startsWith('...')\n if (repeat) {\n param = param.slice(3)\n }\n return { key: param, repeat, optional }\n}\n","import {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../../../lib/constants'\nimport { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { PARAMETER_PATTERN, parseMatchedParameter } from './get-dynamic-param'\n\nexport interface Group {\n pos: number\n repeat: boolean\n optional: boolean\n}\n\nexport interface RouteRegex {\n groups: { [groupName: string]: Group }\n re: RegExp\n}\n\ntype GetNamedRouteRegexOptions = {\n /**\n * Whether to prefix the route keys with the NEXT_INTERCEPTION_MARKER_PREFIX\n * or NEXT_QUERY_PARAM_PREFIX. This is only relevant when creating the\n * routes-manifest during the build.\n */\n prefixRouteKeys: boolean\n\n /**\n * Whether to include the suffix in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n\n /**\n * Whether to backtrack duplicate keys. This is only relevant when creating\n * the routes-manifest during the build.\n */\n backreferenceDuplicateKeys?: boolean\n}\n\ntype GetRouteRegexOptions = {\n /**\n * Whether to include extra parts in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n * of adding this option.\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n}\n\nfunction getParametrizedRoute(\n route: string,\n includeSuffix: boolean,\n includePrefix: boolean\n) {\n const groups: { [groupName: string]: Group } = {}\n let groupIndex = 1\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const markerMatch = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n segments.push(`/${escapeStringRegexp(markerMatch)}([^/]+?)`)\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = repeat ? (optional ? '(?:/(.+?))?' : '/(.+?)') : '/([^/]+?)'\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n parameterizedRoute: segments.join(''),\n groups,\n }\n}\n\n/**\n * From a normalized route this function generates a regular expression and\n * a corresponding groups object intended to be used to store matching groups\n * from the regular expression.\n */\nexport function getRouteRegex(\n normalizedRoute: string,\n {\n includeSuffix = false,\n includePrefix = false,\n excludeOptionalTrailingSlash = false,\n }: GetRouteRegexOptions = {}\n): RouteRegex {\n const { parameterizedRoute, groups } = getParametrizedRoute(\n normalizedRoute,\n includeSuffix,\n includePrefix\n )\n\n let re = parameterizedRoute\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?'\n }\n\n return {\n re: new RegExp(`^${re}$`),\n groups: groups,\n }\n}\n\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */\nfunction buildGetSafeRouteKey() {\n let i = 0\n\n return () => {\n let routeKey = ''\n let j = ++i\n while (j > 0) {\n routeKey += String.fromCharCode(97 + ((j - 1) % 26))\n j = Math.floor((j - 1) / 26)\n }\n return routeKey\n }\n}\n\nfunction getSafeKeyFromSegment({\n interceptionMarker,\n getSafeRouteKey,\n segment,\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n}: {\n interceptionMarker?: string\n getSafeRouteKey: () => string\n segment: string\n routeKeys: Record<string, string>\n keyPrefix?: string\n backreferenceDuplicateKeys: boolean\n}) {\n const { key, optional, repeat } = parseMatchedParameter(segment)\n\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '')\n\n if (keyPrefix) {\n cleanedKey = `${keyPrefix}${cleanedKey}`\n }\n let invalidKey = false\n\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true\n }\n\n if (invalidKey) {\n cleanedKey = getSafeRouteKey()\n }\n\n const duplicateKey = cleanedKey in routeKeys\n\n if (keyPrefix) {\n routeKeys[cleanedKey] = `${keyPrefix}${key}`\n } else {\n routeKeys[cleanedKey] = key\n }\n\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker\n ? escapeStringRegexp(interceptionMarker)\n : ''\n\n let pattern: string\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = `\\\\k<${cleanedKey}>`\n } else if (repeat) {\n pattern = `(?<${cleanedKey}>.+?)`\n } else {\n pattern = `(?<${cleanedKey}>[^/]+?)`\n }\n\n return optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const hasInterceptionMarker = INTERCEPTION_ROUTE_MARKERS.some((m) =>\n segment.startsWith(m)\n )\n\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n segments.push(\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: paramMatches[1],\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys\n ? NEXT_INTERCEPTION_MARKER_PREFIX\n : undefined,\n backreferenceDuplicateKeys,\n })\n )\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n }\n}\n\n/**\n * This function extends `getRouteRegex` generating also a named regexp where\n * each group is named along with a routeKeys object that indexes the assigned\n * named group with its corresponding key. When the routeKeys need to be\n * prefixed to uniquely identify internally the \"prefixRouteKey\" arg should\n * be \"true\" currently this is only the case when creating the routes-manifest\n * during the build\n */\nexport function getNamedRouteRegex(\n normalizedRoute: string,\n options: GetNamedRouteRegexOptions\n) {\n const result = getNamedParametrizedRoute(\n normalizedRoute,\n options.prefixRouteKeys,\n options.includeSuffix ?? false,\n options.includePrefix ?? false,\n options.backreferenceDuplicateKeys ?? false\n )\n\n let namedRegex = result.namedParameterizedRoute\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?'\n }\n\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: `^${namedRegex}$`,\n routeKeys: result.routeKeys,\n }\n}\n\n/**\n * Generates a named regexp.\n * This is intended to be using for build time only.\n */\nexport function getNamedMiddlewareRegex(\n normalizedRoute: string,\n options: {\n catchAll?: boolean\n }\n) {\n const { parameterizedRoute } = getParametrizedRoute(\n normalizedRoute,\n false,\n false\n )\n const { catchAll = true } = options\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : ''\n return {\n namedRegex: `^/${catchAllRegex}$`,\n }\n }\n\n const { namedParameterizedRoute } = getNamedParametrizedRoute(\n normalizedRoute,\n false,\n false,\n false,\n false\n )\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''\n return {\n namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$`,\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\nimport { getRouteMatcher } from './route-matcher'\nimport { getRouteRegex } from './route-regex'\n\nexport function interpolateAs(\n route: string,\n asPathname: string,\n query: ParsedUrlQuery\n) {\n let interpolatedRoute = ''\n\n const dynamicRegex = getRouteRegex(route)\n const dynamicGroups = dynamicRegex.groups\n const dynamicMatches =\n // Try to match the dynamic route against the asPath\n (asPathname !== route ? getRouteMatcher(dynamicRegex)(asPathname) : '') ||\n // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query\n\n interpolatedRoute = route\n const params = Object.keys(dynamicGroups)\n\n if (\n !params.every((param) => {\n let value = dynamicMatches[param] || ''\n const { repeat, optional } = dynamicGroups[param]\n\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = `[${repeat ? '...' : ''}${param}]`\n if (optional) {\n replaced = `${!value ? '/' : ''}[${replaced}]`\n }\n if (repeat && !Array.isArray(value)) value = [value]\n\n return (\n (optional || param in dynamicMatches) &&\n // Interpolate group into data URL if present\n (interpolatedRoute =\n interpolatedRoute!.replace(\n replaced,\n repeat\n ? (value as string[])\n .map(\n // these values should be fully encoded instead of just\n // path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment) => encodeURIComponent(segment)\n )\n .join('/')\n : encodeURIComponent(value as string)\n ) || '/')\n )\n })\n ) {\n interpolatedRoute = '' // did not satisfy all requirements\n\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `<Link>` component directly.\n }\n return {\n params,\n result: interpolatedRoute,\n }\n}\n","import type { NextRouter, Url } from '../shared/lib/router/router'\n\nimport { searchParamsToUrlQuery } from '../shared/lib/router/utils/querystring'\nimport { formatWithValidation } from '../shared/lib/router/utils/format-url'\nimport { omit } from '../shared/lib/router/utils/omit'\nimport { normalizeRepeatedSlashes } from '../shared/lib/utils'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\nimport { isLocalURL } from '../shared/lib/router/utils/is-local-url'\nimport { isDynamicRoute } from '../shared/lib/router/utils'\nimport { interpolateAs } from '../shared/lib/router/utils/interpolate-as'\nimport { getRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\n\n/**\n * Resolves a given hyperlink with a certain router state (basePath not included).\n * Preserves absolute urls.\n */\nexport function resolveHref(\n router: NextRouter,\n href: Url,\n resolveAs: true\n): [string, string] | [string]\nexport function resolveHref(\n router: NextRouter,\n href: Url,\n resolveAs?: false\n): string\nexport function resolveHref(\n router: NextRouter,\n href: Url,\n resolveAs?: boolean\n): [string, string] | [string] | string {\n // we use a dummy base url for relative urls\n let base: URL\n let urlAsString = typeof href === 'string' ? href : formatWithValidation(href)\n\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n // https://www.rfc-editor.org/rfc/rfc3986.html#section-3.1\n const urlProtoMatch = urlAsString.match(/^[a-z][a-z0-9+.-]*:\\/\\//i)\n const urlAsStringNoProto = urlProtoMatch\n ? urlAsString.slice(urlProtoMatch[0].length)\n : urlAsString\n\n const urlParts = urlAsStringNoProto.split('?', 1)\n\n if ((urlParts[0] || '').match(/(\\/\\/|\\\\)/)) {\n console.error(\n `Invalid href '${urlAsString}' passed to next/router in page: '${router.pathname}'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.`\n )\n const normalizedUrl = normalizeRepeatedSlashes(urlAsStringNoProto)\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : '') + normalizedUrl\n }\n\n // Return because it cannot be routed by the Next.js router\n if (!isLocalURL(urlAsString)) {\n return (resolveAs ? [urlAsString] : urlAsString) as string\n }\n\n try {\n let baseBase = urlAsString.startsWith('#') ? router.asPath : router.pathname\n\n // If the provided href is only a query string, it is safer to use the asPath\n // considering rewrites.\n if (urlAsString.startsWith('?')) {\n baseBase = router.asPath\n\n // However, if is a dynamic route, we need to use the pathname to preserve the\n // query interpolation and rewrites (router.pathname will look like \"/[slug]\").\n if (isDynamicRoute(router.pathname)) {\n baseBase = router.pathname\n\n const routeRegex = getRouteRegex(router.pathname)\n const match = getRouteMatcher(routeRegex)(router.asPath)\n\n // For dynamic routes, if asPath doesn't match the pathname regex, it is a rewritten path.\n // In this case, should use asPath to preserve the current URL.\n if (!match) {\n baseBase = router.asPath\n }\n\n // Note: There is an edge case where the pathname is dynamic, and also a rewrite path to the same segment.\n // E.g. in \"/[slug]\" path, rewrite \"/foo\" -> \"/bar\"\n\n // In this case, it will be treated as a non-rewritten path and possibly interpolate the query string.\n // E.g., \"/any?slug=foo\" will become the content of \"/foo\", not rewritten as \"/bar\"\n\n // This is currently a trade-off of not resolving rewrite paths on every Router/Link call,\n // but using a lighter route regex pattern check.\n }\n }\n\n base = new URL(baseBase, 'http://n')\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL('/', 'http://n')\n }\n\n try {\n const finalUrl = new URL(urlAsString, base)\n finalUrl.pathname = normalizePathTrailingSlash(finalUrl.pathname)\n let interpolatedAs = ''\n\n if (\n isDynamicRoute(finalUrl.pathname) &&\n finalUrl.searchParams &&\n resolveAs\n ) {\n const query = searchParamsToUrlQuery(finalUrl.searchParams)\n\n const { result, params } = interpolateAs(\n finalUrl.pathname,\n finalUrl.pathname,\n query\n )\n\n if (result) {\n interpolatedAs = formatWithValidation({\n pathname: result,\n hash: finalUrl.hash,\n query: omit(query, params),\n })\n }\n }\n\n // if the origin didn't change, it means we received a relative href\n const resolvedHref =\n finalUrl.origin === base.origin\n ? finalUrl.href.slice(finalUrl.origin.length)\n : finalUrl.href\n\n return resolveAs\n ? [resolvedHref, interpolatedAs || resolvedHref]\n : resolvedHref\n } catch (_) {\n return resolveAs ? [urlAsString] : urlAsString\n }\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n","import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n","import type { addLocale as Fn } from '../shared/lib/router/utils/add-locale'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nexport const addLocale: typeof Fn = (path, ...args) => {\n if (process.env.__NEXT_I18N_SUPPORT) {\n return normalizePathTrailingSlash(\n (\n require('../shared/lib/router/utils/add-locale') as typeof import('../shared/lib/router/utils/add-locale')\n ).addLocale(path, ...args)\n )\n }\n return path\n}\n","export const requestIdleCallback =\n (typeof self !== 'undefined' &&\n self.requestIdleCallback &&\n self.requestIdleCallback.bind(window)) ||\n function (cb: IdleRequestCallback): number {\n let start = Date.now()\n return self.setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50 - (Date.now() - start))\n },\n })\n }, 1)\n }\n\nexport const cancelIdleCallback =\n (typeof self !== 'undefined' &&\n self.cancelIdleCallback &&\n self.cancelIdleCallback.bind(window)) ||\n function (id: number) {\n return clearTimeout(id)\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<HTMLElement | null> | 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<Element, ObserveCallback>\n}\n\nconst hasIntersectionObserver = typeof IntersectionObserver === 'function'\n\nconst observers = new Map<Identifier, Observer>()\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<Element, ObserveCallback>()\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<T extends Element>({\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<T | null>(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","export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap<readonly string[], readonly string[]>()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n","import type { normalizeLocalePath as Fn } from '../shared/lib/i18n/normalize-locale-path'\n\nexport const normalizeLocalePath: typeof Fn = (pathname, locales) => {\n if (process.env.__NEXT_I18N_SUPPORT) {\n return (\n require('../shared/lib/i18n/normalize-locale-path') as typeof import('../shared/lib/i18n/normalize-locale-path')\n ).normalizeLocalePath(pathname, locales)\n }\n return { pathname, detectedLocale: undefined }\n}\n","import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n","import type { detectDomainLocale as Fn } from '../shared/lib/i18n/detect-domain-locale'\n\nexport const detectDomainLocale: typeof Fn = (...args) => {\n if (process.env.__NEXT_I18N_SUPPORT) {\n return (\n require('../shared/lib/i18n/detect-domain-locale') as typeof import('../shared/lib/i18n/detect-domain-locale')\n ).detectDomainLocale(...args)\n }\n}\n","import type { DomainLocale } from '../server/config'\nimport type { normalizeLocalePath as NormalizeFn } from './normalize-locale-path'\nimport type { detectDomainLocale as DetectFn } from './detect-domain-locale'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function getDomainLocale(\n path: string,\n locale?: string | false,\n locales?: readonly string[],\n domainLocales?: readonly DomainLocale[]\n) {\n if (process.env.__NEXT_I18N_SUPPORT) {\n const normalizeLocalePath: typeof NormalizeFn = (\n require('./normalize-locale-path') as typeof import('./normalize-locale-path')\n ).normalizeLocalePath\n const detectDomainLocale: typeof DetectFn = (\n require('./detect-domain-locale') as typeof import('./detect-domain-locale')\n ).detectDomainLocale\n\n const target = locale || normalizeLocalePath(path, locales).detectedLocale\n const domain = detectDomainLocale(domainLocales, undefined, target)\n if (domain) {\n const proto = `http${domain.http ? '' : 's'}://`\n const finalLocale = target === domain.defaultLocale ? '' : `/${target}`\n return `${proto}${domain.domain}${normalizePathTrailingSlash(\n `${basePath}${finalLocale}${path}`\n )}`\n }\n return false\n } else {\n return false\n }\n}\n","import { addPathPrefix } from '../shared/lib/router/utils/add-path-prefix'\nimport { normalizePathTrailingSlash } from './normalize-trailing-slash'\n\nconst basePath = (process.env.__NEXT_ROUTER_BASEPATH as string) || ''\n\nexport function addBasePath(path: string, required?: boolean): string {\n return normalizePathTrailingSlash(\n process.env.__NEXT_MANUAL_CLIENT_BASE_PATH && !required\n ? path\n : addPathPrefix(path, basePath)\n )\n}\n","let errorOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const errors = new Set<string>()\n errorOnce = (msg: string) => {\n if (!errors.has(msg)) {\n console.error(msg)\n }\n errors.add(msg)\n }\n}\n\nexport { errorOnce }\n","'use client'\n\nimport type {\n NextRouter,\n PrefetchOptions as RouterPrefetchOptions,\n} from '../shared/lib/router/router'\n\nimport React, { createContext, useContext } from 'react'\nimport type { UrlObject } from 'url'\nimport { resolveHref } from './resolve-href'\nimport { isLocalURL } from '../shared/lib/router/utils/is-local-url'\nimport { formatUrl } from '../shared/lib/router/utils/format-url'\nimport { isAbsoluteUrl } from '../shared/lib/utils'\nimport { addLocale } from './add-locale'\nimport { RouterContext } from '../shared/lib/router-context.shared-runtime'\nimport type { AppRouterInstance } from '../shared/lib/app-router-context.shared-runtime'\nimport { useIntersection } from './use-intersection'\nimport { getDomainLocale } from './get-domain-locale'\nimport { addBasePath } from './add-base-path'\nimport { useMergedRef } from './use-merged-ref'\nimport { errorOnce } from '../shared/lib/utils/error-once'\n\ntype Url = string | UrlObject\ntype RequiredKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? never : K\n}[keyof T]\ntype OptionalKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? K : never\n}[keyof T]\n\ntype OnNavigateEventHandler = (event: { preventDefault: () => void }) => void\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 `<Link />` 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 * - \"auto\", null, undefined (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 | 'auto' | null | 'unstable_forceStale'\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 * @deprecated This will be removed in v16\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<HTMLAnchorElement>\n /**\n * Optional event handler for when Link is touched.\n */\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n /**\n * Optional event handler for when Link is clicked.\n */\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n /**\n * Optional event handler for when the `<Link>` is navigated.\n */\n onNavigate?: OnNavigateEventHandler\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 type generation runs.\n// WARNING: This should be an interface to prevent TypeScript from inlining it\n// in declarations of libraries dependending on Next.js.\n// Not trivial to reproduce so only convert to an interface when needed.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface LinkProps<RouteInferType = any> extends InternalLinkProps {}\ntype LinkPropsRequired = RequiredKeys<LinkProps>\ntype LinkPropsOptional = OptionalKeys<InternalLinkProps>\n\nconst prefetched = new Set<string>()\n\ntype PrefetchOptions = RouterPrefetchOptions & {\n /**\n * bypassPrefetchedCheck will bypass the check to see if the `href` has\n * already been fetched.\n */\n bypassPrefetchedCheck?: boolean\n}\n\nfunction prefetch(\n router: NextRouter,\n href: string,\n as: string,\n options: PrefetchOptions\n): void {\n if (typeof window === 'undefined') {\n return\n }\n\n if (!isLocalURL(href)) {\n return\n }\n\n // We should only dedupe requests when experimental.optimisticClientCache is\n // disabled.\n if (!options.bypassPrefetchedCheck) {\n const locale =\n // Let the link's locale prop override the default router locale.\n typeof options.locale !== 'undefined'\n ? options.locale\n : // Otherwise fallback to the router's locale.\n 'locale' in router\n ? router.locale\n : undefined\n\n const prefetchedKey = href + '%' + as + '%' + locale\n\n // If we've already fetched the key, then don't prefetch it again!\n if (prefetched.has(prefetchedKey)) {\n return\n }\n\n // Mark this URL as prefetched.\n prefetched.add(prefetchedKey)\n }\n\n // Prefetch the JSON 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 router.prefetch(href, as, options).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 locale?: string | false,\n onNavigate?: OnNavigateEventHandler\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 (\n (isAnchorNodeName && isModifiedEvent(e)) ||\n e.currentTarget.hasAttribute('download')\n ) {\n // ignore click for browser’s default behavior\n return\n }\n\n if (!isLocalURL(href)) {\n if (replace) {\n // browser default behavior does not replace the history state\n // so we need to do it manually\n e.preventDefault()\n location.replace(href)\n }\n\n // ignore click for browser’s default behavior\n return\n }\n\n e.preventDefault()\n\n const navigate = () => {\n if (onNavigate) {\n let isDefaultPrevented = false\n\n onNavigate({\n preventDefault: () => {\n isDefaultPrevented = true\n },\n })\n\n if (isDefaultPrevented) {\n return\n }\n }\n\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 locale,\n scroll: routerScroll,\n })\n } else {\n router[replace ? 'replace' : 'push'](as || href, {\n scroll: routerScroll,\n })\n }\n }\n\n navigate()\n}\n\ntype LinkPropsReal = React.PropsWithChildren<\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 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 `<a>` 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: `<Link>`](https://nextjs.org/docs/app/api-reference/components/link)\n */\nconst Link = React.forwardRef<HTMLAnchorElement, LinkPropsReal>(\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 locale,\n onClick,\n onNavigate,\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 = <a>{children}</a>\n }\n\n const router = React.useContext(RouterContext)\n\n const prefetchEnabled = prefetchProp !== false\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 \\`<Link>\\`, but got \\`${args.actual}\\` instead.` +\n (typeof window !== 'undefined'\n ? // TODO: Remove this addendum if Owner Stacks are available\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<LinkPropsRequired, true> = {\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<LinkPropsOptional, true> = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n locale: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true,\n onNavigate: 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 (key === 'locale') {\n if (props[key] && valType !== 'string') {\n throw createPropError({\n key,\n expected: '`string`',\n actual: valType,\n })\n }\n } else if (\n key === 'onClick' ||\n key === 'onMouseEnter' ||\n key === 'onTouchStart' ||\n key === 'onNavigate'\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 === 'legacyBehavior'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else if (key === 'prefetch') {\n if (\n props[key] != null &&\n valType !== 'boolean' &&\n props[key] !== 'auto'\n ) {\n throw createPropError({\n key,\n expected: '`boolean | \"auto\"`',\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 const { href, as } = React.useMemo(() => {\n if (!router) {\n const resolvedHref = formatStringOrUrl(hrefProp)\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref,\n }\n }\n\n const [resolvedHref, resolvedAs] = resolveHref(router, hrefProp, true)\n\n return {\n href: resolvedHref,\n as: asProp ? resolveHref(router, asProp) : resolvedAs || resolvedHref,\n }\n }, [router, hrefProp, asProp])\n\n const previousHref = React.useRef<string>(href)\n const previousAs = React.useRef<string>(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 <Link> 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 <Link> 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 <Link> 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 <Link> 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 <Link> with <a> child. Please remove <a> or use <Link legacyBehavior>.\\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 | null) => {\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, as, { locale })\n }, [as, href, isVisible, locale, prefetchEnabled, router?.locale, router])\n\n const childProps: {\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n onMouseEnter: React.MouseEventHandler<HTMLAnchorElement>\n onClick: React.MouseEventHandler<HTMLAnchorElement>\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(\n e,\n router,\n href,\n as,\n replace,\n shallow,\n scroll,\n locale,\n onNavigate\n )\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 prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true,\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 prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true,\n })\n },\n }\n\n // If child is an <a> 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 domain and locale.\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 const curLocale = typeof locale !== 'undefined' ? locale : router?.locale\n\n // we only render domain locales if we are currently on a domain locale\n // so that locale links are still visitable in development/preview envs\n const localeDomain =\n router?.isLocaleDomain &&\n getDomainLocale(as, curLocale, router?.locales, router?.domainLocales)\n\n childProps.href =\n localeDomain ||\n addBasePath(addLocale(as, curLocale, router?.defaultLocale))\n }\n\n if (legacyBehavior) {\n if (process.env.NODE_ENV === 'development') {\n errorOnce(\n '`legacyBehavior` is deprecated and will be removed in a future ' +\n 'release. A codemod is available to upgrade your components:\\n\\n' +\n 'npx @next/codemod@latest new-link .\\n\\n' +\n 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components'\n )\n }\n return React.cloneElement(child, childProps)\n }\n\n return (\n <a {...restProps} {...childProps}>\n {children}\n </a>\n )\n }\n)\n\nconst LinkStatusContext = createContext<{\n pending: boolean\n}>({\n // We do not support link status in the Pages Router, so we always return false\n pending: false,\n})\n\nexport const useLinkStatus = () => {\n // This behaviour is like React's useFormStatus. When the component is not under\n // a <form> tag, it will get the default value, instead of throwing an error.\n return useContext(LinkStatusContext)\n}\n\nexport default Link\n","module.exports = require('./dist/client/link')\n","export * from './components'\nexport * from './contexts'\nexport * from './hooks'\nexport * from './i18n'\nexport * from './utils'\n","import type { SVGProps } from 'react'\nimport { clsx } from 'clsx'\n\nexport type HelpwaveProps = SVGProps<SVGSVGElement> & {\n color?: string,\n animate?: 'none' | 'loading' | 'pulse' | 'bounce',\n size?: 'sm' | 'md' | 'lg',\n}\n\n/**\n * The helpwave loading spinner based on the svg logo.\n */\nexport const HelpwaveLogo = ({\n color = 'currentColor',\n size,\n animate = 'none',\n ...props\n}: HelpwaveProps) => {\n const isLoadingAnimation = animate === 'loading'\n let svgAnimationKey = ''\n\n if (animate === 'pulse') {\n svgAnimationKey = 'animate-pulse'\n } else if (animate === 'bounce') {\n svgAnimationKey = 'animate-bounce'\n }\n\n return (\n <svg\n {...props}\n viewBox=\"0 0 1024 1024\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeWidth={65}\n className={clsx({\n 'max-w-16 max-h-16': size === 'lg',\n 'max-w-12 max-h-12': size === 'md',\n 'max-w-8 max-h-8': size === 'sm',\n }, props.className)}\n >\n <g className={clsx(svgAnimationKey)}>\n <path className={clsx({ 'animate-wave-big-left-up': isLoadingAnimation })}\n d=\"M146 644.214C146 498.088 253.381 379.629 385.843 379.629\" stroke={color} strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-big-right-down': isLoadingAnimation })}\n d=\"M625.686 645.272C493.224 645.272 385.843 526.813 385.843 380.687\" stroke={color}\n strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-left-up': isLoadingAnimation })}\n d=\"M533.585 613.522C533.585 508.895 610.47 424.079 705.312 424.079\" stroke={color}\n strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-right-down': isLoadingAnimation })}\n d=\"M878 615.639C782.628 615.639 705.313 530.822 705.313 426.196\" stroke={color}\n strokeDasharray=\"1000\"/>\n </g>\n </svg>\n )\n}\n","import { HelpwaveLogo } from './HelpwaveLogo'\nimport type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\ntype Size = 'sm' | 'md' | 'lg'\n\nexport type HelpwaveBadgeProps = HTMLAttributes<HTMLSpanElement> & {\n size?: Size,\n}\n\n/**\n * A Badge with the helpwave logo and the helpwave name\n */\nexport const HelpwaveBadge = ({\n size = 'sm',\n ...props\n}: HelpwaveBadgeProps) => {\n return (\n <span\n {...props}\n className={clsx(\n 'flex flex-row items-center font-bold font-space rounded-md',\n {\n 'px-2 py-1': size === 'sm' || size === 'md',\n 'px-4 py-1': size === 'lg',\n 'gap-x-1': size === 'sm',\n 'gap-x-2 text-lg': size === 'md',\n 'gap-x-2 text-xl': size === 'lg'\n }, props.className\n )}\n >\n <HelpwaveLogo size={size}/>\n helpwave\n </span>\n )\n}\n","import type { HTMLAttributes } from 'react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { UserIcon } from 'lucide-react'\nimport { Visibility } from '../layout/Visibility'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ImageConfig = {\n avatarUrl: string,\n alt: string,\n}\n\n\nexport type AvatarProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n image?: ImageConfig,\n name?: string,\n size?: AvatarSize,\n}\n\n/**\n * A component for showing a profile picture\n */\nexport const Avatar = ({\n image: initialImage,\n name,\n size = 'md',\n ...props\n}: AvatarProps) => {\n const [hasError, setHasError] = useState(false)\n const [hasLoaded, setHasLoaded] = useState(false)\n const [image, setImage] = useState(initialImage)\n\n const displayName = useMemo(() => {\n const maxLetters = size === 'sm' ? 1 : 2\n return (name ?? '')\n .split(' ')\n .filter((_, index) => index < maxLetters)\n .map(value => value[0])\n .join('')\n .toUpperCase()\n }, [name, size])\n\n const isShowingImage = !!image && (!hasError || !hasLoaded)\n const dataName = props['data-name'] ?? 'avatar'\n\n useEffect(() => {\n if(initialImage?.avatarUrl !== image?.avatarUrl) {\n setHasError(false)\n setHasLoaded(false)\n }\n setImage(initialImage)\n }, [image?.avatarUrl, initialImage])\n\n return (\n <div\n {...props}\n data-name={dataName}\n data-size={props['data-size'] ?? size ?? undefined}\n >\n <Visibility isVisible={isShowingImage}>\n <img\n key={image?.avatarUrl}\n src={image?.avatarUrl}\n alt={image?.alt}\n\n onLoad={() => setHasLoaded(true)}\n onError={() => setHasError(true)}\n\n data-name={`${dataName}-image`}\n data-error={hasError ? '' : undefined}\n data-loaded={hasLoaded ? '' : undefined}\n />\n </Visibility>\n {name ? displayName : (<UserIcon />)}\n </div>\n )\n}\n\nexport type AvatarGroupProps = HTMLAttributes<HTMLDivElement> & {\n avatars: Omit<AvatarProps, 'size'>[],\n showTotalNumber?: boolean,\n size?: AvatarSize,\n}\n\n/**\n * A component for showing a group of Avatar's\n */\nexport const AvatarGroup = ({\n avatars,\n showTotalNumber = true,\n size = 'md',\n ...props\n}: AvatarGroupProps) => {\n const maxShownProfiles = 5\n const displayedProfiles = avatars.length < maxShownProfiles ? avatars : avatars.slice(0, maxShownProfiles)\n const notDisplayedProfiles = avatars.length - maxShownProfiles\n const group = (\n <div data-name=\"avatar-group-container\">\n {displayedProfiles.map((avatar, index) => (\n <Avatar\n {...avatar}\n key={index}\n size={size}\n data-group=\"\"\n />\n ))}\n </div>\n )\n\n\n return (\n <div\n {...props}\n data-name=\"avatar-group\"\n data-size={size ?? undefined}\n >\n {group}\n {showTotalNumber && notDisplayedProfiles > 0 && (\n <span\n data-name=\"avatar-group-more\"\n data-size={size}\n >\n {`+ ${notDisplayedProfiles}`}\n </span>\n )}\n </div>\n )\n}","import type { PropsWithChildren } from 'react'\n\nexport type VisibilityProps = PropsWithChildren & {\n isVisible?: boolean,\n}\n\nexport function Visibility({ children, isVisible }: VisibilityProps) {\n return (<>{isVisible && children}</>)\n}","import type { ButtonHTMLAttributes } from 'react'\nimport { forwardRef } from 'react'\n\n/**\n * The different sizes for a button\n */\ntype ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ButtonColoringStyle = 'outline' | 'solid' | 'text' | 'tonal' | null\n\ntype ButtonLayout = 'icon' | 'default' | null\n\nconst buttonColorsList = ['primary', 'secondary', 'positive', 'warning', 'negative', 'neutral'] as const\n\n/**\n * The allowed colors for the Button\n */\nexport type ButtonColor = typeof buttonColorsList[number] | null\n\nexport const ButtonUtil = {\n colors: buttonColorsList,\n}\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n /**\n * @default 'medium'\n */\n size?: ButtonSize,\n layout?: ButtonLayout,\n color?: ButtonColor,\n /**\n * @default 'solid'\n */\n coloringStyle?: ButtonColoringStyle,\n allowClickEventPropagation?: boolean,\n}\n\n/**\n * A button with a solid background and different sizes\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function SolidButton({\n children,\n layout = 'default',\n size = 'md',\n color = 'primary',\n coloringStyle = 'solid',\n disabled,\n allowClickEventPropagation = false,\n ...props\n}, ref) {\n return (\n <button\n {...props}\n ref={ref}\n disabled={disabled}\n\n onClick={event => {\n if(!allowClickEventPropagation) {\n event.stopPropagation()\n }\n props.onClick?.(event)\n }}\n\n type={props['type'] ?? 'button'}\n\n data-name={props['data-name'] ?? 'button'}\n data-disabled={disabled ? '': undefined}\n data-size={size ?? undefined}\n data-layout={layout ?? undefined}\n data-color={color ?? undefined}\n data-coloringstyle={coloringStyle ?? undefined}\n >\n {children}\n </button>\n )\n})\n","import type { HTMLAttributes } from 'react'\nimport { ButtonUtil } from '@/src/components/user-interaction/Button'\n\ntype ChipSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ChipColoringStyle = 'solid' | 'tonal' | null\n\nconst chipColors = ButtonUtil.colors\nexport type ChipColor = typeof chipColors[number]\n\nexport const ChipUtil = {\n colors: chipColors,\n}\n\nexport type ChipProps = HTMLAttributes<HTMLDivElement> & {\n color?: ChipColor,\n coloringStyle?: ChipColoringStyle,\n size?: ChipSize,\n}\n\n/**\n * A component for displaying a single chip\n */\nexport const Chip = ({\n children,\n color = 'neutral',\n coloringStyle = 'solid',\n size = 'md',\n ...props\n}: ChipProps) => {\n return (\n <div\n {...props}\n\n data-name={props['data-name'] ?? 'chip'}\n data-color={color ?? undefined}\n data-coloringstyle={coloringStyle ?? undefined}\n data-size={size ?? undefined}\n >\n {children}\n </div>\n )\n}\n\nexport type ChipListProps = HTMLAttributes<HTMLUListElement> & {\n list: ChipProps[],\n}\n\n/**\n * A component for displaying a list of chips\n */\nexport const ChipList = ({\n list,\n ...props\n}: ChipListProps) => {\n return (\n <ul {...props} data-name={props['data-name'] ?? 'chip-list'}>\n {list.map((value, index) => (\n <li key={index}>\n <Chip\n key={index}\n {...value}\n >\n {value.children}\n </Chip>\n </li>\n ))}\n </ul>\n )\n}\n","import type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type CircleProps = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'color'> & {\n radius: number,\n className?: string,\n}\n\nexport const Circle = ({\n radius = 20,\n className = 'bg-primary',\n style,\n ...restProps\n}: CircleProps) => {\n const size = radius * 2\n return (\n <div\n className={clsx(`rounded-full`, className)}\n style={{\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }}\n {...restProps}\n />\n )\n}\n","import { ChevronDown } from 'lucide-react'\nimport type { HTMLAttributes } from 'react'\n\nexport type ExpansionIconProps = HTMLAttributes<HTMLDivElement> & {\n isExpanded: boolean,\n disabled?: boolean,\n}\n\nexport const ExpansionIcon = ({\n children,\n isExpanded,\n disabled = false,\n ...props\n}: ExpansionIconProps) => {\n\n return (\n <div\n {...props}\n data-name=\"expansion-icon\"\n data-expanded={isExpanded ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n >\n {children ? (\n children\n ) : (\n <ChevronDown\n aria-hidden={true}\n className=\"size-4\"\n />\n )}\n </div>\n )\n}","export type ProgressIndicatorProps = {\n /*\n The amount of progress that has been made\n Value base 0 to 1\n */\n progress: number,\n strokeWidth?: number,\n size?: keyof typeof sizeMapping,\n direction?: 'clockwise' | 'counterclockwise',\n /*\n Rotation of the starting point of the indicator\n default start at 3 o'clock\n Given in degree\n */\n rotation?: number,\n}\n\nconst sizeMapping = { small: 16, medium: 24, big: 48 }\n\n/**\n * A progress indicator\n *\n * Start rotation is 3 o'clock and fills counterclockwise\n *\n * Progress is given from 0 to 1\n */\nexport const ProgressIndicator = ({\n progress,\n strokeWidth = 5,\n size = 'medium',\n direction = 'counterclockwise',\n rotation = 0\n}: ProgressIndicatorProps) => {\n const currentSize = sizeMapping[size]\n const center = currentSize / 2\n const radius = center - strokeWidth / 2\n const arcLength = 2 * Math.PI * radius\n const arcOffset = arcLength * progress\n if (direction === 'clockwise') {\n rotation += 360 * progress\n }\n return (\n <svg\n style={{\n height: `${currentSize}px`,\n width: `${currentSize}px`,\n transform: `rotate(${rotation}deg)`\n }}\n >\n <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n className=\"stroke-progress-indicator-fill\"\n />\n <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n strokeDasharray={arcLength} strokeDashoffset={arcOffset} className=\"stroke-progress-indicator-background\"\n />\n </svg>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { Circle } from './Circle'\nimport clsx from 'clsx'\n\nexport type RingProps = {\n innerSize: number, // the size of the entire circle including the circleWidth\n width: number,\n className?: string,\n};\n\nexport const Ring = ({\n innerSize = 20,\n width = 7,\n className = 'outline-primary',\n}: RingProps) => {\n return (\n <div\n className={clsx(`bg-transparent rounded-full outline`, className)}\n style={{\n width: `${innerSize}px`,\n height: `${innerSize}px`,\n outlineWidth: `${width}px`,\n }}\n />\n )\n}\n\nexport type AnimatedRingProps = RingProps & {\n fillAnimationDuration?: number, // in seconds, 0 means no animation\n repeating?: boolean,\n onAnimationFinished?: () => void,\n style?: CSSProperties,\n};\n\nexport const AnimatedRing = ({\n innerSize,\n width,\n className,\n fillAnimationDuration = 3,\n repeating = false,\n onAnimationFinished,\n style,\n}: AnimatedRingProps) => {\n const [currentWidth, setCurrentWidth] = useState(0)\n const milliseconds = 1000 * fillAnimationDuration\n\n const animate = useCallback((timestamp: number, startTime: number) => {\n const progress = Math.min((timestamp - startTime) / milliseconds, 1)\n const newWidth = Math.min(width * progress, width)\n\n setCurrentWidth(newWidth)\n\n if (progress < 1) {\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, startTime))\n } else {\n onAnimationFinished?.()\n if (repeating) {\n setCurrentWidth(0)\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, newTimestamp))\n }\n }\n }, [milliseconds, onAnimationFinished, repeating, width])\n\n useEffect(() => {\n if (currentWidth < width) {\n requestAnimationFrame((timestamp) => animate(timestamp, timestamp))\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div\n className=\"flex-row-2 items-center justify-center\"\n style={{\n width: `${innerSize + 2 * width}px`,\n height: `${innerSize + 2 * width}px`,\n ...style,\n }}\n >\n <Ring\n innerSize={innerSize}\n width={currentWidth}\n className={className}\n />\n </div>\n )\n}\n\nexport type RingWaveProps = Omit<AnimatedRingProps, 'innerSize'> & {\n startInnerSize: number,\n endInnerSize: number,\n style?: CSSProperties,\n};\n\nexport const RingWave = ({\n startInnerSize = 20,\n endInnerSize = 30,\n width,\n className,\n fillAnimationDuration = 3,\n repeating = false,\n onAnimationFinished,\n style\n}: RingWaveProps) => {\n const [currentInnerSize, setCurrentInnerSize] = useState(startInnerSize)\n const distance = endInnerSize - startInnerSize\n const milliseconds = 1000 * fillAnimationDuration\n\n const animate = useCallback((timestamp: number, startTime: number) => {\n const progress = Math.min((timestamp - startTime) / milliseconds, 1)\n const newInnerSize = Math.min(\n startInnerSize + distance * progress,\n endInnerSize\n )\n\n setCurrentInnerSize(newInnerSize)\n\n if (progress < 1) {\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, startTime))\n } else {\n onAnimationFinished?.()\n if (repeating) {\n setCurrentInnerSize(startInnerSize)\n requestAnimationFrame((newTimestamp) => animate(newTimestamp, newTimestamp))\n }\n }\n }, [distance, endInnerSize, milliseconds, onAnimationFinished, repeating, startInnerSize])\n\n useEffect(() => {\n if (currentInnerSize < endInnerSize) {\n requestAnimationFrame((timestamp) => animate(timestamp, timestamp))\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div\n className=\"flex-row-2 items-center justify-center\"\n style={{\n width: `${endInnerSize + 2 * width}px`,\n height: `${endInnerSize + 2 * width}px`,\n ...style\n }}\n >\n <Ring\n innerSize={currentInnerSize}\n width={width}\n className={className}\n />\n </div>\n )\n}\n\nexport type RadialRingsProps = {\n circle1ClassName?: string,\n circle2ClassName?: string,\n circle3ClassName?: string,\n waveWidth?: number,\n waveBaseColor?: string,\n sizeCircle1?: number,\n sizeCircle2?: number,\n sizeCircle3?: number,\n};\n\n// TODO use fixed colors here to avoid artifacts\nexport const RadialRings = ({\n circle1ClassName = 'bg-primary/90 outline-primary/90',\n circle2ClassName = 'bg-primary/60 outline-primary/60',\n circle3ClassName = 'bg-primary/40 outline-primary/40',\n waveWidth = 10,\n waveBaseColor = 'outline-white/20',\n sizeCircle1 = 100,\n sizeCircle2 = 200,\n sizeCircle3 = 300\n}: RadialRingsProps) => {\n const [currentRing, setCurrentRing] = useState(0)\n const size = sizeCircle3\n\n return (\n <div\n className=\"relative\"\n style={{\n width: `${sizeCircle3}px`,\n height: `${sizeCircle3}px`,\n }}\n >\n <Circle\n radius={sizeCircle1 / 2}\n className={clsx(circle1ClassName, `absolute z-[10] -translate-y-1/2 -translate-x-1/2`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`\n }}\n />\n {currentRing === 0 ? (\n <AnimatedRing\n innerSize={sizeCircle1}\n width={(sizeCircle2 - sizeCircle1) / 2}\n onAnimationFinished={() =>\n currentRing === 0 ? setCurrentRing(1) : null\n }\n repeating={true}\n className={clsx(circle2ClassName,\n { 'opacity-5': currentRing !== 0 })}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 9\n }}\n />\n ) : null}\n {currentRing === 2 ? (\n <RingWave\n startInnerSize={sizeCircle1 - waveWidth}\n endInnerSize={sizeCircle2}\n width={waveWidth}\n repeating={true}\n className={clsx(waveBaseColor, `opacity-5`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 9,\n }}\n />\n ) : null}\n <Circle\n radius={sizeCircle2 / 2}\n className={clsx(circle2ClassName,\n { 'opacity-20': currentRing < 1 },\n `absolute z-[8] -translate-y-1/2 -translate-x-1/2`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`\n }}\n />\n {currentRing === 1 ? (\n <AnimatedRing\n innerSize={sizeCircle2 - 1} // potentially harmful\n width={(sizeCircle3 - sizeCircle2) / 2}\n onAnimationFinished={() =>\n currentRing === 1 ? setCurrentRing(2) : null\n }\n repeating={true}\n className={clsx(circle3ClassName)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 7,\n }}\n />\n ) : null}\n {currentRing === 2 ? (\n <RingWave\n startInnerSize={sizeCircle2}\n endInnerSize={sizeCircle3 - waveWidth}\n width={waveWidth}\n repeating={true}\n className={clsx(waveBaseColor, `opacity-5`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`,\n position: 'absolute',\n translate: `-50% -50%`,\n zIndex: 7,\n }}\n />\n ) : null}\n <Circle\n radius={sizeCircle3 / 2}\n className={clsx(circle3ClassName,\n { 'opacity-20': currentRing < 2 },\n `absolute z-[6] -translate-y-1/2 -translate-x-1/2`)}\n style={{\n left: `${size / 2}px`,\n top: `${size / 2}px`\n }}\n />\n </div>\n )\n}\n","import Image from 'next/image'\n\nexport type TagProps = {\n size?: number,\n className?: string,\n}\n\n/**\n * Tag icon from flaticon\n *\n * https://www.flaticon.com/free-icon/price-tag_721550?term=label&page=1&position=8&origin=tag&related_id=721550\n *\n * When using it make attribution\n */\nexport const TagIcon = ({\n className,\n size = 16,\n}: TagProps) => {\n return (\n <Image\n style={{ width: `${size}px`, height: `${size}px`, minWidth: `${size}px`, minHeight: `${size}px` }}\n width={size}\n height={size}\n alt=\"\"\n src=\"https://cdn.helpwave.de/icons/label.png\"\n className={className}\n />\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { useId, useMemo, forwardRef } from 'react'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type FormFieldAriaAttributes = Pick<HTMLAttributes<HTMLElement>, 'aria-labelledby' | 'aria-describedby' | 'aria-disabled' | 'aria-readonly' | 'aria-invalid' | 'aria-errormessage' | 'aria-required'>\n\nexport type FormFieldInteractionStates = {\n invalid: boolean,\n disabled: boolean,\n readOnly: boolean,\n required: boolean,\n}\n\nexport type FormFieldLayoutIds = {\n input: string,\n error: string,\n label: string,\n description: string,\n}\n\nexport type FormFieldLayoutBag = {\n interactionStates: FormFieldInteractionStates,\n ariaAttributes: FormFieldAriaAttributes,\n id: string,\n}\n\nexport type FormFieldLayoutProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & Omit<Partial<FormFieldInteractionStates>, 'invalid'> & {\n children: (bag: FormFieldLayoutBag) => ReactNode,\n ids?: Partial<FormFieldLayoutIds>,\n label?: ReactNode,\n labelProps?: Omit<HTMLAttributes<HTMLLabelElement>, 'children' | 'id'>,\n invalidDescription?: ReactNode,\n invalidDescriptionProps?: Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'id'>,\n description?: ReactNode,\n descriptionProps?: Omit<HTMLAttributes<HTMLParagraphElement>, 'children' | 'id'>,\n}\n\nexport const FormFieldLayout = forwardRef<HTMLDivElement, FormFieldLayoutProps>(function FormFieldLayout({\n children,\n ids: idOverwrites = {},\n required = false,\n disabled = false,\n readOnly = false,\n label,\n labelProps,\n invalidDescription,\n invalidDescriptionProps,\n description,\n descriptionProps,\n ...props\n}, ref) {\n const generatedId = useId()\n\n const ids = useMemo(() => ({\n input: idOverwrites.input ?? `form-field-input-${generatedId}`,\n error: idOverwrites.error ?? `form-field-error-${generatedId}`,\n label: idOverwrites.label ?? `form-field-label-${generatedId}`,\n description: idOverwrites.description ?? `form-field-description-${generatedId}`\n }), [generatedId, idOverwrites])\n\n const describedBy: string = [\n description ? ids.description : undefined,\n invalidDescription ? ids.error : undefined,\n ].filter(Boolean).join(' ')\n\n const invalid = !!invalidDescription\n\n const inputAriaAttributes: FormFieldAriaAttributes = useMemo(() => ({\n 'aria-required': required,\n 'aria-describedby': describedBy,\n 'aria-labelledby': label ? ids.label : undefined,\n 'aria-invalid': invalid,\n 'aria-errormessage': invalid ? ids.error : undefined,\n }), [describedBy, ids.error, ids.label, invalid, label, required])\n\n const state: FormFieldInteractionStates = useMemo(() => ({\n disabled,\n invalid,\n readOnly,\n required,\n }), [disabled, invalid, readOnly, required])\n\n const bag: FormFieldLayoutBag = {\n interactionStates: state,\n ariaAttributes: inputAriaAttributes,\n id: ids.input,\n }\n\n return (\n <div\n {...props}\n ref={ref}\n\n data-name={PropsUtil.dataAttributes.name('form-field-container', props)}\n >\n {label && (\n <label\n {...labelProps}\n id={ids.label}\n htmlFor={ids.input}\n data-name=\"form-field-label\"\n >\n {label}\n {required && <div role=\"none\" className=\"bg-primary w-2 h-2 rounded-full\" />}\n </label>\n )}\n {description && (\n <p\n {...descriptionProps}\n id={ids.description}\n\n data-name=\"form-field-description\"\n >\n {description}\n </p>\n )}\n {children(bag)}\n {invalid && (\n <div\n {...invalidDescriptionProps}\n id={ids.description}\n\n data-name=\"form-field-error\"\n\n role=\"alert\"\n aria-hidden={!invalid}\n aria-live=\"polite\"\n >\n {invalidDescription}\n </div>\n )}\n </div>\n )\n})\n","export const equalSizeGroups = <T>(array: T[], groupSize: number): T[][] => {\n if (groupSize <= 0) {\n console.warn(`group size should be greater than 0: groupSize = ${groupSize}`)\n return [[...array]]\n }\n\n const groups = []\n for (let i = 0; i < array.length; i += groupSize) {\n groups.push(array.slice(i, Math.min(i + groupSize, array.length)))\n }\n return groups\n}\n\nexport type RangeOptions = {\n /** Whether the range can be defined empty via end < start without a warning */\n allowEmptyRange: boolean,\n stepSize: number,\n exclusiveStart: boolean,\n exclusiveEnd: boolean,\n}\n\nconst defaultRangeOptions: RangeOptions = {\n allowEmptyRange: false,\n stepSize: 1,\n exclusiveStart: false,\n exclusiveEnd: true,\n}\n\n/**\n * @param endOrRange The end value or a range [start, end], end is exclusive\n * @param options the options for defining the range\n */\nexport const range = (endOrRange: number | [number, number], options?: Partial<RangeOptions>): number[] => {\n const { allowEmptyRange, stepSize, exclusiveStart, exclusiveEnd } = { ...defaultRangeOptions, ...options }\n let start = 0\n let end: number\n if (typeof endOrRange === 'number') {\n end = endOrRange\n } else {\n start = endOrRange[0]\n end = endOrRange[1]\n }\n if (!exclusiveEnd) {\n end -= 1\n }\n if (exclusiveStart) {\n start += 1\n }\n\n if (end - 1 < start) {\n if (!allowEmptyRange) {\n console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set options.allowEmptyRange to true`)\n }\n return []\n }\n return Array.from({ length: end - start }, (_, index) => index * stepSize + start)\n}\n\n/** Finds the closest match\n * @param list The list of all possible matches\n * @param firstCloser Return whether item1 is closer than item2\n */\nexport const closestMatch = <T>(list: T[], firstCloser: (item1: T, item2: T) => boolean) => {\n return list.reduce((item1, item2) => {\n return firstCloser(item1, item2) ? item1 : item2\n })\n}\n\n/**\n * returns the item in middle of a list and its neighbours before and after\n * e.g. [1,2,3,4,5,6] for item = 1 would return [5,6,1,2,3]\n */\nexport const getNeighbours = <T>(list: T[], item: T, neighbourDistance: number = 2) => {\n const index = list.indexOf(item)\n const totalItems = neighbourDistance * 2 + 1\n if (list.length < totalItems) {\n console.warn('List is to short')\n return list\n }\n\n if (index === -1) {\n console.error('item not found in list')\n return list.splice(0, totalItems)\n }\n\n let start = index - neighbourDistance\n if (start < 0) {\n start += list.length\n }\n const end = (index + neighbourDistance + 1) % list.length\n\n const result: T[] = []\n let ignoreOnce = list.length === totalItems\n for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {\n result.push(list[i]!)\n if (end === i && ignoreOnce) {\n ignoreOnce = false\n }\n }\n return result\n}\n\nexport const createLoopingListWithIndex = <T>(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n if (length < 0) {\n console.warn(`createLoopingList: length must be >= 0, given ${length}`)\n } else if (length === 0) {\n length = list.length\n }\n\n const returnList: [number, T][] = []\n\n if (forwards) {\n for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {\n returnList.push([i, list[i]!])\n }\n } else {\n for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {\n returnList.push([i, list[i]!])\n }\n }\n\n return returnList\n}\n\nexport const createLoopingList = <T>(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item)\n}\n\n/**\n * @param list The list to be changed\n * @param move The shifting applied to the array (can be negative)\n */\nconst moveItems = <T>(list: T[], move: number = 0) => {\n const result = []\n let start = move\n if (start < 0) {\n start = list.length - move\n }\n start = start % list.length\n for (let i = 0; i < list.length; i++) {\n result[i] = list[(i + start) % list.length]\n }\n return result\n}\n\nfunction resolveSingleOrArray<T>(value: T | T[]): T[] {\n if (Array.isArray(value)) {\n return value\n } else if (value) {\n return [value]\n }\n return []\n}\n\nexport const ArrayUtil = {\n unique: <T>(list: T[]): T[] => {\n const seen = new Set<T>()\n return list.filter((item) => {\n if (seen.has(item)) {\n return false\n }\n seen.add(item)\n return true\n })\n },\n difference: <T>(list: T[], removeList: T[]): T[] => {\n const remove = new Set<T>(removeList)\n return list.filter((item) => !remove.has(item))\n },\n moveItems,\n resolveSingleOrArray\n}\n","import type React from 'react'\nimport type { SingleOrArray } from './typing'\nimport { ArrayUtil } from './array'\nimport type { FormFieldInteractionStates } from '../components/form/FieldLayout'\nimport type { HTMLAttributes } from 'react'\n\n///\n/// Data Attributes\n///\n\nfunction bool(isActive: boolean): string | undefined {\n return isActive ? '' : undefined\n}\n\nfunction name(name: string, props: Record<string, unknown> = {}): string {\n return props['data-name'] ? String(props['data-name']) : name\n}\n\ntype InteractionStateDataAttributes = {\n 'data-disabled': string | undefined,\n 'data-invalid': string | undefined,\n 'data-readonly': string | undefined,\n 'data-required': string | undefined,\n}\nfunction interactionStatesData(interactionStates: Partial<FormFieldInteractionStates>): Partial<InteractionStateDataAttributes> {\n return {\n 'data-disabled': bool(!!interactionStates.disabled),\n 'data-invalid': bool(!!interactionStates.invalid),\n 'data-readonly': bool(!!interactionStates.readOnly),\n 'data-required': bool(!!interactionStates.required),\n }\n}\n\nconst dataAttributes = {\n bool,\n name,\n interactionStates: interactionStatesData,\n}\n\n///\n/// DOM Event handling\n///\n\ntype MouseEventExtenderProps<T> = {\n fromProps?: React.MouseEventHandler<T>,\n extensions: SingleOrArray<React.MouseEventHandler<T>>,\n}\n\nfunction mouseEventExtender<T>({\n fromProps,\n extensions\n}: MouseEventExtenderProps<T>): React.MouseEventHandler<T> {\n return (event) => {\n fromProps?.(event)\n ArrayUtil.resolveSingleOrArray(extensions)\n .forEach(element => element(event))\n }\n}\n\ntype KeyoardEventExtenderProps<T> = {\n fromProps: React.KeyboardEventHandler<T>,\n extensions: SingleOrArray<React.KeyboardEventHandler<T>>,\n}\n\nfunction keyboardEventExtender<T>({\n fromProps,\n extensions,\n}: KeyoardEventExtenderProps<T>): React.KeyboardEventHandler<T> {\n return (event) => {\n fromProps?.(event)\n ArrayUtil.resolveSingleOrArray(extensions)\n .forEach(element => element(event))\n }\n}\n\nconst extender = {\n mouseEvent: mouseEventExtender,\n keyboardEvent: keyboardEventExtender\n}\n\n///\n/// ARIA & Accessibility\n///\n\nfunction click<T>(onClick: () => void) {\n const keyboardEventHandler: React.KeyboardEventHandler<T> = (event) => {\n if (event.key === 'Enter' || event.key === 'Space') {\n onClick()\n }\n }\n\n return {\n onClick: onClick,\n onKeyDown: keyboardEventHandler,\n }\n}\n\nfunction close<T>(onClose: () => void): React.KeyboardEventHandler<T> {\n return (event) => {\n if (event.key === 'Escape') {\n onClose()\n }\n }\n}\n\ntype NavigateType<T> = {\n left?: (event: React.KeyboardEvent<T>) => void,\n right?: (event: React.KeyboardEvent<T>) => void,\n up?: (event: React.KeyboardEvent<T>) => void,\n down?: (event: React.KeyboardEvent<T>) => void,\n}\nfunction navigate<T>({\n left,\n right,\n up,\n down,\n}: NavigateType<T>): React.KeyboardEventHandler<T> {\n return (event) => {\n switch (event.key) {\n case 'ArrowLeft':\n left(event)\n break\n case 'ArrowRight':\n right(event)\n break\n case 'ArrowUp':\n up(event)\n break\n case 'ArrowDown':\n down(event)\n break\n }\n }\n}\n\ntype InteractionStateARIAAttributes = Pick<HTMLAttributes<HTMLDivElement>, 'aria-disabled' | 'aria-invalid' | 'aria-readonly' | 'aria-required'>\n\nfunction interactionStatesAria(\n interactionStates: Partial<FormFieldInteractionStates>,\n props: Partial<InteractionStateARIAAttributes> = {}\n): Partial<InteractionStateARIAAttributes> {\n return {\n 'aria-disabled': props['aria-disabled'] ?? interactionStates.disabled,\n 'aria-invalid': props['aria-invalid'] ?? interactionStates.invalid,\n 'aria-readonly': props['aria-readonly'] ?? interactionStates.readOnly,\n 'aria-required': props['aria-required'] ?? interactionStates.required,\n }\n}\n\nconst aria = {\n close,\n click,\n navigate,\n interactionStates: interactionStatesAria,\n}\n\nexport const PropsUtil = {\n extender,\n dataAttributes,\n aria,\n}","import type { PropsWithChildren, ReactNode } from 'react'\nimport { createContext, useCallback, useContext, useSyncExternalStore } from 'react'\nimport type { FormValue } from './FormStore'\nimport type { UseCreateFormResult } from './useCreateForm'\nimport type { FormFieldDataHandling } from './FormField'\n\nexport type FormContextType<T extends FormValue> = UseCreateFormResult<T>\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const FormContext = createContext<FormContextType<any> | null>(null)\n\nexport type FormProviderProps<T extends FormValue> = PropsWithChildren & {\n state: FormContextType<T>,\n}\n\nexport const FormProvider = <T extends FormValue>({ children, state }: FormProviderProps<T>) => {\n return (\n <FormContext.Provider value={state}>\n {children}\n </FormContext.Provider>\n )\n}\n\nexport function useForm<T extends FormValue>() {\n const ctx = useContext(FormContext)\n if (!ctx) throw new Error('FormContext is only available inside a <Form>')\n return ctx as FormContextType<T>\n}\n\nexport type FormFieldResult<T> = {\n value: T,\n error: ReactNode,\n dataProps: FormFieldDataHandling<T>,\n registerRef: (el: HTMLElement | null) => void,\n}\n\nexport function useFormField<T extends FormValue, K extends keyof T>(key: K): FormFieldResult<T[K]> | null {\n const context = useContext(FormContext)\n\n const subscribe = useCallback((cb: () => void) => {\n if (!context) return () => { }\n return context.store.subscribe(key, cb)\n }, [context, key])\n\n const value = useSyncExternalStore(\n subscribe,\n () => context ? context.store.getValue(key) : undefined\n )\n\n const error = useSyncExternalStore(\n subscribe,\n () => context ? context.store.getError(key) : undefined\n )\n\n if (!context) return null\n\n const { registerRef, getDataProps } = context\n\n return {\n value,\n error,\n dataProps: getDataProps(key),\n registerRef: registerRef(key),\n }\n}","import type { FormFieldAriaAttributes, FormFieldInteractionStates } from './FieldLayout'\nimport { FormFieldLayout, type FormFieldLayoutProps } from './FieldLayout'\nimport { useFormField } from './FormContext'\nimport type { ReactNode } from 'react'\nimport type { FormValue } from './FormStore'\n\nexport type FormFieldFocusableElementProps = FormFieldAriaAttributes & {\n id: string,\n ref: (element: HTMLElement | null) => void,\n}\n\nexport type FormFieldBag<T extends FormValue, K extends keyof T> = {\n dataProps: FormFieldDataHandling<T[K]>,\n focusableElementProps: FormFieldFocusableElementProps,\n interactionStates: FormFieldInteractionStates,\n}\n\nexport interface FormFieldProps<T extends FormValue, K extends keyof T> extends Omit<FormFieldLayoutProps, 'invalidDescription' | 'children'> {\n children: (bag: FormFieldBag<T, K>) => ReactNode,\n name: K,\n}\n\nexport type FormFieldDataHandling<T> = {\n value: T,\n onValueChange: (value: T) => void,\n onEditComplete: (value: T) => void,\n}\n\nexport const FormField = <T extends FormValue, K extends keyof T>({ children, name, ...props }: FormFieldProps<T, K>) => {\n const formField = useFormField<T, K>(name)\n\n if (!formField) {\n throw new Error('<FormField> can only be used inside a FormContext try wrapping your app in a <FormProvider>')\n }\n\n return (\n <FormFieldLayout {...props} invalidDescription={formField.error}>\n {(formFieldLayoutBag) => children({\n dataProps: formField.dataProps,\n focusableElementProps: {\n id: formFieldLayoutBag.id,\n ...formFieldLayoutBag.ariaAttributes,\n ref: formField.registerRef,\n },\n interactionStates: formFieldLayoutBag.interactionStates\n })}\n </FormFieldLayout>\n )\n}","import type { ReactNode } from 'react'\n\nexport type FormValidationBehaviour = 'always' | 'touched' | 'submit'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FormValue = Record<string, any>\n\nexport type FormEvent<T extends FormValue> = {\n type: 'submit',\n key: 'ALL',\n values: T,\n} | {\n type: 'submitError',\n key: 'ALL',\n values: T,\n errors: Partial<Record<keyof T, ReactNode>>,\n} | {\n type: 'reset',\n key: 'ALL',\n values: T,\n errors: Partial<Record<keyof T, ReactNode>>,\n} | {\n type: 'onChange',\n key: keyof T,\n value: T[keyof T],\n} | {\n type: 'onError',\n key: keyof T,\n value: T[keyof T],\n error: ReactNode,\n}\n\nexport type FormEventListener<T extends FormValue> = (event: FormEvent<T>) => void\n\nexport type FormValidator<T extends FormValue> = (value: T[keyof T]) => ReactNode\n\nexport type FormStoreProps<T extends FormValue> = {\n initialValues: T,\n hasTriedSubmitting?: boolean,\n validators?: Partial<{ [K in keyof T]: (v: T[K]) => ReactNode }>,\n validationBehaviour?: FormValidationBehaviour,\n}\n\nexport class FormStore<T extends FormValue> {\n private values: T\n private initialValues: T\n private validators: Partial<{ [K in keyof T]: FormValidator<T> }>\n private validationBehaviour: FormValidationBehaviour\n\n private hasTriedSubmitting: boolean = false\n private errors: Partial<Record<keyof T, ReactNode>> = {}\n private touched: Partial<Record<keyof T, boolean>> = {}\n\n private listeners = new Map<keyof T | 'ALL', Set<FormEventListener<T>>>()\n\n constructor({\n initialValues,\n hasTriedSubmitting,\n validators = {},\n validationBehaviour = 'touched',\n }: FormStoreProps<T>) {\n this.initialValues = initialValues\n this.values = { ...initialValues }\n this.hasTriedSubmitting = hasTriedSubmitting\n this.validators = validators\n this.validationBehaviour = validationBehaviour\n this.validateAll()\n }\n\n // Values\n getValue<K extends keyof T>(key: K): T[K] {\n return this.values[key]\n }\n\n getAllValues(): T {\n return { ...this.values }\n }\n\n setValue<K extends keyof T>(key: K, value: T[K]) {\n if (this.values[key] === value) return\n\n this.values[key] = value\n this.validate(key)\n this.notify({ type: 'onChange', key, value })\n }\n\n setValues(values: Partial<T>) {\n Object.keys(values).forEach(key => this.setValue(key, values[key]))\n }\n\n // Touched\n getTouched(key: keyof T): boolean {\n return !!this.touched[key]\n }\n\n setTouched(key: keyof T, isTouched: boolean = true) {\n if (this.touched[key] === isTouched) return\n\n this.touched[key] = isTouched\n this.validate(key)\n }\n\n // Error and Validation\n getHasError() : boolean {\n return Object.values(this.errors).some(value => value !== undefined && value !== null)\n }\n\n getErrors(): Partial<Record<keyof T, ReactNode>> {\n return { ...this.errors }\n }\n\n getError(key: keyof T): ReactNode {\n return this.errors[key]\n }\n\n private setError(key: keyof T, error: ReactNode) {\n if (this.errors[key] === error) return\n\n if (error === undefined || error === null) {\n delete this.errors[key]\n } else {\n this.errors[key] = error\n }\n\n this.notify({ type: 'onError', key, value: this.values[key], error })\n }\n\n changeValidationBehavoir(validationBehaviour: FormValidationBehaviour) {\n if(validationBehaviour === this.validationBehaviour) return\n this.validationBehaviour = validationBehaviour\n this.validateAll()\n }\n\n changeValidators(validators: Partial<Record<keyof T, FormValidator<T>>>) {\n this.validators = { ...this.validators, ...validators }\n this.validateAll()\n }\n\n validate(key: keyof T) {\n const validator = this.validators[key]\n\n const shouldValidate =\n this.validationBehaviour === 'always' ||\n (this.validationBehaviour === 'touched' && this.touched[key]) ||\n (this.validationBehaviour === 'submit' && this.hasTriedSubmitting)\n\n if (!validator || !shouldValidate) {\n this.setError(key, undefined)\n return\n }\n\n const error = validator(this.values[key])\n this.setError(key, error)\n }\n\n validateAll() {\n Object.keys(this.initialValues).forEach(key => {\n this.validate(key)\n })\n }\n\n // Obeserver\n subscribe(key: keyof T | 'ALL', listener: FormEventListener<T>): () => void {\n if (!this.listeners.has(key)) {\n this.listeners.set(key, new Set())\n }\n this.listeners.get(key)!.add(listener)\n\n return () => {\n this.listeners.get(key)?.delete(listener)\n if (this.listeners.get(key)?.size === 0) {\n this.listeners.delete(key)\n }\n }\n }\n\n private notify(event: FormEvent<T>) {\n const key = event.key\n if(key !== 'ALL') {\n this.listeners.get(key)?.forEach((listener) => listener(event))\n }\n this.listeners.get('ALL')?.forEach((listener) => listener(event))\n }\n\n // Form\n submit() {\n this.hasTriedSubmitting = true\n\n // Mark all as touched on submit\n Object.keys(this.initialValues).forEach((k) => {\n this.touched[k as keyof T] = true\n this.validate(k as keyof T)\n })\n\n const hasErrors = Object.keys(this.errors).length > 0\n\n if (hasErrors) {\n this.notify({\n type: 'submitError',\n key: 'ALL',\n errors: this.errors,\n values: this.values\n })\n } else {\n this.notify({\n type: 'submit',\n key: 'ALL',\n values: this.values\n })\n }\n }\n\n reset() {\n this.values = { ...this.initialValues }\n this.hasTriedSubmitting = false\n this.touched = {}\n Object.keys(this.initialValues).forEach(key => {\n this.notify({ type: 'onChange', key: key, value: this.values[key] })\n })\n this.validateAll()\n this.notify({ type: 'reset', key: 'ALL', values: this.values, errors: this.errors })\n }\n}","import { useCallback, useEffect, useMemo, useRef, type ReactNode } from 'react'\nimport type { FormEvent, FormStoreProps, FormValue } from './FormStore'\nimport { FormStore } from './FormStore'\nimport type { FormFieldDataHandling } from './FormField'\n\nexport type UseCreateFormProps<T extends FormValue> = FormStoreProps<T> & {\n onFormSubmit: (values: T) => void,\n onFormError?: (values: T, errors: Partial<Record<keyof T, ReactNode>>) => void,\n onValueChange?: (values: T) => void,\n /* Whether to scroll and focus the first element when submitting with an error or resetting */\n scrollToElements?: boolean,\n scrollOptions?: ScrollIntoViewOptions,\n}\n\nexport type UseCreateFormResult<T extends FormValue> = {\n store: FormStore<T>,\n reset: () => void,\n submit: () => void,\n update: (updater: Partial<T> | ((current: T) => Partial<T>)) => void,\n validateAll: () => void,\n getDataProps: <K extends keyof T>(key: K) => FormFieldDataHandling<T[K]>,\n getError: (key: keyof T) => ReactNode,\n getErrors: () => Partial<Record<keyof T, ReactNode>>,\n getIsValid: () => boolean,\n getValues: () => T,\n getValue: <K extends keyof T>(key: K) => T[K],\n registerRef: (key: keyof T) => (el: HTMLElement | null) => void,\n}\n\nexport function useCreateForm<T extends FormValue>({\n onFormSubmit,\n onFormError,\n onValueChange,\n initialValues,\n hasTriedSubmitting,\n validators,\n validationBehaviour,\n scrollToElements = true,\n scrollOptions = { behavior: 'smooth', block: 'center' },\n}: UseCreateFormProps<T>) : UseCreateFormResult<T> {\n const storeRef = useRef<FormStore<T>>(\n new FormStore<T>({\n initialValues,\n hasTriedSubmitting,\n validators,\n validationBehaviour,\n })\n )\n\n useEffect(() => {\n storeRef.current.changeValidationBehavoir(validationBehaviour)\n }, [validationBehaviour])\n\n useEffect(() => {\n storeRef.current.changeValidators(validators)\n }, [validators])\n\n const fieldRefs = useRef<Partial<Record<keyof T, HTMLElement | null>>>({})\n const registerRef = useCallback((key: keyof T) => {\n return (el: HTMLElement | null) => {\n fieldRefs.current[key] = el\n }\n }, [])\n\n useEffect(() => {\n const handleUpdate = (event: FormEvent<T>) => {\n if (event.type === 'submit') {\n onFormSubmit(event.values)\n } else if (event.type === 'submitError') {\n onFormError?.(event.values, event.errors)\n\n if (scrollToElements) {\n const errorInputs = (Object.keys(event.errors) as (keyof T)[])\n .filter((key) => event.errors[key])\n .map((key) => fieldRefs.current[key])\n .filter((el): el is HTMLElement => el !== null && el !== undefined)\n\n if (errorInputs.length > 0) {\n errorInputs.sort((a, b) => {\n const position = a.compareDocumentPosition(b)\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n return 0\n })\n\n errorInputs[0].scrollIntoView(scrollOptions)\n errorInputs[0].focus()\n }\n }\n } else if (event.type === 'reset') {\n if (scrollToElements) {\n const inputs = Object.values(fieldRefs.current).filter(\n (el): el is HTMLElement => el !== null && el !== undefined\n )\n if (inputs.length > 0) {\n inputs.sort((a, b) => {\n const position = a.compareDocumentPosition(b)\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n return 0\n })\n\n inputs[0].scrollIntoView(scrollOptions)\n inputs[0].focus()\n }\n }\n } else if (event.type === 'onChange') {\n onValueChange?.(storeRef.current.getAllValues())\n }\n }\n\n const unsubscribe = storeRef.current.subscribe('ALL', handleUpdate)\n return () => {\n unsubscribe()\n }\n }, [onFormError, onFormSubmit, onValueChange, scrollOptions, scrollToElements])\n\n const getDataProps = useCallback(<K extends keyof T>(key: K): FormFieldDataHandling<T[K]> => {\n return {\n value: storeRef.current.getValue(key),\n onValueChange: (val: T[K]) => storeRef.current.setValue(key, val),\n onEditComplete: (val: T[K]) => {\n storeRef.current.setValue(key, val)\n storeRef.current.setTouched(key)\n },\n }\n },[])\n\n const callbacks = useMemo(() => ({\n reset: () => storeRef.current.reset(),\n submit: () => storeRef.current.submit(),\n update: (updater: Partial<T> | ((current: T) => Partial<T>)) => {\n if (typeof updater === 'function') {\n storeRef.current.setValues(updater(storeRef.current.getAllValues()))\n } else {\n storeRef.current.setValues(updater)\n }\n },\n validateAll: () => storeRef.current.validateAll(),\n getError: (key: keyof T) => storeRef.current.getError(key),\n getErrors: () => storeRef.current.getErrors(),\n getIsValid: () => !storeRef.current.getHasError(),\n getValue: <K extends keyof T>(key: K) => storeRef.current.getValue(key),\n getValues: () => storeRef.current.getAllValues(),\n }), [])\n\n return {\n store: storeRef.current,\n ...callbacks,\n getDataProps,\n registerRef\n }\n}","import type { HTMLAttributes, ReactNode } from 'react'\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport clsx from 'clsx'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '@/src/utils/array'\nimport { Button } from '../user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\n//\n// CarouselContext\n//\ntype CarouselContextType = {\n id: string,\n currentIndex: number,\n slideCount: number,\n isLooping: boolean,\n}\n\nconst CarouselContext = createContext<CarouselContextType | null>(null)\n\nconst useCarouselContext = () => {\n const context = useContext(CarouselContext)\n if (!context) {\n console.error('useCarouselContext must be used within CarouselContext')\n }\n return context\n}\n\n//\n// CarouselTab\n//\ntype CarouselTabsProps = {\n onChange: (index: number) => void,\n}\n\nexport default function CarouselTabs({\n onChange,\n}: CarouselTabsProps) {\n const translation = useHightideTranslation()\n const { id, slideCount, currentIndex, isLooping } = useCarouselContext()\n\n const tabRefs = useRef<(HTMLButtonElement | null)[]>([])\n\n const handleKeyDown = (event: React.KeyboardEvent, index: number) => {\n let newIndex = index\n if (event.key === 'ArrowRight') {\n newIndex = isLooping ? (index + 1) % slideCount : Math.max(index + 1, slideCount - 1)\n } else if (event.key === 'ArrowLeft') {\n newIndex = isLooping ? (index - 1 + slideCount) % slideCount : Math.max(index - 1, 0)\n } else {\n return\n }\n event.preventDefault()\n onChange(newIndex)\n tabRefs.current[newIndex]?.focus()\n }\n\n return (\n <div\n className=\"flex-row-1 items-center justify-center w-full my-2\"\n role=\"tablist\"\n aria-label={translation('slideNavigation')}\n id={`${id}-tablist`}\n >\n {range(slideCount).map((index) => {\n const isSelected = currentIndex === index\n return (\n <button\n id={`${id}-tab-${index}`}\n key={index}\n ref={(el) => {\n tabRefs.current[index] = el\n }}\n onClick={() => onChange(index)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n\n className={clsx(\n 'w-8 min-w-8 h-3 min-h-3 first:rounded-l-md last:rounded-r-md',\n {\n 'bg-carousel-dot-disabled hover:bg-carousel-dot-active': currentIndex !== index,\n 'bg-carousel-dot-active hover:brightness-90': currentIndex === index,\n }\n )}\n\n type=\"button\"\n role=\"tab\"\n tabIndex={isSelected ? 0 : -1}\n aria-label={translation('showSlide', { index: (index + 1) })}\n aria-selected={isSelected}\n aria-controls={`slide-${index}`}\n aria-disabled={isSelected}\n />\n )\n })}\n </div>\n )\n}\n\n//\n// CarouselSlide\n//\nexport interface CarouselSlideProps extends HTMLAttributes<HTMLDivElement> {\n isSelected: boolean,\n index: number,\n}\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n function CarouselSlide({\n index,\n isSelected,\n ...props\n }, ref) {\n const translation = useHightideTranslation()\n const { id, slideCount } = useCarouselContext()\n\n return (\n <div\n {...props}\n ref={ref}\n id={`${id}-slide-${index}`}\n\n className={clsx('focus-style-none group/slide', props.className)}\n\n tabIndex={isSelected ? 0 : undefined}\n role=\"group\"\n aria-roledescription={translation('slide')}\n aria-label={translation('slideOf', {\n index: (index + 1),\n length: (slideCount),\n })}\n aria-hidden={isSelected ? undefined : true}\n />\n )\n }\n)\n\n//\n// Carousel\n//\ntype DragState = {\n dragStartX: number,\n dragOffsetX: number,\n}\n\ntype ItemType = {\n item: ReactNode,\n index: number,\n}\n\nexport type CarouselProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: ReactNode[],\n animationTime?: number,\n isLooping?: boolean,\n isAutoPlaying?: boolean,\n autoLoopingTimeOut?: number,\n autoLoopAnimationTime?: number,\n hintNext?: boolean,\n arrows?: boolean,\n dots?: boolean,\n /**\n * Percentage that is allowed to be scrolled further\n */\n overScrollThreshold?: number,\n blurColor?: string,\n heightClassName?: string,\n slideClassName?: string,\n slideContainerProps?: HTMLAttributes<HTMLDivElement>,\n onSlideChanged?: (index: number) => void,\n}\n\nexport const Carousel = ({\n children,\n animationTime = 200,\n isLooping = false,\n isAutoPlaying = false,\n autoLoopingTimeOut = 5000,\n autoLoopAnimationTime = 1000,\n hintNext = false,\n arrows = false,\n dots = true,\n blurColor = 'from-background',\n heightClassName = 'h-96',\n slideClassName = 'w-[70%] desktop:w-1/2',\n slideContainerProps,\n onSlideChanged,\n ...props\n}: CarouselProps) => {\n const translation = useHightideTranslation()\n const slideRefs = useRef<HTMLDivElement[]>([])\n const [currentIndex, setCurrentIndex] = useState<number>(0)\n const [hasFocus, setHasFocus] = useState(false)\n const [dragState, setDragState] = useState<DragState>()\n const isPaused = hasFocus\n const carouselContainerRef = useRef<HTMLDivElement>(null)\n const [disableClick, setDisableClick] = useState(false)\n\n const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n\n const length = useMemo(() => children.length, [children])\n const paddingItemCount = 3 // The number of items to append left and right of the list to allow for clean transition when looping\n\n const generatedId = 'carousel' + useId()\n const id = props.id ?? generatedId\n\n // Validation\n if (isAutoPlaying && !isLooping) {\n console.error('When isAutoLooping is true, isLooping should also be true')\n isLooping = true\n }\n autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut) // time between transitions\n animationTime = Math.max(100, animationTime) // in ms, must be > 0\n autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n useEffect(() => {\n const carousel = carouselContainerRef.current\n\n if (carousel) {\n function onFocus() {\n setHasFocus(true)\n }\n\n function onBlur() {\n setHasFocus(false)\n }\n\n\n carousel?.addEventListener('focusin', onFocus)\n carousel?.addEventListener('focusout', onBlur)\n return () => {\n carousel?.removeEventListener('focusin', onFocus)\n carousel?.removeEventListener('focusin', onFocus)\n }\n }\n }, [])\n\n const getStyleOffset = (index: number) => {\n const baseOffset = -50 + (index - currentIndex) * 100\n return `${baseOffset}%`\n }\n\n const canGoLeft = () => {\n return isLooping || currentIndex !== 0\n }\n\n const canGoRight = useCallback(() => {\n return isLooping || currentIndex !== length - 1\n }, [currentIndex, isLooping, length])\n\n const left = () => {\n if (canGoLeft()) {\n setCurrentIndex((currentIndex + length - 1) % length)\n }\n }\n\n const right = useCallback(() => {\n if (canGoRight()) {\n setCurrentIndex((currentIndex + length + 1) % length)\n }\n }, [canGoRight, currentIndex, length])\n\n useEffect(() => {\n if (!timeOut.current && !isPaused) {\n if (autoLoopingTimeOut > 0) {\n timeOut.current = setTimeout(() => {\n right()\n timeOut.current = undefined\n }, autoLoopingTimeOut)\n } else {\n right()\n }\n }\n if ((isPaused || !!dragState) && timeOut.current) {\n clearTimeout(timeOut.current)\n timeOut.current = undefined\n }\n }, [right, isPaused, autoLoopingTimeOut, dragState])\n\n\n let items: ItemType[] = children.map((item, index) => ({\n index,\n item\n }))\n let before: ItemType[] = []\n let after: ItemType[] = []\n if (isLooping) {\n before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n index,\n item\n }))\n after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n index,\n item\n }))\n\n items = [...before, ...items, ...after]\n }\n\n const handlePointerDown = (e: React.PointerEvent) => {\n setDragState({\n dragOffsetX: 0,\n dragStartX: e.clientX,\n })\n }\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (!dragState) return\n setDragState(prevState => ({ dragStartX: prevState.dragStartX, dragOffsetX: e.clientX - prevState.dragStartX }))\n }\n\n const handlePointerUp = () => {\n if (!dragState) return\n if (dragState.dragOffsetX > 50) {\n left()\n } else if (dragState.dragOffsetX < -50) {\n right()\n }\n setDragState(undefined)\n }\n\n useEffect(() => {\n setDisableClick(!dragState)\n }, [dragState])\n\n useEffect(() => {\n onSlideChanged?.(currentIndex)\n }, [currentIndex]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <CarouselContext.Provider value={{ id, currentIndex, slideCount: length, isLooping }}>\n <div\n ref={carouselContainerRef}\n {...props}\n className={clsx('flex-col-2 items-center w-full', props.className)}\n\n id={id}\n role=\"region\"\n aria-roledescription={translation('slide')}\n >\n <div\n {...slideContainerProps}\n className={clsx(`relative w-full overflow-hidden`, heightClassName, slideContainerProps?.className)}\n >\n {hintNext ? (\n <div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerLeave={handlePointerUp}\n className={clsx(`flex-row-2 relative h-full`, heightClassName)}\n >\n <div className=\"flex-row-2 relative h-full w-full px-2 overflow-hidden\">\n {items.map(({\n item,\n index\n }, listIndex) => {\n const isInItems = before.length <= listIndex && listIndex < items.length - after.length\n\n return (\n <CarouselSlide\n ref={isInItems ? slideRefs[index] : undefined}\n key={listIndex}\n index={index}\n isSelected={isInItems && currentIndex === index}\n className={clsx(\n `absolute left-[50%] h-full overflow-hidden transition-transform ease-in-out`,\n slideClassName\n )}\n onClick={() => !disableClick && setCurrentIndex(index)}\n style={{\n translate: `calc(${getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0))} + ${dragState ? dragState.dragOffsetX : 0}px)`,\n transitionDuration: dragState ? '0ms' : ((isAutoPlaying && !isPaused ? autoLoopAnimationTime : animationTime) + 'ms'),\n }}\n >\n {item}\n </CarouselSlide>\n )\n })}\n </div>\n <div\n className={clsx(`hidden desktop:block pointer-events-none absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n />\n <div\n className={clsx(`hidden desktop:block pointer-events-none absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n />\n </div>\n ) : (\n <div\n ref={slideRefs[currentIndex]}\n className={clsx('px-16 h-full')}\n\n tabIndex={0}\n role=\"group\"\n aria-roledescription={translation('slide')}\n aria-label={translation('slideOf', {\n index: (currentIndex + 1),\n length: items.length\n })}\n >\n {children[currentIndex]}\n </div>\n )}\n {arrows && (\n <>\n <Button\n layout=\"icon\"\n color=\"neutral\"\n className={clsx('absolute z-10 left-2 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoLeft() })}\n disabled={!canGoLeft()}\n onClick={() => left()}\n >\n <ChevronLeft size={24}/>\n </Button>\n <Button\n layout=\"icon\"\n color=\"neutral\"\n className={clsx('absolute z-10 right-2 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoRight() })}\n disabled={!canGoRight()}\n onClick={() => right()}\n >\n <ChevronRight size={24}/>\n </Button>\n </>\n )}\n </div>\n {dots && (<CarouselTabs onChange={setCurrentIndex}/>)}\n </div>\n </CarouselContext.Provider>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport { LocalizationUtil } from '../i18n/util'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport type { LocalizationConfig } from '@/src/contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/contexts/HightideConfigContext'\n\nexport type LocaleContextValue = {\n locale: HightideTranslationLocales,\n setLocale: Dispatch<SetStateAction<HightideTranslationLocales>>,\n}\n\nexport const LocaleContext = createContext<LocaleContextValue | null>(null)\n\ntype LocaleWithSystem = HightideTranslationLocales | 'system'\n\nexport type LocaleProviderProps = PropsWithChildren & Partial<LocalizationConfig> & {\n locale?: LocaleWithSystem,\n onChangedLocale?: (locale: HightideTranslationLocales) => void,\n}\n\nexport const LocaleProvider = ({\n children,\n locale,\n defaultLocale,\n onChangedLocale\n}: LocaleProviderProps) => {\n const {\n value: storedLocale,\n setValue: setStoredLocale,\n deleteValue: deleteStoredLocale,\n } = useLocalStorage<LocaleWithSystem>('locale', 'system')\n const { config } = useHightideConfig()\n const [localePreference, setLocalePreference] = useState<LocaleWithSystem>('system')\n\n const resolvedLocale = useMemo(() => {\n if (locale && locale !== 'system') {\n return locale\n }\n if (storedLocale && storedLocale !== 'system') {\n return storedLocale\n }\n if (localePreference !== 'system') {\n return localePreference\n }\n return config.locale.defaultLocale ?? defaultLocale\n }, [config.locale.defaultLocale, defaultLocale, locale, localePreference, storedLocale])\n\n useEffect(() => {\n if (!locale) return\n if (locale === 'system') {\n deleteStoredLocale()\n } else {\n setStoredLocale(locale)\n }\n }, [locale]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n onChangedLocale?.(resolvedLocale)\n }, [resolvedLocale]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const localesToTestAgainst = Object.values(LocalizationUtil.locals)\n\n const detectLanguage = () => {\n const matchingBrowserLanguage = window.navigator.languages\n .map(locale =>\n localesToTestAgainst.find(\n (test) => locale === test || locale.split('-')[0] === LocalizationUtil.localToLanguage(test)\n ))\n .filter((entry): entry is HightideTranslationLocales => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0]\n setLocalePreference(firstMatch)\n }\n detectLanguage()\n\n window.addEventListener('languagechange', detectLanguage)\n return () => {\n window.removeEventListener('languagechange', detectLanguage)\n }\n }, [])\n\n return (\n <LocaleContext.Provider value={{\n locale: resolvedLocale,\n setLocale: (newLocale) => {\n if (locale !== 'system') {\n console.warn('LocaleProvider: Attempting to change the ' +\n \"locale while setting a fixed locale won't have any effect. \" +\n 'Change the locale provided to the LocaleProvider instead.')\n }\n setStoredLocale(newLocale)\n }\n }}>\n {children}\n </LocaleContext.Provider>\n )\n}\n\nexport const useLocale = () => {\n const context = useContext(LocaleContext)\n if (!context) {\n throw new Error('useLocale must be used within LocaleContext. Try adding a LocaleProvider around your app.')\n }\n return context\n}\n\nexport const useLanguage = () => {\n const context = useContext(LocaleContext)\n if (!context) {\n throw new Error('useLanguage must be used within LocaleContext. Try adding a LocaleProvider around your app.')\n }\n return { language: LocalizationUtil.localToLanguage(context.locale) }\n}\n","'use client'\n\nimport type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useState } from 'react'\nimport { LocalStorageService } from '@/src/utils/storage'\nimport { resolveSetState } from '@/src/utils/resolveSetState'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\n\ntype UseLocalStorageResult<T> = {\n value: T,\n setValue: SetValue<T>,\n deleteValue: () => void,\n}\n\n/**\n * @param key Key under which to save the data\n * @param backupValue Used if the storage is unavailable or no value is present\n *\n * The backup value will never be saved to the storage unless you explicitly\n */\nexport const useLocalStorage = <T>(key: string, backupValue: T): UseLocalStorageResult<T> => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return backupValue\n }\n const storageService = new LocalStorageService()\n try {\n const value = storageService.get<T>(key)\n return value || backupValue\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_) {\n console.warn('useLocalStorage: Error while reading the stored value. Make sure your typing is correct.')\n storageService.delete(key)\n console.info(`useLocalStorage: deleted erroneous value for key: ${key}`)\n return backupValue\n }\n }, [backupValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(action => {\n const newValue = resolveSetState(action, storedValue)\n const storageService = new LocalStorageService()\n storageService.set(key, newValue)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n const deleteValue = () => {\n const storageService = new LocalStorageService()\n storageService.delete(key)\n setStoredValue(backupValue)\n }\n\n return { value: storedValue, setValue, deleteValue }\n}","class StorageService {\n // this seems to be a bug in eslint as 'paramter-properties' is a special syntax of typescript\n\n constructor(private storage: Storage) {\n }\n\n public get<T>(key: string): T | null {\n const value = this.storage.getItem(key)\n if (value === null) {\n return null\n }\n return JSON.parse(value)\n }\n\n public set<T>(key: string, value: T) {\n this.storage.setItem(key, JSON.stringify(value))\n }\n\n public delete(key: string) {\n this.storage.removeItem(key)\n }\n\n public deleteAll() {\n this.storage.clear()\n }\n}\n\nexport class LocalStorageService extends StorageService {\n constructor() {\n super(window.localStorage)\n }\n}\n\nexport class SessionStorageService extends StorageService {\n constructor() {\n super(window.sessionStorage)\n }\n}\n","import type { SetStateAction } from 'react'\n\nexport function resolveSetState<T>(action: SetStateAction<T>, prev: T): T {\n return typeof action === 'function' ? (action as (prev: T) => T)(prev) : action\n}","// AUTO-GENERATED. DO NOT EDIT.\n/* eslint-disable @stylistic/quote-props */\n/* eslint-disable no-useless-escape */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { Translation } from '@helpwave/internationalization'\nimport { TranslationGen } from '@helpwave/internationalization'\n\nexport const hightideTranslationLocales = ['de-DE', 'en-US'] as const\n\nexport type HightideTranslationLocales = typeof hightideTranslationLocales[number]\n\nexport type HightideTranslationEntries = {\n 'add': string,\n 'age': string,\n 'all': string,\n 'apply': string,\n 'back': string,\n 'cancel': string,\n 'carousel': string,\n 'change': string,\n 'chooseLanguage': string,\n 'chooseSlide': string,\n 'chooseTheme': string,\n 'clear': string,\n 'clearValue': string,\n 'click': string,\n 'clickToCopy': string,\n 'clickToSelect': string,\n 'close': string,\n 'confirm': string,\n 'copied': string,\n 'copy': string,\n 'create': string,\n 'decline': string,\n 'delete': string,\n 'discard': string,\n 'discardChanges': string,\n 'done': string,\n 'edit': string,\n 'endDate': string,\n 'enterText': string,\n 'entryDate': string,\n 'error': string,\n 'errorOccurred': string,\n 'exit': string,\n 'fieldRequiredError': string,\n 'filter': string,\n 'goodToSeeYou': string,\n 'identifier': string,\n 'invalidEmail': string,\n 'invalidEmailError': string,\n 'language': string,\n 'less': string,\n 'loading': string,\n 'locale': string,\n 'max': string,\n 'maxLengthError': string,\n 'min': string,\n 'minLengthError': string,\n 'more': string,\n 'name': string,\n 'next': string,\n 'no': string,\n 'none': string,\n 'notEmpty': string,\n 'nothingFound': string,\n 'of': string,\n 'optional': string,\n 'outOfRangeNumber': (values: { min: number, max: number }) => string,\n 'outOfRangeSelectionItems': (values: { min: number, max: number }) => string,\n 'outOfRangeString': (values: { min: number, max: number }) => string,\n 'pleaseWait': string,\n 'previous': string,\n 'pThemes': (values: { count: number }) => string,\n 'remove': string,\n 'removeProperty': string,\n 'required': string,\n 'reset': string,\n 'rSortingOrderAfter': (values: { otherSortings: number }) => string,\n 'save': string,\n 'saved': string,\n 'search': string,\n 'select': string,\n 'selectOption': string,\n 'sGender': (values: { gender: string }) => string,\n 'show': string,\n 'showLess': string,\n 'showMore': string,\n 'showSlide': (values: { index: number }) => string,\n 'slide': string,\n 'slideNavigation': string,\n 'slideOf': (values: { index: number, length: number }) => string,\n 'startDate': string,\n 'sThemeMode': (values: { theme: string }) => string,\n 'street': string,\n 'submit': string,\n 'success': string,\n 'text': string,\n 'time.ago': string,\n 'time.agoDays': (values: { days: number }) => string,\n 'time.april': string,\n 'time.august': string,\n 'time.century': (values: { count: number }) => string,\n 'time.day': (values: { count: number }) => string,\n 'time.decade': (values: { count: number }) => string,\n 'time.december': string,\n 'time.february': string,\n 'time.hour': (values: { count: number }) => string,\n 'time.in': string,\n 'time.inDays': (values: { days: number }) => string,\n 'time.january': string,\n 'time.july': string,\n 'time.june': string,\n 'time.march': string,\n 'time.may': string,\n 'time.microsecond': (values: { count: number }) => string,\n 'time.millisecond': (values: { count: number }) => string,\n 'time.minute': (values: { count: number }) => string,\n 'time.month': (values: { count: number }) => string,\n 'time.nanosecond': (values: { count: number }) => string,\n 'time.november': string,\n 'time.october': string,\n 'time.second': (values: { count: number }) => string,\n 'time.september': string,\n 'time.sMonthName': (values: { month: string }) => string,\n 'time.today': string,\n 'time.tomorrow': string,\n 'time.year': (values: { count: number }) => string,\n 'time.yesterday': string,\n 'tooFewSelectionItems': (values: { min: number }) => string,\n 'tooLong': (values: { max: number }) => string,\n 'tooManySelectionItems': (values: { max: number }) => string,\n 'tooShort': (values: { min: number }) => string,\n 'unsavedChanges': string,\n 'unsavedChangesSaveQuestion': string,\n 'update': string,\n 'value': string,\n 'welcome': string,\n 'yes': string,\n}\n\nexport const hightideTranslation: Translation<HightideTranslationLocales, Partial<HightideTranslationEntries>> = {\n 'de-DE': {\n 'add': `Hinzufügen`,\n 'age': `Alter`,\n 'all': `Alle`,\n 'apply': `Anwenden`,\n 'back': `Zurück`,\n 'cancel': `Abbrechen`,\n 'carousel': `Karussell`,\n 'change': `Ändern`,\n 'chooseLanguage': `Wähle deine bevorzugte Sprache`,\n 'chooseSlide': `Wähle die angezeigte Slide aus`,\n 'chooseTheme': `Wähle dein bevorzugtes Farbschema.`,\n 'clear': `Löschen`,\n 'clearValue': `Wert löschen`,\n 'click': `Klicken`,\n 'clickToCopy': `Zum kopieren klicken`,\n 'clickToSelect': `Zum Auswählen drücken`,\n 'close': `Schließen`,\n 'confirm': `Bestätigen`,\n 'copied': `Kopiert`,\n 'copy': `Kopieren`,\n 'create': `Erstellen`,\n 'decline': `Ablehnen`,\n 'delete': `Löschen`,\n 'discard': `Verwerfen`,\n 'discardChanges': `Änderungen Verwerfen`,\n 'done': `Fertig`,\n 'edit': `Bearbeiten`,\n 'endDate': `Ende`,\n 'enterText': `Text hier eingeben`,\n 'entryDate': `Eintragsdatum`,\n 'error': `Fehler`,\n 'errorOccurred': `Ein Fehler ist aufgetreten`,\n 'exit': `Beenden`,\n 'fieldRequiredError': `Dieses Feld ist erforderlich.`,\n 'filter': `Filter`,\n 'goodToSeeYou': `Schön dich zu sehen`,\n 'identifier': `Identifikator`,\n 'invalidEmail': `Die E-Mail ist ungültig.`,\n 'invalidEmailError': `Bitte geben Sie eine gültige E-Mail-Adresse ein.`,\n 'language': `Sprache`,\n 'less': `Weniger`,\n 'loading': `Lädt`,\n 'locale': `Locale`,\n 'max': `Max`,\n 'maxLengthError': `Maximale Länge überschritten.`,\n 'min': `Min`,\n 'minLengthError': `Mindestlänge nicht erreicht.`,\n 'more': `Mehr`,\n 'name': `Name`,\n 'next': `Weiter`,\n 'no': `Nein`,\n 'none': `Nichts`,\n 'notEmpty': `Das Feld darf nicht leer sein.`,\n 'nothingFound': `Nichts gefunden`,\n 'of': `von`,\n 'optional': `Optional`,\n 'outOfRangeNumber': ({ min, max }): string => {\n return `Der Wert muss zwischen ${min} und ${max} liegen.`\n },\n 'outOfRangeSelectionItems': ({ min, max }): string => {\n return `Es müssen zwischen ${min} und ${max} Elemente ausgewählt werden.`\n },\n 'outOfRangeString': ({ min, max }): string => {\n return `Der Wert muss zwischen ${min} und ${max} Zeichen lang sein.`\n },\n 'pleaseWait': `Bitte warten...`,\n 'previous': `Vorherige`,\n 'pThemes': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Farbschema`,\n 'other': `Farbschemas`,\n })\n },\n 'remove': `Entfernen`,\n 'removeProperty': `Eigenschaft entfernen`,\n 'required': `Erforderlich`,\n 'reset': `Zurücksetzen`,\n 'rSortingOrderAfter': ({ otherSortings }): string => {\n let _out: string = ''\n _out += `Angewendet `\n _out += TranslationGen.resolvePlural(otherSortings, {\n '=0': `als primäre Sortierung`,\n '=1': `nach ${otherSortings} anderen Sortierung`,\n 'other': `nach ${otherSortings} anderen Sortierungen`,\n })\n return _out\n },\n 'save': `Speichern`,\n 'saved': `Gespeichert`,\n 'search': `Suche`,\n 'select': `Select`,\n 'selectOption': `Option auswählen`,\n 'sGender': ({ gender }): string => {\n return TranslationGen.resolveSelect(gender, {\n 'male': `Männlich`,\n 'female': `Weiblich`,\n 'other': `Divers`,\n })\n },\n 'show': `Anzeigen`,\n 'showLess': `Weniger anzeigen`,\n 'showMore': `Mehr anzeigen`,\n 'showSlide': ({ index }): string => {\n return `Zeige Slide ${index}`\n },\n 'slide': `Slide`,\n 'slideNavigation': `Slide Navigation`,\n 'slideOf': ({ index, length }): string => {\n return `Slide ${index} von ${length} slides`\n },\n 'startDate': `Start`,\n 'sThemeMode': ({ theme }): string => {\n return TranslationGen.resolveSelect(theme, {\n 'dark': `Dunkel`,\n 'light': `Hell`,\n 'system': `System`,\n })\n },\n 'street': `Straße`,\n 'submit': `Abschicken`,\n 'success': `Erfolg`,\n 'text': `Text`,\n 'time.ago': `vor`,\n 'time.agoDays': ({ days }): string => {\n return `var ${days} Tagen`\n },\n 'time.april': `April`,\n 'time.august': `August`,\n 'time.century': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Jahrhundert`,\n 'other': `Jahrhunderte`,\n })\n },\n 'time.day': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Tag`,\n 'other': `Tage`,\n })\n },\n 'time.decade': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Jahrzehnt`,\n 'other': `Jahrzehnte`,\n })\n },\n 'time.december': `December`,\n 'time.february': `Febuar`,\n 'time.hour': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Stunde`,\n 'other': `Stunden`,\n })\n },\n 'time.in': `in`,\n 'time.inDays': ({ days }): string => {\n return `in ${days} Tagen`\n },\n 'time.january': `Januar`,\n 'time.july': `Juli`,\n 'time.june': `Juni`,\n 'time.march': `März`,\n 'time.may': `Mai`,\n 'time.microsecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Mikrosekunde`,\n 'other': `Mikrosekunden`,\n })\n },\n 'time.millisecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Millisekunde`,\n 'other': `Millisekunden`,\n })\n },\n 'time.minute': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Minute`,\n 'other': `Minuten`,\n })\n },\n 'time.month': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Monat`,\n 'other': `Monate`,\n })\n },\n 'time.nanosecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Nanosekunde`,\n 'other': `Nanosekunden`,\n })\n },\n 'time.november': `November`,\n 'time.october': `October`,\n 'time.second': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Sekunde`,\n 'other': `Sekunden`,\n })\n },\n 'time.september': `September`,\n 'time.sMonthName': ({ month }): string => {\n return TranslationGen.resolveSelect(month, {\n 'january': `Januar`,\n 'february': `Februar`,\n 'march': `März`,\n 'april': `April`,\n 'may': `Mai`,\n 'june': `Juni`,\n 'july': `Juli`,\n 'august': `August`,\n 'september': `September`,\n 'october': `Oktober`,\n 'november': `November`,\n 'december': `Dezember`,\n 'other': `Unbekannter Monat`,\n })\n },\n 'time.today': `Heute`,\n 'time.tomorrow': `Morgen`,\n 'time.year': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Jahr`,\n 'other': `Jahre`,\n })\n },\n 'time.yesterday': `Gestern`,\n 'tooFewSelectionItems': ({ min }): string => {\n return `Es müssen mindestens ${min} Elemente ausgewählt werden.`\n },\n 'tooLong': ({ max }): string => {\n return `Der Wert darf höchstens ${max} Zeichen enthalten.`\n },\n 'tooManySelectionItems': ({ max }): string => {\n return `Es müssen maximal ${max} Elemente ausgewählt werden.`\n },\n 'tooShort': ({ min }): string => {\n return `Der Wert muss mindestens ${min} Zeichen enthalten.`\n },\n 'unsavedChanges': `Ungespeicherte Änderungen`,\n 'unsavedChangesSaveQuestion': `Möchtest du die Änderungen speichern?`,\n 'update': `Update`,\n 'value': `Wert`,\n 'welcome': `Willkommen`,\n 'yes': `Ja`\n },\n 'en-US': {\n 'add': `Add`,\n 'age': `Age`,\n 'all': `All`,\n 'apply': `Apply`,\n 'back': `Back`,\n 'cancel': `Cancel`,\n 'carousel': `Carousel`,\n 'change': `Change`,\n 'chooseLanguage': `Choose your language`,\n 'chooseSlide': `Choose slide to display`,\n 'chooseTheme': `Choose your preferred color theme.`,\n 'clear': `Clear`,\n 'clearValue': `Clear Value`,\n 'click': `Click`,\n 'clickToCopy': `Click to Copy`,\n 'clickToSelect': `Click to select`,\n 'close': `Close`,\n 'confirm': `Confirm`,\n 'copied': `Copied`,\n 'copy': `Copy`,\n 'create': `Create`,\n 'decline': `Decline`,\n 'delete': `Delete`,\n 'discard': `Discard`,\n 'discardChanges': `Discard Changes`,\n 'done': `Done`,\n 'edit': `Edit`,\n 'endDate': `End`,\n 'enterText': `Enter text here`,\n 'entryDate': `Entry Date`,\n 'error': `Error`,\n 'errorOccurred': `An error occurred`,\n 'exit': `Exit`,\n 'fieldRequiredError': `This field is required.`,\n 'filter': `Filter`,\n 'goodToSeeYou': `Good to see you`,\n 'identifier': `Identifier`,\n 'invalidEmail': `The email is not valid.`,\n 'invalidEmailError': `Please enter a valid email address.`,\n 'language': `Language`,\n 'less': `Less`,\n 'loading': `Loading`,\n 'locale': `Locale`,\n 'max': `Max`,\n 'maxLengthError': `Maximum length exceeded.`,\n 'min': `Min`,\n 'minLengthError': `Minimum length not met.`,\n 'more': `More`,\n 'name': `Name`,\n 'next': `Next`,\n 'no': `No`,\n 'none': `None`,\n 'notEmpty': `The field cannot be empty.`,\n 'nothingFound': `Nothing found`,\n 'of': `of`,\n 'optional': `Optional`,\n 'outOfRangeNumber': ({ min, max }): string => {\n return `The value must be between ${min} and ${max}.`\n },\n 'outOfRangeSelectionItems': ({ min, max }): string => {\n return `Between ${min} and ${max} items must be selected.`\n },\n 'outOfRangeString': ({ min, max }): string => {\n return `The value needs to have between ${min} and ${max} characters.`\n },\n 'pleaseWait': `Please wait...`,\n 'previous': `Previous`,\n 'pThemes': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Theme`,\n 'other': `Themes`,\n })\n },\n 'remove': `Remove`,\n 'removeProperty': `Remove Property`,\n 'required': `Required`,\n 'reset': `Reset`,\n 'rSortingOrderAfter': ({ otherSortings }): string => {\n let _out: string = ''\n _out += `Applied `\n _out += TranslationGen.resolvePlural(otherSortings, {\n '=0': `as the first sorting`,\n '=1': `after ${otherSortings} other sorting`,\n 'other': `after ${otherSortings} other sortings`,\n })\n return _out\n },\n 'save': `Save`,\n 'saved': `Saved`,\n 'search': `Search`,\n 'select': `Select`,\n 'selectOption': `Select an option`,\n 'sGender': ({ gender }): string => {\n return TranslationGen.resolveSelect(gender, {\n 'male': `Male`,\n 'female': `Female`,\n 'other': `Other`,\n })\n },\n 'show': `Show`,\n 'showLess': `Show less`,\n 'showMore': `Show more`,\n 'showSlide': ({ index }): string => {\n return `Show Slide ${index}`\n },\n 'slide': `Slide`,\n 'slideNavigation': `Slide navigation`,\n 'slideOf': ({ index, length }): string => {\n return `Slide ${index} of ${length} slides`\n },\n 'startDate': `Start`,\n 'sThemeMode': ({ theme }): string => {\n return TranslationGen.resolveSelect(theme, {\n 'dark': `Dark`,\n 'light': `Light`,\n 'system': `System`,\n })\n },\n 'street': `Street`,\n 'submit': `Submit`,\n 'success': `Success`,\n 'text': `Text`,\n 'time.ago': `ago`,\n 'time.agoDays': ({ days }): string => {\n return `days ${days} ago`\n },\n 'time.april': `April`,\n 'time.august': `August`,\n 'time.century': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Century`,\n 'other': `Centuries`,\n })\n },\n 'time.day': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Day`,\n 'other': `Days`,\n })\n },\n 'time.decade': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Decade`,\n 'other': `Decades`,\n })\n },\n 'time.december': `December`,\n 'time.february': `Febuary`,\n 'time.hour': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Hour`,\n 'other': `Hours`,\n })\n },\n 'time.in': `in`,\n 'time.inDays': ({ days }): string => {\n return `in ${days} days`\n },\n 'time.january': `January`,\n 'time.july': `July`,\n 'time.june': `June`,\n 'time.march': `March`,\n 'time.may': `May`,\n 'time.microsecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Microsecond`,\n 'other': `Microseconds`,\n })\n },\n 'time.millisecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Millisecond`,\n 'other': `Milliseconds`,\n })\n },\n 'time.minute': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Minute`,\n 'other': `Minutes`,\n })\n },\n 'time.month': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Month`,\n 'other': `Months`,\n })\n },\n 'time.nanosecond': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Nanosecond`,\n 'other': `Nanoseconds`,\n })\n },\n 'time.november': `November`,\n 'time.october': `October`,\n 'time.second': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Second`,\n 'other': `Seconds`,\n })\n },\n 'time.september': `September`,\n 'time.sMonthName': ({ month }): string => {\n return TranslationGen.resolveSelect(month, {\n 'january': `January`,\n 'february': `February`,\n 'march': `March`,\n 'april': `April`,\n 'may': `May`,\n 'june': `June`,\n 'july': `July`,\n 'august': `August`,\n 'september': `September`,\n 'october': `October`,\n 'november': `November`,\n 'december': `December`,\n 'other': `Unknown Month`,\n })\n },\n 'time.today': `Today`,\n 'time.tomorrow': `Tomorrow`,\n 'time.year': ({ count }): string => {\n return TranslationGen.resolvePlural(count, {\n '=1': `Year`,\n 'other': `Years`,\n })\n },\n 'time.yesterday': `Yesterday`,\n 'tooFewSelectionItems': ({ min }): string => {\n return `Select at least ${min} items.`\n },\n 'tooLong': ({ max }): string => {\n return `The value requires less than ${max} characters.`\n },\n 'tooManySelectionItems': ({ max }): string => {\n return `Select at most ${max} items.`\n },\n 'tooShort': ({ min }): string => {\n return `The value requires at least ${min} characters.`\n },\n 'unsavedChanges': `Unsaved Changes`,\n 'unsavedChangesSaveQuestion': `Do you want to save your changes?`,\n 'update': `Update`,\n 'value': `Value`,\n 'welcome': `Welcome`,\n 'yes': `Yes`\n }\n}\n\n","import type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport { hightideTranslationLocales } from '@/src/i18n/translations'\n\n/**\n * The supported locales' names in their respective language\n */\nconst localsNames: Record<HightideTranslationLocales, string> = {\n 'en-US': 'English (US)',\n 'de-DE': 'Deutsch',\n}\n\nfunction localeToLanguage(locale: HightideTranslationLocales) {\n return locale.split('-')[0]\n}\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LocalizationUtil = {\n locals: hightideTranslationLocales,\n localToLanguage: localeToLanguage,\n languagesLocalNames: localsNames,\n}\n","import { createContext, type PropsWithChildren, useContext, useState } from 'react'\nimport type { ResolvedTheme } from '@/src/contexts/ThemeContext'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport type { DeepPartial } from '@/src/utils/typing'\n\nexport type TooltipConfig = {\n /**\n * Number of milliseconds until the tooltip appears\n */\n appearDelay: number,\n /**\n * Number of milliseconds until the tooltip disappears\n */\n disappearDelay: number,\n}\n\nexport type ThemeConfig = {\n /**\n * The initial theme to show when:\n * 1. The system preference is not or cannot be loaded\n * 2. The user has not set an app preference\n */\n initialTheme: ResolvedTheme,\n}\n\nexport type LocalizationConfig = {\n /**\n * The initial locale to use when:\n * 1. The system preference is not or cannot be loaded\n * 2. The user has not set an app preference\n */\n defaultLocale: HightideTranslationLocales,\n}\n\nexport type HightideConfig = {\n tooltip: TooltipConfig,\n theme: ThemeConfig,\n locale: LocalizationConfig,\n}\n\nconst defaultConfig: HightideConfig = {\n tooltip: {\n appearDelay: 200,\n disappearDelay: 400,\n },\n theme: {\n initialTheme: 'light'\n },\n locale: {\n defaultLocale: 'de-DE',\n }\n}\n\nfunction mergeConfig(config: HightideConfig, overwrite: DeepPartial<HightideConfig>): HightideConfig {\n return {\n locale: {\n ...config.locale,\n ...overwrite?.locale\n },\n theme: {\n ...config.theme,\n ...overwrite.theme,\n },\n tooltip: {\n ...config.tooltip,\n ...overwrite.tooltip,\n }\n }\n}\n\ntype ConfigType = {\n config: HightideConfig,\n setConfig: (configOverwrite: DeepPartial<HightideConfig>) => void,\n}\n\nexport const HightideConfigContext = createContext<ConfigType | null>(null)\n\nexport type HightideConfigProviderProps = PropsWithChildren & DeepPartial<HightideConfig>\n\nexport const HightideConfigProvider = ({\n children,\n ...initialOverwrite\n}: HightideConfigProviderProps) => {\n const [config, setConfig] = useState<HightideConfig>(mergeConfig(defaultConfig, initialOverwrite))\n\n return (\n <HightideConfigContext.Provider\n value={{\n config,\n setConfig: (value) => setConfig(prevState => mergeConfig(prevState, value)),\n }}\n >\n {children}\n </HightideConfigContext.Provider>\n )\n}\n\nexport const useHightideConfig = () => {\n const context = useContext(HightideConfigContext)\n if (!context) {\n return {\n config: defaultConfig,\n setConfig: () => {\n console.error('useHightideConfig.setConfig is not available without a HightideConfigProvider. Try wrapping your app a HightideConfigProvider.')\n }\n }\n }\n return context\n}","import { useLocale } from '@/src/contexts/LocaleContext'\nimport type {\n PartialTranslationExtension,\n Translation,\n TranslationEntries\n} from '@helpwave/internationalization'\nimport { combineTranslation, ICUUtil } from '@helpwave/internationalization'\nimport { ArrayUtil } from '@/src/utils/array'\nimport type { SingleOrArray } from '@/src/utils/typing'\nimport type { HightideTranslationEntries, HightideTranslationLocales } from '@/src/i18n/translations'\nimport { hightideTranslation } from '@/src/i18n/translations'\nimport { useMemo } from 'react'\n\n/**\n * Use for translations where you know that all values are ICU strings.\n *\n * This most likely is the case for Translations provided by a backend,\n * for more dynamic and typesafe translation use useTranslation instead\n */\nexport function useICUTranslation<L extends string, T extends Record<string, string>>(\n translations: Translation<L, T>[] | Translation<L, T>,\n locale: L\n) {\n translations = Array.isArray(translations) ? translations : [translations]\n\n return function translate(\n key: string,\n values?: Record<string, object>\n ): string {\n try {\n for (let i = 0; i < translations.length; i++) {\n const localizedTranslation = translations[i][locale]\n if (!localizedTranslation) continue\n\n const msg = localizedTranslation[key]\n if (typeof msg === 'string') {\n return ICUUtil.interpret(msg, values)\n }\n }\n console.warn(`useTranslation: No translation for key \"${key}\" found.`)\n } catch (e) {\n console.error(`useTranslation: Error translating key \"${String(key)}\"`, e)\n }\n\n return `{{${String(locale)}:${String(key)}}}`\n }\n}\n\ntype UseHidetideTranslationOverwrites = {\n locale?: HightideTranslationLocales,\n}\n\ntype HidetideTranslationExtension<L extends string, T extends TranslationEntries>\n = PartialTranslationExtension<L, HightideTranslationLocales, T, HightideTranslationEntries>\n/**\n * A wrapper for the useHightideTranslation to load and specify the translations for the library\n */\nexport function useHightideTranslation<L extends string, T extends TranslationEntries>(\n extensions?: SingleOrArray<HidetideTranslationExtension<L,T>>,\n overwrites?: UseHidetideTranslationOverwrites\n) {\n const { locale: inferredLocale } = useLocale()\n const locale = overwrites?.locale ?? inferredLocale\n\n return useMemo(() => combineTranslation<L | HightideTranslationLocales, T & HightideTranslationEntries>([\n ... ArrayUtil.resolveSingleOrArray(extensions),\n hightideTranslation as HidetideTranslationExtension<L,T>\n ], locale),\n [locale, extensions])\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nexport type DividerInserterProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: ReactNode[],\n divider: (index: number) => ReactNode,\n}\n\n/**\n * A Component for inserting a divider in the middle of each child element\n *\n * undefined elements are removed\n */\nexport const DividerInserter = ({\n children,\n divider,\n className,\n ...restProps\n}: DividerInserterProps) => {\n const nodes: ReactNode[] = []\n\n for (let index = 0; index < children.length; index++) {\n const element = children[index]\n if (element !== undefined) {\n nodes.push(element)\n if (index < children.length - 1) {\n nodes.push(divider(index))\n }\n }\n }\n\n return (\n <div className={clsx(className)} {...restProps}>\n {nodes}\n </div>\n )\n}\n","'use client'\n\nimport type { RefObject } from 'react'\nimport { useCallback, useEffect, useId, useRef, useState } from 'react'\nimport { useIsMounted } from '@/src/hooks/focus/useIsMounted'\n\nconst createFocusGuard = () => {\n const div = document.createElement('div')\n Object.assign(div.style, {\n opacity: '0',\n outline: 'none',\n boxShadow: 'none',\n position: 'fixed',\n pointerEvents: 'none',\n touchAction: 'none',\n })\n div.tabIndex = 0\n div.setAttribute('data-hw-focus-guard', '')\n document.body.appendChild(div)\n return div\n}\n\nfunction getContainedFocusableElements(element: HTMLElement) {\n return element?.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])')\n}\n\ntype ListenerType = {\n id: string,\n pause: () => void,\n unpause: () => void,\n focus: () => void,\n focusLast: () => void,\n container: RefObject<HTMLElement>,\n initialFocusElement: RefObject<HTMLElement>,\n}\n\nclass FocusTrapService {\n // The last entry is always the active one\n private listeners: ListenerType[] = []\n\n public getActive(): ListenerType | undefined {\n if (this.listeners.length === 0) return undefined\n return this.listeners[this.listeners.length - 1]\n }\n\n private focusElement() {\n const active = this.getActive()\n if(!active) return\n const { container, initialFocusElement } = active\n const containerElement = container.current\n // Try in the following order\n // 1. Focus the initial element\n // 2. Focus the first focusable element in the container\n // 3. Focus the container\n if (initialFocusElement?.current) {\n initialFocusElement.current.focus()\n } else {\n const elements = getContainedFocusableElements(containerElement)\n if (elements && elements.length > 0) {\n const first = elements.item(0) as HTMLElement\n first.focus()\n } else {\n containerElement.focus()\n }\n }\n }\n\n private onFocusIn = (event: FocusEvent) => {\n const active = this.getActive()\n if(!active || !active.container.current) return\n const { container } = active\n if (!container.current.contains(event.target as HTMLElement)) {\n this.focusElement()\n }\n }\n\n private removeGuards() {\n document.querySelectorAll('[data-hw-focus-guard]').forEach((node) => node.remove())\n }\n\n private addGuards() {\n document.body.insertAdjacentElement('afterbegin', createFocusGuard())\n document.body.insertAdjacentElement('beforeend', createFocusGuard())\n }\n\n private activate() {\n document.addEventListener('focusin', this.onFocusIn)\n this.addGuards()\n }\n\n private deactivate() {\n document.removeEventListener('focusin', this.onFocusIn)\n this.removeGuards()\n }\n\n register(listener: ListenerType) {\n this.listeners.push(listener)\n if (this.listeners.length === 1) {\n this.activate()\n }\n const active = listener\n this.listeners.forEach((listener) => {\n const { focus, pause } = listener\n if (listener === active) {\n focus()\n } else {\n pause()\n }\n })\n }\n\n unregister(id: string) {\n const index = this.listeners.findIndex(trap => trap.id === id)\n if (index !== -1) {\n const isActive = index === this.listeners.length - 1\n const listener = this.listeners[index]\n this.listeners = this.listeners.filter(listener => listener.id !== id)\n if (isActive) {\n // Deactivate all focus traps\n this.deactivate()\n // Focus last element in previous focus context\n listener.focusLast()\n // Activate and pause remaining focus traps\n const active = this.getActive()\n this.listeners.forEach((listener) => {\n const { pause, unpause } = listener\n if (listener === active) {\n unpause()\n } else {\n pause()\n }\n })\n // Reactivate\n if (this.listeners.length > 0) {\n this.activate()\n }\n }\n } else {\n console.warn(`Unable to unregister id ${id}: not found`)\n }\n }\n}\n\nconst service = new FocusTrapService()\n\nexport type UseFocusTrapProps = {\n container: RefObject<HTMLElement>,\n active?: boolean,\n initialFocus?: RefObject<HTMLElement>,\n /**\n * Whether to focus the first element when the initialFocus isn't provided\n *\n * Focuses the container instead\n */\n focusFirst?: boolean,\n}\n\nexport const useFocusTrap = ({\n container,\n active = true,\n initialFocus,\n focusFirst = true,\n}: UseFocusTrapProps) => {\n const lastFocusRef = useRef<HTMLElement>(null)\n const [paused, setPaused] = useState(false)\n const isMounted = useIsMounted()\n const id = useId()\n\n const focusElement = useCallback(() => {\n const containerElement = container.current\n // Try in the following order\n // 1. Focus the initial element\n // 2. Focus the first focusable element in the container\n // 3. Focus the container\n if (initialFocus?.current) {\n initialFocus.current.focus()\n } else {\n const elements = getContainedFocusableElements(containerElement)\n if (elements && elements.length > 0) {\n const first = elements.item(0) as HTMLElement\n first.focus()\n } else {\n containerElement.focus()\n }\n }\n }, [container, initialFocus])\n\n useEffect(() => {\n if (active && isMounted) {\n if (!lastFocusRef.current) {\n lastFocusRef.current = document.activeElement as HTMLElement\n }\n\n function pause() {\n setPaused(true)\n }\n\n function unpause() {\n setPaused(false)\n if (!container.current.contains(document.activeElement as HTMLElement)) {\n focusElement()\n }\n }\n\n function focus() {\n focusElement()\n setPaused(false)\n }\n\n function focusLast() {\n lastFocusRef.current?.focus()\n }\n\n service.register({ id, pause, focus, focusLast, unpause, container, initialFocusElement: initialFocus })\n return () => {\n service.unregister(id)\n lastFocusRef.current = undefined\n }\n }\n }, [active, container, focusElement, id, initialFocus, isMounted])\n\n useEffect(() => {\n if (active && !paused && isMounted) {\n const containerElement = container.current\n\n function onKeyDown(event: KeyboardEvent) {\n const key = event.key\n const elements = getContainedFocusableElements(containerElement)\n const active = document.activeElement as HTMLElement\n const index = [...elements].findIndex(value => value === active)\n if (index === -1 || event.altKey || event.ctrlKey || event.metaKey) {\n return\n }\n if (key === 'Tab') {\n const next = event.shiftKey ? -1 : 1\n const nextIndex = (index + next + elements.length) % elements.length\n const nextElement = elements[nextIndex] as HTMLElement\n nextElement.focus()\n event.preventDefault()\n }\n }\n\n // Register and unregister the listeners\n containerElement.addEventListener('keydown', onKeyDown)\n return () => {\n containerElement.removeEventListener('keydown', onKeyDown)\n }\n }\n }, [active, paused, isMounted, container, initialFocus, focusFirst, focusElement])\n}","'use client'\n\nimport { useEffect, useLayoutEffect, useState } from 'react'\n\nconst isClient = typeof window !== 'undefined' && typeof document !== 'undefined'\nconst useIsomorphicEffect = isClient ? useLayoutEffect : useEffect\n\nexport const useIsMounted = () => {\n const [isMounted, setIsMounted] = useState(false)\n\n useIsomorphicEffect(() => {\n setIsMounted(true)\n return () => {\n setIsMounted(false)\n }\n }, [])\n return isMounted\n}","import { useEffect, useId, useMemo, useState } from 'react'\n\nexport type OverlayItem = {\n id: string,\n tags?: string[],\n}\n\ntype OverlayItemInformation = OverlayItem & {\n zIndex: number,\n position: number,\n tagPositions: Record<string, number>,\n}\n\ntype OverlayRegistryValue = {\n itemInformation: Record<string, OverlayItemInformation>,\n tagItemCounts: Record<string, number>,\n activeId: string | null,\n}\n\ntype OverlayRegistryListenerCallback = (value: OverlayRegistryValue) => void\n\nclass OverlayRegistry {\n private static instance: OverlayRegistry | null = null\n\n static getInstance(): OverlayRegistry {\n if (!OverlayRegistry.instance) {\n OverlayRegistry.instance = new OverlayRegistry()\n }\n return OverlayRegistry.instance\n }\n\n private overlayIds = new Set<string>()\n private overlayItems: Record<string, OverlayItem> = {}\n private listeners = new Set<OverlayRegistryListenerCallback>()\n\n register(item: OverlayItem) {\n this.overlayIds.add(item.id)\n this.overlayItems[item.id] = item\n this.notify()\n }\n\n update(item: OverlayItem) {\n this.overlayItems[item.id] = item\n this.notify()\n }\n\n unregister(item: OverlayItem) {\n this.overlayIds.delete(item.id)\n delete this.overlayItems[item.id]\n this.notify()\n }\n\n addListener(callback: OverlayRegistryListenerCallback) {\n this.listeners.add(callback)\n }\n\n removeListener(callback: OverlayRegistryListenerCallback) {\n this.listeners.delete(callback)\n }\n\n private notify() {\n const itemInformation: Record<string, OverlayItemInformation> = {}\n const ids = [...this.overlayIds]\n const startZIndex = 100\n const tagCount: Record<string, number> = {}\n for (let index = ids.length - 1; index >= 0; index--) {\n const id = ids[index]\n const item = this.overlayItems[id]\n itemInformation[id] = {\n ...item,\n position: index,\n tagPositions: {},\n zIndex: startZIndex + index,\n }\n for(const tag of item.tags ?? []) {\n let position = tagCount[tag]\n if(position === undefined) {\n position = 0\n } else {\n position++\n }\n tagCount[tag] = position\n itemInformation[id].tagPositions[tag] = position\n }\n }\n for (const callback of this.listeners) {\n callback({ activeId: ids[0] ?? null, itemInformation, tagItemCounts: tagCount })\n }\n }\n}\n\nexport type UseOverlayRegistryProps = Partial<OverlayItem> & {\n isActive?: boolean,\n /** Tags cannot change on every render, thus make sure they are wrapped in a useMemo or similar */\n tags?: string[],\n}\n\nexport type UseOverlayRegistryResult = {\n isInFront: boolean,\n zIndex?: number,\n position?: number,\n tagPositions?: Record<string, number>,\n hasAppeared: boolean,\n tagItemCounts: Record<string, number>,\n}\n\nexport const useOverlayRegistry = (props?: UseOverlayRegistryProps): UseOverlayRegistryResult => {\n const generatedId = useId()\n const [hasAppeared, setHasAppeared] = useState<boolean>(props.isActive)\n const item: OverlayItem = useMemo(() => ({\n id: props?.id ?? generatedId,\n tags: props?.tags,\n }), [props?.id, generatedId, props?.tags])\n const [value, setValue] = useState<OverlayRegistryValue>({\n activeId: null,\n itemInformation: {},\n tagItemCounts: {}\n })\n const registry = useMemo(() => OverlayRegistry.getInstance(), [])\n\n useEffect(() => {\n if(!props.isActive) {\n return\n }\n function callback(value: OverlayRegistryValue) {\n setValue(value)\n }\n\n registry.addListener(callback)\n registry.register(item)\n setHasAppeared(true)\n return () => {\n registry.removeListener(callback)\n registry.unregister(item)\n setValue({\n activeId: null,\n itemInformation: {},\n tagItemCounts: {}\n })\n setHasAppeared(false)\n }\n }, [props?.isActive, item, registry])\n\n const itemInformation = value.itemInformation[item.id]\n\n return {\n isInFront: value.activeId === item.id,\n zIndex: itemInformation?.zIndex,\n position: itemInformation?.position,\n tagPositions: itemInformation?.tagPositions,\n hasAppeared,\n tagItemCounts: value.tagItemCounts,\n }\n}","import { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { ReactNode } from 'react'\nimport { useId, useMemo, useRef, type HTMLAttributes } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Visibility } from './Visibility'\nimport { Button } from '../user-interaction/Button'\nimport { X } from 'lucide-react'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type DrawerAligment = 'left' | 'right' | 'bottom' | 'top'\n\nexport type DrawerProps = HTMLAttributes<HTMLDivElement> & {\n isOpen: boolean,\n alignment: DrawerAligment,\n titleElement: ReactNode,\n description: ReactNode,\n isAnimated?: boolean,\n containerClassName?: string,\n backgroundClassName?: string,\n onClose: () => void,\n}\n\nexport const Drawer = ({\n children,\n isOpen = true,\n alignment = 'left',\n titleElement,\n description,\n containerClassName,\n backgroundClassName,\n onClose,\n ...props\n}: DrawerProps) => {\n const translation = useHightideTranslation()\n const generatedId = useId()\n const ids = useMemo(() => ({\n container: `dialog-container-${generatedId}`,\n background: `dialog-background-${generatedId}`,\n content: props.id ?? `dialog-content-${generatedId}`\n }), [generatedId, props.id])\n const ref = useRef<HTMLDivElement>(null)\n\n const { isVisible, transitionState, callbacks } = useTransitionState({ isOpen })\n\n useFocusTrap({\n container: ref,\n active: isVisible,\n focusFirst: true,\n })\n\n const { zIndex, tagPositions, tagItemCounts } = useOverlayRegistry({\n isActive: isVisible,\n tags: useMemo(() => ['drawer'], [])\n })\n const depth = tagPositions && tagItemCounts ? ((tagItemCounts['drawer'] ?? 0) - (tagPositions['drawer'] ?? 0)) : 0\n\n if (!isVisible) return\n\n return createPortal(\n <div\n id={ids.container}\n\n data-name=\"drawer-container\"\n data-open={PropsUtil.dataAttributes.bool(isOpen)}\n\n className={containerClassName}\n style={{ zIndex, '--drawer-depth': depth.toString() } as React.CSSProperties}\n >\n <div\n id={ids.background}\n\n onClick={onClose}\n\n data-name=\"drawer-background\"\n data-state={transitionState}\n data-depth={depth}\n data-alignment={alignment}\n\n aria-hidden={true}\n\n className={backgroundClassName}\n />\n <div\n {...props}\n id={ids.content}\n ref={ref}\n\n onKeyDown={PropsUtil.aria.close(close)}\n {...callbacks}\n\n data-name={PropsUtil.dataAttributes.name('drawer-content', props)}\n data-state={transitionState}\n data-depth={depth}\n data-alignment={alignment}\n\n className={props.className}\n >\n <div className=\"typography-title-lg mr-8\">\n {titleElement}\n </div>\n <Visibility isVisible={!!description}>\n <div className=\"text-description\">\n {description}\n </div>\n </Visibility>\n <div\n className=\"absolute top-0 right-0\"\n style={{\n paddingTop: 'inherit',\n paddingRight: 'inherit'\n }}\n >\n <Button\n layout=\"icon\"\n color=\"neutral\"\n size=\"xs\"\n aria-label={translation('close')}\n onClick={onClose}\n >\n <X />\n </Button>\n </div>\n {children}\n </div>\n </div>\n , document.body\n )\n}","import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type TransitionState = 'opened' | 'closed' | 'opening' | 'closing'\n\ntype UseTransitionStateResult = {\n transitionState: TransitionState,\n isVisible: boolean,\n callbacks: {\n onAnimationStart: () => void,\n onAnimationEnd: () => void,\n onTransitionStart: () => void,\n onTransitionEnd: () => void,\n onTransitionCancel: () => void,\n },\n}\n\ntype UseTransitionStateProps = {\n isOpen: boolean,\n}\n\nexport const useTransitionState = ({ isOpen }: UseTransitionStateProps): UseTransitionStateResult => {\n const [hasTransitionFinished, setHasTransitionFinished] = useState(true)\n const [currentOpen, setCurrentOpen] = useState(isOpen)\n\n const isAnimating = useRef(false)\n const timer = useRef<NodeJS.Timeout | undefined>(undefined)\n\n useEffect(() => {\n if (isOpen === currentOpen) {\n return\n }\n\n setHasTransitionFinished(false)\n setCurrentOpen(isOpen)\n isAnimating.current = false\n\n const checkAnimationStart = () => {\n timer.current = setTimeout(() => {\n if (!isAnimating.current) {\n setHasTransitionFinished(true)\n }\n }, 50)\n }\n checkAnimationStart()\n\n return () => {\n if (timer.current) {\n clearTimeout(timer.current)\n }\n }\n }, [isOpen, currentOpen])\n\n const onStart = useCallback(() => {\n isAnimating.current = true\n }, [])\n\n const onEnd = useCallback(() => {\n setHasTransitionFinished(true)\n isAnimating.current = false\n }, [])\n\n const transitionState: TransitionState = currentOpen\n ? hasTransitionFinished\n ? 'opened'\n : 'opening'\n : hasTransitionFinished\n ? 'closed'\n : 'closing'\n\n return {\n transitionState,\n isVisible: transitionState !== 'closed',\n callbacks: {\n onAnimationStart: onStart,\n onAnimationEnd: onEnd,\n onTransitionStart: onStart,\n onTransitionEnd: onEnd,\n onTransitionCancel: onEnd,\n },\n }\n}","import type { Dispatch, HTMLAttributes, PropsWithChildren, ReactNode, SetStateAction } from 'react'\nimport { useEffect } from 'react'\nimport { useState } from 'react'\nimport { createContext, forwardRef, useCallback, useContext, useId, useMemo } from 'react'\nimport clsx from 'clsx'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Visibility } from './Visibility'\nimport { ExpansionIcon } from '../display-and-visualization/ExpansionIcon'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\n\n//\n// Context\n//\ntype ExpandableContextIdsState = {\n root: string,\n header: string,\n content: string,\n}\n\ntype ExpandableContextState = {\n ids: ExpandableContextIdsState,\n setIds: Dispatch<SetStateAction<ExpandableContextIdsState>>,\n disabled: boolean,\n isExpanded: boolean,\n toggle: () => void,\n setIsExpanded: Dispatch<SetStateAction<boolean>>,\n}\n\nconst ExpandableContext = createContext<ExpandableContextState | null>(null)\n\nfunction useExpandableContext() {\n const context = useContext(ExpandableContext)\n if (!context) {\n throw new Error('Expandable components must be used within an ExpandableRoot')\n }\n return context\n}\n\n//\n// ExpandableRoot\n//\n\nexport type ExpandableRootProps = HTMLAttributes<HTMLDivElement> & {\n isExpanded?: boolean,\n onExpandedChange?: (isExpanded: boolean) => void,\n disabled?: boolean,\n allowContainerToggle?: boolean,\n}\n\nexport const ExpandableRoot = forwardRef<HTMLDivElement, ExpandableRootProps>(function ExpandableRoot({\n children,\n id: providedId,\n isExpanded: controlledExpanded,\n onExpandedChange,\n disabled = false,\n allowContainerToggle = false,\n ...props\n}, ref) {\n const generatedId = useId()\n const [ids, setIds] = useState<ExpandableContextIdsState>({\n root: providedId ?? `expandable-${generatedId}-root`,\n header: `expandable-${generatedId}-header`,\n content: `expandable-${generatedId}-content`\n })\n const [isExpanded, setIsExpanded] = useOverwritableState(controlledExpanded, onExpandedChange)\n\n const toggle = useCallback(() => {\n if (!disabled) {\n setIsExpanded(!isExpanded)\n }\n }, [disabled, isExpanded, setIsExpanded])\n\n const contextValue = useMemo(() => ({\n isExpanded: !!isExpanded,\n toggle,\n setIsExpanded,\n ids,\n setIds,\n disabled\n }), [isExpanded, toggle, setIsExpanded, ids, disabled])\n\n return (\n <ExpandableContext.Provider value={contextValue}>\n <div\n {...props}\n ref={ref}\n id={ids.root}\n\n onClick={(event) => {\n props.onClick?.(event)\n if (allowContainerToggle) {\n toggle()\n }\n }}\n\n data-name=\"expandable-root\"\n data-expanded={isExpanded ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-containertoggleable={allowContainerToggle ? '' : undefined}\n >\n {children}\n </div>\n </ExpandableContext.Provider>\n )\n})\n\n//\n// ExpandableHeader\n//\n\nexport type ExpandableHeaderProps = HTMLAttributes<HTMLDivElement> & {\n isUsingDefaultIcon?: boolean,\n}\n\nexport const ExpandableHeader = forwardRef<HTMLDivElement, ExpandableHeaderProps>(function ExpandableHeader({\n children,\n isUsingDefaultIcon = true,\n ...props\n}, ref) {\n const { isExpanded, toggle, ids, setIds, disabled } = useExpandableContext()\n useEffect(() => {\n if (props.id) {\n setIds(prevState => ({ ...prevState, header: props.id }))\n }\n }, [props.id, setIds])\n\n return (\n <div\n {...props}\n ref={ref}\n id={ids.header}\n\n onClick={event => {\n event.stopPropagation()\n props.onClick?.(event)\n toggle()\n }}\n\n data-name=\"expandable-header\"\n data-expanded={isExpanded ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n\n aria-expanded={isExpanded}\n aria-controls={ids.content}\n aria-disabled={disabled || undefined}\n >\n {children}\n <Visibility isVisible={isUsingDefaultIcon}>\n <ExpansionIcon isExpanded={isExpanded} disabled={disabled} />\n </Visibility>\n </div>\n )\n})\n\n//\n// ExpandableContent\n//\n\nexport type ExpandableContentProps = HTMLAttributes<HTMLDivElement> & {\n forceMount?: boolean,\n}\n\nexport const ExpandableContent = forwardRef<HTMLDivElement, ExpandableContentProps>(function ExpandableContent({\n children,\n forceMount = false,\n ...props\n}, ref) {\n const { isExpanded, ids, setIds } = useExpandableContext()\n useEffect(() => {\n if (props.id) {\n setIds(prevState => ({ ...prevState, content: props.id }))\n }\n }, [props.id, setIds])\n\n const { transitionState, callbacks } = useTransitionState({ isOpen: isExpanded })\n\n return (\n <div\n {...props}\n ref={ref}\n id={ids.content}\n\n {...callbacks}\n\n data-name=\"expandable-content\"\n data-expanded={isExpanded ? '' : undefined}\n data-state={transitionState}\n >\n <Visibility isVisible={forceMount || isExpanded}>\n {children}\n </Visibility>\n </div>\n )\n})\n\n\n//\n// Composite / Legacy Components\n//\n\ntype IconBuilder = (expanded: boolean) => ReactNode\n\nexport type ExpandableProps = PropsWithChildren<{\n id?: string,\n label: ReactNode,\n icon?: IconBuilder,\n isExpanded?: boolean,\n onChange?: (isExpanded: boolean) => void,\n clickOnlyOnHeader?: boolean,\n disabled?: boolean,\n className?: string,\n headerClassName?: string,\n contentClassName?: string,\n contentExpandedClassName?: string,\n}>\n\nexport const Expandable = forwardRef<HTMLDivElement, ExpandableProps>(function Expandable({\n children,\n id,\n label,\n icon,\n isExpanded,\n onChange,\n clickOnlyOnHeader = true,\n disabled = false,\n className,\n headerClassName,\n contentClassName,\n contentExpandedClassName,\n}, ref) {\n\n const defaultIcon = useCallback((expanded: boolean) => <ExpansionIcon isExpanded={expanded} />, [])\n const iconBuilder = icon ?? defaultIcon\n\n return (\n <ExpandableRoot\n ref={ref}\n id={id}\n isExpanded={isExpanded}\n onExpandedChange={onChange}\n disabled={disabled}\n allowContainerToggle={!clickOnlyOnHeader}\n className={className}\n >\n <ExpandableHeader className={headerClassName}>\n {label}\n {/* We use a consumer here because the iconBuilder needs the state which is inside the provider */}\n <ExpandableContext.Consumer>\n {ctx => iconBuilder(ctx?.isExpanded ?? false)}\n </ExpandableContext.Consumer>\n </ExpandableHeader>\n <ExpandableContext.Consumer>\n {ctx => (\n <ExpandableContent\n className={clsx(contentClassName, { [contentExpandedClassName ?? '']: !!ctx?.isExpanded })}\n >\n {children}\n </ExpandableContent>\n )}\n </ExpandableContext.Consumer>\n\n </ExpandableRoot>\n )\n})\n\nexport const ExpandableUncontrolled = forwardRef<HTMLDivElement, ExpandableProps>(function ExpandableUncontrolled({\n isExpanded,\n onChange,\n ...props\n}, ref) {\n const [usedIsExpanded, setUsedIsExpanded] = useOverwritableState(isExpanded, onChange)\n\n return (\n <Expandable\n {...props}\n ref={ref}\n isExpanded={usedIsExpanded}\n onChange={setUsedIsExpanded}\n />\n )\n})","import type React from 'react'\nimport { useEffect, useState } from 'react'\nimport { resolveSetState } from '@/src/utils/resolveSetState'\n\nexport const useOverwritableState = <T>(overwriteValue?: T, onChange?: (value: T) => void): [T, React.Dispatch<React.SetStateAction<T>>] => {\n const [state, setState] = useState<T>(overwriteValue)\n\n useEffect(() => {\n setState(overwriteValue)\n }, [overwriteValue])\n\n const onChangeWrapper: React.Dispatch<React.SetStateAction<T>> = (action) => {\n const resolved = resolveSetState(action, state)\n setState(resolved)\n onChange?.(resolved)\n }\n\n return [state, onChangeWrapper]\n}","import type { ReactNode } from 'react'\nimport type { ExpandableProps } from './Expandable'\nimport { ExpandableContent, ExpandableHeader, ExpandableRoot } from './Expandable'\n\nexport type FAQItem = Pick<ExpandableProps, 'isExpanded' | 'className'> & {\n title: string,\n content: ReactNode,\n}\n\nexport type FAQSectionProps = {\n entries: FAQItem[],\n}\n\n// TODO add a descirption\nexport const FAQSection = ({\n entries,\n}: FAQSectionProps) => {\n return (\n <ul className=\"flex-col-4\">\n {entries.map(({ title, content, ...restProps }, index) => (\n <li key={index}>\n <ExpandableRoot\n {...restProps}\n allowContainerToggle={true}\n >\n <ExpandableHeader>\n {title}\n </ExpandableHeader>\n <ExpandableContent>\n {content}\n </ExpandableContent>\n </ExpandableRoot>\n </li>\n ))}\n </ul>\n )\n}\n","import type { HTMLAttributes, RefObject, ReactNode } from 'react'\nimport { forwardRef, useImperativeHandle, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { clsx } from 'clsx'\nimport type { UseFloatingElementOptions } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\n\nexport type FloatingContainerProps = HTMLAttributes<HTMLDivElement> & UseFloatingElementOptions & {\n anchor?: RefObject<HTMLElement>,\n /**\n * Polls the position of the anchor every 100ms\n *\n * Use sparingly\n */\n backgroundOverlay?: ReactNode,\n}\n\n/**\n * A floating container that aligns to its anchor\n *\n * Notes:\n * - to hide it use the hidden attribute as other means break the functionality\n */\nexport const FloatingContainer = forwardRef<HTMLDivElement, FloatingContainerProps>(function FloatingContainer({\n children,\n backgroundOverlay,\n anchor,\n isPolling = false,\n pollingInterval = 100,\n verticalAlignment = 'afterEnd',\n horizontalAlignment = 'afterStart',\n screenPadding = 16,\n gap = 4,\n ...props\n}, forwardRef) {\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardRef, () => innerRef.current)\n\n const position = useFloatingElement({\n active: !props.hidden,\n containerRef: innerRef,\n anchorRef: anchor,\n isPolling,\n pollingInterval,\n verticalAlignment,\n horizontalAlignment,\n gap,\n screenPadding,\n })\n\n return createPortal(\n <>\n {backgroundOverlay}\n <div\n {...props}\n ref={innerRef}\n\n data-positioned={position && !props.hidden ? '' : undefined}\n\n style={{\n position: 'fixed',\n overflow: 'hidden',\n opacity: position ? undefined : 0, // hide when position calculation isn't done yet\n transition: position ? `top ${pollingInterval}ms linear, left ${pollingInterval}ms linear` : undefined,\n ...position,\n ...props.style\n }}\n className={clsx('motion-safe:duration-100 motion-reduce:duration-0', props.className)}\n >\n {children}\n </div>\n </>,\n document.body\n )\n})","'use client'\n\nimport type { CSSProperties, RefObject } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { clamp } from '@/src/utils/math'\nimport { useIsMounted } from '@/src/hooks/focus/useIsMounted'\n\nexport type FloatingElementAlignment = 'beforeStart' | 'afterStart' | 'center' | 'beforeEnd' | 'afterEnd'\n\ntype RectangleBounds = {\n top: number,\n right: number,\n bottom: number,\n left: number,\n width: number,\n height: number,\n}\n\ntype CalculatePositionOptions = {\n verticalAlignment?: FloatingElementAlignment,\n horizontalAlignment?: FloatingElementAlignment,\n screenPadding?: number,\n gap?: number,\n}\n\ntype CalculatePositionProps = {\n windowRect: RectangleBounds,\n containerRect: RectangleBounds,\n anchorRect: RectangleBounds,\n options: CalculatePositionOptions,\n}\n\ntype UseFloatingElementStyle = {\n left: number,\n top: number,\n maxWidth: number,\n maxHeight: number,\n}\n\nfunction calculatePosition({\n windowRect,\n containerRect,\n anchorRect,\n options,\n}: CalculatePositionProps): UseFloatingElementStyle {\n const { verticalAlignment, horizontalAlignment, gap, screenPadding } = options\n const windowWidth = windowRect.width\n const windowHeight = windowRect.height\n\n const maxWidth = windowWidth - 2 * screenPadding\n const maxHeight = windowHeight - 2 * screenPadding\n\n const width = Math.min(containerRect.width, maxWidth)\n const height = Math.min(containerRect.height, maxHeight)\n\n const leftSuggestion = {\n beforeStart: anchorRect.left - width - gap,\n afterStart: anchorRect.left,\n center: anchorRect.left + anchorRect.width / 2 - width / 2,\n beforeEnd: anchorRect.right - width,\n afterEnd: anchorRect.right + gap,\n }[horizontalAlignment]\n\n const topSuggestion = {\n beforeStart: anchorRect.top - height - gap,\n afterStart: anchorRect.top,\n center: anchorRect.top + anchorRect.height / 2 - height / 2,\n beforeEnd: anchorRect.bottom - height,\n afterEnd: anchorRect.bottom + gap,\n }[verticalAlignment]\n\n const left = clamp(leftSuggestion, [\n screenPadding,\n windowWidth - screenPadding - width,\n ])\n\n const top = clamp(topSuggestion, [\n screenPadding,\n windowHeight - screenPadding - height,\n ])\n\n return {\n left,\n top,\n maxWidth,\n maxHeight,\n }\n}\n\nexport type UseFloatingElementOptions = CalculatePositionOptions & {\n isPolling?: boolean,\n pollingInterval?: number,\n}\n\nexport type UseFloatingElementProps = UseFloatingElementOptions & {\n containerRef: RefObject<HTMLElement>,\n anchorRef: RefObject<HTMLElement>,\n windowRef?: RefObject<HTMLElement>,\n active?: boolean,\n}\n\nexport function useFloatingElement({\n active = true,\n windowRef,\n anchorRef,\n containerRef,\n isPolling = false,\n pollingInterval = 100,\n verticalAlignment = 'afterEnd',\n horizontalAlignment = 'afterStart',\n screenPadding = 16,\n gap = 4,\n}: UseFloatingElementProps) {\n const [style, setStyle] = useState<CSSProperties>()\n const isMounted = useIsMounted()\n\n const calculate = useCallback(() => {\n const containerRect = containerRef.current?.getBoundingClientRect()\n if(!containerRect) {\n return\n }\n const windowRect: RectangleBounds = windowRef?.current?.getBoundingClientRect() ?? {\n top: 0,\n bottom: window.innerHeight,\n left: 0,\n right: window.innerWidth,\n width: window.innerWidth,\n height: window.innerHeight,\n }\n const anchorElement = anchorRef?.current\n if (anchorRef && !anchorElement) {\n console.warn('FloatingContainer anchor provided, but its value is undefined')\n }\n const anchorRect: RectangleBounds = anchorElement?.getBoundingClientRect() ?? windowRect\n\n const calculateProps: CalculatePositionProps = {\n windowRect,\n anchorRect,\n containerRect,\n options: {\n horizontalAlignment,\n verticalAlignment,\n screenPadding,\n gap,\n }\n }\n setStyle(calculatePosition(calculateProps))\n }, [anchorRef, containerRef, gap, horizontalAlignment, screenPadding, verticalAlignment, windowRef])\n\n useEffect(() => {\n if (active && isMounted) {\n calculate()\n } else {\n setStyle(undefined)\n }\n }, [calculate, active, isMounted])\n\n useEffect(() => {\n if(!containerRef.current && active) {\n return\n }\n window.addEventListener('resize', calculate)\n let timeout: NodeJS.Timeout\n if (isPolling) {\n timeout = setInterval(calculate, pollingInterval)\n }\n return () => {\n window.removeEventListener('resize', calculate)\n if (timeout) {\n clearInterval(timeout)\n }\n }\n }, [active, calculate, containerRef, isPolling, pollingInterval])\n\n return style\n}","export const clamp = (value: number, range: [number, number] = [0, 1]): number => {\n const [min, max] = range\n return Math.min(Math.max(value, min), max)\n}\n","import type {\n UIEvent,\n ReactNode\n} from 'react'\nimport {\n useRef,\n useState,\n useLayoutEffect,\n useMemo,\n useCallback\n} from 'react'\nimport clsx from 'clsx'\nimport { range } from '@/src/utils/array'\nimport { Button } from '../user-interaction/Button'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport { Visibility } from './Visibility'\n\nexport interface InfiniteScrollProps {\n itemCount: number,\n /** How many items to keep in the DOM at once (default: 30) */\n bufferSize?: number,\n /** How many items to add tp the DOM when reaching one end at once (default: 7) */\n stepSize?: number,\n /** Pixels from edge to trigger a fetch/shift (default: 30) */\n scrollThreshold?: number,\n /** Initial index to center on or start at (optional) */\n initialIndex?: number,\n /** Render prop for each item */\n children: (index: number) => ReactNode,\n /** Optional classname for the scroll container */\n className?: string,\n /** Optional style for the container */\n style?: React.CSSProperties,\n}\n\nexport function InfiniteScroll({\n children,\n itemCount,\n bufferSize = 30,\n scrollThreshold = 30,\n stepSize = 7,\n initialIndex = 0,\n className,\n style,\n}: InfiniteScrollProps) {\n if (stepSize > bufferSize) {\n throw new Error('InfiniteScroll: stepSize <= bufferSize must hold')\n }\n if (itemCount < 1) {\n throw new Error('InfiniteScroll: itemCount > 0 must hold')\n }\n const items = useMemo(() => range(itemCount), [itemCount])\n const containerRef = useRef<HTMLDivElement>(null)\n const snapshotRef = useRef({ scrollHeight: 0, scrollTop: 0, fromTop: false })\n\n const [windowState, setWindowState] = useState(() => {\n let index = initialIndex\n if (index < 0) {\n index = 0\n }\n\n const halfBuffer = Math.floor(bufferSize / 2)\n const safeStart = Math.max(0, initialIndex - halfBuffer)\n\n return {\n start: safeStart,\n end: Math.min(items.length, safeStart + bufferSize)\n }\n })\n\n const addToStart = useCallback((amount = stepSize) => {\n setWindowState(prev => {\n const newStart = Math.max(0, prev.start - amount)\n const newEnd = Math.min(items.length, newStart + bufferSize)\n return { start: newStart, end: newEnd }\n })\n }, [bufferSize, items.length, stepSize])\n\n const addToEnd = useCallback((amount = stepSize) => {\n setWindowState(prev => {\n const newEnd = Math.min(items.length, prev.end + amount)\n const newStart = Math.max(0, newEnd - bufferSize)\n return { start: newStart, end: newEnd }\n })\n }, [bufferSize, items.length, stepSize])\n\n const handleScroll = (e: UIEvent<HTMLElement>) => {\n const { scrollTop, scrollHeight, clientHeight } = e.currentTarget\n\n if (scrollTop < scrollThreshold && windowState.start > 0) {\n snapshotRef.current = { scrollHeight, scrollTop, fromTop: true }\n addToStart()\n }\n else if (scrollTop + clientHeight > scrollHeight - scrollThreshold && windowState.end < items.length) {\n snapshotRef.current = { scrollHeight, scrollTop, fromTop: false }\n addToEnd()\n }\n }\n\n useLayoutEffect(() => {\n const container = containerRef.current\n if (!container || !snapshotRef.current.fromTop) return\n\n const heightDifference = container.scrollHeight - snapshotRef.current.scrollHeight\n\n if (heightDifference > 0) {\n container.scrollTop = snapshotRef.current.scrollTop + heightDifference\n }\n snapshotRef.current.fromTop = false\n }, [windowState])\n\n const visibleItems = useMemo(() =>\n items.slice(windowState.start, windowState.end),\n [items, windowState])\n\n const isUsingInfiteScroll = itemCount > bufferSize\n\n return (\n <div\n ref={containerRef}\n onScroll={isUsingInfiteScroll ? handleScroll : undefined}\n className={clsx('overflow-y-auto', className)}\n style={style}\n >\n <Visibility isVisible={windowState.start > 0}>\n <Button color=\"neutral\" onClick={() => addToStart()}>\n <ChevronUp/>\n </Button>\n </Visibility>\n {visibleItems.map((index) => children(index))}\n <Visibility isVisible={windowState.end < itemCount - 1}>\n <Button color=\"neutral\" onClick={() => addToEnd()}>\n <ChevronDown/>\n </Button>\n </Visibility>\n </div>\n )\n}","import type { HTMLAttributes, RefObject } from 'react'\nimport React, { createContext, forwardRef, useCallback, useContext, useEffect, useRef, useState } from 'react'\nimport { clsx } from 'clsx'\nimport { match } from '@/src/utils/match'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\n//\n// Context\n//\ntype RegisteredItem = {\n id: string,\n value: string,\n disabled: boolean,\n ref: React.RefObject<HTMLLIElement>,\n}\n\ntype ListBoxContextType = {\n registerItem: (item: RegisteredItem) => void,\n unregisterItem: (id: string) => void,\n\n highlightedId?: string,\n setHighlightedId: (id: string) => void,\n\n onItemClick: (id: string) => void,\n isSelected: (value: string) => boolean,\n}\n\nconst ListBoxContext = createContext<ListBoxContextType | null>(null)\n\nfunction useListBoxContext() {\n const ctx = useContext(ListBoxContext)\n if (!ctx) {\n throw new Error('ListBoxItem must be used within a ListBoxPrimitive')\n }\n return ctx\n}\n\n\n/*\n * ListBoxItem\n */\nexport type ListBoxItemProps = HTMLAttributes<HTMLLIElement> & {\n value: string,\n disabled?: boolean,\n}\n\nexport const ListBoxItem = forwardRef<HTMLLIElement, ListBoxItemProps>(\n function ListBoxItem({ value, disabled = false, children, className, ...rest }, ref) {\n const {\n registerItem,\n unregisterItem,\n highlightedId,\n setHighlightedId,\n onItemClick,\n isSelected,\n } = useListBoxContext()\n\n const itemRef = useRef<HTMLLIElement>(null)\n const id = React.useId()\n\n // Register with parent\n useEffect(() => {\n registerItem({ id, value, disabled, ref: itemRef })\n return () => unregisterItem(id)\n }, [id, value, disabled, registerItem, unregisterItem])\n\n const isHighlighted = highlightedId === id\n const selected = isSelected(value)\n\n return (\n <li\n ref={(node) => {\n itemRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as RefObject<HTMLLIElement | null>).current = node\n }}\n id={id}\n role=\"option\"\n aria-disabled={disabled}\n aria-selected={selected}\n data-highlighted={isHighlighted ? '' : undefined}\n data-selected={selected ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n className={clsx(\n 'flex-row-1 items-center px-2 py-1 rounded-md',\n 'data-highlighted:bg-primary/20',\n 'data-disabled:text-disabled data-disabled:cursor-not-allowed',\n 'not-data-disabled:cursor-pointer',\n className\n )}\n onClick={() => {\n if (!disabled) onItemClick(id)\n }}\n onMouseEnter={() => {\n if (!disabled) {\n setHighlightedId(id)\n }\n }}\n {...rest}\n >\n {children ?? value}\n </li>\n )\n }\n)\n\ntype ListBoxOrientation = 'vertical' | 'horizontal'\n\n//\n// ListBoxPrimitive\n//\nexport type ListBoxPrimitiveProps = HTMLAttributes<HTMLUListElement> & {\n value?: string[],\n onItemClicked?: (value: string) => void,\n onSelectionChanged?: (value: string[]) => void,\n isSelection?: boolean,\n isMultiple?: boolean,\n orientation?: ListBoxOrientation,\n}\n\n\nexport const ListBoxPrimitive = forwardRef<HTMLUListElement, ListBoxPrimitiveProps>(\n function ListBoxPrimitive({\n value,\n onSelectionChanged,\n onItemClicked,\n isSelection = false,\n isMultiple = false,\n orientation = 'vertical',\n ...props\n }, ref) {\n const itemsRef = useRef<RegisteredItem[]>([])\n const [highlightedIndex, setHighlightedIndex] = useState<number | undefined>(undefined)\n\n const registerItem = useCallback((item: RegisteredItem) => {\n itemsRef.current.push(item)\n itemsRef.current.sort((a, b) => {\n const aEl = a.ref.current\n const bEl = b.ref.current\n if (!aEl || !bEl) return 0\n return aEl.compareDocumentPosition(bEl) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n }, [])\n\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter(i => i.id !== id)\n }, [])\n\n const isSelected = useCallback(\n (val: string) => (value ?? []).includes(val),\n [value]\n )\n\n const onItemClickedHandler = useCallback(\n (id: string) => {\n const index = itemsRef.current.findIndex(i => i.id === id)\n if (index === -1) {\n console.error('ListBoxItem provided an invalid id')\n return\n }\n const item = itemsRef.current[index]\n const val = item.value\n onItemClicked?.(val)\n setHighlightedIndex(index)\n if (!isSelection) return\n if (!isMultiple) {\n onSelectionChanged?.([val])\n } else {\n if (isSelected(val)) {\n onSelectionChanged?.((value ?? []).filter(v => v !== val))\n } else {\n onSelectionChanged?.([...(value ?? []), val])\n }\n }\n },\n [onItemClicked, isSelection, isMultiple, onSelectionChanged, isSelected, value]\n )\n\n const setHighlightedId = useCallback((id: string) => {\n const index = itemsRef.current.findIndex(i => i.id === id)\n if (index !== -1) {\n setHighlightedIndex(index)\n }\n }, [])\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (highlightedIndex !== undefined) {\n itemsRef.current[highlightedIndex]?.ref.current?.scrollIntoView({ block: 'nearest', behavior: 'auto' })\n }\n }, [highlightedIndex])\n\n const highlightedItem: RegisteredItem | undefined = itemsRef.current[highlightedIndex]\n const ctxValue: ListBoxContextType = {\n registerItem,\n unregisterItem,\n highlightedId: highlightedItem?.id,\n setHighlightedId,\n onItemClick: onItemClickedHandler,\n isSelected,\n }\n\n const moveHighlight = (delta: number) => {\n if (itemsRef.current.length === 0) return\n let nextIndex = highlightedIndex ?? -1\n for (let i = 0; i < itemsRef.current.length; i++) {\n nextIndex = (nextIndex + delta + itemsRef.current.length) % itemsRef.current.length\n if (!itemsRef.current[nextIndex].disabled) break\n }\n setHighlightedIndex(nextIndex)\n }\n\n return (\n <ListBoxContext.Provider value={ctxValue}>\n <ul\n ref={ref}\n {...props}\n onFocus={event => {\n if (highlightedIndex === undefined) {\n const firstEnabled = itemsRef.current.findIndex(i => !i.disabled)\n setHighlightedIndex(firstEnabled !== -1 ? firstEnabled : undefined)\n }\n props.onFocus?.(event)\n }}\n onBlur={event => {\n setHighlightedIndex(undefined)\n props.onBlur?.(event)\n }}\n onKeyDown={(event) => {\n switch (event.key) {\n case match(orientation, {\n vertical: 'ArrowDown',\n horizontal: 'ArrowUp'\n }):\n moveHighlight(1)\n event.preventDefault()\n break\n case match(orientation, {\n vertical: 'ArrowUp',\n horizontal: 'ArrowDown'\n }):\n moveHighlight(-1)\n event.preventDefault()\n break\n case 'Home':\n setHighlightedIndex(itemsRef.current.findIndex(i => !i.disabled))\n event.preventDefault()\n break\n case 'End':\n for (let i = itemsRef.current.length - 1; i >= 0; i--) {\n if (!itemsRef.current[i].disabled) {\n setHighlightedIndex(i)\n break\n }\n }\n event.preventDefault()\n break\n case 'Enter':\n case ' ':\n if (highlightedIndex !== undefined) {\n event.preventDefault()\n onItemClickedHandler(itemsRef.current[highlightedIndex].id)\n }\n break\n }\n props.onKeyDown?.(event)\n }}\n role=\"listbox\"\n aria-multiselectable={isSelection ? isMultiple : undefined}\n aria-orientation={orientation}\n tabIndex={0}\n >\n {props.children}\n </ul>\n </ListBoxContext.Provider>\n )\n }\n)\n\n/*\n * ListBoxMultiple\n */\nexport type ListBoxMultipleProps = Omit<ListBoxPrimitiveProps, 'isMultiple'>\nexport const ListBoxMultiple = ({ ...props }: ListBoxMultipleProps) => {\n return (\n <ListBoxPrimitive {...props}/>\n )\n}\n\nexport type ListBoxMultipleUncontrolledProps = ListBoxMultipleProps\nexport const ListBoxMultipleUncontrolled = ({\n value: initialValue,\n onSelectionChanged,\n ...props\n}: ListBoxMultipleUncontrolledProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onSelectionChanged)\n\n return (\n <ListBoxMultiple\n {...props}\n value={value}\n onSelectionChanged={setValue}\n />\n )\n}\n\nexport type ListBoxProps = Omit<ListBoxPrimitiveProps, 'isMultiple' | 'value' | 'onSelectionChanged'> & {\n value?: string,\n onSelectionChanged?: (value: string) => void,\n}\nexport const ListBox = forwardRef<HTMLUListElement, ListBoxProps>(function ListBox({\n value,\n onSelectionChanged,\n ...props\n}, ref) {\n return (\n <ListBoxPrimitive\n ref={ref}\n value={value !== undefined ? [value] : undefined}\n onSelectionChanged={(newValue) => {\n onSelectionChanged(newValue[0] ?? value)\n }}\n isMultiple={false}\n {...props}\n />\n )\n})\n\nexport type ListBoxUncontrolledProps = ListBoxProps\nexport const ListBoxUncontrolled = ({\n value: initialValue,\n onSelectionChanged,\n ...props\n}: ListBoxUncontrolledProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onSelectionChanged)\n\n return (\n <ListBox\n {...props}\n value={value}\n onSelectionChanged={setValue}\n />\n )\n}","export const match = <K extends string | number | symbol, V>(key: K, values: Record<K, V>) => {\n return values[key]\n}","type ASTNodeModifierType =\n 'none'\n | 'italic'\n | 'bold'\n | 'underline'\n | 'font-space'\n | 'primary'\n | 'secondary'\n | 'warn'\n | 'positive'\n | 'negative'\n\nconst astNodeInserterType = ['helpwave', 'newline'] as const\ntype ASTNodeInserterType = typeof astNodeInserterType[number]\ntype ASTNodeDefaultType = 'text'\n\ntype ASTNode = {\n type: ASTNodeModifierType,\n children: ASTNode[],\n} | {\n type: ASTNodeInserterType,\n} | {\n type: ASTNodeDefaultType,\n text: string,\n}\n\nexport type ASTNodeInterpreterProps = {\n node: ASTNode,\n isRoot?: boolean,\n className?: string,\n}\nexport const ASTNodeInterpreter = ({\n node,\n isRoot = false,\n className = '',\n}: ASTNodeInterpreterProps) => {\n switch (node.type) {\n case 'newline':\n return <br/>\n case 'text':\n return isRoot ? <span className={className}>{node.text}</span> : node.text\n case 'helpwave':\n return (<span className=\"font-bold font-space no-underline\">helpwave</span>)\n case 'none':\n return isRoot ? (\n <span className={className}>{node.children.map((value, index) => (\n <ASTNodeInterpreter key={index}\n node={value}/>\n ))}</span>\n ) :\n <>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</>\n case 'bold':\n return <b>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</b>\n case 'italic':\n return <i>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</i>\n case 'underline':\n return (<u>{node.children.map((value, index) => (<ASTNodeInterpreter key={index} node={value}/>))}</u>)\n case 'font-space':\n return (\n <span className=\"font-space\">{node.children.map((value, index) => (\n <ASTNodeInterpreter key={index}\n node={value}/>\n ))}</span>\n )\n case 'primary':\n return (\n <span className=\"text-primary\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'secondary':\n return (\n <span className=\"text-secondary\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'warn':\n return (\n <span className=\"text-warning\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'positive':\n return (\n <span className=\"text-positive\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n case 'negative':\n return (\n <span className=\"text-negative\">{node.children.map((value, index) => (\n <ASTNodeInterpreter\n key={index} node={value}/>\n ))}</span>\n )\n default:\n return null\n }\n}\n\nconst modifierIdentifierMapping = [\n { id: 'i', name: 'italic' },\n { id: 'b', name: 'bold' },\n { id: 'u', name: 'underline' },\n { id: 'space', name: 'font-space' },\n { id: 'primary', name: 'primary' },\n { id: 'secondary', name: 'secondary' },\n { id: 'warn', name: 'warn' },\n { id: 'positive', name: 'positive' },\n { id: 'negative', name: 'negative' },\n] as const\n\nconst inserterIdentifierMapping = [\n { id: 'helpwave', name: 'helpwave' },\n { id: 'newline', name: 'newline' }\n] as const\nconst parseMarkdown = (\n text: string,\n commandStart: string = '\\\\',\n open: string = '{',\n close: string = '}'\n): ASTNode => {\n let start = text.indexOf(commandStart)\n const children: ASTNode[] = []\n\n // parse the text step by step\n while (text !== '') {\n if (start === -1) {\n children.push({\n type: 'text',\n text\n })\n break\n }\n children.push(parseMarkdown(text.substring(0, start)))\n text = text.substring(start)\n if (text.length <= 1) {\n children.push({\n type: 'text',\n text\n })\n text = ''\n continue\n }\n const simpleReplace = [commandStart, open, close]\n if (simpleReplace.some(value => text[1] === value)) {\n children.push({\n type: 'text',\n text: simpleReplace.find(value => text[1] === value)!\n })\n text = text.substring(2)\n start = text.indexOf(commandStart)\n continue\n }\n const inserter = inserterIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n if (inserter) {\n children.push({\n type: inserter.name,\n })\n text = text.substring(inserter.id.length + 1)\n start = text.indexOf(commandStart)\n continue\n }\n const modifier = modifierIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n if (modifier) {\n // check brackets\n if (text[modifier.id.length + 1] !== open) {\n children.push({\n type: 'text',\n text: text.substring(0, modifier.id.length + 1)\n })\n text = text.substring(modifier.id.length + 2)\n start = text.indexOf(commandStart)\n continue\n }\n let closing = -1\n let index = modifier.id.length + 2\n let counter = 1\n let escaping = false\n while (index < text.length) {\n if (text[index] === open && !escaping) {\n counter++\n }\n if (text[index] === close && !escaping) {\n counter--\n if (counter === 0) {\n closing = index\n break\n }\n }\n escaping = text[index] === commandStart\n index++\n }\n\n if (closing !== -1) {\n children.push({\n type: modifier.name,\n children: [parseMarkdown(text.substring(modifier.id.length + 2, closing))]\n })\n text = text.substring(closing + 1)\n start = text.indexOf(commandStart)\n continue\n }\n }\n // nothing could be applied to command start\n children.push({\n type: 'text',\n text: text[0]!\n })\n text = text.substring(1)\n start = text.indexOf(commandStart)\n }\n\n return {\n type: 'none',\n children\n }\n}\n\nconst optimizeTree = (node: ASTNode) => {\n if (node.type === 'text') {\n return !node.text ? undefined : node\n }\n if (astNodeInserterType.some(value => value === node.type)) {\n return node\n }\n\n const currentNode = node as\n { type: ASTNodeModifierType, children: ASTNode[] }\n\n if (currentNode.children.length === 0) {\n return undefined\n }\n\n let children: ASTNode[] = []\n for (let i = 0; i < currentNode.children.length; i++) {\n const child = optimizeTree(currentNode.children[i]!)\n if (!child) {\n continue\n }\n if (child.type === 'none') {\n children.push(...child.children)\n } else {\n children.push(child)\n }\n }\n\n currentNode.children = children\n children = []\n\n for (let i = 0; i < currentNode.children.length; i++) {\n const child = currentNode.children[i]!\n if (child) {\n if (child.type === 'text' && children[children.length - 1]?.type === 'text') {\n (children[children.length - 1]! as { type: ASTNodeDefaultType, text: string }).text += child.text\n } else {\n children.push(child)\n }\n }\n }\n currentNode.children = children\n return currentNode\n}\n\nexport type MarkdownInterpreterProps = {\n text: string,\n className?: string,\n}\n\nexport const MarkdownInterpreter = ({ text, className }: MarkdownInterpreterProps) => {\n const tree = parseMarkdown(text)\n const optimizedTree = optimizeTree(tree)!\n return <ASTNodeInterpreter node={optimizedTree} isRoot={true} className={className}/>\n}\n","import type { Dispatch, HTMLAttributes, KeyboardEvent, PropsWithChildren, ReactNode, RefObject, SetStateAction } from 'react'\nimport { useCallback, useId, useState } from 'react'\nimport { createContext, useContext, useEffect, useRef } from 'react'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { createPortal } from 'react-dom'\nimport { Visibility } from './Visibility'\n\nexport interface TabInfo {\n id: string,\n labelId: string,\n label: ReactNode,\n}\n\ntype TabState = {\n activeId: string | null,\n infos: TabInfo[],\n}\n\ntype PortalState = {\n id: string,\n ref: RefObject<HTMLElement>,\n}\n\nexport interface TabContextType {\n tabs: {\n activeId: string | null,\n setActiveId: Dispatch<SetStateAction<string | null>>,\n register: (info: TabInfo) => void,\n unregister: (id: string) => void,\n info?: TabInfo[],\n },\n portal: {\n id: string | null,\n element: HTMLElement | null,\n setPortal: (state: PortalState | null) => void,\n },\n}\n\nconst TabContext = createContext<TabContextType | null>(null)\n\nexport function useTabContext(): TabContextType {\n const context = useContext(TabContext)\n if (!context) throw new Error('useTabContext must be used inside a <TabView>')\n return context\n}\n\nexport type TabSwitcherProps = PropsWithChildren\n\n//\n// TabSwitcher\n//\nexport function TabSwitcher({ children }: TabSwitcherProps) {\n const [state, setState] = useState<TabState>({\n activeId: null,\n infos: [],\n })\n const [portalState, setPortalState] = useState<PortalState>(null)\n\n const register = (info: TabInfo) => {\n setState(prevState => ({\n activeId: prevState.activeId ?? info.id,\n infos: [...prevState.infos, info],\n }))\n }\n const unregister = useCallback((id: string) => {\n setState(prevState => {\n const infos = prevState.infos.filter(value => value.id !== id)\n let activeId = prevState.activeId\n if (activeId === id) {\n const index = prevState.infos.findIndex(value => value.id === id)\n if (infos.length > 0) {\n const newIndex = index % infos.length\n activeId = infos[newIndex].id\n } else {\n activeId = null\n }\n }\n return {\n activeId,\n infos,\n }\n })\n }, [])\n\n const registerPortal = useCallback((state: PortalState) => {\n setPortalState(state)\n }, [])\n\n return (\n <TabContext.Provider\n value={{\n tabs: {\n activeId: state.activeId,\n setActiveId: (activeId: string) => {\n setState(prevState => ({ ...prevState, activeId }))\n },\n register,\n unregister,\n info: state.infos,\n },\n portal: {\n id: portalState?.id ?? null,\n element: portalState?.ref.current ?? null,\n setPortal: registerPortal,\n }\n }}\n >\n {children}\n </TabContext.Provider>\n )\n}\n\n//\n// TabList\n//\ntype TabListProps = HTMLAttributes<HTMLUListElement>\n\nexport function TabList({ ...props }: TabListProps) {\n const { tabs } = useTabContext()\n const { info, activeId, setActiveId: setActive } = tabs\n const refs = useRef<Record<string, HTMLLIElement | null>>({})\n\n const onKeyDown = (e: KeyboardEvent<HTMLUListElement>) => {\n const idx = info.findIndex((tab) => tab.id === activeId)\n if (idx === -1) return\n\n let nextIdx = idx\n if (e.key === 'ArrowRight') {\n nextIdx = (idx + 1) % info.length\n } else if (e.key === 'ArrowLeft') {\n nextIdx = (idx - 1 + info.length) % info.length\n } else {\n return\n }\n\n const nextId = info[nextIdx].id\n setActive(nextId)\n refs.current[nextId]?.focus()\n }\n\n return (\n <ul\n {...props}\n\n onKeyDown={onKeyDown}\n\n data-name={PropsUtil.dataAttributes.name('tab-list', props)}\n\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n >\n {info.map((tabInfo) => (\n <li\n key={tabInfo.id}\n ref={(el) => {\n refs.current[tabInfo.id] = el\n }}\n id={tabInfo.labelId}\n\n {...PropsUtil.aria.click(() => setActive(tabInfo.id))}\n\n data-name=\"tab-list-item\"\n data-active={PropsUtil.dataAttributes.bool(activeId === tabInfo.id)}\n\n role=\"tab\"\n aria-selected={activeId === tabInfo.id}\n aria-controls={activeId}\n tabIndex={activeId === tabInfo.id ? 0 : -1}\n >\n {tabInfo.label}\n </li>\n ))}\n </ul>\n )\n}\n\n\n//\n// TabView\n//\ntype TabViewProps = HTMLAttributes<HTMLDivElement>\n\nexport function TabView({ ...props }: TabViewProps) {\n const generated = useId()\n const id = props.id ?? 'tab-view-' + generated\n const { portal } = useTabContext()\n const { setPortal } = portal\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n setPortal({ id, ref })\n return () => setPortal(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id])\n\n return (\n <div\n {...props}\n ref={ref}\n id={id}\n data-name={PropsUtil.dataAttributes.name('tab-view', props)}\n />\n )\n}\n\ntype TabProps = HTMLAttributes<HTMLDivElement> & {\n label: string,\n}\n\n//\n// TabPanel\n//\nexport function TabPanel({ label, ...props }: TabProps) {\n const { tabs, portal } = useTabContext()\n const { register, unregister, activeId } = tabs\n const generatedId = useId()\n const id = props.id ?? 'tab-panel-' + generatedId\n const labelId = 'tab-list-button-' + generatedId\n\n useEffect(() => {\n register({ id, label, labelId })\n return () => unregister(id)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, label, labelId])\n\n const isActive = activeId === id\n\n const content = (\n <div\n {...props}\n id={id}\n hidden={!isActive}\n\n data-name={PropsUtil.dataAttributes.name('tab-panel')}\n\n role=\"tabpanel\"\n aria-labelledby={labelId}\n >\n <Visibility isVisible={isActive}>\n {props.children}\n </Visibility>\n </div>\n )\n\n if (portal.element) {\n return createPortal(content, portal.element)\n }\n\n return content\n}","import clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '../user-interaction/Button'\n\ntype TextImageColor = 'primary' | 'secondary' | 'dark'\n\nexport type TextImageProps = {\n title: string,\n description: string,\n imageUrl: string,\n onShowMoreClicked?: () => void,\n color?: TextImageColor,\n badge?: string,\n contentClassName?: string,\n className?: string,\n}\n\n/**\n * A Component for layering a Text upon an image\n */\nexport const TextImage = ({\n title,\n description,\n imageUrl,\n onShowMoreClicked,\n color = 'primary',\n badge,\n contentClassName = '',\n className = '',\n}: TextImageProps) => {\n const translation = useHightideTranslation()\n\n const chipColorMapping: Record<TextImageColor, string> = {\n primary: 'text-text-image-primary-background bg-text-image-primary-text',\n secondary: 'text-text-image-secondary-background bg-text-image-secondary-text',\n dark: 'text-text-image-dark-background bg-text-image-dark-text',\n }\n\n const colorMapping: Record<TextImageColor, string> = {\n primary: 'text-text-image-primary-text bg-linear-to-r from-30% from-text-image-primary-background to-text-image-primary-background/55',\n secondary: 'text-text-image-secondary-text bg-linear-to-r from-30% from-text-image-secondary-background to-text-image-secondary-background/55',\n dark: 'text-text-image-dark-text bg-linear-to-r from-30% from-text-image-dark-background to-text-image-dark-background/55',\n }\n\n return (\n <div\n className={clsx('rounded-2xl w-full', className)}\n style={{\n backgroundImage: `url(${imageUrl})`,\n backgroundSize: 'cover',\n }}>\n <div\n className={clsx(`flex-col-2 px-6 py-12 rounded-2xl h-full`, colorMapping[color], contentClassName)}\n >\n {badge && (\n <div className={clsx(`chip-full mb-2 py-2 px-4 w-fit`, chipColorMapping[color])}>\n <span className=\"text-lg font-bold\">{badge}</span>\n </div>\n )}\n <div className=\"flex-col-1 overflow-hidden\">\n <span className=\"typography-title-lg\">{title}</span>\n <span className=\"text-ellipsis overflow-hidden\">{description}</span>\n </div>\n {onShowMoreClicked && (\n <div className=\"flex-row-2 mt-2 underline\">\n <Button\n color=\"neutral\"\n coloringStyle=\"text\"\n onClick={onShowMoreClicked}\n >\n {translation('showMore')}\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n}\n","export type VerticalDividerProps = {\n width?: number,\n height?: number,\n strokeWidth?: number,\n dashGap?: number,\n dashLength?: number,\n}\n\n/**\n * A Component for creating a vertical Divider\n */\nexport const VerticalDivider = ({\n width = 1,\n height = 100,\n strokeWidth = 4,\n dashGap = 4,\n dashLength = 4,\n}: VerticalDividerProps) => {\n return (\n <div style={{ width: width + 'px', height: height + 'px' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <line\n opacity=\"0.5\"\n x1={width / 2}\n y1={height}\n x2={width / 2}\n y2=\"0\"\n stroke=\"url(#paint_linear)\"\n strokeWidth={strokeWidth}\n strokeDasharray={`${dashLength} ${dashLength + dashGap}`}\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint_linear\"\n x1={width / 2}\n y1=\"0\"\n x2={width / 2}\n y2={height}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopOpacity=\"0\" stopColor=\"currentColor\"/>\n <stop offset=\"0.5\" stopColor=\"currentColor\"/>\n <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity=\"0\"/>\n </linearGradient>\n </defs>\n </svg>\n </div>\n )\n}\n","import type { PropsWithChildren } from 'react'\nimport type { ButtonColor } from '../../user-interaction/Button'\nimport { Button } from '../../user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport clsx from 'clsx'\nimport type { DialogProps } from './Dialog'\nimport { Dialog } from './Dialog'\n\nexport type ConfirmDialogType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n text?: string,\n color?: ButtonColor,\n disabled?: boolean,\n}\n\nexport type ConfirmDialogProps = Omit<DialogProps, 'onClose'> & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onConfirm: () => void,\n onDecline?: () => void,\n confirmType?: ConfirmDialogType,\n /**\n * Order: Cancel, Decline, Confirm\n */\n buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Dialog for asking the user for confirmation\n */\nexport const ConfirmDialog = ({\n children,\n onCancel,\n onConfirm,\n onDecline,\n confirmType = 'positive',\n buttonOverwrites,\n className,\n ...restProps\n}: PropsWithChildren<ConfirmDialogProps>) => {\n const translation = useHightideTranslation()\n\n const mapping: Record<ConfirmDialogType, ButtonColor> = {\n neutral: 'neutral',\n negative: 'negative',\n positive: 'positive',\n primary: 'primary',\n }\n\n return (\n <Dialog {...restProps} onClose={onCancel} className={clsx('justify-between', className)}>\n <div className=\"flex-col-2 grow\">\n {children}\n </div>\n <div className=\"flex-row-4 mt-3 justify-end\">\n {onCancel && (\n <Button\n color={buttonOverwrites?.[0].color ?? 'neutral'}\n onClick={onCancel}\n disabled={buttonOverwrites?.[0].disabled ?? false}\n >\n {buttonOverwrites?.[0].text ?? translation('cancel')}\n </Button>\n )}\n {onDecline && (\n <Button\n color={buttonOverwrites?.[1].color ?? 'negative'}\n onClick={onDecline}\n\n disabled={buttonOverwrites?.[1].disabled ?? false}\n >\n {buttonOverwrites?.[1].text ?? translation('decline')}\n </Button>\n )}\n <Button\n color={buttonOverwrites?.[2].color ?? mapping[confirmType]}\n onClick={onConfirm}\n disabled={buttonOverwrites?.[2].disabled ?? false}\n >\n {buttonOverwrites?.[2].text ?? translation('confirm')}\n </Button>\n </div>\n </Dialog>\n )\n}\n","'use client'\n\nimport type { HTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport { useId, useMemo } from 'react'\nimport { useRef } from 'react'\nimport { X } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { useLogOnce } from '@/src/hooks/useLogOnce'\nimport { createPortal } from 'react-dom'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { Visibility } from '../Visibility'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type DialogPosition = 'top' | 'center' | 'none'\n\nexport type DialogProps = HTMLAttributes<HTMLDivElement> & {\n /** Whether the dialog is currently open */\n isOpen: boolean,\n /** Title of the Dialog used for accessibility */\n titleElement: ReactNode,\n /** Description of the Dialog used for accessibility */\n description: ReactNode,\n /** Callback when the dialog tries to close */\n onClose?: () => void,\n /** Styling for the background */\n backgroundClassName?: string,\n /** If true shows a close button and sends onClose on background clicks */\n isModal?: boolean,\n position?: DialogPosition,\n isAnimated?: boolean,\n containerClassName?: string,\n}\n\n/**\n * A generic dialog window which is managed by its parent\n */\nexport const Dialog = ({\n children,\n isOpen,\n titleElement,\n description,\n isModal = true,\n onClose,\n backgroundClassName,\n position = 'center',\n containerClassName,\n ...props\n}: PropsWithChildren<DialogProps>) => {\n const translation = useHightideTranslation()\n const generatedId = useId()\n const ids = useMemo(() => ({\n container: `dialog-container-${generatedId}`,\n background: `dialog-background-${generatedId}`,\n content: props.id ?? `dialog-content-${generatedId}`\n }), [generatedId, props.id])\n const ref = useRef<HTMLDivElement>(null)\n\n const onCloseWrapper = () => {\n if (!isModal) return\n onClose?.()\n }\n\n useLogOnce('Dialog: onClose should be defined for modal dialogs', isModal && !onClose)\n\n const { isVisible, transitionState, callbacks } = useTransitionState({ isOpen })\n\n useFocusTrap({\n container: ref,\n active: isVisible,\n focusFirst: true,\n })\n\n const { zIndex } = useOverlayRegistry({\n isActive: isVisible,\n })\n\n if (!isVisible) return\n\n return createPortal(\n <div\n id={ids.container}\n\n data-name=\"dialog-container\"\n data-open={PropsUtil.dataAttributes.bool(isOpen)}\n\n className={containerClassName}\n style={{ zIndex }}\n >\n <div\n id={ids.background}\n\n onClick={onCloseWrapper}\n\n data-name=\"dialog-background\"\n data-state={transitionState}\n\n aria-hidden={true}\n\n className={backgroundClassName}\n />\n <div\n {...props}\n id={ids.content}\n ref={ref}\n\n onKeyDown={event => {\n if (event.key === 'Escape') {\n onCloseWrapper()\n }\n }}\n {...callbacks}\n\n data-name={PropsUtil.dataAttributes.name('dialog-content', props)}\n data-state={transitionState}\n data-position={position}\n\n className={props.className}\n >\n <div className=\"typography-title-lg mr-8\">\n {titleElement}\n </div>\n <Visibility isVisible={!!description}>\n <div className=\"text-description\">\n {description}\n </div>\n </Visibility>\n <Visibility isVisible={isModal}>\n <div\n className=\"absolute top-0 right-0\"\n style={{\n paddingTop: 'inherit',\n paddingRight: 'inherit'\n }}\n >\n <Button\n layout=\"icon\"\n color=\"neutral\"\n size=\"xs\"\n aria-label={translation('close')}\n onClick={onCloseWrapper}\n >\n <X />\n </Button>\n </div>\n </Visibility>\n {children}\n </div>\n </div>\n , document.body\n )\n}","import { useEffect, useState } from 'react'\n\ntype OptionsResolved = {\n type?: 'info' | 'error' | 'warning',\n}\n\nconst defaultOptions: OptionsResolved = {\n type: 'warning',\n}\n\ntype Options = Partial<OptionsResolved>\n\nexport const useLogOnce = (\n message: string,\n condition: boolean,\n options?: Options\n) => {\n const [hasLogged, setHasLogged] = useState<boolean>(false)\n const { type } = { ...defaultOptions, ...options }\n\n useEffect(() => {\n if (!hasLogged && condition) {\n switch (type) {\n case 'info':\n console.info(message)\n break\n case 'error':\n console.error(message)\n break\n case 'warning':\n console.warn(message)\n break\n }\n setHasLogged(true)\n }\n }, [condition]) // eslint-disable-line react-hooks/exhaustive-deps\n}","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { ConfirmDialogProps } from '@/src/components/layout/dialog/ConfirmDialog'\nimport { ConfirmDialog } from '@/src/components/layout/dialog/ConfirmDialog'\n\ntype DiscardChangesDialogProps =\n Omit<ConfirmDialogProps, 'onDecline' | 'onConfirm' | 'buttonOverwrites' | 'titleElement' | 'description'>\n & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onSave: () => void,\n onDontSave: () => void,\n titleOverwrite?: ReactNode,\n descriptionOverwrite?: ReactNode,\n}\n\nexport const DiscardChangesDialog = ({\n children,\n onCancel,\n onSave,\n onDontSave,\n titleOverwrite,\n descriptionOverwrite,\n ...props\n}: PropsWithChildren<DiscardChangesDialogProps>) => {\n const translation = useHightideTranslation()\n return (\n <ConfirmDialog\n {...props}\n titleElement={titleOverwrite ?? translation('unsavedChanges')}\n description={descriptionOverwrite ?? translation('unsavedChangesSaveQuestion')}\n onConfirm={onSave}\n onCancel={onCancel}\n onDecline={onDontSave}\n buttonOverwrites={[{ text: translation('cancel') }, { text: translation('discardChanges') }, { text: translation('save') }]}\n >\n {children}\n </ConfirmDialog>\n )\n}\n","import type { InputHTMLAttributes } from 'react'\nimport React, { forwardRef, useImperativeHandle, useRef } from 'react'\nimport type { UseDelayOptionsResolved } from '@/src/hooks/useDelay'\nimport { useDelay } from '@/src/hooks/useDelay'\nimport { useFocusManagement } from '@/src/hooks/focus/useFocusManagement'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { FormFieldInteractionStates } from '../../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type EditCompleteOptionsResolved = {\n onBlur: boolean,\n afterDelay: boolean,\n allowEnterComplete?: boolean,\n} & Omit<UseDelayOptionsResolved, 'disabled'>\n\nexport type EditCompleteOptions = Partial<EditCompleteOptionsResolved>\n\nconst defaultEditCompleteOptions: EditCompleteOptionsResolved = {\n allowEnterComplete: false,\n onBlur: true,\n afterDelay: false,\n delay: 2500\n}\n\nexport type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'value'>\n & Partial<FormFieldDataHandling<string>>\n & Partial<FormFieldInteractionStates>\n & { editCompleteOptions?: EditCompleteOptions }\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input({\n invalid = false,\n onValueChange,\n onEditComplete,\n editCompleteOptions,\n ...props\n}, forwardedRef) {\n const {\n onBlur: allowEditCompleteOnBlur,\n afterDelay,\n delay,\n allowEnterComplete\n } = { ...defaultEditCompleteOptions, ...editCompleteOptions }\n\n const {\n restartTimer,\n clearTimer\n } = useDelay({ delay, disabled: !afterDelay })\n\n const innerRef = useRef<HTMLInputElement>(null)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n const { focusNext } = useFocusManagement()\n\n return (\n <input\n {...props}\n ref={innerRef}\n\n onKeyDown={event => {\n props.onKeyDown?.(event)\n if (!allowEnterComplete) {\n return\n }\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n innerRef.current?.blur()\n onEditComplete?.((event.target as HTMLInputElement).value)\n focusNext()\n }\n }}\n onBlur={event => {\n props.onBlur?.(event)\n if (allowEditCompleteOnBlur) {\n onEditComplete?.(event.target.value)\n clearTimer()\n }\n }}\n onChange={event => {\n props.onChange?.(event)\n const value = event.target.value\n restartTimer(() => {\n innerRef.current?.blur()\n onEditComplete?.(value)\n })\n onValueChange?.(value)\n }}\n\n data-name={PropsUtil.dataAttributes.name('input', props)}\n data-value={PropsUtil.dataAttributes.bool(!!props.value)}\n {...PropsUtil.dataAttributes.interactionStates({ ...props, invalid })}\n\n {...PropsUtil.aria.interactionStates({ ...props, invalid }, props)}\n />\n )\n})\n\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed by the component itself\n */\nexport const InputUncontrolled = forwardRef<HTMLInputElement, InputProps>(function InputUncontrolled({\n value,\n onValueChange,\n ...props\n}, ref) {\n const [usedValue, setUsedValue] = useOverwritableState(value, onValueChange)\n\n return (\n <Input\n {...props}\n ref={ref}\n value={usedValue}\n onValueChange={setUsedValue}\n />\n )\n})\n","import { useEffect, useState } from 'react'\n\nexport type UseDelayOptionsResolved = {\n delay: number,\n disabled: boolean,\n}\n\nexport type UseDelayOptions = Partial<UseDelayOptionsResolved>\n\nconst defaultOptions: UseDelayOptionsResolved = {\n delay: 3000,\n disabled: false,\n}\n\nexport function useDelay(options?: UseDelayOptions) {\n const [timer, setTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n const { delay, disabled }: UseDelayOptionsResolved = {\n ...defaultOptions,\n ...options\n }\n\n const clearTimer = () => {\n clearTimeout(timer)\n setTimer(undefined)\n }\n\n const restartTimer = (onDelayFinish: () => void) => {\n if(disabled) {\n return\n }\n clearTimeout(timer)\n setTimer(setTimeout(() => {\n onDelayFinish()\n setTimer(undefined)\n }, delay))\n }\n\n useEffect(() => {\n return () => {\n clearTimeout(timer)\n }\n }, [timer])\n\n useEffect(() => {\n if(disabled){\n clearTimeout(timer)\n setTimer(undefined)\n }\n }, [disabled, timer])\n\n return { restartTimer, clearTimer, hasActiveTimer: !!timer }\n}","import { useCallback } from 'react'\n\nexport function useFocusManagement() {\n const getFocusableElements = useCallback((): HTMLElement[] => {\n return Array.from(\n document.querySelectorAll(\n 'input, button, select, textarea, a[href], [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter(\n (el): el is HTMLElement =>\n el instanceof HTMLElement &&\n !el.hasAttribute('disabled') &&\n !el.hasAttribute('hidden') &&\n el.tabIndex !== -1\n )\n }, [])\n\n const getNextFocusElement = useCallback((): HTMLElement | undefined => {\n const elements = getFocusableElements()\n if(elements.length === 0) {\n return undefined\n }\n let nextElement = elements[0]\n if(document.activeElement instanceof HTMLElement) {\n const currentIndex = elements.indexOf(document.activeElement)\n nextElement = elements[(currentIndex + 1) % elements.length]\n }\n return nextElement\n }, [getFocusableElements])\n\n const focusNext = useCallback(() => {\n const nextElement = getNextFocusElement()\n nextElement?.focus()\n }, [getNextFocusElement])\n\n const getPreviousFocusElement = useCallback((): HTMLElement | undefined => {\n const elements = getFocusableElements()\n if(elements.length === 0) {\n return undefined\n }\n let previousElement = elements[0]\n if(document.activeElement instanceof HTMLElement) {\n const currentIndex = elements.indexOf(document.activeElement)\n if(currentIndex === 0) {\n previousElement = elements[elements.length - 1]\n } else {\n previousElement = elements[currentIndex - 1]\n }\n }\n return previousElement\n }, [getFocusableElements])\n\n const focusPrevious = useCallback(() => {\n const previousElement = getPreviousFocusElement()\n if (previousElement) previousElement.focus()\n }, [getPreviousFocusElement])\n\n return {\n getFocusableElements,\n getNextFocusElement,\n getPreviousFocusElement,\n focusNext,\n focusPrevious,\n }\n}","import type { InputProps } from '../../user-interaction/input/Input'\nimport { Input } from '../../user-interaction/input/Input'\nimport type { ConfirmDialogProps } from '@/src/components/layout/dialog/ConfirmDialog'\nimport { ConfirmDialog } from '@/src/components/layout/dialog/ConfirmDialog'\n\nexport type InputModalProps = ConfirmDialogProps & {\n inputs: InputProps[],\n}\n\n/**\n * A modal for receiving multiple inputs\n */\nexport const InputDialog = ({\n inputs,\n buttonOverwrites,\n ...props\n}: InputModalProps) => {\n return (\n <ConfirmDialog\n buttonOverwrites={buttonOverwrites}\n {...props}\n >\n {inputs.map((inputProps, index) => <Input key={`input ${index}`} {...inputProps}/>)}\n </ConfirmDialog>\n )\n}\n","import type { ButtonHTMLAttributes, HTMLAttributes, PropsWithChildren, ReactNode, RefObject } from 'react'\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { match } from '@/src/utils/match'\nimport { CheckIcon, Plus, XIcon } from 'lucide-react'\nimport { Chip } from '@/src/components/display-and-visualization/Chip'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { UseFloatingElementOptions } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport { createPortal } from 'react-dom'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\n\n//\n// Context\n//\ntype RegisteredOption = {\n value: string,\n label: ReactNode,\n disabled: boolean,\n ref: React.RefObject<HTMLLIElement>,\n}\n\ntype HighlightStartPositionBehavior = 'first' | 'last'\ntype SelectIconAppearance = 'left' | 'right' | 'none'\n\ntype InternalSelectContextState = {\n isOpen: boolean,\n options: RegisteredOption[],\n highlightedValue?: string,\n}\n\ntype SelectContextState = InternalSelectContextState & {\n id: string,\n value: string[],\n disabled: boolean,\n invalid: boolean,\n selectedOptions: RegisteredOption[],\n}\n\ntype SelectConfiguration = {\n isMultiSelect: boolean,\n iconAppearance: SelectIconAppearance,\n}\n\ntype ToggleOpenOptions = {\n highlightStartPositionBehavior?: HighlightStartPositionBehavior,\n}\n\nconst defaultToggleOpenOptions: ToggleOpenOptions = {\n highlightStartPositionBehavior: 'first',\n}\n\ntype SelectContextType = {\n state: SelectContextState,\n config: SelectConfiguration,\n item: {\n register: (item: RegisteredOption) => void,\n unregister: (value: string) => void,\n toggleSelection: (value: string, isSelected?: boolean) => void,\n highlightItem: (value: string) => void,\n moveHighlightedIndex: (delta: number) => void,\n },\n trigger: {\n ref: React.RefObject<HTMLElement>,\n register: (element: React.RefObject<HTMLElement>) => void,\n unregister: () => void,\n toggleOpen: (isOpen?: boolean, options?: ToggleOpenOptions) => void,\n },\n}\n\nconst SelectContext = createContext<SelectContextType | null>(null)\n\nfunction useSelectContext() {\n const ctx = useContext(SelectContext)\n if (!ctx) {\n throw new Error('SelectContext must be used within a ListBoxPrimitive')\n }\n return ctx\n}\n\n\n//\n// SelectRoot\n//\nexport type SelectRootProps = PropsWithChildren & {\n id?: string,\n value?: string,\n onValueChange?: (value: string) => void,\n values?: string[],\n onValuesChange?: (value: string[]) => void,\n isOpen?: boolean,\n disabled?: boolean,\n invalid?: boolean,\n isMultiSelect?: boolean,\n iconAppearance?: SelectIconAppearance,\n}\n\nexport const SelectRoot = ({\n children,\n id,\n value,\n onValueChange,\n values,\n onValuesChange,\n isOpen = false,\n disabled = false,\n invalid = false,\n isMultiSelect = false,\n iconAppearance = 'left',\n}: SelectRootProps) => {\n const triggerRef = useRef<HTMLElement>(null)\n const generatedId = useId()\n const usedId = id ?? generatedId\n\n const [internalState, setInternalState] = useState<InternalSelectContextState>({\n isOpen,\n options: [],\n })\n\n const selectedValues = useMemo(() => isMultiSelect ? (values ?? []) : [value].filter(Boolean),\n [isMultiSelect, value, values])\n const selectedOptions = useMemo(() =>\n selectedValues.map(value => internalState.options.find(option => value === option.value)).filter(Boolean),\n [selectedValues, internalState.options])\n const state: SelectContextState = {\n ...internalState,\n id: usedId,\n disabled,\n invalid,\n value: selectedValues,\n selectedOptions,\n }\n\n const config: SelectConfiguration = {\n isMultiSelect,\n iconAppearance,\n }\n\n const registerItem = useCallback((item: RegisteredOption) => {\n setInternalState(prev => {\n const updatedOptions = [...prev.options, item]\n updatedOptions.sort((a, b) => {\n const aEl = a.ref.current\n const bEl = b.ref.current\n if (!aEl || !bEl) return 0\n return aEl.compareDocumentPosition(bEl) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n return {\n ...prev,\n options: updatedOptions,\n }\n })\n }, [])\n\n const unregisterItem = useCallback((value: string) => {\n setInternalState(prev => {\n const updatedOptions = prev.options.filter(i => i.value !== value)\n return {\n ...prev,\n options: updatedOptions,\n }\n })\n }, [])\n\n // Setting isSelected to false only works for multiselects\n const toggleSelection = (value: string, isSelected?: boolean) => {\n if (disabled) {\n return\n }\n const option = state.options.find(i => i.value === value)\n if (!option) {\n console.error(`SelectOption with value: ${value} not found`)\n return\n }\n\n let newValue: string[]\n if (isMultiSelect) {\n const isSelectedBefore = state.value.includes(value)\n const isSelectedAfter = isSelected ?? !isSelectedBefore\n if (!isSelectedAfter) {\n newValue = state.value.filter(v => v !== value)\n } else {\n newValue = [...state.value, value]\n }\n } else {\n newValue = [value]\n }\n\n if (!isMultiSelect) {\n onValueChange?.(newValue[0])\n } else {\n onValuesChange?.(newValue)\n }\n\n setInternalState(prevState => ({\n ...prevState,\n highlightedValue: value,\n }))\n }\n\n const highlightItem = (value: string) => {\n if (disabled) {\n return\n }\n setInternalState(prevState => ({\n ...prevState,\n highlightedValue: value,\n }))\n }\n\n const registerTrigger = useCallback((ref: React.RefObject<HTMLElement>) => {\n triggerRef.current = ref.current\n }, [])\n\n const unregisterTrigger = useCallback(() => {\n triggerRef.current = null\n }, [])\n\n const toggleOpen = (isOpen?: boolean, toggleOpenOptions?: ToggleOpenOptions) => {\n const { highlightStartPositionBehavior } = { ...defaultToggleOpenOptions, ...toggleOpenOptions }\n let firstSelectedValue: string | undefined\n let firstEnabledValue: string | undefined\n for (let i = 0; i < state.options.length; i++) {\n const currentOption = state.options[highlightStartPositionBehavior === 'first' ? i : state.options.length - i - 1]\n if (!currentOption.disabled) {\n if (!firstEnabledValue) {\n firstEnabledValue = currentOption.value\n }\n if (selectedValues.includes(currentOption.value)) {\n firstSelectedValue = currentOption.value\n break\n }\n }\n }\n setInternalState(prevState => ({\n ...prevState,\n isOpen: isOpen ?? !prevState.isOpen,\n highlightedValue: firstSelectedValue ?? firstEnabledValue\n }))\n }\n\n const moveHighlightedIndex = (delta: number) => {\n let highlightedIndex = state.options.findIndex(value => value.value === internalState.highlightedValue)\n if (highlightedIndex === -1) {\n highlightedIndex = 0\n }\n const optionLength = state.options.length\n const startIndex = (highlightedIndex + (delta % optionLength) + optionLength) % optionLength\n const isForward = delta >= 0\n let highlightedValue = state.options[startIndex].value\n for (let i = 0; i < state.options.length; i++) {\n const index = (startIndex + (isForward ? i : -i) + optionLength) % optionLength\n if (!state.options[index].disabled) {\n highlightedValue = state.options[index].value\n break\n }\n }\n\n setInternalState(prevState => ({\n ...prevState,\n highlightedValue,\n }))\n }\n\n useEffect(() => {\n if (!internalState.highlightedValue) return\n const highlighted = internalState.options.find(value => value.value === internalState.highlightedValue)\n if (highlighted) {\n highlighted.ref.current?.scrollIntoView({ behavior: 'instant', block: 'nearest' })\n } else {\n console.error(`SelectRoot: Could not find highlighted value (${internalState.highlightedValue})`)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalState.highlightedValue])\n\n const contextValue: SelectContextType = {\n state,\n config,\n item: {\n register: registerItem,\n unregister: unregisterItem,\n toggleSelection,\n highlightItem,\n moveHighlightedIndex,\n },\n trigger: {\n ref: triggerRef,\n register: registerTrigger,\n unregister: unregisterTrigger,\n toggleOpen,\n },\n }\n\n return (\n <SelectContext.Provider value={contextValue}>\n {children}\n </SelectContext.Provider>\n )\n}\n\n//\n// SelectOption\n//\nexport type SelectOptionProps = Omit<HTMLAttributes<HTMLLIElement>, 'children'> & {\n value: string,\n disabled?: boolean,\n iconAppearance?: SelectIconAppearance,\n children?: ReactNode,\n}\n\nexport const SelectOption = forwardRef<HTMLLIElement, SelectOptionProps>(\n function SelectOption({ children, value, disabled = false, iconAppearance, className, ...restProps }, ref) {\n const { state, config, item, trigger } = useSelectContext()\n const { register, unregister, toggleSelection, highlightItem } = item\n const itemRef = useRef<HTMLLIElement>(null)\n\n iconAppearance ??= config.iconAppearance\n\n const label = children ?? value\n\n // Register with parent\n useEffect(() => {\n register({\n value,\n label,\n disabled,\n ref: itemRef,\n })\n return () => unregister(value)\n }, [value, disabled, register, unregister, children, label])\n\n const isHighlighted = state.highlightedValue === value\n const isSelected = state.value.includes(value)\n\n return (\n <li\n {...restProps}\n ref={(node) => {\n itemRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as RefObject<HTMLLIElement | null>).current = node\n }}\n id={value}\n role=\"option\"\n aria-disabled={disabled}\n aria-selected={isSelected}\n data-highlighted={isHighlighted ? '' : undefined}\n data-selected={isSelected ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n className={clsx(\n 'flex-row-1 items-center px-2 py-1 rounded-md',\n 'data-highlighted:bg-primary/20',\n 'data-disabled:text-disabled data-disabled:cursor-not-allowed',\n 'not-data-disabled:cursor-pointer',\n className\n )}\n onClick={(event) => {\n if (!disabled) {\n toggleSelection(value)\n if (!config.isMultiSelect) {\n trigger.toggleOpen(false)\n }\n restProps.onClick?.(event)\n }\n }}\n onMouseEnter={(event) => {\n if (!disabled) {\n highlightItem(value)\n restProps.onMouseEnter?.(event)\n }\n }}\n >\n {iconAppearance === 'left' && (state.value.length > 0 || config.isMultiSelect) && (\n <CheckIcon\n className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n aria-hidden={true}\n />\n )}\n {label}\n {iconAppearance === 'right' && (state.value.length > 0 || config.isMultiSelect) && (\n <CheckIcon\n className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n aria-hidden={true}\n />\n )}\n </li>\n )\n }\n)\n\n///\n/// SelectButton\n///\ntype SelectButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n placeholder?: ReactNode,\n selectedDisplay?: (value: string[]) => ReactNode,\n}\n\nexport const SelectButton = forwardRef<HTMLButtonElement, SelectButtonProps>(function SelectButton(\n { placeholder, selectedDisplay, ...props }, ref\n) {\n const translation = useHightideTranslation()\n const { state, trigger } = useSelectContext()\n const { register, unregister, toggleOpen } = trigger\n\n const innerRef = useRef<HTMLButtonElement>(null)\n useImperativeHandle(ref, () => innerRef.current)\n\n useEffect(() => {\n register(innerRef)\n return () => unregister()\n }, [register, unregister])\n\n const disabled = !!props?.disabled || !!state.disabled\n const invalid = state.invalid\n const hasValue = state.value.length > 0\n\n return (\n <button\n {...props}\n ref={innerRef}\n id={state.id} // TODO allow for a custom id here\n disabled={disabled}\n type=\"button\"\n\n onClick={(event) => {\n props.onClick?.(event)\n toggleOpen(!state.isOpen)\n }}\n onKeyDown={event => {\n props.onKeyDown?.(event)\n switch (event.key) {\n case 'ArrowDown':\n toggleOpen(true, { highlightStartPositionBehavior: 'first' })\n event.preventDefault()\n event.stopPropagation()\n break\n case 'ArrowUp':\n toggleOpen(true, { highlightStartPositionBehavior: 'last' })\n event.preventDefault()\n event.stopPropagation()\n break\n }\n }}\n\n data-name={props['data-name'] ?? 'select-button'}\n data-value={hasValue ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-invalid={invalid ? '' : undefined}\n\n aria-invalid={invalid}\n aria-disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={state.isOpen}\n aria-controls={state.isOpen ? `${state.id}-listbox` : undefined}\n >\n {hasValue ?\n selectedDisplay?.(state.value) ?? (\n <div className={clsx('flex flex-wrap gap-x-1 gap-y-2')}>\n {state.selectedOptions.map(({ value, label }, index) => (\n <span key={value} className=\"flex-row-0\">\n {label}\n {index < state.value.length - 1 && (<span>{','}</span>)}\n </span>\n ))}\n </div>\n )\n : placeholder ?? translation('clickToSelect')\n }\n <ExpansionIcon isExpanded={state.isOpen}/>\n </button>\n )\n})\n\n///\n/// SelectChipDisplay\n///\ntype SelectChipDisplayProps = HTMLAttributes<HTMLDivElement> & {\n disabled?: boolean,\n placeholder?: ReactNode,\n}\n\nexport const SelectChipDisplay = forwardRef<HTMLDivElement, SelectChipDisplayProps>(function SelectChipDisplay(\n { ...props }, ref\n) {\n const { state, trigger, item } = useSelectContext()\n const { register, unregister, toggleOpen } = trigger\n\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(ref, () => innerRef.current)\n\n useEffect(() => {\n register(innerRef)\n return () => unregister()\n }, [register, unregister])\n\n const disabled = !!props?.disabled || !!state.disabled\n const invalid = state.invalid\n\n return (\n <div\n {...props}\n ref={innerRef}\n\n onClick={(event) => {\n toggleOpen()\n props.onClick?.(event)\n }}\n\n data-name={props['data-name'] ?? 'select-button-chips'}\n data-value={state.value.length > 0 ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-invalid={invalid ? '' : undefined}\n\n aria-invalid={invalid}\n aria-disabled={disabled}\n >\n {state.selectedOptions.map(({ value, label }) => (\n <Chip key={value} className=\"gap-x-2\">\n {label}\n <Button\n // TODO add label to indicate purpose to screen reader\n onClick={() => {\n item.toggleSelection(value, false)\n }}\n size=\"xs\"\n color=\"negative\"\n coloringStyle=\"text\"\n layout=\"icon\"\n className=\"flex-row-0 items-center\"\n >\n <XIcon className=\"size-5\"/>\n </Button>\n </Chip>\n ))}\n <Button\n id={state.id} // TODO allow for a custom id here\n onClick={(event) => {\n event.stopPropagation()\n toggleOpen()\n }}\n onKeyDown={event => {\n switch (event.key) {\n case 'ArrowDown':\n toggleOpen(true, { highlightStartPositionBehavior: 'first' })\n break\n case 'ArrowUp':\n toggleOpen(true, { highlightStartPositionBehavior: 'last' })\n }\n }}\n layout=\"icon\"\n size=\"sm\"\n color=\"neutral\"\n\n aria-invalid={invalid}\n aria-disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={state.isOpen}\n aria-controls={state.isOpen ? `${state.id}-listbox` : undefined}\n\n className=\"size-9\"\n >\n <Plus/>\n </Button>\n </div>\n )\n})\n\n\n///\n/// SelectContent\n///\ntype Orientation = 'vertical' | 'horizontal'\n\nexport type SelectContentProps = HTMLAttributes<HTMLUListElement> & {\n alignment?: Pick<UseFloatingElementOptions, 'gap' | 'horizontalAlignment' | 'verticalAlignment'>,\n orientation?: Orientation,\n containerClassName?: string,\n}\n\nexport const SelectContent = forwardRef<HTMLUListElement, SelectContentProps>(\n function SelectContent({\n alignment,\n orientation = 'vertical',\n containerClassName,\n ...props\n }, ref) {\n const innerRef = useRef<HTMLUListElement>(null)\n useImperativeHandle(ref, () => innerRef.current)\n\n const { trigger, state, config, item } = useSelectContext()\n\n const position = useFloatingElement({\n active: state.isOpen,\n anchorRef: trigger.ref,\n containerRef: innerRef,\n ...alignment,\n })\n\n useFocusTrap({\n container: innerRef,\n active: state.isOpen && !!position,\n })\n\n\n const { zIndex } = useOverlayRegistry({ isActive: state.isOpen })\n\n return createPortal(\n <div\n id={`select-container-${state.id}`}\n className={clsx('fixed inset-0 w-screen h-screen', containerClassName)}\n style={{ zIndex: zIndex }}\n hidden={!state.isOpen}\n >\n <div\n id={`select-background-${state.id}`}\n onClick={() => trigger.toggleOpen(false)}\n className={clsx('fixed inset-0 w-screen h-screen')}\n />\n <ul\n {...props}\n id={`${state.id}-listbox`}\n ref={innerRef}\n onKeyDown={(event) => {\n switch (event.key) {\n case 'Escape':\n trigger.toggleOpen(false)\n event.preventDefault()\n event.stopPropagation()\n break\n case match(orientation, {\n vertical: 'ArrowDown',\n horizontal: 'ArrowUp'\n }):\n item.moveHighlightedIndex(1)\n event.preventDefault()\n break\n case match(orientation, {\n vertical: 'ArrowUp',\n horizontal: 'ArrowDown'\n }):\n item.moveHighlightedIndex(-1)\n event.preventDefault()\n break\n case 'Home':\n // TODO support later by selecting the first not disabled entry\n event.preventDefault()\n break\n case 'End':\n // TODO support later by selecting the last not disabled entry\n event.preventDefault()\n break\n case 'Enter': // Fall through\n case ' ':\n if (state.highlightedValue) {\n item.toggleSelection(state.highlightedValue)\n if (!config.isMultiSelect) {\n trigger.toggleOpen(false)\n }\n event.preventDefault()\n }\n break\n }\n }}\n\n className={clsx('flex-col-0 p-2 bg-menu-background text-menu-text rounded-md shadow-hw-bottom focus-outline-within overflow-auto', props.className)}\n style={{\n opacity: position ? undefined : 0,\n position: 'fixed',\n ...position\n }}\n\n role=\"listbox\"\n aria-multiselectable={config.isMultiSelect}\n aria-orientation={orientation}\n tabIndex={position ? 0 : undefined}\n >\n {props.children}\n </ul>\n </div>, document.body\n )\n }\n)\n\n//\n// Select\n//\nexport type SelectProps = Omit<SelectRootProps, 'isMultiSelect' | 'values' | 'onValuesChange'> & {\n contentPanelProps?: SelectContentProps,\n buttonProps?: Omit<SelectButtonProps, 'selectedDisplay'> & { selectedDisplay?: (value: string) => ReactNode },\n}\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select({\n children,\n contentPanelProps,\n buttonProps,\n ...props\n}, ref) {\n return (\n <SelectRoot {...props} isMultiSelect={false}>\n <SelectButton\n ref={ref}\n {...buttonProps}\n selectedDisplay={values => {\n const value = values[0]\n if (!buttonProps?.selectedDisplay) return undefined\n return buttonProps.selectedDisplay(value)\n }}\n />\n <SelectContent {...contentPanelProps}>{children}</SelectContent>\n </SelectRoot>\n )\n})\n\n\nexport type SelectUncontrolledProps = SelectProps\nexport const SelectUncontrolled = forwardRef<HTMLButtonElement, SelectUncontrolledProps>(function SelectUncontrolled({\n value: initialValue,\n onValueChange,\n ...props\n}, ref) {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <Select\n {...props}\n ref={ref}\n value={value}\n onValueChange={setValue}\n />\n )\n})\n\n\n//\n// MultiSelect\n//\nexport type MultiSelectProps = Omit<SelectRootProps, 'isMultiSelect' | 'value' | 'values' | 'onValueChange' | 'onValuesChange'> & {\n value?: string[],\n onValueChange?: (value: string[]) => void,\n contentPanelProps?: SelectContentProps,\n buttonProps?: SelectButtonProps,\n}\n\nexport const MultiSelect = forwardRef<HTMLButtonElement, MultiSelectProps>(function MultiSelect({\n children,\n value,\n onValueChange,\n contentPanelProps,\n buttonProps,\n ...props\n}, ref) {\n return (\n <SelectRoot {...props} values={value} onValuesChange={onValueChange} isMultiSelect={true}>\n <SelectButton ref={ref} {...buttonProps} />\n <SelectContent {...contentPanelProps}>{children}</SelectContent>\n </SelectRoot>\n )\n})\n\n\nexport const MultiSelectUncontrolled = forwardRef<HTMLButtonElement, MultiSelectProps>(function MultiSelectUncontrolled({\n value: initialValue,\n onValueChange,\n ...props\n}, ref) {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <MultiSelect\n {...props}\n ref={ref}\n value={value}\n onValueChange={setValue}\n />\n )\n})\n\n\n//\n// MultiSelectChipDisplay\n//\nexport type MultiSelectChipDisplayProps = Omit<SelectRootProps, 'isMultiSelect' | 'value' | 'values' | 'onValueChange' | 'onValuesChange'> & {\n value?: string[],\n onValueChange?: (value: string[]) => void,\n contentPanelProps?: SelectContentProps,\n chipDisplayProps?: SelectChipDisplayProps,\n}\n\nexport const MultiSelectChipDisplay = forwardRef<HTMLDivElement, MultiSelectChipDisplayProps>(function MultiSelectChipDisplay({\n children,\n value,\n onValueChange,\n contentPanelProps,\n chipDisplayProps,\n ...props\n}, ref) {\n return (\n <SelectRoot {...props} values={value} onValuesChange={onValueChange} isMultiSelect={true}>\n <SelectChipDisplay ref={ref} {...chipDisplayProps} />\n <SelectContent {...contentPanelProps}>{children}</SelectContent>\n </SelectRoot>\n )\n})\n\n\nexport type MultiSelectChipDisplayUncontrolledProps = MultiSelectChipDisplayProps\nexport const MultiSelectChipDisplayUncontrolled = forwardRef<HTMLDivElement, MultiSelectChipDisplayUncontrolledProps>(function MultiSelectChipDisplayUncontrolled({\n value: initialValue,\n onValueChange,\n ...props\n}, ref) {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <MultiSelectChipDisplay\n {...props}\n ref={ref}\n value={value}\n onValueChange={setValue}\n />\n )\n})","import type { PropsWithChildren, ReactNode } from 'react'\nimport type { DialogProps } from '@/src/components/layout/dialog/Dialog'\nimport { Dialog } from '@/src/components/layout/dialog/Dialog'\nimport { LocalizationUtil } from '@/src/i18n/util'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { Select, SelectOption } from '@/src/components/user-interaction/Select'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\n\ntype LanguageDialogProps = Omit<DialogProps, 'titleElement' | 'description'> & PropsWithChildren<{\n titleOverwrite?: ReactNode,\n descriptionOverwrite?: ReactNode,\n}>\n\n/**\n * A Dialog for selecting the Language\n *\n * The State of open needs to be managed by the parent\n */\nexport const LanguageDialog = ({\n onClose,\n titleOverwrite,\n descriptionOverwrite,\n ...props\n}: LanguageDialogProps) => {\n const { locale, setLocale } = useLocale()\n const translation = useHightideTranslation()\n\n return (\n <Dialog\n titleElement={titleOverwrite ?? translation('language')}\n description={descriptionOverwrite ?? translation('chooseLanguage')}\n onClose={onClose}\n {...props}\n >\n <div className=\"w-64\">\n <Select\n value={locale}\n onValueChange={(language: string) => setLocale(language as HightideTranslationLocales)}\n buttonProps={{\n selectedDisplay: locale => LocalizationUtil.languagesLocalNames[locale]\n }}\n >\n {LocalizationUtil.locals.map((local) => (\n <SelectOption key={local} value={local}>{LocalizationUtil.languagesLocalNames[local]}</SelectOption>\n ))}\n </Select>\n <div className=\"flex-row-4 mt-3 justify-end\">\n <Button color=\"positive\" onClick={onClose}>\n {translation('done')}\n </Button>\n </div>\n </div>\n </Dialog>\n )\n}\n","import { type PropsWithChildren, type ReactNode } from 'react'\nimport type { DialogProps } from '@/src/components/layout/dialog/Dialog'\nimport { Dialog } from '@/src/components/layout/dialog/Dialog'\nimport { MonitorCog, MoonIcon, SunIcon } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { ThemeType } from '@/src/contexts/ThemeContext'\nimport { ThemeUtil, useTheme } from '@/src/contexts/ThemeContext'\nimport { Select, SelectOption } from '@/src/components/user-interaction/Select'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype ThemeIconProps = {\n theme: ThemeType,\n className?: string,\n}\nconst ThemeIcon = ({ theme, className }: ThemeIconProps) => {\n if (theme === 'dark') {\n return (\n <MoonIcon className={clsx('w-4 h-4', className)}/>\n )\n } else if (theme === 'light') {\n return (\n <SunIcon className={clsx('w-4 h-4', className)}/>\n )\n } else {\n return (\n <MonitorCog className={clsx('w-4 h-4', className)}/>\n )\n }\n}\n\ntype ThemeDialogProps = Omit<DialogProps, 'titleElement' | 'description'> & {\n titleOverwrite?: ReactNode,\n descriptionOverwrite?: ReactNode,\n}\n\n/**\n * A Dialog for selecting the Theme\n *\n * The State of open needs to be managed by the parent\n */\nexport const ThemeDialog = ({\n onClose,\n titleOverwrite,\n descriptionOverwrite,\n ...props\n}: PropsWithChildren<ThemeDialogProps>) => {\n const { theme, setTheme } = useTheme()\n const translation = useHightideTranslation()\n\n return (\n <Dialog\n titleElement={titleOverwrite ?? translation('pThemes', { count: 1 })}\n description={descriptionOverwrite ?? translation('chooseTheme')}\n onClose={onClose}\n {...props}\n >\n <div className=\"w-64\">\n <Select\n value={theme}\n onValueChange={(theme) => setTheme(theme as ThemeType)}\n iconAppearance=\"right\"\n buttonProps={{\n selectedDisplay: (value) => (\n <div className=\"flex-row-2 items-center\">\n <ThemeIcon theme={theme}/>\n {translation('sThemeMode', { theme: value })}\n </div>\n ),\n className: 'min-w-32',\n }}\n >\n {ThemeUtil.themes.map((theme) => (\n <SelectOption key={theme} value={theme} className=\"gap-x-6 justify-between\">\n <div className=\"flex-row-2 items-center\">\n <ThemeIcon theme={theme}/>\n {translation('sThemeMode', { theme: theme })}\n </div>\n </SelectOption>\n ))}\n </Select>\n <div className=\"flex-row-4 mt-3 justify-end\">\n <Button autoFocus color=\"positive\" onClick={onClose}>\n {translation('done')}\n </Button>\n </div>\n </div>\n </Dialog>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport type { ThemeConfig } from '@/src/contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/contexts/HightideConfigContext'\n\nconst themes = ['light', 'dark', 'system'] as const\n\nexport type ThemeType = typeof themes[number]\nexport type ResolvedTheme = Exclude<ThemeType, 'system'>\n\nexport const ThemeUtil = {\n themes,\n}\n\ntype ThemeContextType = {\n theme: ThemeType,\n resolvedTheme: ResolvedTheme,\n setTheme: Dispatch<SetStateAction<ThemeType>>,\n}\n\nexport const ThemeContext = createContext<ThemeContextType | null>(null)\n\nexport type ThemeProviderProps = PropsWithChildren & Partial<ThemeConfig> & {\n /**\n * Only set this if you want to control the theme yourself\n */\n theme?: ThemeType,\n}\n\nexport const ThemeProvider = ({ children, theme, initialTheme }: ThemeProviderProps) => {\n const {\n value: storedTheme,\n setValue: setStoredTheme,\n deleteValue: deleteStoredTheme\n } = useLocalStorage<ThemeType>('theme', 'system')\n const { config } = useHightideConfig()\n const [themePreference, setThemePreference] = useState<ThemeType>('system')\n\n const resolvedTheme = useMemo((): ResolvedTheme => {\n if (theme && theme !== 'system') {\n return theme\n }\n if (storedTheme && storedTheme !== 'system') {\n return storedTheme\n }\n if (themePreference !== 'system') {\n return themePreference\n }\n return initialTheme ?? config.theme.initialTheme\n }, [config.theme.initialTheme, initialTheme, storedTheme, theme, themePreference])\n\n useEffect(() => {\n if(!theme) return\n if (theme === 'system') {\n deleteStoredTheme()\n } else {\n setStoredTheme(theme)\n }\n }, [theme]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', resolvedTheme)\n }, [resolvedTheme])\n\n const getPreference = useCallback(() => {\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches\n const prefersLight = window.matchMedia('(prefers-color-scheme: light)').matches\n setThemePreference(prefersDark ? 'dark' : (prefersLight ? 'light' : 'system'))\n }, [])\n\n useEffect(() => {\n getPreference()\n }, [getPreference])\n\n useEffect(() => {\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const lightQuery = window.matchMedia('(prefers-color-scheme: light)')\n const noPrefQuery = window.matchMedia('(prefers-color-scheme: no-preference)')\n darkQuery.addEventListener('change', getPreference)\n lightQuery.addEventListener('change', getPreference)\n noPrefQuery.addEventListener('change', getPreference)\n return () => {\n darkQuery.removeEventListener('change', getPreference)\n lightQuery.removeEventListener('change', getPreference)\n noPrefQuery.removeEventListener('change', getPreference)\n }\n }, [getPreference])\n\n return (\n <ThemeContext.Provider\n value={{\n theme: storedTheme,\n resolvedTheme,\n setTheme: (newTheme) => {\n if (theme && theme !== 'system') {\n console.warn('ThemeProvider: Attempting to change the ' +\n \"theme while setting a fixed theme won't have any effect. \" +\n 'Change the theme provided to the ThemeProvider instead.')\n }\n setStoredTheme(newTheme)\n }\n }}\n >\n {children}\n </ThemeContext.Provider>\n )\n}\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext)\n if (!context) {\n throw new Error('useTheme must be used within ThemeContext. Try adding a ThemeProvider around your app.')\n }\n return context\n}\n","import { AlertOctagon } from 'lucide-react'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\nexport type ErrorComponentProps = {\n errorText?: string,\n classname?: string,\n}\n\n/**\n * The Component to show when an error occurred\n */\nexport const ErrorComponent = ({\n errorText,\n classname\n}: ErrorComponentProps) => {\n const translation = useHightideTranslation()\n return (\n <div className={clsx('flex-col-4 items-center justify-center w-full h-24', classname)}>\n <AlertOctagon size={64} className=\"text-warning\"/>\n {errorText ?? `${translation('errorOccurred')} :(`}\n </div>\n )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useState } from 'react'\nimport { LoadingContainer } from '@/src/components/layout/loading/LoadingContainer'\nimport { clsx } from 'clsx'\n\nexport type LoadingAndErrorComponentProps = PropsWithChildren<{\n isLoading?: boolean,\n hasError?: boolean,\n loadingComponent?: ReactNode,\n errorComponent?: ReactNode,\n /**\n * in milliseconds\n */\n minimumLoadingDuration?: number,\n className?: string,\n}>\n\n/**\n * A Component that shows the Error and Loading animation, when appropriate and the children otherwise\n */\nexport const LoadingAndErrorComponent = ({\n children,\n isLoading = false,\n hasError = false,\n loadingComponent,\n errorComponent,\n minimumLoadingDuration = 200,\n className\n}: LoadingAndErrorComponentProps) => {\n const [isInMinimumLoading, setIsInMinimumLoading] = useState(false)\n const [hasUsedMinimumLoading, setHasUsedMinimumLoading] = useState(false)\n if (minimumLoadingDuration && !isInMinimumLoading && !hasUsedMinimumLoading) {\n setIsInMinimumLoading(true)\n setTimeout(() => {\n setIsInMinimumLoading(false)\n setHasUsedMinimumLoading(true)\n }, minimumLoadingDuration)\n }\n\n if (isLoading || (minimumLoadingDuration && isInMinimumLoading)) {\n return <>{(loadingComponent ?? <LoadingContainer className={clsx(className)}/>)}</>\n }\n if (hasError) {\n return <>{(errorComponent ?? <LoadingContainer className={clsx('bg-negative', className)}/>)}</>\n }\n return <>{children}</>\n}\n","import { clsx } from 'clsx'\n\nexport type LoadingComponentProps = {\n className?: string,\n}\n\nexport const LoadingContainer = ({ className }: LoadingComponentProps) => {\n return (\n <div className={clsx('relative overflow-hidden shimmer bg-disabled/30 rounded-md', className)}/>\n )\n}","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport clsx from 'clsx'\nimport { HelpwaveLogo } from '@/src/components/branding/HelpwaveLogo'\n\nexport type LoadingAnimationProps = {\n loadingText?: string,\n classname?: string,\n}\n\n/**\n * A Component to show when loading data\n */\nexport const LoadingAnimation = ({\n loadingText,\n classname\n}: LoadingAnimationProps) => {\n const translation = useHightideTranslation()\n return (\n <div className={clsx('flex-col-2 items-center justify-center w-full h-24', classname)}>\n <HelpwaveLogo animate=\"loading\"/>\n {loadingText ?? `${translation('loading')}...`}\n </div>\n )\n}\n","import { ArrayUtil } from '@/src/utils/array'\nimport Link from 'next/link'\nimport type { ComponentProps, HTMLAttributes, ReactNode } from 'react'\n\nexport type BreadCrumbLinkProps = ComponentProps<typeof Link>\n\nexport const BreadCrumbLink = ({ ...props } : BreadCrumbLinkProps) => {\n return (\n <Link\n {...props}\n data-name={props['data-name'] ?? 'breadcrumb-link'}\n />\n )\n}\n\nconst BreadCrumbDivider = () => {\n return (\n <span data-name=\"breadcrumb-divider\">/</span>\n )\n}\n\n\ntype BreadCrumbGroupProps = HTMLAttributes<HTMLUListElement> & {\n divider?: ReactNode | null,\n}\n\n/**\n * A component for showing a hierarchical link structure with an independent link on each element\n *\n * e.g. Organizations/Ward/<id>\n */\nexport const BreadCrumbGroup = ({ children, divider, ...props }: BreadCrumbGroupProps) => {\n const items = ArrayUtil.resolveSingleOrArray(children)\n\n return (\n <ul {...props} data-name={props['data-name'] ?? 'breadcrumb'}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n return (\n <li key={index} data-name=\"breadcrumb-item\">\n {item}\n {!isLast && divider !== null && (divider ?? <BreadCrumbDivider/>)}\n </li>\n )\n })}\n </ul>\n )\n}\n\nexport type Crumb = {\n href: string,\n label: ReactNode,\n}\n\nexport type BreadCrumbProps = {\n crumbs: Crumb[],\n}\n\nexport const BreadCrumbs = ({ crumbs }: BreadCrumbProps) => {\n return (\n <BreadCrumbGroup>\n {crumbs.map(( { href, label }, index) => (<BreadCrumbLink key={index} href={href}>{label}</BreadCrumbLink>))}\n </BreadCrumbGroup>\n )\n}","import { Menu as MenuIcon, XIcon } from 'lucide-react'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport { useEffect } from 'react'\nimport React, { useCallback, useId, useRef, useState } from 'react'\nimport Link from 'next/link'\nimport clsx from 'clsx'\nimport type { UseFloatingElementOptions } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\n\ntype SimpleNavigationItem = {\n label: ReactNode,\n link: string,\n external?: boolean,\n}\n\n// TODO allow for nesting deeper than one level\ntype SubItemNavigationItem = {\n label: ReactNode,\n items?: SimpleNavigationItem[],\n}\n\nexport type NavigationItemType = SimpleNavigationItem | SubItemNavigationItem\n\nfunction isSubItem(item: NavigationItemType): item is SubItemNavigationItem {\n return 'items' in item && Array.isArray(item.items)\n}\n\n///\n/// NavigationItemWithSubItem\n///\ntype NavigationItemWithSubItemProps = SubItemNavigationItem & UseFloatingElementOptions\n\nconst NavigationItemWithSubItem = ({\n items,\n label,\n horizontalAlignment = 'center',\n ...options\n}: NavigationItemWithSubItemProps) => {\n const [isOpen, setOpen] = useState(false)\n const containerRef = useRef<HTMLUListElement>(null)\n const triggerRef = useRef<HTMLButtonElement>(null)\n const id = useId()\n\n const style = useFloatingElement({\n active: isOpen,\n containerRef,\n anchorRef: triggerRef,\n horizontalAlignment,\n ...options,\n })\n\n const onBlur = useCallback((event: React.FocusEvent) => {\n // If focus moves outside the menu + trigger, close\n const nextFocus = event.relatedTarget as Node | null\n if (\n !containerRef.current?.contains(nextFocus) &&\n !triggerRef.current?.contains(nextFocus)\n ) {\n setOpen(false)\n }\n }, [])\n\n const { zIndex } = useOverlayRegistry()\n // TODO at arrow key navigation\n\n return (\n <>\n <button\n id={'navigation-' + id}\n ref={triggerRef}\n type=\"button\"\n\n onClick={() => {\n setOpen(!isOpen)\n }}\n onBlur={onBlur}\n\n className=\"link flex-row-1\"\n\n aria-haspopup=\"true\"\n aria-expanded={isOpen}\n aria-controls={'navigation-items-' + id}\n >\n {label}\n <ExpansionIcon isExpanded={isOpen} />\n </button>\n <ul\n id={'navigation-items-' + id}\n ref={containerRef}\n\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n setOpen(false)\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n onBlur={onBlur}\n\n hidden={!isOpen}\n className={clsx(\n 'fixed flex-col-4 p-4 bg-surface text-on-surface shadow-side shadow-hw-bottom rounded-md',\n { 'opacity-0': !style }\n )}\n style={{ ...style, zIndex }}\n >\n {items.map(({ link, label, external }, index) => (\n <li key={index}>\n <Link\n href={link}\n target={external ? '_blank' : undefined}\n className=\"flex-row-0 link w-full\"\n >\n {label}\n </Link>\n </li>\n ))}\n </ul>\n </>\n )\n}\n\n///\n/// NavigationItemList\n///\nexport type NavigationItemListProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {\n items: NavigationItemType[],\n}\n\nexport const NavigationItemList = ({ items, ...restProps }: NavigationItemListProps) => {\n return (\n <ul {...restProps} className={clsx('flex-row-6 items-center', restProps.className)}>\n {items.map((item, index) => (\n <li key={index}>\n {isSubItem(item) ? (\n <NavigationItemWithSubItem {...item} />\n ) : (\n <Link href={item.link} target={item.external ? '_blank' : undefined} className=\"link\">{item.label}</Link>\n )}\n </li>\n ))}\n </ul>\n )\n}\n\n///\n/// Navigation\n///\nexport type NavigationProps = NavigationItemListProps\n\nexport const Navigation = ({ ...props }: NavigationProps) => {\n const [isMobileOpen, setIsMobileOpen] = useState(false)\n const id = useId()\n const menuRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n menuRef.current?.focus()\n }, [isMobileOpen])\n\n const { zIndex } = useOverlayRegistry({ isActive: isMobileOpen })\n\n return (\n <nav>\n <NavigationItemList\n {...props}\n className={clsx('hidden', { 'desktop:flex': !isMobileOpen }, props.className)}\n />\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => setIsMobileOpen(true)}\n\n className=\"desktop:hidden\"\n\n aria-haspopup=\"true\"\n aria-expanded={isMobileOpen}\n aria-controls={'navigation-menu-' + id}\n >\n <MenuIcon className=\"w-6 h-6\"/>\n </Button>\n <div\n id={'navigation-menu-' + id}\n ref={menuRef}\n hidden={!isMobileOpen}\n\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n setIsMobileOpen(false)\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n\n className={clsx(\n 'flex-col-8 items-center justify-center fixed inset-0 p-8 w-screen h-screen bg-surface text-on-surface', {\n 'desktop:hidden': isMobileOpen,\n },\n props.className\n )}\n style={{ zIndex }}\n >\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => setIsMobileOpen(false)}\n >\n <XIcon/>\n </Button>\n <NavigationItemList {...props} className={clsx('flex-col-8', props.className)}/>\n </div>\n </nav>\n )\n}","import { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { clamp } from '@/src/utils/math'\nimport type { CSSProperties } from 'react'\nimport { useEffect, useState } from 'react'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\n\nexport type PaginationProps = {\n pageIndex: number, // starts with 0\n pageCount: number,\n onPageChanged: (page: number) => void,\n className?: string,\n style?: CSSProperties,\n}\n\n/**\n * A Component showing the pagination allowing first, before, next and last page navigation\n */\nexport const Pagination = ({\n pageIndex,\n pageCount,\n onPageChanged,\n className,\n style,\n}: PaginationProps) => {\n const translation = useHightideTranslation()\n const [value, setValue] = useState<string>((pageIndex + 1).toString())\n\n const noPages = pageCount === 0\n const onFirstPage = pageIndex === 0 && !noPages\n const onLastPage = pageIndex === pageCount - 1\n\n useEffect(() => {\n if (noPages) {\n setValue('0')\n } else {\n setValue((pageIndex + 1).toString())\n }\n }, [pageIndex, noPages])\n\n const changePage = (page: number) => {\n onPageChanged(page)\n }\n\n return (\n <div className={clsx('flex-row-1', className)} style={style}>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(0)} disabled={onFirstPage || noPages}\n >\n <ChevronFirst/>\n </Button>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(pageIndex - 1)} disabled={onFirstPage || noPages}\n >\n <ChevronLeft/>\n </Button>\n <div className=\"flex-row-2 min-w-56 items-center justify-center mx-2 text-center\">\n <Input\n value={value}\n className={clsx(\n 'w-24 text-center font-bold input-indicator-hidden h-10'\n )}\n type=\"number\"\n min={1}\n max={pageCount}\n disabled={noPages}\n onValueChange={value => {\n if (value) {\n setValue(clamp(Number(value), [1, pageCount]).toString())\n } else {\n setValue(value)\n }\n }}\n onEditComplete={value => {\n changePage(clamp(Number(value) - 1, [0, pageCount - 1]))\n }}\n editCompleteOptions={{ delay: 800 }}\n />\n <span className=\"select-none w-10\">{translation('of')}</span>\n <span\n className=\"flex-row-2 w-24 items-center justify-center select-none h-10 bg-input-background text-input-text rounded-md font-bold\"\n >\n {pageCount}\n </span>\n </div>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(pageIndex + 1)} disabled={onLastPage || noPages}\n >\n <ChevronRight/>\n </Button>\n <Button\n layout=\"icon\"\n coloringStyle=\"text\"\n color=\"neutral\"\n onClick={() => changePage(pageCount - 1)} disabled={onLastPage || noPages}\n >\n <ChevronLast/>\n </Button>\n </div>\n )\n}\n","import { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { range } from '@/src/utils/array'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport clsx from 'clsx'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\nexport type StepperState = {\n currentStep: number,\n seenSteps: Set<number>,\n}\n\nexport type StepperBarProps = {\n state?: StepperState,\n numberOfSteps: number,\n disabledSteps?: Set<number>,\n onChange: (state: StepperState) => void,\n onFinish: () => void,\n finishText?: string,\n showDots?: boolean,\n className?: string,\n}\n\nconst defaultState: StepperState = {\n currentStep: 0,\n seenSteps: new Set([0])\n}\n\n/**\n * A Component for stepping\n */\nexport const StepperBar = ({\n state = defaultState,\n numberOfSteps,\n disabledSteps = new Set(),\n onChange,\n onFinish,\n finishText,\n showDots = true,\n className = '',\n}: StepperBarProps) => {\n const translation = useHightideTranslation()\n const dots = range(numberOfSteps + 1) // +1 for last finish step\n const { currentStep, seenSteps } = state ?? defaultState\n\n const update = (newStep: number) => {\n seenSteps.add(newStep)\n onChange({ currentStep: newStep, seenSteps })\n }\n\n return (\n <div\n className={clsx('flex-row-2 justify-between',className)}\n >\n <div className=\"flex-row-2 flex-[2] justify-start\">\n <Button\n disabled={currentStep === 0 || disabledSteps.has(currentStep)}\n onClick={() => {\n update(currentStep - 1)\n }}\n className=\"flex-row-1 items-center justify-center\"\n >\n <ChevronLeft size={14}/>\n {translation('back')}\n </Button>\n </div>\n <div className=\"flex-row-2 flex-[5] justify-center items-center\">\n {showDots && dots.map((value, index) => {\n const seen = seenSteps.has(index)\n return (\n <div\n key={index}\n onClick={() => seen && update(index)}\n className={clsx('rounded-full w-4 h-4', {\n 'bg-stepperbar-dot-active hover:brightness-75': index === currentStep && seen && !disabledSteps.has(currentStep),\n 'bg-stepperbar-dot-normal hover:bg-stepperbar-dot-active': index !== currentStep && seen && !disabledSteps.has(currentStep),\n 'bg-stepperbar-dot-disabled': !seen || disabledSteps.has(currentStep),\n },\n {\n 'cursor-pointer': seen,\n 'cursor-not-allowed': !seen || disabledSteps.has(currentStep),\n })}\n />\n )\n })}\n </div>\n {currentStep !== numberOfSteps && (\n <div className=\"flex-row-2 flex-[2] justify-end\">\n <Button\n onClick={() => update(currentStep + 1)}\n className=\"flex-row-1 items-center justify-center\"\n disabled={disabledSteps.has(currentStep)}\n >\n {translation('next')}\n <ChevronRight size={14}/>\n </Button>\n </div>\n )}\n {currentStep === numberOfSteps && (\n <div className=\"flex-row-2 flex-[2] justify-end\">\n <Button\n disabled={disabledSteps.has(currentStep)}\n onClick={onFinish}\n className=\"flex-row-1 items-center justify-center\"\n >\n <Check size={14}/>\n {finishText ?? translation('confirm')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nexport const StepperBarUncontrolled = ({ state, onChange, ...props }: StepperBarProps) => {\n const [usedState, setUsedState] = useOverwritableState<StepperState>(state, onChange)\n\n return (\n <StepperBar\n {...props}\n state={usedState}\n onChange={setUsedState}\n />\n )\n}","import { PropsUtil } from '@/src/utils/propsUtil'\nimport { Minus } from 'lucide-react'\nimport type { HTMLAttributes } from 'react'\n\nexport type FillerCellProps = HTMLAttributes<HTMLDivElement>\n\nexport const FillerCell = ({ ...props }: FillerCellProps) => {\n return (\n <div\n {...props}\n data-name={PropsUtil.dataAttributes.name('table-filler-cell')}\n >\n <Minus className=\"max-w-4 max-h-4\" />\n </div>\n )\n}","const dateRange = (row, columnId, filterValue: [Date | null, Date | null]) => {\n const [min, max] = filterValue\n const value = row.getValue(columnId)\n\n const date = value instanceof Date ? value : new Date(value)\n if (isNaN(date.getTime())) return false // Invalid date\n\n if (min && date < min) return false\n if (max && date > max) return false\n\n return true\n}\n\n\nexport const TableFilters = {\n dateRange\n}","import type { ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type {\n ColumnDef,\n ColumnFiltersState,\n ColumnSizingInfoState,\n ColumnSizingState,\n FilterFn,\n InitialTableState,\n PaginationState,\n Row,\n RowData,\n RowSelectionState,\n Table as ReactTable,\n TableOptions,\n TableState\n} from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table'\nimport { range } from '@/src/utils/array'\nimport { clamp } from '@/src/utils/math'\nimport { TableCell } from '@/src/components/layout/table/TableCell'\nimport { TableFilters } from '@/src/components/layout/table/Filter'\nimport { useResizeCallbackWrapper } from '@/src/hooks/useResizeCallbackWrapper'\nimport { TableSortButton } from '@/src/components/layout/table/TableSortButton'\nimport type { TableFilterType } from '@/src/components/layout/table/TableFilterButton'\nimport { TableFilterButton } from '@/src/components/layout/table/TableFilterButton'\nimport { FillerCell } from '@/src/components/layout/table/FillerCell'\nimport { Pagination } from '@/src/components/layout/navigation/Pagination'\nimport { Checkbox } from '@/src/components/user-interaction/Checkbox'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Visibility } from '../Visibility'\nimport { BagFunctionUtil, type BagFunctionOrValue } from '@/src/utils/bagFunctions'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> {\n className?: string,\n filterType?: TableFilterType,\n }\n\n interface TableMeta<TData> {\n headerRowClassName?: string,\n bodyRowClassName?: BagFunctionOrValue<TData, string>,\n }\n\n\n interface FilterFns {\n dateRange: FilterFn<unknown>,\n }\n}\n\nexport type TableProps<T> = {\n data: T[],\n columns: ColumnDef<T>[],\n fillerRow?: (columnId: string, table: ReactTable<T>) => ReactNode,\n initialState?: Omit<InitialTableState, 'columnSizing' | 'columnSizingInfo'>,\n className?: string,\n tableContainerClassName?: string,\n onRowClick?: (row: Row<T>, table: ReactTable<T>) => void,\n state?: Omit<TableState, 'columnSizing' | 'columnSizingInfo'>,\n tableClassName?: string,\n} & Partial<TableOptions<T>>\n\n/**\n * The standard table\n */\nexport const Table = <T,>({\n data,\n fillerRow,\n initialState,\n onRowClick,\n className,\n tableClassName,\n tableContainerClassName,\n defaultColumn,\n state,\n columns,\n ...tableOptions\n}: TableProps<T>) => {\n const ref = useRef<HTMLDivElement>(null)\n const tableRef = useRef<HTMLTableElement>(null)\n\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>(columns.reduce((previousValue, currentValue) => {\n return {\n ...previousValue,\n [currentValue.id]: currentValue.minSize ?? defaultColumn.minSize,\n }\n }, {}))\n const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>()\n const [pagination, setPagination] = useState<PaginationState>({\n pageSize: 10,\n pageIndex: 0,\n ...initialState?.pagination\n })\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(initialState?.columnFilters)\n\n const computedColumnMinWidths = useMemo(() => {\n return columns.reduce((previousValue, column) => {\n return {\n ...previousValue,\n // every column is at least 12px wide\n [column.id]: (column.minSize ?? defaultColumn?.minSize ?? 12)\n }\n }, {})\n }, [columns, defaultColumn])\n\n const computedColumnMaxWidths = useMemo(() => {\n return columns.reduce((previousValue, column) => {\n return {\n ...previousValue,\n [column.id]: (column.maxSize ?? defaultColumn?.maxSize)\n }\n }, {})\n }, [columns, defaultColumn])\n\n const tableMinWidth = useMemo(() => {\n return columns.reduce((sum, column) => {\n return sum + computedColumnMinWidths[column.id]\n }, 0)\n }, [columns, computedColumnMinWidths])\n\n const updateColumnSizes = useMemo(() => {\n return (previous: ColumnSizingState) => {\n const updateSizing = {\n ...columnSizing,\n ...previous\n }\n\n const containerWidth = ref.current.offsetWidth\n\n // enforce min and max constraints\n columns.forEach((column) => {\n updateSizing[column.id] = clamp(updateSizing[column.id], [computedColumnMinWidths[column.id], computedColumnMaxWidths[column.id] ?? containerWidth])\n })\n\n // table width of the current sizing\n const width = columns\n .reduce((previousValue, currentValue) => previousValue + updateSizing[currentValue.id], 0)\n\n if (width > containerWidth) {\n if (tableMinWidth >= containerWidth) {\n return columns.reduce((previousValue, currentValue) => ({\n ...previousValue,\n [currentValue.id]: computedColumnMinWidths[currentValue.id]\n }), {})\n }\n\n let reduceableColumns = columns\n .map(value => value.id)\n .filter(id => updateSizing[id] - computedColumnMinWidths[id] > 0)\n\n let spaceToReduce = width - containerWidth\n\n while (spaceToReduce > 0 && reduceableColumns.length > 0) {\n let maxReduceAmount = reduceableColumns.reduce((previousValue, id) => Math.max(previousValue, updateSizing[id] - computedColumnMinWidths[id]), 0)\n if (maxReduceAmount * reduceableColumns.length > spaceToReduce) {\n maxReduceAmount = spaceToReduce / reduceableColumns.length\n }\n\n reduceableColumns.forEach(id => {\n updateSizing[id] -= maxReduceAmount\n })\n\n spaceToReduce -= maxReduceAmount * reduceableColumns.length\n reduceableColumns = reduceableColumns.filter(id => updateSizing[id] - computedColumnMinWidths[id] > 0)\n }\n } else if (width <= containerWidth) {\n let distributableWidth = containerWidth - width\n\n // check max width violations\n const violatingColumns = columns.filter(value =>\n computedColumnMaxWidths[value.id] && (updateSizing[value.id] > computedColumnMaxWidths[value.id]))\n\n const violationColumnsAmount = violatingColumns.reduce(\n (previousValue, column) => previousValue + updateSizing[column.id] - computedColumnMaxWidths[column.id], 0\n )\n distributableWidth += violationColumnsAmount\n\n let enlargeableColumns = columns\n .filter(col => !computedColumnMaxWidths[col.id] || updateSizing[col.id] < computedColumnMaxWidths[col.id])\n .map(value => value.id)\n\n while (distributableWidth > 0 && enlargeableColumns.length > 0) {\n let minEnlargeableAmount = enlargeableColumns.reduce((previousValue, id) => Math.min(previousValue, computedColumnMaxWidths[id] ? computedColumnMaxWidths[id] - updateSizing[id] : distributableWidth), distributableWidth)\n if (minEnlargeableAmount * enlargeableColumns.length > distributableWidth) {\n minEnlargeableAmount = distributableWidth / enlargeableColumns.length\n }\n\n enlargeableColumns.forEach(id => {\n updateSizing[id] += minEnlargeableAmount\n })\n\n distributableWidth -= minEnlargeableAmount * enlargeableColumns.length\n enlargeableColumns = enlargeableColumns.filter(id => !computedColumnMaxWidths[id] || updateSizing[id] < computedColumnMaxWidths[id])\n }\n\n if (distributableWidth > 0) {\n updateSizing[columns[columns.length - 1].id] += distributableWidth\n }\n }\n return updateSizing\n }\n }, [columns, computedColumnMaxWidths, computedColumnMinWidths, tableMinWidth]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const table = useReactTable({\n data,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: initialState,\n defaultColumn: {\n minSize: 60,\n maxSize: 700,\n cell: ({ cell }) => {\n return (<TableCell>{cell.getValue() as string}</TableCell>)\n },\n ...defaultColumn,\n },\n columns,\n state: {\n columnSizing,\n columnSizingInfo,\n pagination,\n columnFilters,\n ...state\n },\n filterFns: {\n ...tableOptions?.filterFns,\n dateRange: TableFilters.dateRange,\n },\n onColumnSizingInfoChange: updaterOrValue => {\n setColumnSizingInfo(updaterOrValue)\n if (tableOptions.onColumnSizingInfoChange) {\n tableOptions?.onColumnSizingInfoChange(updaterOrValue)\n }\n },\n onColumnSizingChange: updaterOrValue => {\n setColumnSizing(previous => {\n const newSizing = typeof updaterOrValue === 'function' ? updaterOrValue(previous) : updaterOrValue\n return updateColumnSizes(newSizing)\n })\n if (tableOptions.onColumnSizingChange) {\n tableOptions.onColumnSizingChange(updaterOrValue)\n }\n },\n onPaginationChange: updaterOrValue => {\n setPagination(updaterOrValue)\n if (tableOptions.onPaginationChange) {\n tableOptions.onPaginationChange(updaterOrValue)\n }\n },\n onColumnFiltersChange: updaterOrValue => {\n setColumnFilters(updaterOrValue)\n table.toggleAllRowsSelected(false)\n if (tableOptions.onColumnFiltersChange) {\n tableOptions.onColumnFiltersChange(updaterOrValue)\n }\n },\n autoResetPageIndex: false,\n columnResizeMode: 'onChange',\n ...tableOptions,\n })\n\n const [hasInitializedSizing, setHasInitializedSizing] = useState(false)\n useEffect(() => {\n if (!hasInitializedSizing && ref.current) {\n setHasInitializedSizing(true)\n table.setColumnSizing(updateColumnSizes(columnSizing))\n }\n }, [columnSizing, hasInitializedSizing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useResizeCallbackWrapper(useCallback(() => {\n table.setColumnSizing(updateColumnSizes)\n }, [updateColumnSizes])) // eslint-disable-line react-hooks/exhaustive-deps\n\n const pageCount = table.getPageCount()\n useEffect(() => {\n const totalPages = pageCount\n if (totalPages === 0) {\n if (pagination.pageIndex !== 0) {\n table.setPagination(prevState => ({\n ...prevState,\n pageIndex: 0,\n }))\n }\n } else if (pagination.pageIndex >= totalPages) {\n table.setPagination((prev) => ({\n ...prev,\n pageIndex: totalPages - 1,\n }))\n }\n }, [data, pageCount, pagination.pageSize, pagination.pageIndex]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const columnSizeVars = useMemo(() => {\n const headers = table.getFlatHeaders()\n const colSizes: { [key: string]: number } = {}\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i]!\n colSizes[`--header-${header.id}-size`] = header.getSize()\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize()\n }\n\n return colSizes\n }, [table.getState().columnSizingInfo, table.getState().columnSizing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div ref={ref} data-name={PropsUtil.dataAttributes.name('table-container')} className={className}>\n <div data-name={PropsUtil.dataAttributes.name('table-scroll-wrapper')} className={tableContainerClassName}>\n <table\n ref={tableRef}\n\n data-name={PropsUtil.dataAttributes.name('table')}\n\n style={{\n ...columnSizeVars,\n width: Math.floor(Math.max(table.getTotalSize() - columns.length, ref.current?.offsetWidth ?? table.getTotalSize())),\n }}\n\n className={tableClassName}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <colgroup key={headerGroup.id}>\n {headerGroup.headers.map(header => (\n <col\n key={header.id}\n style={{\n width: `calc(var(--header-${header?.id}-size) * 1px)`,\n minWidth: header.column.columnDef.minSize,\n maxWidth: header.column.columnDef.maxSize,\n }}\n />\n ))}\n </colgroup>\n ))}\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id} data-name={PropsUtil.dataAttributes.name('table-header-row')} className={table.options.meta?.headerRowClassName}>\n {headerGroup.headers.map(header => {\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n\n data-name={PropsUtil.dataAttributes.name('table-header-cell')}\n className={clsx('group/table-header-cell', header.column.columnDef.meta?.className)}\n >\n <Visibility isVisible={!header.isPlaceholder}>\n <div className=\"flex-row-1 items-center\">\n <Visibility isVisible={header.column.getCanSort()}>\n <TableSortButton\n sortDirection={header.column.getIsSorted()}\n sortingIndexDisplay={{\n index: header.column.getIsSorted() ? (header.column.getSortIndex() + 1) : -1,\n sortingsCount: table.getState().sorting.length,\n }}\n onClick={() => {\n const sorted = header.column.getIsSorted()\n const isMulti = header.column.getCanMultiSort()\n if (!isMulti) {\n table.resetSorting()\n }\n if (!sorted) {\n header.column.toggleSorting(true, isMulti)\n return\n } else if (sorted === 'desc') {\n header.column.toggleSorting(false, isMulti)\n }\n if (sorted === 'asc') {\n header.column.clearSorting()\n }\n }}\n />\n </Visibility>\n <Visibility isVisible={header.column.getCanFilter() && !!header.column.columnDef.meta?.filterType}>\n <TableFilterButton\n column={header.column}\n filterType={header.column.columnDef.meta?.filterType}\n />\n </Visibility>\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </div>\n </Visibility>\n <Visibility isVisible={header.column.getCanResize()}>\n <div\n onPointerDown={header.getResizeHandler()}\n onDoubleClick={() => {\n header.column.resetSize()\n }}\n\n data-name=\"table-resize-indicator\"\n data-active={PropsUtil.dataAttributes.bool(\n !!columnSizingInfo?.columnSizingStart\n && !!columnSizingInfo?.columnSizingStart?.find(([id, _]) => id === header.column.id)\n )}\n data-disabled={PropsUtil.dataAttributes.bool(\n !!columnSizingInfo?.columnSizingStart\n && (columnSizingInfo.columnSizingStart?.length ?? 0) > 0\n && !columnSizingInfo.columnSizingStart?.find(([id, _]) => id === header.column.id)\n )}\n />\n </Visibility>\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr\n key={row.id}\n onClick={() => onRowClick?.(row, table)}\n data-name=\"table-body-row\"\n className={BagFunctionUtil.resolve(table.options.meta?.bodyRowClassName, row.original)}\n >\n {row.getVisibleCells().map(cell => {\n return (\n <td key={cell.id} data-name=\"table-body-cell\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </td>\n )\n })}\n </tr>\n )\n })}\n {range(table.getState().pagination.pageSize - table.getRowModel().rows.length, { allowEmptyRange: true }).map((row, index) => {\n return (\n <tr key={'filler-row-' + index}>\n {columns.map((column) => {\n return (\n <td key={column.id}>\n {fillerRow ? fillerRow(column.id, table) : (<FillerCell />)}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n <div className=\"flex-row-2 justify-center\">\n <Pagination\n pageIndex={table.getState().pagination.pageIndex}\n pageCount={table.getPageCount()}\n onPageChanged={page => table.setPageIndex(page)}\n />\n </div>\n </div>\n )\n}\n\n\nexport type TableUncontrolledProps<T> = TableProps<T>\n\nexport const TableUncontrolled = <T,>({ data, ...props }: TableUncontrolledProps<T>) => {\n const [usedDate] = useOverwritableState<T[]>(data)\n\n return (\n <Table\n {...props}\n data={usedDate}\n />\n )\n}\n\n\nexport type TableWithSelectionProps<T> = TableProps<T> & {\n rowSelection: RowSelectionState,\n disableClickRowClickSelection?: boolean,\n selectionRowId?: string,\n}\n\nexport const TableWithSelection = <T,>({\n columns,\n state,\n fillerRow,\n rowSelection,\n disableClickRowClickSelection = false,\n selectionRowId = 'selection',\n onRowClick,\n meta,\n ...props\n}: TableWithSelectionProps<T>) => {\n const columnsWithSelection = useMemo<ColumnDef<T>[]>(() => {\n return [\n {\n id: selectionRowId,\n header: ({ table }) => {\n return (\n <Checkbox\n value={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onValueChange={value => {\n const newValue = !!value\n table.toggleAllRowsSelected(newValue)\n }}\n />\n )\n },\n cell: ({ row }) => {\n return (\n <Checkbox\n disabled={!row.getCanSelect()}\n value={row.getIsSelected()}\n onValueChange={row.getToggleSelectedHandler()}\n />\n )\n },\n size: 60,\n minSize: 60,\n maxSize: 60,\n enableResizing: false,\n enableSorting: false,\n },\n ...columns,\n ]\n }, [columns, selectionRowId])\n\n return (\n <Table\n columns={columnsWithSelection}\n fillerRow={(columnId, table) => {\n if (columnId === selectionRowId) {\n return (<Checkbox value={false} disabled={true} className=\"max-w-6\" />)\n }\n return fillerRow ? fillerRow(columnId, table) : (<FillerCell />)\n }}\n state={{\n rowSelection,\n ...state\n }}\n onRowClick={(row, table) => {\n if (!disableClickRowClickSelection) {\n row.toggleSelected()\n }\n onRowClick?.(row, table)\n }}\n meta={{\n ...meta,\n bodyRowClassName: clsx(\n { 'cursor-pointer': !disableClickRowClickSelection },\n meta?.bodyRowClassName\n )\n }}\n {...props}\n />\n )\n}","import { clsx } from 'clsx'\nimport type { PropsWithChildren } from 'react'\n\nexport type TableCellProps = PropsWithChildren<{\n className?: string,\n}>\n\nexport const TableCell = ({\n children,\n className,\n}: TableCellProps) => {\n return (\n <span className={clsx('block max-w-full overflow-ellipsis truncate', className)}>\n {children}\n </span>\n )\n}","import { useEffect } from 'react'\n\n/**\n * A hook that wraps the event listener attachment\n *\n * Make sure your callback is stable (doesn't change every render)\n * This can easily be achieved by wrapping it in a useCallback() and using it inside the useResizeCallbackWrapper\n *\n * @param callback Called when the window resizes\n */\nexport const useResizeCallbackWrapper = (callback: (event: UIEvent) => void) => {\n useEffect(() => {\n window.addEventListener('resize', callback)\n\n return () => {\n window.removeEventListener('resize', callback)\n }\n }, [callback])\n}","import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react'\nimport type { ButtonProps } from '../../user-interaction/Button'\nimport { Button } from '../../user-interaction/Button'\nimport clsx from 'clsx'\nimport type { SortDirection } from '@tanstack/react-table'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { Tooltip } from '@/src/components/user-interaction/Tooltip'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype SortingIndexDisplay = {\n index: number,\n sortingsCount: number,\n}\n\nexport type TableSortButtonProps = ButtonProps & {\n sortDirection: SortDirection | false,\n sortingIndexDisplay?: SortingIndexDisplay,\n invert?: boolean,\n}\n\n/**\n * An Extension of the normal button that displays the sorting state right of the content\n */\nexport const TableSortButton = ({\n sortDirection,\n invert = false,\n color = 'neutral',\n size = 'xs',\n className,\n sortingIndexDisplay,\n ...props\n}: TableSortButtonProps) => {\n const translation = useHightideTranslation()\n const { sortingsCount, index } = sortingIndexDisplay\n\n let icon = <ChevronsUpDown className=\"size-4\"/>\n if (sortDirection) {\n let usedSortDirection = sortDirection\n if (invert) {\n usedSortDirection = usedSortDirection === 'desc' ? 'asc' : 'desc'\n }\n icon = usedSortDirection === 'asc' ?\n (<ChevronUp className=\"size-4\"/>) : (<ChevronDown className=\"size-4\"/>)\n }\n\n const hasSortingIndex = !!sortingIndexDisplay && sortingsCount > 1 && index > 0\n\n return (\n <Tooltip tooltip={translation('rSortingOrderAfter', { otherSortings: index - 1 } )} disabled={!hasSortingIndex}>\n <Button\n layout={hasSortingIndex ? 'default' : 'icon'}\n color={color}\n size={size}\n className={clsx('relative', className)}\n {...props}\n >\n <Visibility isVisible={hasSortingIndex}>\n <div\n className={clsx('absolute bottom-0 right-1/2 translate-x-1/2 translate-y-2/3 z-1 primary coloring-solid rounded-full h-4 w-5 text-sm')}\n >\n {`${index}.`}\n </div>\n </Visibility>\n {icon}\n </Button>\n </Tooltip>\n )\n}","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { clsx } from 'clsx'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport type { FloatingElementAlignment } from '@/src/hooks/useFloatingElement'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport { createPortal } from 'react-dom'\nimport type { TooltipConfig } from '@/src/contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/contexts/HightideConfigContext'\nimport type { UseOverlayRegistryProps } from '@/src/hooks/useOverlayRegistry'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\ntype TooltipState = {\n isShown: boolean,\n timer: NodeJS.Timeout | null,\n}\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type TooltipProps = PropsWithChildren & Partial<TooltipConfig> & {\n tooltip: ReactNode,\n /**\n * Class names of additional styling properties for the tooltip\n */\n tooltipClassName?: string,\n /**\n * Class names of additional styling properties for the container from which the tooltip will be created\n */\n containerClassName?: string,\n position?: Position,\n disabled?: boolean,\n}\n\n/**\n * A Component for showing a tooltip when hovering over Content\n * @param tooltip The tooltip to show can be a text or any ReactNode\n * @param children The Content for which the tooltip should be created\n * @param tooltipClassName Additional ClassNames for the Container of the tooltip\n * @param containerClassName Additional ClassNames for the Container holding the content\n * @param position The direction of the tooltip relative to the Container\n * @constructor\n */\nexport const Tooltip = ({\n tooltip,\n children,\n appearDelay: appearDelayOverwrite,\n disappearDelay: disappearDelayOverwrite,\n tooltipClassName,\n containerClassName,\n position = 'bottom',\n disabled = false,\n}: TooltipProps) => {\n const [state, setState] = useState<TooltipState>({\n isShown: false,\n timer: null,\n })\n const { config } = useHightideConfig()\n const appearDelay = useMemo(\n () => appearDelayOverwrite ?? config.tooltip.appearDelay,\n [config.tooltip.appearDelay, appearDelayOverwrite]\n )\n const disappearDelay = useMemo(\n () => disappearDelayOverwrite ?? config.tooltip.disappearDelay,\n [config.tooltip.disappearDelay, disappearDelayOverwrite]\n )\n const anchorRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const triangleRef = useRef<HTMLDivElement>(null)\n\n const isActive = !disabled && state.isShown\n\n const { isVisible, transitionState, callbacks } = useTransitionState(\n useMemo(() => ({ isOpen: isActive }), [isActive])\n )\n\n const verticalAlignment: FloatingElementAlignment = useMemo(() =>\n position === 'top' ? 'beforeStart' : position === 'bottom' ? 'afterEnd' : 'center',\n [position])\n\n const horizontalAlignment: FloatingElementAlignment = useMemo(() =>\n position === 'left' ? 'beforeStart' : position === 'right' ? 'afterEnd' : 'center',\n [position])\n\n const css = useFloatingElement(useMemo(() => ({\n active: isActive || isVisible,\n anchorRef: anchorRef,\n containerRef,\n horizontalAlignment,\n verticalAlignment,\n }), [horizontalAlignment, isActive, isVisible, verticalAlignment]))\n\n const cssTriangle = useFloatingElement(useMemo(() => ({\n active: isActive || isVisible,\n anchorRef: anchorRef,\n containerRef: triangleRef,\n horizontalAlignment,\n verticalAlignment,\n }), [horizontalAlignment, isActive, isVisible, verticalAlignment]))\n\n const regsitryOptions: UseOverlayRegistryProps = useMemo(() => ({ isActive }), [isActive])\n const { zIndex } = useOverlayRegistry(regsitryOptions)\n const { zIndex: zIndexTriangle } = useOverlayRegistry(regsitryOptions)\n\n const onEnter = useCallback(() => {\n setState(prevState => {\n if (prevState.isShown) {\n clearTimeout(prevState.timer)\n return {\n ...prevState,\n timer: null\n }\n }\n return {\n ...prevState,\n timer: setTimeout(() => {\n setState(prevState => {\n clearTimeout(prevState.timer)\n return { ...prevState, isShown: true, timer: null }\n })\n }, appearDelay)\n }\n })\n }, [appearDelay])\n\n const onLeave = useCallback(() => {\n setState(prevState => {\n if (!prevState.isShown) {\n clearTimeout(prevState.timer)\n return {\n ...prevState,\n timer: null\n }\n }\n clearTimeout(prevState.timer)\n return {\n ...prevState,\n timer: setTimeout(() => {\n setState(prevState => {\n clearTimeout(prevState.timer)\n return { ...prevState, isShown: false, timer: null }\n })\n }, disappearDelay)\n }\n })\n }, [disappearDelay])\n\n return (\n <div\n ref={anchorRef}\n className={clsx('relative inline-block', containerClassName)}\n onPointerEnter={onEnter}\n onPointerLeave={onLeave}\n >\n {children}\n <Visibility isVisible={isActive || isVisible}>\n {createPortal(\n <div\n ref={containerRef}\n\n {...callbacks}\n onPointerEnter={onEnter}\n\n data-name={PropsUtil.dataAttributes.name('tooltip')}\n data-state={transitionState}\n\n className={tooltipClassName}\n style={{ ...css, zIndex }}\n >\n {tooltip}\n </div>\n , document.body\n )}\n {createPortal(\n <div\n ref={triangleRef}\n\n data-name=\"tooltip-triangle\"\n data-state={transitionState}\n data-position={position}\n\n style={{ ...cssTriangle, zIndex: zIndexTriangle }}\n />\n , document.body\n )}\n </Visibility>\n </div>\n )\n}\n","import { Button } from '../../user-interaction/Button'\nimport { Input } from '../../user-interaction/input/Input'\nimport { FilterIcon } from 'lucide-react'\nimport { Menu } from '../../user-interaction/Menu'\nimport { useEffect, useState } from 'react'\nimport type { Column } from '@tanstack/react-table'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\nexport type TableFilterType = 'text' | 'range' | 'dateRange'\n\nexport type TableFilterButtonProps<T = unknown> = {\n filterType: TableFilterType,\n column: Column<T>,\n}\n\nexport const TableFilterButton = <T, >({\n filterType,\n column,\n}: TableFilterButtonProps<T>) => {\n const translation = useHightideTranslation()\n const columnFilterValue = column.getFilterValue()\n const [filterValue, setFilterValue] = useState<unknown>(columnFilterValue)\n const hasFilter = !!filterValue\n\n useEffect(() => {\n setFilterValue(columnFilterValue)\n }, [columnFilterValue])\n\n return (\n <Menu\n trigger={({ toggleOpen }, ref) => (\n <div ref={ref} className=\"relative\">\n <Button\n layout=\"icon\"\n color=\"neutral\"\n size=\"xs\"\n onClick={toggleOpen}\n >\n <FilterIcon className=\"size-4\"/>\n </Button>\n {hasFilter && (\n <div\n className=\"absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-primary pointer-events-none\"\n aria-hidden={true}\n />\n )}\n </div>\n )}\n >\n {({ close }) => (\n <div className=\"flex-col-1 p-2 items-start font-normal text-menu-text\">\n <h4 className=\"typography-label-md-semibold\">{translation('filter')}</h4>\n {filterType === 'text' && (\n <Input\n value={(filterValue ?? '') as string}\n autoFocus={true}\n placeholder={translation('text')+'...'}\n onValueChange={setFilterValue}\n className=\"h-10\"\n />\n )}\n {filterType === 'range' && (\n <div className=\"flex-row-2 items-center\">\n <Input\n value={(filterValue as [number, number])?.[0].toString() ?? ''}\n type=\"number\"\n placeholder={translation('min')}\n onValueChange={text => {\n const num = Number(text)\n setFilterValue((old: [number, number]) => [num, old?.[1]])\n }}\n className=\"h-10 input-indicator-hidden w-40\"\n />\n <span className=\"font-bold\">-</span>\n <Input\n value={(filterValue as [number, number])?.[1].toString() ?? ''}\n type=\"number\"\n placeholder={translation('max')}\n onValueChange={text => {\n const num = Number(text)\n setFilterValue((old: [number, number]) => [old?.[0], num])\n }}\n className=\"h-10 input-indicator-hidden w-40\"\n />\n </div>\n )}\n {filterType === 'dateRange' && (\n <>\n <Input\n value={(filterValue as [Date, Date])?.[0] ? (filterValue as [Date, Date])?.[0].toISOString().slice(0, 16) : ''}\n type=\"datetime-local\"\n placeholder={translation('startDate')}\n onValueChange={text => {\n const value = new Date(text)\n setFilterValue((old: [Date, Date]) => [value, old?.[1]])\n }}\n className=\"h-10 w-50\"\n />\n <Input\n value={(filterValue as [Date, Date])?.[1] ? (filterValue as [Date, Date])?.[1].toISOString().slice(0, 16) : ''}\n type=\"datetime-local\"\n placeholder={translation('endDate')}\n onValueChange={text => {\n const value = new Date(text)\n setFilterValue((old: [Date, Date]) => [old?.[0], value])\n }}\n className=\"h-10 w-50\"\n />\n </>\n )}\n <div className=\"flex-row-2 justify-end w-full\">\n {hasFilter && (\n <Button color=\"negative\" size=\"sm\" onClick={() => {\n column.setFilterValue(undefined)\n close()\n }}>\n {translation('remove')}\n </Button>\n )}\n <Button size=\"sm\" onClick={() => {\n column.setFilterValue(filterValue)\n close()\n }}>\n {translation('apply')}\n </Button>\n </div>\n </div>\n )}\n </Menu>\n )\n}","import { type PropsWithChildren, type ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\nimport { createPortal } from 'react-dom'\nimport type { PopoverHorizontalAlignment, PopoverVerticalAlignment } from '@/src/hooks/usePopoverPosition'\nimport { usePopoverPosition } from '@/src/hooks/usePopoverPosition'\nimport { useHoverState } from '@/src/hooks/useHoverState'\nimport { useOutsideClick } from '@/src/hooks/useOutsideClick'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\n\nexport type MenuItemProps = {\n onClick?: () => void,\n alignment?: 'left' | 'right',\n isDisabled?: boolean,\n className?: string,\n}\n// TODO differentiate between buttons, links and toggleable items here\nexport const MenuItem = ({\n children,\n onClick,\n alignment = 'left',\n isDisabled = false,\n className\n}: PropsWithChildren<MenuItemProps>) => (\n <div\n className={clsx('block px-3 py-1.5 first:rounded-t-md last:rounded-b-md text-sm font-semibold text-nowrap', {\n 'text-right': alignment === 'right',\n 'text-left': alignment === 'left',\n 'text-disabled cursor-not-allowed': isDisabled,\n 'text-menu-text hover:bg-primary/20': !isDisabled,\n 'cursor-pointer': !!onClick,\n }, className)}\n onClick={onClick}\n >\n {children}\n </div>\n)\n\nfunction getScrollableParents(element) {\n const scrollables = []\n let parent = element.parentElement\n while (parent) {\n scrollables.push(parent)\n parent = parent.parentElement\n }\n return scrollables\n}\n\nexport type MenuBag = {\n isOpen: boolean,\n disabled: boolean,\n toggleOpen: () => void,\n close: () => void,\n}\n\nexport type MenuProps = {\n children: (bag: MenuBag) => ReactNode | ReactNode,\n trigger: (bag: MenuBag, ref: (el: HTMLElement | null) => void) => ReactNode,\n /**\n * @default 'l'\n */\n alignmentHorizontal?: PopoverHorizontalAlignment,\n alignmentVertical?: PopoverVerticalAlignment,\n showOnHover?: boolean,\n menuClassName?: string,\n disabled?: boolean,\n}\n\n/**\n * A Menu Component to allow the user to see different functions\n */\nexport const Menu = ({\n trigger,\n children,\n alignmentHorizontal = 'leftInside',\n alignmentVertical = 'bottomOutside',\n showOnHover = false,\n disabled = false,\n menuClassName = '',\n}: MenuProps) => {\n const { isHovered: isOpen, setIsHovered: setIsOpen } = useHoverState({ isDisabled: !showOnHover || disabled })\n const triggerRef = useRef<HTMLElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n useOutsideClick([triggerRef, menuRef], () => setIsOpen(false))\n\n const [isHidden, setIsHidden] = useState<boolean>(true)\n const bag: MenuBag = {\n isOpen,\n close: () => setIsOpen(false),\n toggleOpen: () => setIsOpen(prevState => !prevState),\n disabled,\n }\n\n const menuPosition = usePopoverPosition(\n triggerRef.current?.getBoundingClientRect(),\n { verticalAlignment: alignmentVertical, horizontalAlignment: alignmentHorizontal, disabled }\n )\n\n useEffect(() => {\n if (!isOpen) return\n\n const triggerEl = triggerRef.current\n if (!triggerEl) return\n\n const scrollableParents = getScrollableParents(triggerEl)\n\n const close = () => setIsOpen(false)\n scrollableParents.forEach((parent) => {\n parent.addEventListener('scroll', close)\n })\n window.addEventListener('resize', close)\n\n return () => {\n scrollableParents.forEach((parent) => {\n parent.removeEventListener('scroll', close)\n })\n window.removeEventListener('resize', close)\n }\n }, [isOpen, setIsOpen])\n\n useEffect(() => {\n if (isOpen) {\n setIsHidden(false)\n }\n }, [isOpen])\n\n const { zIndex } = useOverlayRegistry({\n isActive: isOpen,\n })\n\n return (\n <>\n {trigger(bag, useCallback((el) => triggerRef.current = el, []))}\n {createPortal((\n <div\n ref={menuRef}\n onClick={e => e.stopPropagation()}\n className={clsx(\n 'absolute rounded-md bg-menu-background text-menu-text shadow-around-lg shadow-strong z-[300]',\n {\n 'animate-pop-in': isOpen,\n 'animate-pop-out': !isOpen,\n 'hidden': isHidden,\n },\n menuClassName\n )}\n onAnimationEnd={() => {\n if (!isOpen) {\n setIsHidden(true)\n }\n }}\n style={{\n ...menuPosition,\n zIndex\n }}\n >\n {BagFunctionUtil.resolve<MenuBag>(children, bag)}\n </div>\n ), document.body)}\n </>\n )\n}\n\n","import type { ReactNode } from 'react'\n\nexport type BagFunction<B, V = ReactNode> = (bag: B) => V\n\nexport type BagFunctionOrValue<B, V> = BagFunction<B, V> | V\n\nexport type BagFunctionOrNode<B> = BagFunction<B> | ReactNode\n\nexport type PropsWithBagFunction<B, P = unknown> = P & { children?: BagFunction<B> }\n\nexport type PropsWithBagFunctionOrChildren<B, P = unknown> = P & { children?: BagFunctionOrNode<B> }\n\n/**\n * Resolves a BagFunction\n *\n * If V is a function this resolver does not work\n * @param bagFunctionOrValue Function or Value\n * @param bag Values for function resolvers\n * @returns The Value or the result of the function\n */\nconst resolve = <B, V = ReactNode>(bagFunctionOrValue: BagFunctionOrValue<B, V>, bag: B): V => {\n if (typeof bagFunctionOrValue === 'function') {\n return (bagFunctionOrValue as BagFunction<B,V>)(bag)\n }\n\n return bagFunctionOrValue\n}\n\nexport const BagFunctionUtil = {\n resolve\n}","import type { CSSProperties } from 'react'\n\nexport type PopoverHorizontalAlignment = 'leftOutside' | 'leftInside' | 'rightOutside' | 'rightInside' | 'center'\nexport type PopoverVerticalAlignment = 'topOutside' | 'topInside' | 'bottomOutside' | 'bottomInside' | 'center'\n\ntype PopoverPositionOptionsResolved = {\n edgePadding: number,\n outerGap: number,\n verticalAlignment: PopoverVerticalAlignment,\n horizontalAlignment: PopoverHorizontalAlignment,\n disabled: boolean,\n}\n\ntype PopoverPositionOptions = Partial<PopoverPositionOptionsResolved>\n\nconst defaultPopoverPositionOptions: PopoverPositionOptionsResolved = {\n edgePadding: 16,\n outerGap: 4,\n horizontalAlignment: 'leftInside',\n verticalAlignment: 'bottomOutside',\n disabled: false,\n}\n\nexport const usePopoverPosition = (trigger?: DOMRect, options?: PopoverPositionOptions): CSSProperties => {\n const {\n edgePadding,\n outerGap,\n verticalAlignment,\n horizontalAlignment,\n disabled\n }: PopoverPositionOptionsResolved = { ...defaultPopoverPositionOptions, ...options }\n\n if (disabled || !trigger) {\n return {}\n }\n\n const left: number = {\n leftOutside: trigger.left - outerGap,\n leftInside: trigger.left,\n rightOutside: trigger.right + outerGap,\n rightInside: trigger.right,\n center: trigger.left + trigger.width / 2,\n }[horizontalAlignment]\n\n const top: number = {\n topOutside: trigger.top - outerGap,\n topInside: trigger.top,\n bottomOutside: trigger.bottom + outerGap,\n bottomInside: trigger.bottom,\n center: trigger.top + trigger.height / 2,\n }[verticalAlignment]\n\n const translateX: string | undefined = {\n leftOutside: '-100%',\n leftInside: undefined,\n rightOutside: undefined,\n rightInside: '-100%',\n center: '-50%',\n }[horizontalAlignment]\n\n const translateY: string | undefined = {\n topOutside: '-100%',\n topInside: undefined,\n bottomOutside: undefined,\n bottomInside: '-100%',\n center: '-50%',\n }[verticalAlignment]\n\n return {\n left: Math.max(left, edgePadding),\n top: Math.max(top, edgePadding),\n translate: [translateX ?? '0', translateY ?? '0'].join(' ')\n }\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useEffect, useState } from 'react'\n\ntype UseHoverStateProps = {\n /**\n * The delay after which the menu is closed in milliseconds\n *\n * default: 200ms\n */\n closingDelay: number,\n /**\n * Whether the hover state management should be disabled\n *\n * default: false\n */\n isDisabled: boolean,\n}\n\ntype UseHoverStateReturnType = {\n /**\n * Whether the element is hovered\n */\n isHovered: boolean,\n /**\n * Function to change the current hover status\n */\n setIsHovered: Dispatch<SetStateAction<boolean>>,\n /**\n * Handlers to pass on to the component that should be hovered\n */\n handlers: {\n onMouseEnter: () => void,\n onMouseLeave: () => void,\n },\n}\n\nconst defaultUseHoverStateProps: UseHoverStateProps = {\n closingDelay: 200,\n isDisabled: false,\n}\n\n/**\n * @param props See UseHoverStateProps\n *\n * A react hook for managing the hover state of a component. The handlers provided should be\n * forwarded to the component which should be hovered over\n */\nexport const useHoverState = (props: Partial<UseHoverStateProps> | undefined = undefined): UseHoverStateReturnType => {\n const { closingDelay, isDisabled } = { ...defaultUseHoverStateProps, ...props }\n\n const [isHovered, setIsHovered] = useState(false)\n const [timer, setTimer] = useState<NodeJS.Timeout>()\n\n const onMouseEnter = () => {\n if (isDisabled) {\n return\n }\n clearTimeout(timer)\n setIsHovered(true)\n }\n\n const onMouseLeave = () => {\n if (isDisabled) {\n return\n }\n setTimer(setTimeout(() => {\n setIsHovered(false)\n }, closingDelay))\n }\n\n useEffect(() => {\n if (timer) {\n return () => {\n clearTimeout(timer)\n }\n }\n })\n\n useEffect(() => {\n if (timer) {\n clearTimeout(timer)\n }\n }, [isDisabled]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n isHovered, setIsHovered, handlers: { onMouseEnter, onMouseLeave }\n }\n}\n","import type { RefObject } from 'react'\nimport { useEffect } from 'react'\n\nexport const useOutsideClick = <Ts extends RefObject<HTMLElement>[]>(refs: Ts, handler: () => void) => {\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n // returning means not \"not clicking outside\"\n\n // if no target exists, return\n if (event.target === null) return\n // if the target is a ref's element or descendent thereof, return\n if (refs.some((ref) => !ref.current || ref.current.contains(event.target as Node))) {\n return\n }\n\n handler()\n }\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [refs, handler])\n}\n","import { Check, Minus } from 'lucide-react'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { useCallback, type HTMLAttributes } from 'react'\nimport { Visibility } from '../layout/Visibility'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../form/FormField'\n\ntype CheckBoxSize = 'sm' | 'md' | 'lg' | null\n\nexport type CheckboxProps = HTMLAttributes<HTMLDivElement>\n & Partial<FormFieldInteractionStates>\n & Partial<FormFieldDataHandling<boolean>>\n & {\n indeterminate?: boolean,\n size?: CheckBoxSize,\n alwaysShowCheckIcon?: boolean,\n }\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by the parent\n */\nexport const Checkbox = ({\n value = false,\n indeterminate = false,\n required = false,\n invalid = false,\n disabled = false,\n readOnly = false,\n onValueChange,\n onEditComplete,\n size = 'md',\n alwaysShowCheckIcon = false,\n ...props\n}: CheckboxProps) => {\n const onChangeWrapper = useCallback(() => {\n onValueChange?.(!value)\n onEditComplete?.(!value)\n }, [onEditComplete, onValueChange, value])\n\n return (\n <div\n {...props}\n\n onClick={(event) => {\n if (!disabled) {\n onChangeWrapper()\n props.onClick?.(event)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) return\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onChangeWrapper()\n props.onKeyDown?.(event)\n }\n }}\n\n data-name={PropsUtil.dataAttributes.name('checkbox', props)}\n data-checked={!indeterminate ? value : 'indeterminate'}\n data-size={size ?? undefined}\n {...PropsUtil.dataAttributes.interactionStates({ disabled, invalid, readOnly, required })}\n\n role=\"checkbox\"\n tabIndex={disabled ? -1 : 0}\n\n aria-checked={indeterminate ? 'mixed' : value}\n {...PropsUtil.aria.interactionStates({ disabled, invalid, readOnly, required }, props)}\n >\n <Visibility isVisible={indeterminate}>\n <Minus data-name=\"checkbox-indicator\" aria-hidden={true} />\n </Visibility>\n <Visibility isVisible={!indeterminate && (alwaysShowCheckIcon || value)}>\n <Check data-name=\"checkbox-indicator\" aria-hidden={true} />\n </Visibility>\n </div>\n )\n}\n\nexport type CheckboxUncontrolledProps = CheckboxProps\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by this component\n */\nexport const CheckboxUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: CheckboxUncontrolledProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <Checkbox\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}","import type { CSSProperties, PropsWithChildren } from 'react'\nimport { useState } from 'react'\nimport { clsx } from 'clsx'\nimport { writeToClipboard } from '@/src/utils/writeToClipboard'\nimport { CheckIcon, Copy } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type CopyToClipboardWrapperProps = PropsWithChildren<{\n textToCopy: string,\n /**\n * Class names of additional styling properties for the tooltip\n */\n tooltipClassName?: string,\n /**\n * Class names of additional styling properties for the container from which the tooltip will be created\n */\n containerClassName?: string,\n position?: Position,\n zIndex?: number,\n}>\n\n/**\n * A Component for showing a tooltip when hovering over Content\n * @param tooltip The tooltip to show can be a text or any ReactNode\n * @param children The Content for which the tooltip should be created\n * @param tooltipClassName Additional ClassNames for the Container of the tooltip\n * @param containerClassName Additional ClassNames for the Container holding the content\n * @param position The direction of the tooltip relative to the Container\n * @param zIndex The z Index of the tooltip (you may require this when stacking modal)\n * @constructor\n */\nexport const CopyToClipboardWrapper = ({\n children,\n textToCopy,\n tooltipClassName = '',\n containerClassName = '',\n position = 'bottom',\n zIndex = 10,\n}: CopyToClipboardWrapperProps) => {\n const translation = useHightideTranslation()\n const [isShowingIndication, setIsShowingIndication] = useState(false)\n const [isShowingConfirmation, setIsShowingConfirmation] = useState(false)\n\n const positionClasses = {\n top: `bottom-full left-1/2 -translate-x-1/2 mb-[6px]`,\n bottom: `top-full left-1/2 -translate-x-1/2 mt-[6px]`,\n left: `right-full top-1/2 -translate-y-1/2 mr-[6px]`,\n right: `left-full top-1/2 -translate-y-1/2 ml-[6px]`\n }\n\n const triangleSize = 6\n const triangleClasses = {\n top: `top-full left-1/2 -translate-x-1/2 border-t-tooltip-background border-l-transparent border-r-transparent`,\n bottom: `bottom-full left-1/2 -translate-x-1/2 border-b-tooltip-background border-l-transparent border-r-transparent`,\n left: `left-full top-1/2 -translate-y-1/2 border-l-tooltip-background border-t-transparent border-b-transparent`,\n right: `right-full top-1/2 -translate-y-1/2 border-r-tooltip-background border-t-transparent border-b-transparent`\n }\n\n const triangleStyle: Record<Position, CSSProperties> = {\n top: { borderWidth: `${triangleSize}px ${triangleSize}px 0 ${triangleSize}px` },\n bottom: { borderWidth: `0 ${triangleSize}px ${triangleSize}px ${triangleSize}px` },\n left: { borderWidth: `${triangleSize}px 0 ${triangleSize}px ${triangleSize}px` },\n right: { borderWidth: `${triangleSize}px ${triangleSize}px ${triangleSize}px 0` }\n }\n\n return (\n <div\n className={clsx('relative inline-block cursor-copy', containerClassName)}\n onMouseEnter={() => {\n setIsShowingIndication(true)\n }}\n onMouseLeave={() => {\n setIsShowingIndication(false)\n setIsShowingConfirmation(false)\n }}\n onClick={() => {\n writeToClipboard(textToCopy).catch(console.error)\n setIsShowingIndication(false)\n setIsShowingConfirmation(true)\n }}\n >\n {children}\n <div\n className={clsx(\n `absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap\n shadow-around-md bg-tooltip-background cursor-default pointer-events-none`,\n 'transition-opacity duration-200',\n positionClasses[position],\n tooltipClassName\n )}\n style={{\n zIndex,\n opacity: (isShowingIndication || isShowingConfirmation) ? 1 : 0,\n }}\n >\n {isShowingConfirmation && (\n <div className=\"flex-row-1\">\n <CheckIcon size={16} className=\"text-positive\"/>\n {translation('copied')}\n </div>\n )}\n {isShowingIndication && (\n <div className=\"flex-row-1 text-description\">\n <Copy size={16}/>\n {translation('clickToCopy')}\n </div>\n )}\n <div\n className={clsx(`absolute w-0 h-0`, triangleClasses[position])}\n style={{ ...triangleStyle[position], zIndex: zIndex + 1 }}\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nexport const writeToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text)\n}","import { useCallback, useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { getNeighbours, range } from '@/src/utils/array'\nimport { clamp } from '@/src/utils/math'\n\nexport type ScrollPickerProps<T> = {\n options: T[],\n mapping: (value: T) => string,\n selected?: T,\n onChange?: (value: T) => void,\n disabled?: boolean,\n}\n\ntype AnimationData<T> = {\n /** The index we scroll to */\n targetIndex: number,\n /** The index we are currently showing centered */\n currentIndex: number,\n items: T[],\n /** From -0.5 to 0.5 */\n transition: number,\n velocity: number,\n animationVelocity: number,\n lastTimeStamp?: number,\n lastScrollTimeStamp?: number,\n}\n\nconst up = 1\nconst down = -1\ntype Direction = 1 | -1\n\n/**\n * A component for picking an option by scrolling\n */\nexport const ScrollPicker = <T, >({\n options,\n mapping,\n selected,\n onChange,\n disabled = false,\n}: ScrollPickerProps<T>) => {\n let selectedIndex = 0\n if (selected && options.indexOf(selected) !== -1) {\n selectedIndex = options.indexOf(selected)\n }\n const [{\n currentIndex,\n transition,\n items,\n lastTimeStamp\n }, setAnimation] = useState<AnimationData<T>>({\n targetIndex: selectedIndex,\n currentIndex: disabled ? selectedIndex : 0,\n velocity: 0,\n animationVelocity: Math.floor(options.length / 2),\n transition: 0,\n items: options,\n })\n\n const itemsShownCount = 5\n const shownItems = getNeighbours(range(items.length), currentIndex).map(index => ({\n name: mapping(items[index]!), index\n }))\n\n const itemHeight = 40\n const distance = 8\n\n const containerHeight = itemHeight * (itemsShownCount - 2) + distance * (itemsShownCount - 2 + 1)\n\n const getDirection = useCallback((targetIndex: number, currentIndex: number, transition: number, length: number): Direction => {\n if (targetIndex === currentIndex) {\n return transition > 0 ? up : down\n }\n let distanceForward = targetIndex - currentIndex\n if (distanceForward < 0) {\n distanceForward += length\n }\n return distanceForward >= length / 2 ? down : up\n }, [])\n\n const animate = useCallback((timestamp: number, startTime: number | undefined) => {\n setAnimation((prevState) => {\n const {\n targetIndex,\n currentIndex,\n transition,\n animationVelocity,\n velocity,\n items,\n lastScrollTimeStamp\n } = prevState\n if (disabled) {\n return { ...prevState, currentIndex: targetIndex, velocity: 0, lastTimeStamp: timestamp }\n }\n if ((targetIndex === currentIndex && velocity === 0 && transition === 0) || !startTime) {\n return { ...prevState, lastTimeStamp: timestamp }\n }\n const progress = (timestamp - startTime) / 1000 // to seconds\n const direction = getDirection(targetIndex, currentIndex, transition, items.length)\n\n let newVelocity = velocity\n let usedVelocity\n let newCurrentIndex = currentIndex\n const isAutoScrolling = velocity <= 10 && (!lastScrollTimeStamp || timestamp - lastScrollTimeStamp > 50)\n\n const newLastScrollTimeStamp = velocity !== 0 ? timestamp : lastScrollTimeStamp\n\n // manual scrolling\n if (isAutoScrolling) {\n usedVelocity = direction * animationVelocity\n } else {\n usedVelocity = velocity\n newVelocity = velocity * 0.5 // drag loss\n if (Math.abs(newVelocity) <= 0.05) {\n newVelocity = 0\n }\n }\n\n let newTransition = transition + usedVelocity * progress\n const changeThreshold = 0.5\n\n while (newTransition >= changeThreshold) {\n if (newCurrentIndex === targetIndex && newTransition >= changeThreshold && isAutoScrolling) {\n newTransition = 0\n break\n }\n newCurrentIndex = (currentIndex + 1) % items.length\n newTransition -= 1\n }\n if (newTransition >= changeThreshold) {\n newTransition = 0\n }\n while (newTransition <= -changeThreshold) {\n if (newCurrentIndex === targetIndex && newTransition <= -changeThreshold && isAutoScrolling) {\n newTransition = 0\n break\n }\n newCurrentIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1\n newTransition += 1\n }\n let newTargetIndex = targetIndex\n if (!isAutoScrolling) {\n newTargetIndex = newCurrentIndex\n }\n\n if ((currentIndex !== newTargetIndex || newTargetIndex !== targetIndex) && newTargetIndex === newCurrentIndex) {\n onChange?.(items[newCurrentIndex]!)\n }\n return {\n targetIndex: newTargetIndex,\n currentIndex: newCurrentIndex,\n animationVelocity,\n transition: newTransition,\n velocity: newVelocity,\n items,\n lastTimeStamp: timestamp,\n lastScrollTimeStamp: newLastScrollTimeStamp\n }\n })\n }, [disabled, getDirection, onChange])\n\n useEffect(() => {\n // constant update\n requestAnimationFrame((timestamp) => animate(timestamp, lastTimeStamp))\n })\n\n const opacity = (transition: number, index: number, itemsCount: number) => {\n const max = 100\n const min = 0\n const distance = max - min\n\n let opacityValue = min\n const unitTransition = clamp((transition) / 0.5)\n if (index === 1 || index === itemsCount - 2) {\n if (index === 1 && transition > 0) {\n opacityValue += Math.floor(unitTransition * distance)\n }\n if (index === itemsCount - 2 && transition < 0) {\n opacityValue += Math.floor(unitTransition * distance)\n }\n } else {\n opacityValue = max\n }\n\n // TODO this is not the right value for the bottom entry\n return clamp(1 - (opacityValue / max))\n }\n\n return (\n <div\n className=\"relative overflow-hidden\"\n style={{ height: containerHeight }}\n onWheel={event => {\n if (event.deltaY !== 0) {\n const deltaY = clamp(event.deltaY,[-itemHeight*2/3, itemHeight*2/3])\n // TODO slower increase\n setAnimation(({ velocity, ...animationData }) =>\n ({ ...animationData, velocity: velocity + deltaY }))\n }\n }}\n >\n <div className=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2\">\n <div\n className=\"absolute z-[1] top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2 w-full min-w-[40px] border border-divider/50 border-y-2 border-x-0 \"\n style={{ height: `${itemHeight}px` }}\n />\n <div\n className=\"flex-col-2 select-none\"\n style={{\n transform: `translateY(${-transition * (distance + itemHeight)}px)`,\n columnGap: `${distance}px`,\n }}\n >\n {shownItems.map(({ name, index }, arrayIndex) => (\n <div\n key={index}\n className={clsx(\n `flex-col-2 items-center justify-center rounded-md`,\n {\n 'text-primary font-bold': currentIndex === index,\n 'text-on-background': currentIndex === index,\n 'cursor-pointer': !disabled,\n 'cursor-not-allowed': disabled,\n }\n )}\n style={{\n opacity: currentIndex !== index ? opacity(transition, arrayIndex, shownItems.length) : undefined,\n height: `${itemHeight}px`,\n maxHeight: `${itemHeight}px`,\n }}\n onClick={() => !disabled && setAnimation(prevState => ({ ...prevState, targetIndex: index }))}\n >\n {name}\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","import type { LabelHTMLAttributes, ReactNode, TextareaHTMLAttributes } from 'react'\nimport { forwardRef, useId } from 'react'\nimport clsx from 'clsx'\nimport { useDelay, type UseDelayOptions } from '@/src/hooks/useDelay'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type TextareaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>\n & Partial<FormFieldDataHandling<string>>\n & Partial<FormFieldInteractionStates>\n & { saveDelayOptions?: UseDelayOptions }\n\n/**\n * A Textarea component for inputting longer texts\n *\n * The State is managed by the parent\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea({\n invalid = false,\n onValueChange,\n onEditComplete,\n saveDelayOptions,\n ...props\n}, ref) {\n const { restartTimer, clearTimer } = useDelay(saveDelayOptions)\n\n const onEditCompleteWrapper = (text: string) => {\n onEditComplete?.(text)\n clearTimer()\n }\n\n return (\n <textarea\n {...props}\n ref={ref}\n\n onChange={(event) => {\n const value = event.target.value\n restartTimer(() => {\n onEditCompleteWrapper(value)\n })\n props.onChange?.(event)\n onValueChange?.(value)\n }}\n onBlur={(event) => {\n props.onBlur?.(event)\n onEditCompleteWrapper(event.target.value)\n }}\n\n data-name={PropsUtil.dataAttributes.name('textarea', props)}\n data-value={PropsUtil.dataAttributes.bool(!!props.value)}\n {...PropsUtil.dataAttributes.interactionStates({ ...props, invalid })}\n\n {...PropsUtil.aria.interactionStates({ ...props, invalid }, props)}\n />\n )\n})\n\n/**\n * A Textarea component that is not controlled by its parent\n */\nexport const TextareaUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: TextareaProps) => {\n const [value, setValue] = useOverwritableState<string>(initialValue, onValueChange)\n\n return (\n <Textarea\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}\n\nexport type TextareaWithHeadlineProps = Omit<TextareaProps, 'defaultStyle'> & {\n headline: ReactNode,\n headlineProps: Omit<LabelHTMLAttributes<HTMLLabelElement>, 'children'>,\n containerClassName?: string,\n}\n\nexport const TextareaWithHeadline = ({\n id,\n headline,\n headlineProps,\n disabled,\n className,\n containerClassName,\n ...props\n}: TextareaWithHeadlineProps) => {\n const genId = useId()\n const usedId = id ?? genId\n\n return (\n <div\n className={clsx(\n 'group flex-col-3 border-2 rounded-lg',\n {\n 'bg-input-background text-input-text hover:border-primary focus-within:border-primary': !disabled,\n 'border-disabled-border bg-disabled-background cursor-not-allowed': disabled,\n },\n containerClassName\n )}\n >\n {headline && (\n <label {...headlineProps} htmlFor={usedId} className={clsx('typography-lable-md text-label', headlineProps.className)}>\n {headline}\n </label>\n )}\n <Textarea\n {...props}\n id={usedId}\n className={clsx(\n 'border-transparent focus:ring-0 focus-visible:ring-0 resize-none h-32',\n className\n )}\n />\n </div>\n )\n}","import { useState } from 'react'\nimport { ArrowDown, ArrowUp, Calendar, ChevronDown } from 'lucide-react'\nimport type { WeekDay } from '@/src/utils/date'\nimport { addDuration, isInTimeSpan, subtractDuration } from '@/src/utils/date'\nimport clsx from 'clsx'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { DayPickerProps } from '@/src/components/user-interaction/date/DayPicker'\nimport { DayPicker } from '@/src/components/user-interaction/date/DayPicker'\nimport type { YearMonthPickerProps } from '@/src/components/user-interaction/date/YearMonthPicker'\nimport { YearMonthPicker } from '@/src/components/user-interaction/date/YearMonthPicker'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { LocalizationUtil } from '@/src/i18n/util'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\ntype DisplayMode = 'yearMonth' | 'day'\n\nexport type DatePickerProps = Partial<FormFieldDataHandling<Date>> & {\n start?: Date,\n end?: Date,\n initialDisplay?: DisplayMode,\n weekStart?: WeekDay,\n dayPickerProps?: Omit<DayPickerProps, 'displayedMonth' | 'onChange' | 'selected' | 'weekStart'>,\n yearMonthPickerProps?: Omit<YearMonthPickerProps, 'displayedYearMonth' | 'onChange' | 'start' | 'end'>,\n className?: string,\n}\n\n/**\n * A Component for picking a date\n */\nexport const DatePicker = ({\n value = new Date(),\n start,\n end,\n initialDisplay = 'day',\n weekStart,\n onValueChange,\n onEditComplete,\n yearMonthPickerProps,\n dayPickerProps,\n className\n}: DatePickerProps) => {\n const { locale } = useLocale()\n const [displayedMonth, setDisplayedMonth] = useState<Date>(new Date(value.getFullYear(), value.getMonth(), 1))\n const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplay)\n\n return (\n <div className={clsx('flex-col-3', className)}>\n <div className=\"flex-row-2 items-center justify-between\">\n <Button\n size=\"sm\"\n coloringStyle=\"text\"\n className={clsx('flex-row-1 items-center cursor-pointer select-none', {\n 'text-disabled': displayMode !== 'day',\n })}\n onClick={() => setDisplayMode(displayMode === 'day' ? 'yearMonth' : 'day')}\n >\n {`${new Intl.DateTimeFormat(LocalizationUtil.localToLanguage(locale), { month: 'long' }).format(displayedMonth)} ${displayedMonth.getFullYear()}`}\n <ChevronDown size={16}/>\n </Button>\n {displayMode === 'day' && (\n <div className=\"flex-row-2 justify-end\">\n <Button\n size=\"sm\"\n coloringStyle=\"tonal\"\n onClick={() => {\n const newDate = new Date()\n newDate.setHours(value.getHours(), value.getMinutes())\n onValueChange(newDate)\n setDisplayedMonth(newDate)\n }}\n >\n <Calendar className=\"size-5\"/>\n </Button>\n <Button\n size=\"sm\"\n disabled={!isInTimeSpan(subtractDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(subtractDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowUp size={20}/>\n </Button>\n <Button\n size=\"sm\"\n disabled={!isInTimeSpan(addDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(addDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowDown size={20}/>\n </Button>\n </div>\n )}\n </div>\n {displayMode === 'yearMonth' ? (\n <YearMonthPicker\n {...yearMonthPickerProps}\n value={value}\n start={start}\n end={end}\n onValueChange={newDate => {\n setDisplayedMonth(newDate)\n setDisplayMode('day')\n }}\n onEditComplete={newDate => {\n setDisplayedMonth(newDate)\n setDisplayMode('day')\n }}\n className=\"h-60 max-h-60\"\n />\n ) : (\n <DayPicker\n {...dayPickerProps}\n value={value}\n displayedMonth={displayedMonth}\n start={start}\n end={end}\n weekStart={weekStart}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n className=\"h-60 max-h-60\"\n />\n )}\n </div>\n )\n}\n\n/**\n * Example for the Date Picker\n */\nexport const DatePickerUncontrolled = ({\n value,\n onValueChange,\n ...props\n}: DatePickerProps) => {\n const [date, setDate] = useOverwritableState<Date>(value, onValueChange)\n\n return (\n <DatePicker\n {...props}\n value={date}\n onValueChange={setDate}\n />\n )\n}\n","import { equalSizeGroups } from '@/src/utils/array'\nimport type { DurationJSON } from '@/src/utils/duration'\n\nconst monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nconst weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const\nexport type WeekDay = typeof weekDayList[number]\n\nexport const formatDate = (date: Date) => {\n const year = date.getFullYear().toString().padStart(4, '0')\n const month = (date.getMonth() + 1).toString().padStart(2, '0')\n const day = (date.getDate()).toString().padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport const formatDateTime = (date: Date) => {\n const dateString = formatDate(date)\n const hours = date.getHours().toString().padStart(2, '0')\n const minutes = date.getMinutes().toString().padStart(2, '0')\n return `${dateString}T${hours}:${minutes}`\n}\n\nexport const changeDuration = (date: Date, duration: Partial<DurationJSON>, isAdding?: boolean): Date => {\n const {\n years = 0,\n months = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n milliseconds = 0,\n } = duration\n\n // Check ranges\n if (years < 0) {\n console.error(`Range error years must be greater than 0: received ${years}`)\n return new Date(date)\n }\n if (months < 0 || months > 11) {\n console.error(`Range error month must be 0 <= month <= 11: received ${months}`)\n return new Date(date)\n }\n if (days < 0) {\n console.error(`Range error days must be greater than 0: received ${days}`)\n return new Date(date)\n }\n if (hours < 0 || hours > 23) {\n console.error(`Range error hours must be 0 <= hours <= 23: received ${hours}`)\n return new Date(date)\n }\n if (minutes < 0 || minutes > 59) {\n console.error(`Range error minutes must be 0 <= minutes <= 59: received ${minutes}`)\n return new Date(date)\n }\n if (seconds < 0 || seconds > 59) {\n console.error(`Range error seconds must be 0 <= seconds <= 59: received ${seconds}`)\n return new Date(date)\n }\n if (milliseconds < 0) {\n console.error(`Range error seconds must be greater than 0: received ${milliseconds}`)\n return new Date(date)\n }\n\n const multiplier = isAdding ? 1 : -1\n\n const newDate = new Date(date)\n\n newDate.setFullYear(newDate.getFullYear() + multiplier * years)\n\n newDate.setMonth(newDate.getMonth() + multiplier * months)\n\n newDate.setDate(newDate.getDate() + multiplier * days)\n\n newDate.setHours(newDate.getHours() + multiplier * hours)\n\n newDate.setMinutes(newDate.getMinutes() + multiplier * minutes)\n\n newDate.setSeconds(newDate.getSeconds() + multiplier * seconds)\n\n newDate.setMilliseconds(newDate.getMilliseconds() + multiplier * milliseconds)\n\n return newDate\n}\n\nexport const addDuration = (date: Date, duration: Partial<DurationJSON>): Date => {\n return changeDuration(date, duration, true)\n}\n\nexport const subtractDuration = (date: Date, duration: Partial<DurationJSON>): Date => {\n return changeDuration(date, duration, false)\n}\n\nexport const getBetweenDuration = (startDate: Date, endDate: Date): Partial<DurationJSON> => {\n const durationInMilliseconds = endDate.getTime() - startDate.getTime()\n\n const millisecondsInSecond = 1000\n const millisecondsInMinute = 60 * millisecondsInSecond\n const millisecondsInHour = 60 * millisecondsInMinute\n const millisecondsInDay = 24 * millisecondsInHour\n const millisecondsInMonth = 30 * millisecondsInDay // Rough estimation, can be adjusted\n\n const years = Math.floor(durationInMilliseconds / (365.25 * millisecondsInDay))\n const months = Math.floor(durationInMilliseconds / millisecondsInMonth)\n const days = Math.floor(durationInMilliseconds / millisecondsInDay)\n const hours = Math.floor((durationInMilliseconds % millisecondsInDay) / millisecondsInHour)\n const seconds = Math.floor((durationInMilliseconds % millisecondsInHour) / millisecondsInSecond)\n const milliseconds = durationInMilliseconds % millisecondsInSecond\n\n return {\n years,\n months,\n days,\n hours,\n seconds,\n milliseconds,\n }\n}\n\n/** Checks if a given date is in the range of two dates\n *\n * An undefined value for startDate or endDate means no bound for the start or end respectively\n */\nexport const isInTimeSpan = (value: Date, startDate?: Date, endDate?: Date): boolean => {\n if (startDate && endDate) {\n console.assert(startDate <= endDate)\n return startDate <= value && value <= endDate\n } else if (startDate) {\n return startDate <= value\n } else if (endDate) {\n return endDate >= value\n } else {\n return true\n }\n}\n\n/** Compare two dates on the year, month, day */\nconst equalDate = (date1: Date, date2: Date) => {\n return date1.getFullYear() === date2.getFullYear()\n && date1.getMonth() === date2.getMonth()\n && date1.getDate() === date2.getDate()\n}\n\nexport const getWeeksForCalenderMonth = (date: Date, weekStart: WeekDay, weeks: number = 6) => {\n const month = date.getMonth()\n const year = date.getFullYear()\n\n const dayList: Date[] = []\n let currentDate = new Date(year, month, 1) // Start of month\n const weekStartIndex = weekDayList.indexOf(weekStart)\n\n // Move the current day to the week before\n while (currentDate.getDay() !== weekStartIndex) {\n currentDate = subtractDuration(currentDate, { days: 1 })\n }\n\n while (dayList.length < 7 * weeks) {\n const date = new Date(currentDate)\n date.setHours(date.getHours(), date.getMinutes()) // To make sure we are not overwriting the time\n dayList.push(date)\n currentDate = addDuration(currentDate, { days: 1 })\n }\n\n // weeks\n return equalSizeGroups(dayList, 7)\n}\n\nconst formatGerman = (date: Date, showTime: boolean) => {\n const d = new Intl.DateTimeFormat('de-DE', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }).format(date)\n\n if (!showTime) return d\n\n const t = new Intl.DateTimeFormat('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n }).format(date)\n\n return `${d} um ${t} Uhr`\n}\n\nconst formatAbsolute = (date: Date, locale: string, showTime: boolean) => {\n if (locale === 'de-DE') {\n return formatGerman(date, showTime)\n }\n\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n }\n\n if (showTime) {\n options.hour = 'numeric'\n options.minute = 'numeric'\n }\n\n return new Intl.DateTimeFormat(locale, options).format(date)\n}\n\nconst formatRelative = (date: Date, locale: string, showTime: boolean) => {\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' })\n const now = new Date()\n const diffInSeconds = (date.getTime() - now.getTime()) / 1000\n\n if (Math.abs(diffInSeconds) < 60) return rtf.format(Math.round(diffInSeconds), 'second')\n if (Math.abs(diffInSeconds) < 3600) return rtf.format(Math.round(diffInSeconds / 60), 'minute')\n if (Math.abs(diffInSeconds) < 86400) return rtf.format(Math.round(diffInSeconds / 3600), 'hour')\n if (Math.abs(diffInSeconds) < 604800) return rtf.format(Math.round(diffInSeconds / 86400), 'day')\n\n return formatAbsolute(date, locale, showTime)\n}\n\nexport const DateUtils = {\n monthsList,\n weekDayList,\n equalDate,\n formatAbsolute,\n formatRelative\n}","import type { WeekDay } from '@/src/utils/date'\nimport { DateUtils, getWeeksForCalenderMonth, isInTimeSpan } from '@/src/utils/date'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { useMemo } from 'react'\n\nexport type DayPickerProps = Partial<FormFieldDataHandling<Date>> & {\n displayedMonth: Date,\n start?: Date,\n end?: Date,\n weekStart?: WeekDay,\n markToday?: boolean,\n className?: string,\n}\n\n/**\n * A component for selecting a day of a month\n */\nexport const DayPicker = ({\n displayedMonth,\n value,\n start: providedStart,\n end: providedEnd,\n onValueChange,\n onEditComplete,\n weekStart = 'monday',\n markToday = true,\n className = ''\n}: DayPickerProps) => {\n const { locale } = useLocale()\n const month = displayedMonth.getMonth()\n const weeks = getWeeksForCalenderMonth(displayedMonth, weekStart)\n\n // TODO add keyboard navigation here\n\n const end = useMemo(() => {\n if(!providedEnd) return\n return new Date(providedEnd.getFullYear(), providedEnd.getMonth(), providedEnd.getDate())\n }, [providedEnd])\n\n const start = useMemo(() => {\n if(!providedStart) return\n return new Date(providedStart.getFullYear(), providedStart.getMonth(), providedStart.getDate())\n }, [providedStart])\n\n return (\n <div className={className} data-name=\"day-picker-container\">\n <div data-name=\"day-picker-header-row\">\n {weeks[0]!.map((weekDay, index) => (\n <div key={index} data-name=\"day-picker-header-item\">\n {new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(weekDay).substring(0, 2)}\n </div>\n ))}\n </div>\n {weeks.map((week, index) => (\n <div key={index} data-name=\"day-picker-body-row\">\n {week.map((date) => {\n const isSelected = !!value && DateUtils.equalDate(value, date)\n const isToday = DateUtils.equalDate(new Date(), date)\n const isSameMonth = date.getMonth() === month\n const isDayValid = isInTimeSpan(date, start, end)\n return (\n <button\n key={date.getDate()}\n\n disabled={!isDayValid}\n\n onClick={() => {\n const newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n value.getHours(),\n value.getMinutes(),\n value.getSeconds()\n )\n onValueChange?.(newDate)\n onEditComplete?.(newDate)\n }}\n\n data-name=\"day-picker-body-item\"\n data-selected={PropsUtil.dataAttributes.bool(isSelected)}\n data-invalid={PropsUtil.dataAttributes.bool(!isDayValid)}\n data-today={PropsUtil.dataAttributes.bool(isToday && markToday)}\n data-samemonth={PropsUtil.dataAttributes.bool(isSameMonth)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n ))}\n </div>\n )\n}\n\nexport const DayPickerUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: DayPickerProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <DayPicker\n value={value}\n onValueChange={setValue}\n {...props}\n />\n )\n}\n","import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { equalSizeGroups, range } from '@/src/utils/array'\nimport clsx from 'clsx'\nimport { ExpandableContent, ExpandableHeader, ExpandableRoot } from '@/src/components/layout/Expandable'\nimport { addDuration, DateUtils, subtractDuration } from '@/src/utils/date'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { InfiniteScroll } from '../../layout/InifiniteScroll'\n\n// A performance optimized component for displayig the year rows\nconst YearRow = memo(function YearRow({\n year,\n selectedMonthIndex,\n minTimestamp,\n maxTimestamp,\n monthNames,\n onSelect\n}: {\n year: number,\n selectedMonthIndex?: number,\n minTimestamp?: number,\n maxTimestamp?: number,\n monthNames: string[],\n onSelect: (date: Date) => void,\n}) {\n const ref = useRef<HTMLDivElement>(null)\n const isSelectedYear = selectedMonthIndex !== undefined\n const [isExpanded, setIsExpanded] = useState(false)\n\n useEffect(() => {\n if (isSelectedYear) {\n ref.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n }\n }, [isSelectedYear])\n\n const monthGrid = useMemo(() => equalSizeGroups([...DateUtils.monthsList], 3), [])\n\n return (\n <ExpandableRoot\n ref={isSelectedYear ? ref : undefined}\n isExpanded={isExpanded}\n onExpandedChange={setIsExpanded}\n >\n <ExpandableHeader className={clsx('px-2', { 'text-primary font-bold': isSelectedYear })}>\n {year}\n </ExpandableHeader>\n <ExpandableContent className=\"gap-y-1 px-2 expadable-content-h-39\">\n {isExpanded && monthGrid.map((group, groupIdx) => (\n <div key={groupIdx} className=\"flex-row-1\">\n {group.map(month => {\n const monthIndex = DateUtils.monthsList.indexOf(month)\n\n const currentTimestamp = new Date(year, monthIndex).getTime()\n const isAfterStart = minTimestamp === undefined || currentTimestamp >= minTimestamp\n const isBeforeEnd = maxTimestamp === undefined || currentTimestamp <= maxTimestamp\n const isValid = isAfterStart && isBeforeEnd\n const isSelectedMonth = monthIndex === selectedMonthIndex\n\n return (\n <Button\n key={month}\n disabled={!isValid}\n color={isSelectedMonth && isValid ? 'primary' : 'neutral'}\n className=\"flex-1\"\n size=\"sm\"\n onClick={() => {\n if (isValid) {\n onSelect(new Date(year, monthIndex))\n }\n }}\n >\n {monthNames[monthIndex]}\n </Button>\n )\n })}\n </div>\n ))}\n </ExpandableContent>\n </ExpandableRoot>\n )\n})\n\nconst defaultStart = subtractDuration(new Date(), { years: 100 })\nconst defaultEnd = addDuration(new Date(), { years: 100 })\n\nexport type YearMonthPickerProps = Partial<FormFieldDataHandling<Date>> & {\n start?: Date,\n end?: Date,\n className?: string,\n}\n\nexport const YearMonthPicker = ({\n value = new Date(),\n start = defaultStart,\n end = defaultEnd,\n onValueChange,\n onEditComplete,\n className,\n}: YearMonthPickerProps) => {\n const { locale } = useLocale()\n\n const monthNames = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { month: 'short' })\n return Array.from({ length: 12 }, (_, i) => formatter.format(new Date(2000, i, 1)))\n }, [locale])\n\n const years = useMemo(() =>\n range([start.getFullYear(), end.getFullYear()], { exclusiveEnd: false }),\n [start, end])\n\n const minTimestamp = useMemo(() =>{\n if(!start) return\n return new Date(start.getFullYear(), start.getMonth(), 1).getTime()\n }, [start])\n const maxTimestamp = useMemo(() => {\n if(!end) return\n return new Date(end.getFullYear(), end.getMonth() + 1, 0).getTime()\n }, [end])\n\n const callbackRefs = useRef({ onValueChange, onEditComplete })\n useLayoutEffect(() => {\n callbackRefs.current = { onValueChange, onEditComplete }\n })\n const handleSelect = useCallback((newDate: Date) => {\n const { onValueChange, onEditComplete } = callbackRefs.current\n\n onValueChange?.(newDate)\n onEditComplete?.(newDate)\n }, [])\n\n return (\n <InfiniteScroll\n itemCount={years.length}\n className={clsx('flex-col-1 h-full select-none', className)}\n initialIndex={years.findIndex(year => year === value.getFullYear())}\n >\n {(index => {\n const year = years[index]\n const isSelectedYear = value.getFullYear() === year\n const selectedMonthIndex = isSelectedYear ? value.getMonth() : undefined\n\n return (\n <YearRow\n key={year}\n year={year}\n selectedMonthIndex={selectedMonthIndex}\n minTimestamp={minTimestamp}\n maxTimestamp={maxTimestamp}\n monthNames={monthNames}\n onSelect={handleSelect}\n />\n )\n })}\n </InfiniteScroll>\n )\n}\n\nexport const YearMonthPickerUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: YearMonthPickerProps) => {\n const [value, setValue] = useOverwritableState<Date>(initialValue, onValueChange)\n\n return (\n <YearMonthPicker\n value={value}\n onValueChange={setValue}\n {...props}\n />\n )\n}\n","import { type ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { WeekDay } from '@/src/utils/date'\nimport type { TimePickerProps, TimePickerMinuteIncrement } from './TimePicker'\nimport { TimePicker } from './TimePicker'\nimport type { DatePickerProps } from './DatePicker'\nimport { DatePicker } from './DatePicker'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\nexport type DateTimePickerMode = 'date' | 'time' | 'dateTime'\n\nexport type DateTimePickerProps = Partial<FormFieldDataHandling<Date>> & {\n mode?: DateTimePickerMode,\n start?: Date,\n end?: Date,\n is24HourFormat?: boolean,\n minuteIncrement?: TimePickerMinuteIncrement,\n markToday?: boolean,\n weekStart?: WeekDay,\n datePickerProps?: Omit<DatePickerProps, 'onChange' | 'value' | 'start' | 'end'>,\n timePickerProps?: Omit<TimePickerProps, 'onChange' | 'time' | 'is24HourFormat' | 'minuteIncrement'>,\n}\n\n/**\n * A Component for picking a Date and Time\n */\nexport const DateTimePicker = ({\n value = new Date(),\n start,\n end,\n mode = 'dateTime',\n is24HourFormat,\n minuteIncrement,\n weekStart,\n onValueChange,\n onEditComplete,\n timePickerProps,\n datePickerProps,\n}: DateTimePickerProps) => {\n const useDate = mode === 'dateTime' || mode === 'date'\n const useTime = mode === 'dateTime' || mode === 'time'\n\n let dateDisplay: ReactNode\n let timeDisplay: ReactNode\n\n if (useDate) {\n dateDisplay = (\n <DatePicker\n {...datePickerProps}\n className=\"min-w-80\"\n yearMonthPickerProps={{ className: 'h-full grow' }}\n start={start}\n end={end}\n weekStart={weekStart}\n value={value}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n />\n )\n }\n if (useTime) {\n timeDisplay = (\n <TimePicker\n {...timePickerProps}\n is24HourFormat={is24HourFormat}\n minuteIncrement={minuteIncrement}\n className={clsx({ 'justify-between': mode === 'time' })}\n value={value}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n />\n )\n }\n\n return (\n <div className=\"flex-row-2 min-h-71 max-h-71\">\n {dateDisplay}\n {timeDisplay}\n </div>\n )\n}\n\nexport const DateTimePickerUncontrolled = ({ value: initialValue, onValueChange, ...props }: DateTimePickerProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <DateTimePicker\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}","import { useEffect, useRef } from 'react'\nimport { closestMatch, range } from '@/src/utils/array'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\nexport type TimePickerMinuteIncrement = '1min' | '5min' | '10min' | '15min' | '30min'\n\n// TODO add start, and end constraints\nexport type TimePickerProps = Partial<FormFieldDataHandling<Date>> & {\n is24HourFormat?: boolean,\n minuteIncrement?: TimePickerMinuteIncrement,\n className?: string,\n}\n\nexport const TimePicker = ({\n value = new Date(),\n onValueChange,\n onEditComplete,\n is24HourFormat = true,\n minuteIncrement = '5min',\n className,\n}: TimePickerProps) => {\n const minuteRef = useRef<HTMLButtonElement>(null)\n const hourRef = useRef<HTMLButtonElement>(null)\n\n const isPM = value.getHours() > 11\n const hours = is24HourFormat ? range(24) : range(12)\n let minutes = range(60)\n\n switch (minuteIncrement) {\n case '5min':\n minutes = minutes.filter(value => value % 5 === 0)\n break\n case '10min':\n minutes = minutes.filter(value => value % 10 === 0)\n break\n case '15min':\n minutes = minutes.filter(value => value % 15 === 0)\n break\n case '30min':\n minutes = minutes.filter(value => value % 30 === 0)\n break\n }\n\n const closestMinute = closestMatch(minutes, (item1, item2) => Math.abs(item1 - value.getMinutes()) < Math.abs(item2 - value.getMinutes()))\n const hour = value.getHours()\n\n useEffect(() => {\n minuteRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n })\n }, [closestMinute])\n\n useEffect(() => {\n hourRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n })\n }, [hour])\n\n const onChangeWrapper = (transformer: (newDate: Date) => void) => {\n const newDate = new Date(value)\n transformer(newDate)\n onValueChange?.(newDate)\n onEditComplete?.(newDate)\n }\n\n return (\n <div data-name=\"time-picker-container\" className={className}>\n <div data-name=\"time-picker-value-column\">\n {hours.map(hour => {\n const isSelected = hour === value.getHours() - (!is24HourFormat && isPM ? 12 : 0)\n return (\n <Button\n size=\"sm\"\n color={isSelected ? 'primary' : 'neutral'}\n key={hour}\n ref={isSelected ? hourRef : undefined}\n onClick={() => onChangeWrapper(newDate => newDate.setHours(hour + (!is24HourFormat && isPM ? 12 : 0)))}\n >\n {hour.toString().padStart(2, '0')}\n </Button>\n )\n })}\n </div>\n <div data-name=\"time-picker-value-column\">\n {minutes.map(minute => {\n const isSelected = minute === closestMinute\n return (\n <Button\n size=\"sm\"\n color={isSelected ? 'primary' : 'neutral'}\n key={minute + minuteIncrement} // minute increment so that scroll works\n ref={isSelected ? minuteRef : undefined}\n onClick={() => onChangeWrapper(newDate => newDate.setMinutes(minute))}\n >\n {minute.toString().padStart(2, '0')}\n </Button>\n )\n })}\n </div>\n {!is24HourFormat && (\n <div data-name=\"time-picker-value-column\">\n <Button\n size=\"sm\"\n color={!isPM ? 'primary' : 'neutral'}\n onClick={() => onChangeWrapper(newDate => isPM && newDate.setHours(newDate.getHours() - 12))}\n >\n AM\n </Button>\n <Button\n size=\"sm\"\n color={isPM ? 'primary' : 'neutral'}\n onClick={() => onChangeWrapper(newDate => !isPM && newDate.setHours(newDate.getHours() + 12))}\n >\n PM\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nexport const TimePickerUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...props\n}: TimePickerProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <TimePicker\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}\n","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype TimeDisplayMode = 'daysFromToday' | 'date'\n\ntype TimeDisplayProps = {\n date: Date,\n mode?: TimeDisplayMode,\n}\n\n/**\n * A Component for displaying time and dates in a unified fashion\n */\nexport const TimeDisplay = ({\n date,\n mode = 'daysFromToday'\n}: TimeDisplayProps) => {\n const translation = useHightideTranslation()\n const difference = new Date().setHours(0, 0, 0, 0).valueOf() - new Date(date).setHours(0, 0, 0, 0).valueOf()\n const isBefore = difference > 0\n const differenceInDays = Math.floor(Math.abs(difference) / (1000 * 3600 * 24))\n\n let displayString\n if (differenceInDays === 0) {\n displayString = translation('time.today')\n } else if (differenceInDays === 1) {\n displayString = isBefore ? translation('time.yesterday') : translation('time.tomorrow')\n } else {\n displayString = isBefore ? translation('time.agoDays', { days: differenceInDays }) : translation('time.inDays', { days: differenceInDays })\n }\n const monthToTranslation: { [key: number]: string } = {\n 0: translation('time.january'),\n 1: translation('time.february'),\n 2: translation('time.march'),\n 3: translation('time.april'),\n 4: translation('time.may'),\n 5: translation('time.june'),\n 6: translation('time.july'),\n 7: translation('time.august'),\n 8: translation('time.september'),\n 9: translation('time.october'),\n 10: translation('time.november'),\n 11: translation('time.december')\n } as const\n\n let fullString\n if (mode === 'daysFromToday') {\n fullString = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')} - ${displayString}`\n } else {\n fullString = `${date.getDate()}. ${monthToTranslation[date.getMonth()]} ${date.getFullYear()}`\n }\n\n return (<span>{fullString}</span>)\n}\n","import type { HTMLAttributes } from 'react'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { CalendarIcon } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\nimport { useLocale } from '@/src/contexts/LocaleContext'\nimport { useOutsideClick } from '@/src/hooks/useOutsideClick'\nimport type { DateTimePickerProps } from '@/src/components/user-interaction/date/DateTimePicker'\nimport { DateTimePicker } from '@/src/components/user-interaction/date/DateTimePicker'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { DateUtils } from '@/src/utils/date'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useFloatingElement } from '@/src/hooks/useFloatingElement'\nimport type { FormFieldDataHandling } from '../../form/FormField'\n\nexport type DateTimeInputProps = Omit<InputProps, keyof FormFieldDataHandling<string>>\n& Partial<FormFieldDataHandling<Date>>\n& {\n onRemove?: () => void,\n // TODO allow mode = time\n mode?: 'date' | 'dateTime',\n containerProps?: HTMLAttributes<HTMLDivElement>,\n pickerProps?: Omit<DateTimePickerProps, keyof FormFieldDataHandling<Date> | 'mode'>,\n}\n\nexport const DateTimeInput = ({\n value,\n onValueChange,\n onEditComplete,\n onRemove,\n containerProps,\n mode = 'date',\n pickerProps,\n ...props\n}: DateTimeInputProps) => {\n const translation = useHightideTranslation()\n const { locale } = useLocale()\n const [isOpen, setIsOpen] = useState(false)\n\n const anchorRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const position = useFloatingElement({\n active: isOpen,\n anchorRef,\n containerRef,\n verticalAlignment: 'afterEnd',\n horizontalAlignment: 'afterStart',\n gap: 4,\n })\n\n useOutsideClick([containerRef, anchorRef], () => {\n setIsOpen(false)\n onEditComplete(value)\n })\n\n const { zIndex } = useOverlayRegistry({ isActive: isOpen })\n\n const isReadOnly = useMemo(() => props.readOnly || props.disabled, [props.readOnly, props.disabled])\n\n useEffect(() => {\n if (isReadOnly) {\n setIsOpen(false)\n }\n }, [isReadOnly])\n\n return (\n <>\n <div {...containerProps} ref={anchorRef} className={clsx('relative w-full', containerProps?.className)}>\n <Input\n {...props}\n placeholder={translation('clickToSelect')}\n value={value ? DateUtils.formatAbsolute(value, locale, mode === 'dateTime') : ''}\n onClick={(event) => {\n setIsOpen(true)\n props.onClick?.(event)\n }}\n readOnly={true}\n className={clsx(\n 'pr-10 w-full',\n { 'hover:cursor-pointer': !isReadOnly },\n props.className\n )}\n />\n <Button\n coloringStyle=\"text\" layout=\"icon\" color=\"neutral\" size=\"sm\"\n className=\"absolute right-1 top-1/2 -translate-y-1/2\"\n disabled={isReadOnly}\n onClick={() => setIsOpen(prevState => !prevState)}\n >\n <CalendarIcon className=\"size-5\"/>\n </Button>\n </div>\n <Visibility isVisible={isOpen}>\n {createPortal(\n <div\n ref={containerRef}\n className=\"fixed flex-col-3 rounded-lg shadow-xl border bg-surface-variant text-on-surface border-divider p-2\"\n style={{\n ...position,\n zIndex,\n opacity: position ? undefined : 0,\n }}\n >\n <DateTimePicker\n {...pickerProps}\n mode={mode}\n value={value}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n />\n <div className=\"flex-row-2 justify-end\">\n <Visibility isVisible={!!onRemove && !!value}>\n <Button\n size=\"md\"\n color=\"negative\"\n onClick={() => {\n onRemove?.()\n setIsOpen(false)\n }}\n className=\"min-w-26\"\n >\n {translation('clear')}\n </Button>\n </Visibility>\n <Visibility isVisible={!value}>\n <Button\n size=\"md\"\n color=\"neutral\"\n onClick={() => setIsOpen(false)}\n className=\"min-w-26\"\n >\n {translation('cancel')}\n </Button>\n </Visibility>\n <Button\n size=\"md\"\n onClick={() => {\n onEditComplete?.(value)\n setIsOpen(false)\n }}\n className=\"min-w-26\"\n >\n {translation('done')}\n </Button>\n </div>\n </div>,\n document.body\n )}\n </Visibility>\n </>\n )\n}\n\nexport const DateTimeInputUncontrolled = ({\n value: initialValue,\n ...props\n}: DateTimeInputProps) => {\n const [value, setValue] = useOverwritableState<Date | undefined>(initialValue)\n\n return (\n <DateTimeInput\n {...props}\n value={value}\n onValueChange={(newDate) => {\n setValue(newDate)\n props.onValueChange?.(newDate)\n }}\n onRemove={() => {\n setValue(undefined)\n props.onRemove?.()\n }}\n />\n )\n}\n","import type { ReactNode } from 'react'\nimport { useId } from 'react'\nimport { forwardRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\ntype InsideLabelInputProps = Omit<InputProps, 'aria-label' | 'aria-labelledby' | 'placeholder'> & {\n label: ReactNode,\n}\n\n/**\n * Text input component with a label inside the input that moves up when editing\n *\n * The State is managed by the parent\n */\nexport const InsideLabelInput = forwardRef<HTMLInputElement, InsideLabelInputProps>(function InsideLabelInput({\n id: customId,\n label,\n ...props\n}, forwardedRef) {\n const { value } = props\n const [isFocused, setIsFocused] = useState(false)\n const generatedId = useId()\n const id = customId ?? generatedId\n\n return (\n <div className={clsx('relative')}>\n <Input\n {...props}\n id={id}\n className={clsx('h-14 px-4 pb-2 py-6.5', props.className)}\n ref={forwardedRef}\n aria-labelledby={id+ '-label'}\n onFocus={event => {\n props.onFocus?.(event)\n setIsFocused(true)\n }}\n onBlur={event => {\n props.onBlur?.(event)\n setIsFocused(false)\n }}\n />\n <label\n id={id+ '-label'}\n aria-hidden={true}\n data-display={isFocused || !!value ? 'small' : 'full'}\n className={clsx(\n // margin left to account for the border which is ignored for absolute positions\n 'absolute left-4 ml-0.5 top-2 transition-all delay-25 pointer-events-none touch-none',\n 'data-[display=small]:top-2 data-[display=small]:h-force-4.5 data-[display=small]:typography-caption-sm data-[display=small]:overflow-y-hidden',\n 'data-[display=full]:top-1/2 data-[display=full]:-translate-y-1/2 data-[display=full]:typography-body-md'\n )}\n >\n {label}\n </label>\n </div>\n )\n})\n\nexport const InsideLabelInputUncontrolled = ({\n value: initialValue,\n ...props\n}: InsideLabelInputProps) => {\n const [value, setValue] = useOverwritableState(initialValue, props.onValueChange)\n\n return (\n <InsideLabelInput\n {...props}\n value={value}\n onValueChange={setValue}\n />\n )\n}\n","import type { InputProps } from './Input'\nimport { InputUncontrolled } from './Input'\nimport { Search } from 'lucide-react'\nimport { clsx } from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { ButtonProps } from '@/src/components/user-interaction/Button'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { HTMLAttributes } from 'react'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\nexport type SearchBarProps = Omit<InputProps, 'onValueChange' | 'onEditComplete'> & {\n onValueChange?: (value: string) => void,\n onSearch: (value: string) => void,\n searchButtonProps?: Omit<ButtonProps, 'onClick'>,\n containerProps?: HTMLAttributes<HTMLDivElement>,\n}\n\nexport const SearchBar = ({\n value: initialValue,\n onSearch,\n onValueChange,\n searchButtonProps,\n containerProps,\n ...inputProps\n}: SearchBarProps) => {\n const translation = useHightideTranslation()\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <div {...containerProps} className={clsx('relative', containerProps?.className)}>\n <InputUncontrolled\n {...inputProps}\n value={value}\n onValueChange={setValue}\n onEditComplete={onSearch}\n placeholder={inputProps.placeholder ?? translation('search')}\n // TODO use data-name=\"searchbar\" and move styling to css\n className={clsx('pr-10 w-full', inputProps.className)}\n />\n <Button\n {...searchButtonProps}\n size=\"sm\"\n layout=\"icon\"\n color=\"neutral\"\n coloringStyle=\"text\"\n onClick={() => onSearch(value)}\n className={clsx('absolute right-1 top-1/2 -translate-y-1/2', searchButtonProps?.className)}\n >\n <Search className=\"w-full h-full\"/>\n </Button>\n </div>\n )\n}","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport { Pencil } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { EditCompleteOptions, InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useOverwritableState } from '@/src/hooks/useOverwritableState'\n\ntype ToggleableInputProps = InputProps & {\n initialState?: 'editing' | 'display',\n editCompleteOptions?: Omit<EditCompleteOptions, 'allowEnterComplete'>,\n}\n\n/**\n * A Text input component for inputting text. It changes appearance upon entering the edit mode and switches\n * back to display mode on loss of focus or on enter\n *\n * The State is managed by the parent\n */\nexport const ToggleableInput = forwardRef<HTMLInputElement, ToggleableInputProps>(function ToggleableInput({\n value,\n initialState = 'display',\n editCompleteOptions,\n ...props\n}, forwardedRef) {\n const [isEditing, setIsEditing] = useState(initialState !== 'display')\n\n const innerRef = useRef<HTMLInputElement>(null)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n useEffect(() => {\n if (isEditing) {\n innerRef.current?.focus()\n }\n }, [isEditing])\n\n return (\n <div className={clsx('relative flex-row-2', { 'flex-1': isEditing })}>\n <Input\n {...props}\n ref={innerRef}\n value={value}\n onEditComplete={(text) => {\n props.onEditComplete?.(text)\n setIsEditing(false)\n }}\n onFocus={event => {\n props.onFocus?.(event)\n setIsEditing(true)\n event.target.select()\n }}\n editCompleteOptions={{\n ...editCompleteOptions,\n allowEnterComplete: true\n }}\n\n data-name={props['data-name'] ?? 'togglable-input'}\n data-isEditing={isEditing ? '' : undefined}\n // TODO move to component config\n className={clsx(`w-full rounded-md`, {\n 'text-transparent': !isEditing,\n })}\n />\n {!isEditing && (\n <div className=\"absolute left-0 flex-row-2 items-center pointer-events-none touch-none w-full overflow-hidden\">\n <span className={clsx(' truncate')}>\n {value}\n </span>\n <Pencil className={clsx(`size-force-4`, { 'text-transparent': isEditing })} />\n </div>\n )}\n </div>\n )\n})\n\nexport const ToggleableInputUncontrolled = ({\n value: initialValue,\n onValueChange,\n ...restProps\n}: ToggleableInputProps) => {\n const [value, setValue] = useOverwritableState(initialValue, onValueChange)\n\n return (\n <ToggleableInput\n value={value}\n onValueChange={setValue}\n {...restProps}\n />\n )\n}\n","import { Check } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from './PropertyBase'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '@/src/components/user-interaction/Button'\n\n\nexport type CheckboxPropertyProps = PropertyField<boolean>\n\n/**\n * An Input component for a boolean values\n */\nexport const CheckboxProperty = ({\n value,\n onValueChange,\n onEditComplete,\n readOnly,\n ...baseProps\n}: CheckboxPropertyProps) => {\n const translation = useHightideTranslation()\n\n return (\n <PropertyBase\n {...baseProps}\n hasValue={value !== undefined}\n readOnly={readOnly}\n icon={<Check size={24}/>}\n >\n {() => (\n <div className=\"flex-row-2 items-center\">\n <Button\n color={value ? 'positive' : 'neutral'} size=\"sm\"\n onClick={() => {\n onValueChange(true)\n onEditComplete(true)\n }}\n className=\"min-w-20\"\n >\n {translation('yes')}\n </Button>\n <Button\n color={!value && value !== undefined ? 'negative' : 'neutral'} size=\"sm\"\n onClick={() => {\n onValueChange(false)\n onEditComplete(false)\n }}\n className=\"min-w-20\"\n >\n {translation('no')}\n </Button>\n </div>\n )}\n </PropertyBase>\n )\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle, Trash, X } from 'lucide-react'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Tooltip } from '../Tooltip'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type PropertyField<T> = {\n name: string,\n required?: boolean,\n readOnly?: boolean,\n allowClear?: boolean,\n value?: T,\n onRemove?: () => void,\n onValueClear?: () => void,\n onValueChange?: (value: T) => void,\n onEditComplete?: (value: T) => void,\n}\n\n\nexport type PropertyBaseProps = {\n children: (props: { required: boolean, hasValue: boolean, invalid: boolean }) => ReactNode,\n name: string,\n required?: boolean,\n readOnly?: boolean,\n allowClear?: boolean,\n allowRemove?: boolean,\n hasValue: boolean,\n onRemove?: () => void,\n onValueClear?: () => void,\n icon?: ReactNode,\n className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n name,\n children,\n required = false,\n hasValue,\n icon,\n readOnly,\n allowClear = true,\n allowRemove = true,\n onRemove,\n onValueClear,\n className,\n}: PropertyBaseProps) => {\n const translation = useHightideTranslation()\n const invalid = required && !hasValue\n\n const isClearEnabled = allowClear && !readOnly\n const isRemoveEnabled = allowRemove && !readOnly\n const showActionsContainer = isClearEnabled || isRemoveEnabled\n\n return (\n <div\n className={className ? `group/property ${className}` : 'group/property'}\n data-name=\"property-root\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <div\n className={className}\n data-name=\"property-title\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <Tooltip tooltip={name} containerClassName=\"min-w-0\">\n <div className=\"flex-row-1 items-center\">\n <div data-name=\"property-title-icon\">{icon}</div>\n <span data-name=\"property-title-text\">{name}</span>\n </div>\n </Tooltip>\n {invalid && (\n <AlertTriangle className=\"size-force-6\"/>\n )}\n </div>\n <div\n className={className}\n data-name=\"property-content\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n {children({ required, hasValue, invalid })}\n {showActionsContainer && (\n <div data-name=\"property-actions\">\n {isClearEnabled && (\n <Tooltip tooltip={translation('clearValue')}>\n <Button\n onClick={onValueClear}\n disabled={!hasValue}\n color=\"negative\"\n coloringStyle=\"text\"\n layout=\"icon\"\n size=\"sm\"\n >\n <X className=\"size-force-5\" />\n </Button>\n </Tooltip>\n )}\n {isRemoveEnabled && (\n <Tooltip tooltip={translation('removeProperty')}>\n <Button\n onClick={onRemove}\n color=\"negative\"\n coloringStyle=\"text\"\n layout=\"icon\"\n size=\"sm\"\n >\n <Trash className=\"size-force-5\" />\n </Button>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { CalendarDays } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from './PropertyBase'\nimport { DateTimeInput } from '../input/DateTimeInput'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type DatePropertyProps = PropertyField<Date>\n& {\n type?: 'dateTime' | 'date',\n}\n\n/**\n * An Input for date properties\n */\nexport const DateProperty = ({\n value,\n onValueChange,\n onEditComplete,\n readOnly,\n type = 'dateTime',\n ...baseProps\n}: DatePropertyProps) => {\n const hasValue = !!value\n\n return (\n <PropertyBase\n {...baseProps}\n hasValue={hasValue}\n icon={<CalendarDays size={24}/>}\n >\n {({ invalid }) => (\n <DateTimeInput\n value={value}\n mode={type}\n readOnly={readOnly}\n onValueChange={onValueChange}\n onEditComplete={onEditComplete}\n data-name=\"property-input\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n />\n )}\n </PropertyBase>\n )\n}\n","import { List } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { MultiSelectChipDisplay } from '@/src/components/user-interaction/Select'\nimport type { PropsWithChildren } from 'react'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type MultiSelectPropertyProps = PropertyField<string[]> & PropsWithChildren\n/**\n * An Input for MultiSelect properties\n */\nexport const MultiSelectProperty = ({\n children,\n value,\n onValueChange,\n onEditComplete,\n ...props\n}: MultiSelectPropertyProps) => {\n const hasValue = value.length > 0\n\n return (\n <PropertyBase\n {...props}\n hasValue={hasValue}\n icon={<List size={24}/>}\n >\n {({ invalid }) => (\n <div\n data-name=\"property-input-wrapper\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <MultiSelectChipDisplay\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value)\n onEditComplete?.(value)\n }}\n disabled={props.readOnly}\n contentPanelProps={{\n className: '!border-none !min-h-10'\n }}\n chipDisplayProps={{\n className: 'flex flex-wrap gap-x-2 gap-y-2 p-0 items-center hover:cursor-pointer border-0',\n }}\n >\n {children}\n </MultiSelectChipDisplay>\n </div>\n )}\n </PropertyBase>\n )\n}\n","import { Binary } from 'lucide-react'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { PropertyField } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type NumberPropertyProps = PropertyField<number>\n& { suffix?: string }\n\n/**\n * An Input for number properties\n */\nexport const NumberProperty = ({\n value,\n onRemove,\n onValueChange,\n onEditComplete,\n readOnly,\n suffix,\n ...baseProps\n}: NumberPropertyProps) => {\n const translation = useHightideTranslation()\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Binary size={24}/>}\n >\n {({ invalid }) => (\n <div\n data-name=\"property-input-wrapper\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <Input\n className=\"w-full pr-8\"\n data-name=\"property-input\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n value={value?.toString() ?? ''}\n type=\"number\"\n readOnly={readOnly}\n placeholder={translation('value')}\n onValueChange={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onValueChange?.(numberValue)\n }\n }}\n onEditComplete={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onEditComplete?.(numberValue)\n }\n }}\n />\n {suffix && (\n <span\n data-name=\"property-suffix\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n {suffix}\n </span>\n )}\n </div>\n )}\n </PropertyBase>\n )\n}\n","import { List } from 'lucide-react'\nimport type { PropsWithChildren } from 'react'\nimport type { PropertyField } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { PropertyBase } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { Select } from '@/src/components/user-interaction/Select'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type SingleSelectPropertyProps = PropertyField<string> & PropsWithChildren\n\n/**\n * An Input for SingleSelect properties\n */\nexport const SingleSelectProperty = ({\n children,\n value,\n onValueChange,\n onEditComplete,\n ...props\n}: SingleSelectPropertyProps) => {\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...props}\n hasValue={hasValue}\n icon={<List size={24}/>}\n >\n {({ invalid }) => (\n <div\n data-name=\"property-input-wrapper\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n >\n <Select\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value)\n onEditComplete?.(value)\n }}\n disabled={props.readOnly}\n buttonProps={{\n className: 'flex-row-2 w-full items-center justify-between p-1 border-0',\n }}\n >\n {children}\n </Select>\n </div>\n )}\n </PropertyBase>\n )\n}\n","import { Text } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Textarea } from '@/src/components/user-interaction/Textarea'\nimport type { PropertyField } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type TextPropertyProps = PropertyField<string>\n\n/**\n * An Input for Text properties\n */\nexport const TextProperty = ({\n value,\n readOnly,\n onRemove,\n onValueChange,\n onEditComplete,\n ...baseProps\n}: TextPropertyProps) => {\n const translation = useHightideTranslation()\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Text size={24}/>}\n >\n {({ invalid }) => (\n <Textarea\n className=\"w-full\"\n data-name=\"property-input\"\n data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n rows={5}\n value={value ?? ''}\n readOnly={readOnly}\n placeholder={translation('text')}\n onValueChange={(value) => {\n if (!value) {\n onRemove?.()\n } else {\n onValueChange?.(value)\n }\n }}\n onEditComplete={(value) => {\n if (!value) {\n onRemove?.()\n } else {\n onEditComplete?.(value)\n }\n }}\n />\n )}\n </PropertyBase>\n )\n}\n","'use client'\n\nimport type { HTMLAttributes, RefObject } from 'react'\nimport { useRef } from 'react'\nimport { useImperativeHandle } from 'react'\nimport { forwardRef } from 'react'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\n\nexport type FocusTrapProps = HTMLAttributes<HTMLDivElement> & {\n active?: boolean,\n initialFocus?: RefObject<HTMLElement | null>,\n /**\n * Whether to focus the first element when the initialFocus isn't provided\n *\n * Focuses the container instead\n */\n focusFirst?: boolean,\n}\n\n/**\n * A wrapper for the useFocusTrap hook that directly renders it to a div\n */\nexport const FocusTrap = forwardRef<HTMLDivElement, FocusTrapProps>(function FocusTrap({\n active = true,\n initialFocus,\n focusFirst = false,\n ...props\n}, forwardedRef) {\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n useFocusTrap({ container: innerRef, active, initialFocus, focusFirst })\n\n return (\n <div ref={innerRef} {...props}/>\n )\n})","import { useEffect, useState } from 'react'\nimport type { PropsWithBagFunctionOrChildren } from '@/src/utils/bagFunctions'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\n\ntype TransitionBag = {\n isOpen: boolean,\n isTransitioning: boolean,\n isUsingReducedMotion: boolean,\n data: { [key: `data-${string}`]: string | undefined },\n handlers: {\n onTransitionEnd?: () => void,\n onAnimationEnd?: () => void,\n onTransitionCancel?: () => void,\n },\n}\n\nexport type TransitionWrapperProps = PropsWithBagFunctionOrChildren<TransitionBag> & {\n show: boolean,\n includeAnimation?: boolean,\n}\n\n/**\n * Only use when you have a transition happening\n */\nexport function Transition({\n children,\n show,\n includeAnimation = true,\n}: TransitionWrapperProps) {\n const [isOpen, setIsOpen] = useState<boolean>(show)\n const [isTransitioning, setIsTransitioning] = useState<boolean>(!isOpen)\n\n const isUsingReducedMotion = typeof window !== 'undefined' && typeof window.matchMedia === 'function' ?\n window.matchMedia('(prefers-reduced-motion: reduce)').matches : true\n\n useEffect(() => {\n setIsOpen(show)\n setIsTransitioning(true)\n }, [show])\n\n const onAnimationEnd = () => setIsTransitioning(false)\n\n const bag: TransitionBag = {\n isOpen,\n isTransitioning,\n isUsingReducedMotion,\n data: {\n 'data-open': (isOpen && !isTransitioning) ? '' : undefined,\n 'data-opening': (isOpen && isTransitioning) ? '' : undefined,\n 'data-closing': (!isOpen && isTransitioning) ? '' : undefined,\n 'data-closed': (!isOpen && !isTransitioning) ? '' : undefined,\n },\n handlers: {\n onTransitionEnd: () => setIsTransitioning(false),\n onTransitionCancel: () => setIsTransitioning(false),\n onAnimationEnd: includeAnimation ? onAnimationEnd : undefined,\n }\n }\n\n return BagFunctionUtil.resolve(children, bag)\n}","import type { PropsWithChildren } from 'react'\nimport type { HightideConfigProviderProps } from '@/src/contexts/HightideConfigContext'\nimport { HightideConfigProvider } from '@/src/contexts/HightideConfigContext'\nimport type { LocaleProviderProps } from '@/src/contexts/LocaleContext'\nimport { LocaleProvider } from '@/src/contexts/LocaleContext'\nimport type { ThemeProviderProps } from '@/src/contexts/ThemeContext'\nimport { ThemeProvider } from '@/src/contexts/ThemeContext'\n\ntype HightideProviderProps = PropsWithChildren & {\n theme?: Omit<ThemeProviderProps, 'children'>,\n locale?: Omit<LocaleProviderProps, 'children'>,\n config?: Omit<HightideConfigProviderProps, 'children'>,\n}\n\nexport const HightideProvider = ({\n children,\n theme,\n locale,\n config,\n}: HightideProviderProps) => {\n return (\n <LocaleProvider {...locale}>\n <ThemeProvider {...theme}>\n <HightideConfigProvider {...config}>\n {children}\n </HightideConfigProvider>\n </ThemeProvider>\n </LocaleProvider>\n )\n}\n","import { useEffect } from 'react'\n\nconst selectorName = 'data-hw-focus-guard'\n\nfunction FocusGuard() {\n const element = document.createElement('div')\n element.setAttribute(selectorName, '')\n element.tabIndex = 0\n element.style.border = 'none'\n element.style.outline = 'none'\n element.style.boxShadow = 'none'\n element.style.opacity = '0'\n element.style.position = 'fixed'\n element.style.pointerEvents = 'none'\n return element\n}\n\nclass FocusGuardsService {\n private count: number = 0\n\n private static instance: FocusGuardsService\n\n private constructor() {}\n\n static getInstance(): FocusGuardsService {\n if (!FocusGuardsService.instance) {\n FocusGuardsService.instance = new FocusGuardsService()\n }\n return FocusGuardsService.instance\n }\n\n add() {\n const edgeGuards = document.querySelectorAll(`[${selectorName}]`)\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? FocusGuard())\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? FocusGuard())\n this.count++\n }\n\n remove() {\n if (this.count === 1) {\n document.querySelectorAll(`[${selectorName}]`)\n .forEach((node) => node.remove())\n }\n this.count--\n }\n}\n\nexport const useFocusGuards = () => {\n useEffect(() => {\n FocusGuardsService.getInstance().add()\n return () => {\n FocusGuardsService.getInstance().remove()\n }\n }, [])\n}","import type { RefObject } from 'react'\nimport React, { useEffect } from 'react'\n\nexport const useFocusOnceVisible = (\n ref: RefObject<HTMLElement>,\n disable: boolean = false\n) => {\n const [hasUsedFocus, setHasUsedFocus] = React.useState(false)\n\n useEffect(() => {\n if (disable || hasUsedFocus) {\n return\n }\n const observer = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting && !hasUsedFocus) {\n ref.current?.focus()\n setHasUsedFocus(hasUsedFocus)\n }\n }, {\n threshold: 0.1,\n })\n\n if (ref.current) {\n observer.observe(ref.current)\n }\n\n return () => observer.disconnect()\n }, [disable, hasUsedFocus, ref])\n}","import { useReducer } from 'react'\n\nexport const useRerender = () => {\n return useReducer(() => ({}), {})[1]\n}","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { MultiSubjectSearchWithMapping } from '@/src/utils/simpleSearch'\n\nexport type UseSearchProps<T> = {\n list: T[],\n searchMapping: (item: T) => string[],\n initialSearch?: string,\n additionalSearchTags?: string[],\n isSearchInstant?: boolean,\n sortingFunction?: (a: T, b: T) => number,\n filter?: (item: T) => boolean,\n disabled?: boolean,\n}\n\nexport const useSearch = <T>({\n list,\n initialSearch,\n searchMapping,\n additionalSearchTags,\n isSearchInstant = true,\n sortingFunction,\n filter,\n disabled = false,\n}: UseSearchProps<T>) => {\n const [search, setSearch] = useState<string>(initialSearch ?? '')\n const [result, setResult] = useState<T[]>(list)\n const searchTags = useMemo(() => additionalSearchTags ?? [], [additionalSearchTags])\n\n const updateSearch = useCallback((newSearch?: string) => {\n const usedSearch = newSearch ?? search\n if (newSearch) {\n setSearch(search)\n }\n setResult(MultiSubjectSearchWithMapping([usedSearch, ...searchTags], list, searchMapping))\n }, [searchTags, list, search, searchMapping])\n\n useEffect(() => {\n if (isSearchInstant) {\n setResult(MultiSubjectSearchWithMapping([search, ...searchTags], list, searchMapping))\n }\n }, [searchTags, isSearchInstant, list, search, searchMapping, additionalSearchTags])\n\n const filteredResult: T[] = useMemo(() => {\n if (!filter) {\n return result\n }\n return result.filter(filter)\n }, [result, filter])\n\n const sortedAndFilteredResult: T[] = useMemo(() => {\n if (!sortingFunction) {\n return filteredResult\n }\n return filteredResult.sort(sortingFunction)\n }, [filteredResult, sortingFunction])\n\n const usedResult = useMemo(() => {\n if (!disabled) {\n return sortedAndFilteredResult\n }\n return list\n }, [disabled, list, sortedAndFilteredResult])\n\n return {\n result: usedResult,\n hasResult: usedResult.length > 0,\n allItems: list,\n updateSearch,\n search,\n setSearch,\n }\n}","/**\n * Finds all values matching the search values by first mapping the values to a string array and then checking each entry for matches.\n * Returns the list of all matches.\n *\n * @param search The list of search strings e.g. `[name, type]`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to the string properties they fulfil\n *\n * @return The list of objects that match all search strings\n */\nexport const MultiSubjectSearchWithMapping = <T>(search: string[], objects: T[], mapping: (value: T) => (string[] | undefined)) => {\n return objects.filter(object => {\n const mappedSearchKeywords = mapping(object)?.map(value => value.toLowerCase().trim())\n if(!mappedSearchKeywords) {\n return true\n }\n return search.every(searchValue => !!mappedSearchKeywords.find(value => !!value && value.includes(searchValue.toLowerCase().trim())))\n })\n}\n\n/**\n * Finds all values matching the search value by first mapping the values to a string array and then checking each entry for matches.\n * Returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to the string properties they fulfil, if undefined it is always fulfilled\n *\n * @return The list of objects that match the search string\n */\nexport const MultiSearchWithMapping = <T>(search: string, objects: T[], mapping: (value: T) => (string[] | undefined)) => {\n return objects.filter(object => {\n const mappedSearchKeywords = mapping(object)?.map(value => value.toLowerCase().trim())\n if(!mappedSearchKeywords) {\n return true\n }\n return !!mappedSearchKeywords.find(value => value.includes(search.toLowerCase().trim()))\n })\n}\n\n/**\n * Finds all values matching the search value by first mapping the values to a string and returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to a string that is compared to the search\n *\n * @return The list of objects that match the search string\n */\nexport const SimpleSearchWithMapping = <T>(search: string, objects: T[], mapping: (value: T) => string) => {\n return MultiSearchWithMapping(search, objects, value => [mapping(value)])\n}\n\n/**\n * Finds all values matching the search value and returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @return The list of objects that match the search string\n */\nexport const SimpleSearch = (search: string, objects: string[]) => {\n return SimpleSearchWithMapping(search, objects, value => value)\n}\n","export const validateEmail = (email: string): boolean => {\n return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(email)\n}\n","import { validateEmail } from '@/src/utils/emailValidation'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useMemo } from 'react'\n\nexport type ValidatorError =\n 'notEmpty'\n | 'invalidEmail'\n | 'tooLong'\n | 'tooShort'\n | 'outOfRangeString'\n | 'outOfRangeNumber'\n | 'outOfRangeSelectionItems'\n | 'tooFewSelectionItems'\n | 'tooManySelectionItems'\nexport type ValidatorResult = ValidatorError | undefined\n\nconst notEmpty = (value: unknown): ValidatorResult => {\n if (!value) {\n return 'notEmpty'\n }\n}\n\ntype BoundsValidatorResult = 'lower' | 'upper' | 'range' | 'none'\nconst boundsValidator = (length: number | undefined, bounds: [number | undefined, number | undefined]): BoundsValidatorResult => {\n const [min, max] = bounds\n\n if (min !== undefined && max !== undefined && (length === undefined || length < min || length > max)) {\n return 'range'\n }\n\n if (min !== undefined && (length === undefined || length < min)) {\n return 'lower'\n }\n\n if (max !== undefined && length !== undefined && length > max) {\n return 'upper'\n }\n\n return 'none'\n}\n\nconst lengthValidator = (value: string | undefined, bounds: [number | undefined, number | undefined]): ValidatorResult => {\n const mapping: Record<BoundsValidatorResult, ValidatorResult> = {\n range: 'outOfRangeString',\n lower: 'tooShort',\n upper: 'tooLong',\n none: undefined\n }\n return mapping[boundsValidator(value?.length, bounds)]\n}\n\nconst selectionValidator = (value: unknown[], bounds: [number | undefined, number | undefined]): ValidatorResult => {\n const mapping: Record<BoundsValidatorResult, ValidatorResult> = {\n range: 'outOfRangeSelectionItems',\n lower: 'tooFewSelectionItems',\n upper: 'tooManySelectionItems',\n none: undefined\n }\n return mapping[boundsValidator(value?.length, bounds)]\n}\n\nconst emailValidator = (value: string | undefined) => {\n if (!value || !validateEmail(value)) {\n return 'invalidEmail'\n }\n}\n\n\nexport const UseValidators = {\n notEmpty: notEmpty,\n length: lengthValidator,\n email: emailValidator,\n selection: selectionValidator,\n}\n\nexport const useTranslatedValidators = () => {\n const translation = useHightideTranslation()\n\n return useMemo(() => ({\n notEmpty: (value: unknown) => {\n const result = notEmpty(value)\n if (result) {\n return translation(result)\n }\n },\n length: (value: string | undefined, length: [number | undefined, number | undefined]) => {\n const [min, max] = length\n const result = lengthValidator(value, length)\n if (result) {\n return translation(result as 'outOfRangeString' | 'tooShort' | 'tooLong', { min, max })\n }\n },\n email: (value: string | undefined) => {\n const result = emailValidator(value ?? '')\n if (result) {\n return translation(result as 'invalidEmail')\n }\n },\n selection: (value: unknown[] | undefined, length: [number | undefined, number | undefined]) => {\n const [min, max] = length\n const result = selectionValidator(value, length)\n if (result) {\n return translation(result as\n 'outOfRangeSelectionItems' | 'tooFewSelectionItems' | 'tooManySelectionItems',\n { min, max })\n }\n }\n }), [translation])\n}","/**\n * A simple function that implements the builder pattern\n * @param value The value to update which gets return with the same reference\n * @param update The updates to apply on the object\n */\nexport const builder = <T>(value: T, update: (value: T) => void): T => {\n update(value)\n return value\n}\n","export type DurationJSON = {\n years: number,\n months: number,\n days: number,\n hours: number,\n minutes: number,\n seconds: number,\n milliseconds: number,\n}\n\nexport class Duration {\n readonly years: number\n readonly months: number\n readonly days: number\n readonly hours: number\n readonly minutes: number\n readonly seconds: number\n readonly milliseconds: number\n\n constructor({\n years = 0,\n months = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n milliseconds = 0,\n }: Partial<DurationJSON> = {}) {\n this.assertRanges({ years, months, days, hours, minutes, seconds, milliseconds })\n\n this.years = years\n this.months = months\n this.days = days\n this.hours = hours\n this.minutes = minutes\n this.seconds = seconds\n this.milliseconds = milliseconds\n }\n\n /** Date arithmetic */\n addTo(date: Date): Date {\n return this.applyTo(date, 1)\n }\n\n subtractFrom(date: Date): Date {\n return this.applyTo(date, -1)\n }\n\n /** Duration arithmetic */\n add(other: Duration): Duration {\n return new Duration({\n years: this.years + other.years,\n months: this.months + other.months,\n days: this.days + other.days,\n hours: this.hours + other.hours,\n minutes: this.minutes + other.minutes,\n seconds: this.seconds + other.seconds,\n milliseconds: this.milliseconds + other.milliseconds,\n })\n }\n\n subtract(other: Duration): Duration {\n return new Duration({\n years: this.years - other.years,\n months: this.months - other.months,\n days: this.days - other.days,\n hours: this.hours - other.hours,\n minutes: this.minutes - other.minutes,\n seconds: this.seconds - other.seconds,\n milliseconds: this.milliseconds - other.milliseconds,\n })\n }\n\n equals(other: Duration): boolean {\n return (\n this.years === other.years &&\n this.months === other.months &&\n this.days === other.days &&\n this.hours === other.hours &&\n this.minutes === other.minutes &&\n this.seconds === other.seconds &&\n this.milliseconds === other.milliseconds\n )\n }\n\n toJSON(): DurationJSON {\n return { ...this }\n }\n\n /** Static difference */\n static difference(start: Date, end: Date): Duration {\n const diff = end.getTime() - start.getTime()\n\n const ms = 1000\n const min = 60 * ms\n const hr = 60 * min\n const day = 24 * hr\n const month = 30 * day\n const year = 365.25 * day\n\n return new Duration({\n years: Math.floor(diff / year),\n months: Math.floor(diff / month),\n days: Math.floor(diff / day),\n hours: Math.floor((diff % day) / hr),\n minutes: Math.floor((diff % hr) / min),\n seconds: Math.floor((diff % min) / ms),\n milliseconds: diff % ms,\n })\n }\n\n private applyTo(date: Date, multiplier: 1 | -1): Date {\n const d = new Date(date)\n\n d.setFullYear(d.getFullYear() + multiplier * this.years)\n d.setMonth(d.getMonth() + multiplier * this.months)\n d.setDate(d.getDate() + multiplier * this.days)\n d.setHours(d.getHours() + multiplier * this.hours)\n d.setMinutes(d.getMinutes() + multiplier * this.minutes)\n d.setSeconds(d.getSeconds() + multiplier * this.seconds)\n d.setMilliseconds(d.getMilliseconds() + multiplier * this.milliseconds)\n\n return d\n }\n\n private assertRanges(d: DurationJSON): void {\n if (d.years < 0) throw new RangeError('years >= 0')\n if (d.months < 0 || d.months > 11) throw new RangeError('months: 0–11')\n if (d.days < 0) throw new RangeError('days >= 0')\n if (d.hours < 0 || d.hours > 23) throw new RangeError('hours: 0–23')\n if (d.minutes < 0 || d.minutes > 59) throw new RangeError('minutes: 0–59')\n if (d.seconds < 0 || d.seconds > 59) throw new RangeError('seconds: 0–59')\n if (d.milliseconds < 0) throw new RangeError('milliseconds >= 0')\n }\n\n valueOf(): number {\n return (\n this.milliseconds +\n this.seconds * 1e3 +\n this.minutes * 6e4 +\n this.hours * 3.6e6 +\n this.days * 8.64e7\n )\n }\n}\n","import { clamp } from './math'\n\nexport type EaseFunction = (t: number) => number\n\nexport class EaseFunctions {\n static cubicBezierGeneric(x1: number, y1: number, x2: number, y2: number): { x: EaseFunction, y: EaseFunction } {\n // Calculate the x and y coordinates using the cubic Bézier formula\n const cx = 3 * x1\n const bx = 3 * (x2 - x1) - cx\n const ax = 1 - cx - bx\n\n const cy = 3 * y1\n const by = 3 * (y2 - y1) - cy\n const ay = 1 - cy - by\n\n // Compute x and y values at parameter t\n const x = (t: number) => ((ax * t + bx) * t + cx) * t\n const y = (t: number) => ((ay * t + by) * t + cy) * t\n\n return {\n x,\n y\n }\n }\n\n static cubicBezier(x1: number, y1: number, x2: number, y2: number): EaseFunction {\n const { y } = EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2)\n return (t: number) => {\n t = clamp(t)\n return y(t) // <= equal to x(t) * 0 + y(t) * 1\n }\n }\n\n static easeInEaseOut(t: number): number {\n return EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t)\n };\n}\n","/**\n * 1 is forwards\n *\n * -1 is backwards\n */\nexport type Direction = 1 | -1\n\nexport class LoopingArrayCalculator {\n length: number\n isLooping: boolean\n allowedOverScroll: number\n\n constructor(length: number, isLooping: boolean = true, allowedOverScroll: number = 0.1) {\n if (allowedOverScroll < 0 || length < 1) {\n throw new Error('Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true')\n }\n\n this.length = length\n this.isLooping = isLooping\n this.allowedOverScroll = allowedOverScroll\n }\n\n getCorrectedPosition(position: number): number {\n if (!this.isLooping) {\n return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position))\n }\n if (position >= this.length) {\n return position % this.length\n }\n if (position < 0) {\n return this.length - (Math.abs(position) % this.length)\n }\n return position\n }\n\n static withoutOffset(position: number): number {\n return position + LoopingArrayCalculator.getOffset(position)\n }\n\n static getOffset(position: number): number {\n return Math.round(position) - position // For example: 45.5 => 46 - 45.5 = 0.5\n }\n\n /**\n * @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)\n */\n getDistanceDirectional(position: number, target: number, direction: Direction): number {\n if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {\n throw new Error('Invalid parameters: position is out of bounds.')\n }\n\n const isForwardInvalid = (direction === 1 && position > target)\n const isBackwardInvalid = (direction === -1 && target < position)\n\n if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {\n return Infinity\n }\n\n if (direction === -1) {\n return this.getDistanceDirectional(target, position, 1)\n }\n\n position = this.getCorrectedPosition(position)\n target = this.getCorrectedPosition(target)\n\n let distance = (target - position) * direction\n if (distance < 0) {\n distance = this.length - (Math.abs(position) % this.length) + target\n }\n\n return distance\n }\n\n getDistanceForward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, 1)\n }\n\n getDistanceBackward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, -1)\n }\n\n getDistance(position: number, target: number): number {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n\n return Math.min(forwardDistance, backwardDistance)\n }\n\n getBestDirection(position: number, target: number): Direction {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n return forwardDistance < backwardDistance ? 1 : -1\n }\n}\n","export const noop = () => undefined\n","async function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nasync function delayed<T>(value: T, ms: number): Promise<T> {\n await sleep(ms)\n return value\n}\n\nexport const PromiseUtils = {\n sleep,\n delayed\n}"],"mappings":"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","names":["exports","warnOnce","_","process","env","NODE_ENV","warnings","Set","msg","has","console","warn","add","exports","getImageBlurSvg","widthInt","heightInt","blurWidth","blurHeight","blurDataURL","objectFit","std","svgWidth","svgHeight","viewBox","preserveAspectRatio","VALID_LOADERS","imageConfigDefault","deviceSizes","imageSizes","path","loader","loaderFile","domains","disableStaticImages","minimumCacheTTL","formats","dangerouslyAllowSVG","contentSecurityPolicy","contentDispositionType","localPatterns","undefined","remotePatterns","qualities","unoptimized","getImgProps","VALID_LOADING_VALUES","undefined","INVALID_BACKGROUND_SIZE_VALUES","isStaticRequire","src","default","isStaticImageData","isStaticImport","allImgs","Map","perfObserver","getInt","x","Number","isFinite","NaN","test","parseInt","getWidths","width","sizes","deviceSizes","allSizes","viewportWidthRe","percentSizes","match","exec","push","length","smallestRatio","Math","min","widths","filter","s","kind","Set","map","w","find","p","generateImgAttrs","config","unoptimized","quality","loader","srcSet","last","i","join","_state","priority","loading","className","height","fill","style","overrideSrc","onLoad","onLoadingComplete","placeholder","blurDataURL","fetchPriority","decoding","layout","objectFit","objectPosition","lazyBoundary","lazyRoot","rest","imgConf","showAltText","blurComplete","defaultLoader","c","imageConfigDefault","imageSizes","sort","a","b","qualities","Error","isDefaultLoader","customImageLoader","obj","_","opts","layoutToStyle","intrinsic","maxWidth","responsive","layoutToSizes","layoutStyle","layoutSizes","staticSrc","widthInt","heightInt","blurWidth","blurHeight","staticImageData","JSON","stringify","ratio","round","isLazy","startsWith","dangerouslyAllowSVG","split","endsWith","qualityInt","process","env","NODE_ENV","output","position","isNaN","includes","String","warnOnce","localPatterns","pathname","VALID_BLUR_EXT","urlStr","url","URL","err","search","legacyKey","legacyValue","Object","entries","window","PerformanceObserver","entryList","entry","getEntries","imgSrc","element","lcpImage","get","observe","type","buffered","console","error","imgStyle","assign","left","top","right","bottom","color","backgroundImage","getImageBlurSvg","backgroundSize","placeholderStyle","backgroundPosition","backgroundRepeat","imgAttributes","fullUrl","e","location","href","set","props","meta","exports","nodeInterop","SideEffect","isServer","window","useClientOnlyLayoutEffect","useLayoutEffect","useClientOnlyEffect","useEffect","props","headManager","reduceComponentsToState","emitChange","mountedInstances","headElements","Children","toArray","Array","from","filter","Boolean","updateHead","add","children","delete","_pendingUpdate","AmpStateContext","React","createContext","process","env","NODE_ENV","displayName","HeadManagerContext","React","createContext","process","env","NODE_ENV","displayName","isInAmpMode","ampFirst","hybrid","hasQuery","exports","module","defaultHead","inAmpMode","head","meta","charSet","push","name","content","onlyReactElement","list","child","type","React","Fragment","concat","Children","toArray","props","children","reduce","fragmentList","fragmentChild","METATYPES","unique","keys","Set","tags","metaTypes","metaCategories","h","isUnique","hasKey","key","indexOf","slice","has","add","i","len","length","metatype","hasOwnProperty","category","categories","reduceComponents","headChildrenElements","reverse","filter","map","c","process","env","NODE_ENV","srcMessage","warnOnce","cloneElement","Head","ampState","useContext","AmpStateContext","headManager","HeadManagerContext","Effect","reduceComponentsToState","isInAmpMode","ImageConfigContext","React","createContext","imageConfigDefault","process","env","NODE_ENV","displayName","RouterContext","React","createContext","process","env","NODE_ENV","displayName","exports","module","t","e","u","n","o","s","r","a","i","X","__nccwpck_require__","hasLocalMatch","matchLocalPattern","pattern","url","search","undefined","makeRe","pathname","dot","test","localPatterns","urlPathAndQuery","URL","some","p","hasRemoteMatch","matchRemotePattern","pattern","url","protocol","undefined","replace","port","hostname","Error","JSON","stringify","makeRe","test","search","pathname","dot","domains","remotePatterns","some","domain","p","DEFAULT_Q","defaultLoader","config","src","width","quality","process","env","NODE_ENV","missingValues","push","length","Error","join","JSON","stringify","startsWith","localPatterns","NEXT_RUNTIME","hasLocalMatch","require","domains","remotePatterns","parsedSrc","URL","err","console","error","hasRemoteMatch","hostname","qualities","includes","q","reduce","prev","cur","Math","abs","path","encodeURIComponent","NEXT_DEPLOYMENT_ID","__next_img_default","useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","exports","module","Image","configEnv","process","env","__NEXT_IMAGE_OPTS","window","globalThis","__NEXT_IMAGE_IMPORTED","handleLoading","img","placeholder","onLoadRef","onLoadingCompleteRef","setBlurComplete","unoptimized","sizesInput","src","p","decode","Promise","resolve","catch","then","parentElement","isConnected","current","event","Event","Object","defineProperty","writable","value","prevented","stopped","nativeEvent","currentTarget","target","isDefaultPrevented","isPropagationStopped","persist","preventDefault","stopPropagation","NODE_ENV","origSrc","URL","searchParams","get","getAttribute","widthViewportRatio","getBoundingClientRect","width","innerWidth","warnOnce","position","getComputedStyle","valid","includes","map","String","join","height","heightModified","toString","widthModified","getDynamicProps","fetchPriority","Boolean","use","fetchpriority","ImageElement","forwardRef","forwardedRef","srcSet","sizes","decoding","className","style","loading","fill","setShowAltText","onLoad","onError","rest","ownRef","useCallback","console","error","complete","ref","useMergedRef","data-nimg","ImagePreload","isAppRouter","imgAttributes","opts","as","imageSrcSet","imageSizes","crossOrigin","referrerPolicy","ReactDOM","preload","Head","link","rel","href","undefined","props","pagesRouter","useContext","RouterContext","configContext","ImageConfigContext","config","useMemo","c","imageConfigDefault","allSizes","deviceSizes","sort","a","b","qualities","onLoadingComplete","useRef","useEffect","blurComplete","useState","showAltText","meta","imgMeta","getImgProps","defaultLoader","imgConf","priority","getImageProps","imgProps","props","getImgProps","defaultLoader","imgConf","process","env","__NEXT_IMAGE_OPTS","key","value","Object","entries","undefined","Image","exports","module","assign","searchParamsToUrlQuery","urlQueryToSearchParams","searchParams","query","key","value","entries","existing","Array","isArray","push","stringifyUrlQueryParam","param","isNaN","String","URLSearchParams","Object","item","append","set","target","searchParamsList","keys","delete","exports","formatUrl","formatWithValidation","urlObjectKeys","slashedProtocols","urlObj","auth","hostname","protocol","pathname","hash","query","host","encodeURIComponent","replace","indexOf","port","String","querystring","urlQueryToSearchParams","search","endsWith","slashes","test","url","process","env","NODE_ENV","Object","keys","forEach","key","includes","console","warn","omit","object","keys","omitted","Object","forEach","key","includes","DecodeError","MiddlewareNotFoundError","MissingStaticPage","NormalizeError","PageNotFoundError","SP","ST","WEB_VITALS","execOnce","getDisplayName","getLocationOrigin","getURL","isAbsoluteUrl","isResSent","loadGetInitialProps","normalizeRepeatedSlashes","stringifyError","fn","used","result","args","ABSOLUTE_URL_REGEX","url","test","protocol","hostname","port","window","location","href","origin","substring","length","Component","displayName","name","res","finished","headersSent","urlParts","split","urlNoQuery","replace","slice","join","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","performance","every","method","constructor","page","code","error","JSON","stringify","stack","exports","removeTrailingSlash","route","replace","exports","parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice","normalizePathTrailingSlash","path","startsWith","process","env","__NEXT_MANUAL_TRAILING_SLASH","pathname","query","hash","parsePath","__NEXT_TRAILING_SLASH","test","removeTrailingSlash","endsWith","pathHasPrefix","path","prefix","pathname","parsePath","startsWith","hasBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","pathHasPrefix","isLocalURL","url","isAbsoluteUrl","locationOrigin","getLocationOrigin","resolved","URL","origin","hasBasePath","pathname","_","getSortedRouteObjects","getSortedRoutes","UrlNode","insert","urlPath","_insert","split","filter","Boolean","smoosh","_smoosh","prefix","childrenPaths","children","keys","sort","slugName","splice","indexOf","restSlugName","optionalRestSlugName","routes","map","c","get","reduce","prev","curr","push","placeholder","r","slice","Error","unshift","urlPaths","slugNames","isCatchAll","length","nextSegment","startsWith","endsWith","handleSlug","previousSlug","nextSlug","forEach","slug","replace","segmentName","isOptional","substring","has","set","Map","normalizedPages","root","pagePath","objects","getter","indexes","pathnames","i","pathname","sorted","exports","ensureLeadingSlash","path","startsWith","DEFAULT_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","isGroupSegment","isParallelRouteSegment","segment","endsWith","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","normalizeAppPath","normalizeRscURL","route","ensureLeadingSlash","split","reduce","pathname","segment","index","segments","isGroupSegment","length","url","replace","INTERCEPTION_ROUTE_MARKERS","extractInterceptionRouteInformation","isInterceptionRouteAppPath","path","split","find","segment","m","startsWith","undefined","interceptingRoute","marker","interceptedRoute","Error","normalizeAppPath","slice","concat","join","splitInterceptingRoute","length","isDynamicRoute","TEST_ROUTE","TEST_STRICT_ROUTE","route","strict","isInterceptionRouteAppPath","extractInterceptionRouteInformation","interceptedRoute","test","getSortedRouteObjects","getSortedRoutes","isDynamicRoute","exports","module","e","n","t","a","i","r","match","hasAdjacentParameterIssues","normalizeAdjacentParameters","normalizeTokensForRegexp","stripParameterSeparators","PARAM_SEPARATOR","route","test","normalized","replace","tokens","map","token","modifier","prefix","suffix","params","cleaned","key","value","Object","entries","RegExp","Array","isArray","item","exports","safeCompile","safePathToRegexp","safeRegexpToFunction","safeRouteMatcher","route","keys","options","pathToRegexp","needsNormalization","hasAdjacentParameterIssues","routeToUse","normalizeAdjacentParameters","error","normalizedRoute","retryError","compile","regexp","originalMatcher","regexpToFunction","pathname","result","params","stripParameterSeparators","matcherFn","getRouteMatcher","re","groups","rawMatcher","pathname","routeMatch","exec","decode","param","decodeURIComponent","DecodeError","params","key","group","Object","entries","match","pos","undefined","repeat","split","map","entry","safeRouteMatcher","ACTION_SUFFIX","APP_DIR_ALIAS","CACHE_ONE_YEAR","DOT_NEXT_ALIAS","ESLINT_DEFAULT_DIRS","GSP_NO_RETURNED_VALUE","GSSP_COMPONENT_MEMBER_ERROR","GSSP_NO_RETURNED_VALUE","HTML_CONTENT_TYPE_HEADER","INFINITE_CACHE","INSTRUMENTATION_HOOK_FILENAME","JSON_CONTENT_TYPE_HEADER","MATCHED_PATH_HEADER","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","NEXT_BODY_SUFFIX","NEXT_CACHE_IMPLICIT_TAG_ID","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_DATA_SUFFIX","NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_META_SUFFIX","NEXT_QUERY_PARAM_PREFIX","NEXT_RESUME_HEADER","NON_STANDARD_NODE_ENV","PAGES_DIR_ALIAS","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","PUBLIC_DIR_MIDDLEWARE_CONFLICT","ROOT_DIR_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_PREFETCH_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","SERVER_PROPS_EXPORT_ERROR","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","SERVER_RUNTIME","SSG_FALLBACK_EXPORT_ERROR","SSG_GET_INITIAL_PROPS_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","TEXT_PLAIN_CONTENT_TYPE_HEADER","UNSTABLE_REVALIDATE_RENAME_ERROR","WEBPACK_LAYERS","WEBPACK_RESOURCE_QUERIES","edge","experimentalEdge","nodejs","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","edgeSSREntry","metadata","metadataRoute","metadataImageMeta","exports","escapeStringRegexp","reHasRegExp","reReplaceRegExp","str","test","replace","PARAMETER_PATTERN","getDynamicParam","parseMatchedParameter","parseParameter","params","segmentKey","dynamicParamType","pagePath","fallbackRouteParams","value","has","get","Array","isArray","map","i","encodeURIComponent","isCatchall","isOptionalCatchall","param","type","treeSegment","split","slice","flatMap","pathSegment","key","join","match","optional","startsWith","endsWith","repeat","getNamedMiddlewareRegex","getNamedRouteRegex","getRouteRegex","getParametrizedRoute","route","includeSuffix","includePrefix","groups","groupIndex","segments","segment","removeTrailingSlash","slice","split","markerMatch","INTERCEPTION_ROUTE_MARKERS","find","m","startsWith","paramMatches","match","PARAMETER_PATTERN","key","optional","repeat","parseMatchedParameter","pos","push","escapeStringRegexp","s","substring","parameterizedRoute","join","normalizedRoute","excludeOptionalTrailingSlash","re","RegExp","buildGetSafeRouteKey","i","routeKey","j","String","fromCharCode","Math","floor","getSafeKeyFromSegment","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","cleanedKey","replace","invalidKey","length","isNaN","parseInt","duplicateKey","interceptionPrefix","pattern","getNamedParametrizedRoute","prefixRouteKeys","hasInterceptionMarker","some","NEXT_INTERCEPTION_MARKER_PREFIX","undefined","NEXT_QUERY_PARAM_PREFIX","namedParameterizedRoute","options","result","namedRegex","catchAll","catchAllRegex","catchAllGroupedRegex","interpolateAs","route","asPathname","query","interpolatedRoute","dynamicRegex","getRouteRegex","dynamicGroups","groups","dynamicMatches","getRouteMatcher","params","Object","keys","every","param","value","repeat","optional","replaced","Array","isArray","replace","map","segment","encodeURIComponent","join","result","resolveHref","router","href","resolveAs","base","urlAsString","formatWithValidation","urlProtoMatch","match","urlAsStringNoProto","slice","length","urlParts","split","console","error","pathname","normalizedUrl","normalizeRepeatedSlashes","isLocalURL","baseBase","startsWith","asPath","isDynamicRoute","routeRegex","getRouteRegex","getRouteMatcher","URL","_","finalUrl","normalizePathTrailingSlash","interpolatedAs","searchParams","query","searchParamsToUrlQuery","result","params","interpolateAs","hash","omit","resolvedHref","origin","addPathPrefix","path","prefix","startsWith","pathname","query","hash","parsePath","addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase","pathHasPrefix","addPathPrefix","addLocale","path","args","process","env","__NEXT_I18N_SUPPORT","normalizePathTrailingSlash","require","cancelIdleCallback","requestIdleCallback","self","bind","window","cb","start","Date","now","setTimeout","didTimeout","timeRemaining","Math","max","id","clearTimeout","useIntersection","hasIntersectionObserver","IntersectionObserver","observers","Map","idList","createObserver","options","id","root","margin","rootMargin","existing","find","obj","instance","get","elements","observer","entries","forEach","entry","callback","target","isVisible","isIntersecting","intersectionRatio","push","set","observe","element","unobserve","delete","size","disconnect","index","findIndex","splice","rootRef","disabled","isDisabled","visible","setVisible","useState","elementRef","useRef","setElement","useCallback","current","useEffect","tagName","idleCallback","requestIdleCallback","cancelIdleCallback","resetVisible","normalizeLocalePath","cache","WeakMap","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length","normalizeLocalePath","pathname","locales","process","env","__NEXT_I18N_SUPPORT","require","detectedLocale","undefined","detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale","detectDomainLocale","args","process","env","__NEXT_I18N_SUPPORT","require","getDomainLocale","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","locale","locales","domainLocales","__NEXT_I18N_SUPPORT","normalizeLocalePath","require","detectDomainLocale","target","detectedLocale","domain","undefined","proto","http","finalLocale","defaultLocale","normalizePathTrailingSlash","addBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","required","normalizePathTrailingSlash","__NEXT_MANUAL_CLIENT_BASE_PATH","addPathPrefix","errorOnce","_","process","env","NODE_ENV","errors","Set","msg","has","console","error","add","exports","module","useLinkStatus","prefetched","Set","prefetch","router","href","as","options","window","isLocalURL","bypassPrefetchedCheck","locale","undefined","prefetchedKey","has","add","catch","err","process","env","NODE_ENV","isModifiedEvent","event","eventTarget","currentTarget","target","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","linkClicked","e","replace","shallow","scroll","onNavigate","nodeName","isAnchorNodeName","toUpperCase","hasAttribute","preventDefault","location","navigate","isDefaultPrevented","routerScroll","formatStringOrUrl","urlObjOrString","formatUrl","Link","React","forwardRef","LinkComponent","props","forwardedRef","children","hrefProp","asProp","childrenProp","prefetchProp","passHref","onClick","onMouseEnter","onMouseEnterProp","onTouchStart","onTouchStartProp","legacyBehavior","restProps","a","useContext","RouterContext","prefetchEnabled","createPropError","args","Error","key","expected","actual","requiredPropsGuard","requiredProps","Object","keys","forEach","_","optionalPropsGuard","optionalProps","valType","useMemo","resolvedHref","resolvedAs","resolveHref","previousHref","useRef","previousAs","child","console","warn","Children","only","type","childRef","ref","setIntersectionRef","isVisible","resetVisible","useIntersection","rootMargin","setIntersectionWithResetRef","useCallback","el","current","setRef","useMergedRef","useEffect","childProps","defaultPrevented","priority","__NEXT_LINK_NO_TOUCH_START","isAbsoluteUrl","curLocale","localeDomain","isLocaleDomain","getDomainLocale","locales","domainLocales","addBasePath","addLocale","defaultLocale","errorOnce","cloneElement","LinkStatusContext","createContext","pending","require_link","exports","module","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","import_jsx_runtime","import_react","name","import_react","import_jsx_runtime","import_jsx_runtime","import_clsx","import_jsx_runtime","clsx","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","Image","import_react","name","close","up","down","import_jsx_runtime","FormFieldLayout","import_react","import_jsx_runtime","import_jsx_runtime","name","import_react","import_react","import_clsx","import_lucide_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","locale","import_internationalization","import_react","import_jsx_runtime","clsx","CarouselSlide","import_clsx","import_jsx_runtime","clsx","import_react","import_react","listener","active","import_react","value","import_react","import_lucide_react","import_react","import_jsx_runtime","import_react","import_clsx","import_react","import_jsx_runtime","ExpandableRoot","ExpandableHeader","ExpandableContent","Expandable","clsx","ExpandableUncontrolled","import_jsx_runtime","import_react","import_react_dom","import_clsx","import_react","range","import_jsx_runtime","FloatingContainer","forwardRef","import_react","import_clsx","import_lucide_react","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","ListBoxItem","React","ListBoxPrimitive","ListBox","import_jsx_runtime","close","import_react","import_react_dom","import_jsx_runtime","state","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","import_clsx","import_react","import_lucide_react","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","clsx","import_jsx_runtime","import_react","import_react","defaultOptions","import_react","import_jsx_runtime","Input","InputUncontrolled","import_jsx_runtime","import_react","import_clsx","import_lucide_react","import_react_dom","import_jsx_runtime","value","isOpen","SelectOption","clsx","SelectButton","SelectChipDisplay","SelectContent","Select","SelectUncontrolled","MultiSelect","MultiSelectUncontrolled","MultiSelectChipDisplay","MultiSelectChipDisplayUncontrolled","import_jsx_runtime","locale","import_lucide_react","import_clsx","import_react","import_jsx_runtime","import_jsx_runtime","clsx","theme","import_lucide_react","import_clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","import_clsx","import_jsx_runtime","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","Link","import_lucide_react","import_react","import_link","import_clsx","import_jsx_runtime","clsx","label","Link","MenuIcon","import_lucide_react","import_clsx","import_react","import_jsx_runtime","clsx","value","import_lucide_react","import_clsx","import_jsx_runtime","clsx","import_lucide_react","import_jsx_runtime","import_react","import_clsx","import_clsx","import_jsx_runtime","import_react","import_lucide_react","import_clsx","import_react","import_clsx","import_react_dom","import_jsx_runtime","prevState","import_jsx_runtime","clsx","import_lucide_react","import_react","import_clsx","import_react_dom","import_react","import_react","import_jsx_runtime","clsx","close","import_react","import_jsx_runtime","close","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","clsx","import_react","import_clsx","import_lucide_react","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","currentIndex","transition","items","distance","name","clsx","import_react","import_clsx","import_jsx_runtime","Textarea","clsx","import_react","import_lucide_react","date","import_clsx","import_react","import_jsx_runtime","import_react","import_clsx","import_jsx_runtime","YearRow","clsx","onValueChange","onEditComplete","import_jsx_runtime","clsx","import_clsx","import_react","import_jsx_runtime","value","hour","import_jsx_runtime","clsx","import_jsx_runtime","import_react","import_react_dom","import_lucide_react","import_clsx","import_jsx_runtime","clsx","import_react","import_clsx","import_jsx_runtime","InsideLabelInput","clsx","import_lucide_react","import_clsx","import_jsx_runtime","import_react","import_lucide_react","import_clsx","import_jsx_runtime","ToggleableInput","clsx","import_lucide_react","import_lucide_react","import_jsx_runtime","name","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","value","import_lucide_react","import_jsx_runtime","value","import_lucide_react","import_jsx_runtime","value","import_lucide_react","import_jsx_runtime","value","import_react","import_jsx_runtime","FocusTrap","import_react","import_jsx_runtime","import_react","import_react","React","import_react","import_react","import_react","resolve"]}