@helpwave/hightide 0.1.20 → 0.1.21

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.
Files changed (109) hide show
  1. package/dist/components/date/DatePicker.js.map +1 -1
  2. package/dist/components/date/DatePicker.mjs.map +1 -1
  3. package/dist/components/date/DayPicker.js.map +1 -1
  4. package/dist/components/date/DayPicker.mjs.map +1 -1
  5. package/dist/components/date/TimeDisplay.js.map +1 -1
  6. package/dist/components/date/TimeDisplay.mjs.map +1 -1
  7. package/dist/components/date/YearMonthPicker.js.map +1 -1
  8. package/dist/components/date/YearMonthPicker.mjs.map +1 -1
  9. package/dist/components/dialogs/ConfirmDialog.js +1 -1
  10. package/dist/components/dialogs/ConfirmDialog.js.map +1 -1
  11. package/dist/components/dialogs/ConfirmDialog.mjs +1 -1
  12. package/dist/components/dialogs/ConfirmDialog.mjs.map +1 -1
  13. package/dist/components/layout-and-navigation/Overlay.js +1 -1
  14. package/dist/components/layout-and-navigation/Overlay.js.map +1 -1
  15. package/dist/components/layout-and-navigation/Overlay.mjs +1 -1
  16. package/dist/components/layout-and-navigation/Overlay.mjs.map +1 -1
  17. package/dist/components/layout-and-navigation/Pagination.js.map +1 -1
  18. package/dist/components/layout-and-navigation/Pagination.mjs.map +1 -1
  19. package/dist/components/layout-and-navigation/SearchableList.js.map +1 -1
  20. package/dist/components/layout-and-navigation/SearchableList.mjs.map +1 -1
  21. package/dist/components/layout-and-navigation/StepperBar.js.map +1 -1
  22. package/dist/components/layout-and-navigation/StepperBar.mjs.map +1 -1
  23. package/dist/components/layout-and-navigation/TextImage.js.map +1 -1
  24. package/dist/components/layout-and-navigation/TextImage.mjs.map +1 -1
  25. package/dist/components/loading-states/ErrorComponent.js.map +1 -1
  26. package/dist/components/loading-states/ErrorComponent.mjs.map +1 -1
  27. package/dist/components/loading-states/LoadingAnimation.js.map +1 -1
  28. package/dist/components/loading-states/LoadingAnimation.mjs.map +1 -1
  29. package/dist/components/modals/ConfirmModal.js +1 -1
  30. package/dist/components/modals/ConfirmModal.js.map +1 -1
  31. package/dist/components/modals/ConfirmModal.mjs +1 -1
  32. package/dist/components/modals/ConfirmModal.mjs.map +1 -1
  33. package/dist/components/modals/DiscardChangesModal.js +1 -1
  34. package/dist/components/modals/DiscardChangesModal.js.map +1 -1
  35. package/dist/components/modals/DiscardChangesModal.mjs +1 -1
  36. package/dist/components/modals/DiscardChangesModal.mjs.map +1 -1
  37. package/dist/components/modals/InputModal.js +1 -1
  38. package/dist/components/modals/InputModal.js.map +1 -1
  39. package/dist/components/modals/InputModal.mjs +1 -1
  40. package/dist/components/modals/InputModal.mjs.map +1 -1
  41. package/dist/components/modals/LanguageModal.js +4 -3
  42. package/dist/components/modals/LanguageModal.js.map +1 -1
  43. package/dist/components/modals/LanguageModal.mjs +4 -3
  44. package/dist/components/modals/LanguageModal.mjs.map +1 -1
  45. package/dist/components/modals/ThemeModal.js +4 -3
  46. package/dist/components/modals/ThemeModal.js.map +1 -1
  47. package/dist/components/modals/ThemeModal.mjs +4 -3
  48. package/dist/components/modals/ThemeModal.mjs.map +1 -1
  49. package/dist/components/properties/CheckboxProperty.js.map +1 -1
  50. package/dist/components/properties/CheckboxProperty.mjs.map +1 -1
  51. package/dist/components/properties/DateProperty.js.map +1 -1
  52. package/dist/components/properties/DateProperty.mjs.map +1 -1
  53. package/dist/components/properties/MultiSelectProperty.js +1 -1
  54. package/dist/components/properties/MultiSelectProperty.js.map +1 -1
  55. package/dist/components/properties/MultiSelectProperty.mjs +1 -1
  56. package/dist/components/properties/MultiSelectProperty.mjs.map +1 -1
  57. package/dist/components/properties/NumberProperty.js.map +1 -1
  58. package/dist/components/properties/NumberProperty.mjs.map +1 -1
  59. package/dist/components/properties/PropertyBase.js.map +1 -1
  60. package/dist/components/properties/PropertyBase.mjs.map +1 -1
  61. package/dist/components/properties/SelectProperty.js +1 -1
  62. package/dist/components/properties/SelectProperty.js.map +1 -1
  63. package/dist/components/properties/SelectProperty.mjs +1 -1
  64. package/dist/components/properties/SelectProperty.mjs.map +1 -1
  65. package/dist/components/properties/TextProperty.js.map +1 -1
  66. package/dist/components/properties/TextProperty.mjs.map +1 -1
  67. package/dist/components/table/Table.js +1 -1
  68. package/dist/components/table/Table.js.map +1 -1
  69. package/dist/components/table/Table.mjs +1 -1
  70. package/dist/components/table/Table.mjs.map +1 -1
  71. package/dist/components/table/TableFilterButton.js +1 -1
  72. package/dist/components/table/TableFilterButton.js.map +1 -1
  73. package/dist/components/table/TableFilterButton.mjs +1 -1
  74. package/dist/components/table/TableFilterButton.mjs.map +1 -1
  75. package/dist/components/user-action/CopyToClipboardWrapper.js.map +1 -1
  76. package/dist/components/user-action/CopyToClipboardWrapper.mjs.map +1 -1
  77. package/dist/components/user-action/DateAndTimePicker.js.map +1 -1
  78. package/dist/components/user-action/DateAndTimePicker.mjs.map +1 -1
  79. package/dist/components/user-action/Menu.js +1 -1
  80. package/dist/components/user-action/Menu.js.map +1 -1
  81. package/dist/components/user-action/Menu.mjs +1 -1
  82. package/dist/components/user-action/Menu.mjs.map +1 -1
  83. package/dist/components/user-action/MultiSelect.js +1 -1
  84. package/dist/components/user-action/MultiSelect.js.map +1 -1
  85. package/dist/components/user-action/MultiSelect.mjs +1 -1
  86. package/dist/components/user-action/MultiSelect.mjs.map +1 -1
  87. package/dist/components/user-action/SearchBar.js.map +1 -1
  88. package/dist/components/user-action/SearchBar.mjs.map +1 -1
  89. package/dist/components/user-action/Select.js +1 -1
  90. package/dist/components/user-action/Select.js.map +1 -1
  91. package/dist/components/user-action/Select.mjs +1 -1
  92. package/dist/components/user-action/Select.mjs.map +1 -1
  93. package/dist/css/globals.css +20 -6
  94. package/dist/css/uncompiled/theme/colors-semantic.css +5 -5
  95. package/dist/index.js +18 -5
  96. package/dist/index.js.map +1 -1
  97. package/dist/index.mjs +18 -5
  98. package/dist/index.mjs.map +1 -1
  99. package/dist/localization/LanguageProvider.js +2 -1
  100. package/dist/localization/LanguageProvider.js.map +1 -1
  101. package/dist/localization/LanguageProvider.mjs +2 -1
  102. package/dist/localization/LanguageProvider.mjs.map +1 -1
  103. package/dist/localization/useTranslation.js.map +1 -1
  104. package/dist/localization/useTranslation.mjs.map +1 -1
  105. package/dist/theming/useTheme.js +71 -6
  106. package/dist/theming/useTheme.js.map +1 -1
  107. package/dist/theming/useTheme.mjs +69 -4
  108. package/dist/theming/useTheme.mjs.map +1 -1
  109. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs","../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/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/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/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/src/shared/lib/router-context.shared-runtime.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/client/use-merged-ref.ts","../node_modules/next/src/shared/lib/utils/error-once.ts","../node_modules/next/src/client/link.tsx","../node_modules/next/link.js","../src/coloring/shading.ts","../src/coloring/types.ts","../src/components/branding/HelpwaveBadge.tsx","../src/components/layout-and-navigation/Tile.tsx","../src/components/icons-and-geometry/Helpwave.tsx","../src/components/date/DatePicker.tsx","../src/localization/LanguageProvider.tsx","../src/hooks/useLocalStorage.ts","../src/util/storage.ts","../src/localization/util.ts","../src/localization/useTranslation.ts","../src/util/noop.ts","../src/util/array.ts","../src/util/date.ts","../src/components/user-action/Button.tsx","../src/components/date/YearMonthPicker.tsx","../src/components/layout-and-navigation/Expandable.tsx","../src/components/date/DayPicker.tsx","../src/localization/defaults/time.ts","../src/components/date/TimeDisplay.tsx","../src/components/date/TimePicker.tsx","../src/components/dialogs/ConfirmDialog.tsx","../src/components/layout-and-navigation/Overlay.tsx","../src/hooks/useHoverState.ts","../src/components/user-action/Tooltip.tsx","../src/localization/defaults/form.ts","../src/components/icons-and-geometry/Avatar.tsx","../src/components/icons-and-geometry/Circle.tsx","../src/components/icons-and-geometry/Ring.tsx","../src/components/icons-and-geometry/Tag.tsx","../src/components/layout-and-navigation/BreadCrumb.tsx","../src/components/layout-and-navigation/Carousel.tsx","../src/util/math.ts","../src/util/easeFunctions.ts","../src/util/loopingArray.ts","../src/components/layout-and-navigation/Chip.tsx","../src/components/layout-and-navigation/DividerInserter.tsx","../src/components/layout-and-navigation/FAQSection.tsx","../src/components/layout-and-navigation/MarkdownInterpreter.tsx","../src/components/layout-and-navigation/Pagination.tsx","../src/components/user-action/Input.tsx","../src/hooks/useDelay.ts","../src/components/user-action/Label.tsx","../src/hooks/useFocusManagement.ts","../src/hooks/useFocusOnceVisible.ts","../src/components/layout-and-navigation/SearchableList.tsx","../src/hooks/useSearch.ts","../src/util/simpleSearch.ts","../src/components/layout-and-navigation/StepperBar.tsx","../src/components/layout-and-navigation/TextImage.tsx","../src/components/layout-and-navigation/VerticalDivider.tsx","../src/components/loading-states/ErrorComponent.tsx","../src/components/loading-states/LoadingAndErrorComponent.tsx","../src/components/loading-states/LoadingContainer.tsx","../src/components/loading-states/LoadingAnimation.tsx","../src/components/loading-states/LoadingButton.tsx","../src/components/loading-states/ProgressIndicator.tsx","../src/components/modals/ConfirmModal.tsx","../src/components/modals/DiscardChangesModal.tsx","../src/components/modals/InputModal.tsx","../src/components/user-action/Select.tsx","../src/components/user-action/Menu.tsx","../src/hooks/useOutsideClick.ts","../src/util/PropsWithFunctionChildren.ts","../src/hooks/usePopoverPosition.ts","../src/components/user-action/SearchBar.tsx","../src/components/modals/LanguageModal.tsx","../src/theming/useTheme.tsx","../src/components/modals/ThemeModal.tsx","../src/components/properties/CheckboxProperty.tsx","../src/components/user-action/Checkbox.tsx","../src/components/properties/PropertyBase.tsx","../src/components/properties/DateProperty.tsx","../src/components/properties/MultiSelectProperty.tsx","../src/components/user-action/MultiSelect.tsx","../src/components/properties/NumberProperty.tsx","../src/components/properties/SelectProperty.tsx","../src/components/properties/TextProperty.tsx","../src/components/user-action/Textarea.tsx","../src/components/table/FillerRowElement.tsx","../src/components/table/Filter.ts","../src/components/table/Table.tsx","../src/components/table/TableFilterButton.tsx","../src/components/table/TableSortButton.tsx","../src/hooks/useResizeCallbackWrapper.ts","../src/components/table/TableCell.tsx","../src/components/user-action/CopyToClipboardWrapper.tsx","../src/util/writeToClipboard.ts","../src/components/user-action/DateAndTimePicker.tsx","../src/components/user-action/ScrollPicker.tsx","../src/components/user-action/ToggleableInput.tsx","../src/hooks/useRerender.ts","../src/util/builder.ts","../src/util/emailValidation.ts","../src/util/news.ts","../src/util/resolveSetState.ts"],"sourcesContent":["\"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 { 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\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\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","import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\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 return (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","import type { ServerRuntime } from '../types'\n\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_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 {\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'\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\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 */\nconst 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 */\nfunction 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\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'\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 const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\\/\\//)\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 base = new URL(\n urlAsString.startsWith('#') ? router.asPath : router.pathname,\n 'http://n'\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 require('../shared/lib/router/utils/add-locale').addLocale(path, ...args)\n )\n }\n return path\n}\n","\"use strict\";\n\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports._ = _interop_require_default;\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","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 require('../shared/lib/i18n/normalize-locale-path').normalizeLocalePath(\n pathname,\n locales\n )\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 require('../shared/lib/i18n/detect-domain-locale').detectDomainLocale(\n ...args\n )\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').normalizeLocalePath\n const detectDomainLocale: typeof DetectFn =\n require('./detect-domain-locale').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","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","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 * - `null` (default): For statically generated pages, this will prefetch the full React Server Component data. For dynamic pages, this will prefetch up to the nearest route segment with a [`loading.js`](https://nextjs.org/docs/app/api-reference/file-conventions/loading) file. If there is no loading file, it will not fetch the full tree to avoid fetching too much data.\n * - `true`: This will prefetch the full React Server Component data for all route segments, regardless of whether they contain a segment with `loading.js`.\n * - `false`: This will not prefetch any data, even on hover.\n *\n * In Pages Router:\n * - `true` (default): The full route & its data will be prefetched.\n * - `false`: Prefetching will not happen when entering the viewport, but will still happen on hover.\n * @defaultValue `true` (pages router) or `null` (app router)\n */\n prefetch?: boolean | null\n /**\n * The active locale is automatically prepended. `locale` allows for providing a different locale.\n * When `false` `href` has to include the locale as the default behavior is disabled.\n * Note: This is only available in the Pages Router.\n */\n locale?: string | false\n /**\n * Enable legacy link behavior.\n * @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 the webpack plugin runs.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type LinkProps<RouteInferType = any> = 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 === 'prefetch' ||\n key === 'legacyBehavior'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _: never = key\n }\n })\n }\n\n 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","import tinycolor from 'tinycolor2'\nimport type { ShadedColors } from './types'\nimport { shadingColorValues } from './types'\n\n// Function to generate a full shading of several colors\nexport const generateShadingColors = (partialShading: Omit<Partial<ShadedColors>, '0' | '1000'>): ShadedColors => {\n const shading: ShadedColors = {\n 0: '#FFFFFF',\n 1000: '#000000'\n } as ShadedColors\n\n let index = 1\n while (index < shadingColorValues.length - 1) {\n const previous = shadingColorValues[index - 1]!\n const current = shadingColorValues[index]!\n\n if (partialShading[current] !== undefined) {\n shading[current] = partialShading[current]\n index++\n continue\n }\n\n let j: number = index + 1\n while (j < shadingColorValues.length) {\n if (partialShading[shadingColorValues[j]!] !== undefined) {\n break\n }\n j++\n }\n if (j === shadingColorValues.length) {\n j = shadingColorValues.length - 1\n }\n\n const nextFound = shadingColorValues[j]!\n const interval = nextFound - previous\n for (let k = index; k < j; k++) {\n const current = shadingColorValues[k]!\n const previousValue = partialShading[previous] ?? shading[previous]\n const nextValue = partialShading[nextFound] ?? shading[nextFound]\n shading[current] = tinycolor.mix(tinycolor(previousValue), tinycolor(nextValue), (current - previous) / interval * 100).toHexString()\n }\n index = j\n }\n\n return shading\n}\n","export const shadingColorValues = [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000] as const\nexport type ColorShadingValue = typeof shadingColorValues[number]\nexport type ShadedColors = Record<ColorShadingValue, string>\n\nexport type ColoringStyle = 'background' | 'tonal' | 'tonal-opaque' | 'text' | 'text-border'\nexport type ColorMode = 'light' | 'dark'\n\nexport type Coloring = {\n color: '',\n style?: ColoringStyle,\n mode?: ColorMode,\n hover?: boolean,\n}\n","import clsx from 'clsx'\nimport { Tile } from '../layout-and-navigation/Tile'\nimport { Helpwave } from '../icons-and-geometry/Helpwave'\n\ntype Size = 'small' | 'large'\n\nexport type HelpwaveBadgeProps = {\n size?: Size,\n title?: string,\n className?: string,\n}\n\n/**\n * A Badge with the helpwave logo and the helpwave name\n */\nexport const HelpwaveBadge = ({\n size = 'small',\n title = 'helpwave',\n className = ''\n }: HelpwaveBadgeProps) => {\n const iconSize: number = size === 'small' ? 24 : 64\n\n return (\n <Tile\n prefix={(<Helpwave size={iconSize}/>)}\n title={{ value: title, className: size === 'small' ? 'textstyle-title-lg text-base' : 'textstyle-title-xl' }}\n className={clsx(\n {\n 'px-2 py-1 rounded-md': size === 'small',\n 'px-4 py-1 rounded-md': size === 'large',\n }, className\n )}\n />\n )\n}\n","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { Check } from 'lucide-react'\n\nexport type TileProps = {\n title: { value: ReactNode, className?: string },\n description?: { value: ReactNode, className?: string },\n onClick?: () => void,\n disabled?: boolean,\n isSelected?: boolean,\n prefix?: ReactNode,\n suffix?: ReactNode,\n className?: string,\n normalClassName?: string,\n selectedClassName?: string,\n disabledClassName?: string,\n}\n\n/**\n * A component for creating a tile similar to the flutter ListTile\n */\nexport const Tile = ({\n title,\n description,\n onClick,\n isSelected = false,\n disabled = false,\n prefix,\n suffix,\n normalClassName = 'hover:bg-primary/40 cursor-pointer',\n selectedClassName = ' bg-primary/20',\n disabledClassName = 'text-disabled-text bg-disabled-background cursor-not-allowed',\n className\n }: TileProps) => {\n return (\n <div\n className={clsx(\n 'flex-row-2 w-full items-center',\n {\n [normalClassName]: !!onClick && !disabled,\n [selectedClassName]: isSelected && !disabled,\n [disabledClassName]: disabled,\n },\n className\n )}\n onClick={disabled ? undefined : onClick}\n >\n {prefix}\n <div className=\"flex-col-0 w-full\">\n <h4 className={clsx(title.className ?? 'textstyle-title-normal')}>{title.value}</h4>\n {!!description &&\n <span className={clsx(description.className ?? 'textstyle-description')}>{description.value}</span>}\n </div>\n {suffix ?? (isSelected ? (<Check size={24}/>) : undefined)}\n </div>\n )\n}\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?: number,\n}\n\n/**\n * The helpwave loading spinner based on the svg logo.\n */\nexport const Helpwave = ({\n color = 'currentColor',\n animate = 'none',\n size = 64,\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 if (size < 0) {\n console.error('size cannot be less than 0')\n size = 64\n }\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 888 888\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeWidth={48}\n {...props}\n >\n <g className={clsx(svgAnimationKey)}>\n <path className={clsx({ 'animate-wave-big-left-up': isLoadingAnimation })}\n d=\"M144 543.235C144 423.259 232.164 326 340.92 326\" stroke={color} strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-big-right-down': isLoadingAnimation })}\n d=\"M537.84 544.104C429.084 544.104 340.92 446.844 340.92 326.869\" stroke={color} strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-left-up': isLoadingAnimation })}\n d=\"M462.223 518.035C462.223 432.133 525.348 362.495 603.217 362.495\" stroke={color}\n strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-right-down': isLoadingAnimation })}\n d=\"M745.001 519.773C666.696 519.773 603.218 450.136 603.218 364.233\" stroke={color}\n strokeDasharray=\"1000\"/>\n </g>\n </svg>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { ArrowDown, ArrowUp, ChevronDown } from 'lucide-react'\nimport { useLocale } from '../../localization/LanguageProvider'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { noop } from '../../util/noop'\nimport { addDuration, isInTimeSpan, subtractDuration } from '../../util/date'\nimport clsx from 'clsx'\nimport { SolidButton, TextButton } from '../user-action/Button'\nimport type { YearMonthPickerProps } from './YearMonthPicker'\nimport { YearMonthPicker } from './YearMonthPicker'\nimport type { DayPickerProps } from './DayPicker'\nimport { DayPicker } from './DayPicker'\nimport type { TimeTranslationType } from '../../localization/defaults/time'\nimport { timeTranslation } from '../../localization/defaults/time'\n\ntype DatePickerTranslationType = TimeTranslationType\n\ntype DisplayMode = 'yearMonth' | 'day'\n\nexport type DatePickerProps = {\n value?: Date,\n start?: Date,\n end?: Date,\n initialDisplay?: DisplayMode,\n onChange?: (date: Date) => void,\n dayPickerProps?: Omit<DayPickerProps, 'displayedMonth' | 'onChange' | 'selected'>,\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 overwriteTranslation,\n value = new Date(),\n start = subtractDuration(new Date(), { years: 50 }),\n end = addDuration(new Date(), { years: 50 }),\n initialDisplay = 'day',\n onChange = noop,\n yearMonthPickerProps,\n dayPickerProps,\n className = ''\n }: PropsForTranslation<DatePickerTranslationType, DatePickerProps>) => {\n const locale = useLocale()\n const translation = useTranslation([timeTranslation], overwriteTranslation)\n const [displayedMonth, setDisplayedMonth] = useState<Date>(value)\n const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplay)\n\n useEffect(() => {\n setDisplayedMonth(value)\n }, [value])\n\n return (\n <div className={clsx('flex-col-4', className)}>\n <div className=\"flex-row-2 items-center justify-between h-7\">\n <TextButton\n className={clsx('flex-row-1 items-center cursor-pointer select-none', {\n 'text-disabled-text': displayMode !== 'day',\n })}\n onClick={() => setDisplayMode(displayMode === 'day' ? 'yearMonth' : 'day')}\n >\n {`${new Intl.DateTimeFormat(locale, { month: 'long' }).format(displayedMonth)} ${displayedMonth.getFullYear()}`}\n <ChevronDown size={16}/>\n </TextButton>\n {displayMode === 'day' && (\n <div className=\"flex-row-2 justify-end\">\n <SolidButton\n size=\"small\"\n color=\"primary\"\n disabled={!isInTimeSpan(subtractDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(subtractDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowUp size={20}/>\n </SolidButton>\n <SolidButton\n size=\"small\"\n color=\"primary\"\n disabled={!isInTimeSpan(addDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(addDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowDown size={20}/>\n </SolidButton>\n </div>\n )}\n </div>\n {displayMode === 'yearMonth' ? (\n <YearMonthPicker\n {...yearMonthPickerProps}\n displayedYearMonth={value}\n start={start}\n end={end}\n onChange={newDate => {\n setDisplayedMonth(newDate)\n setDisplayMode('day')\n }}\n />\n ) : (\n <div>\n <DayPicker\n {...dayPickerProps}\n displayedMonth={displayedMonth}\n start={start}\n end={end}\n selected={value}\n onChange={date => {\n onChange(date)\n }}\n />\n <div className=\"mt-2\">\n <TextButton\n color=\"primary\"\n onClick={() => {\n const newDate = new Date()\n newDate.setHours(value.getHours(), value.getMinutes())\n onChange(newDate)\n }}\n >\n {translation('today')}\n </TextButton>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Example for the Date Picker\n */\nexport const DatePickerUncontrolled = ({\n value = new Date(),\n onChange = noop,\n ...props\n }: DatePickerProps) => {\n const [date, setDate] = useState<Date>(value)\n\n useEffect(() => setDate(value), [value])\n\n return (\n <DatePicker\n {...props}\n value={date}\n onChange={date1 => {\n setDate(date1)\n onChange(date1)\n }}\n />\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\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","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\n/**\n * A type describing the pluralization of a word\n */\nexport type TranslationPlural = {\n zero?: string,\n one?: string,\n two?: string,\n few?: string,\n many?: string,\n other: string,\n}\n\n/**\n * The type describing all values of a translation\n */\nexport type TranslationType = Record<string, string | TranslationPlural>\n\n/**\n * The type of translations\n */\nexport type Translation<T extends TranslationType> = Record<Language, T>\n\ntype OverwriteTranslationType<T extends TranslationType> = {\n language?: Language,\n translation?: Translation<Partial<T>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends TranslationType,\n Props = unknown\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n}\n\ntype StringKeys<T> = Extract<keyof T, string>;\n\ntype TranslationFunctionOptions = {\n replacements?: Record<string, string>,\n count?: number,\n}\ntype TranslationFunction<T extends TranslationType> = (key: StringKeys<T>, options?: TranslationFunctionOptions) => string\n\nexport const TranslationPluralCount = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 11,\n other: -1,\n}\n\n\nexport const useTranslation = <T extends TranslationType>(\n translations: Translation<Partial<TranslationType>>[],\n overwriteTranslation: OverwriteTranslationType<T> = {}\n): TranslationFunction<T> => {\n const { language: languageProp, translation: overwrite } = overwriteTranslation\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n const usedTranslations = [...translations]\n if (overwrite) {\n usedTranslations.push(overwrite)\n }\n\n return (key: StringKeys<T>, options?: TranslationFunctionOptions): string => {\n const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options }\n\n try {\n for (let i = translations.length - 1; i >= 0; i--) {\n const translation = translations[i]\n const localizedTranslation = translation[usedLanguage]\n if (!localizedTranslation) {\n continue\n }\n const value = localizedTranslation[key]\n if(!value) {\n continue\n }\n\n let forProcessing: string\n if (typeof value !== 'string') {\n if (count === TranslationPluralCount.zero && value?.zero) {\n forProcessing = value.zero\n } else if (count === TranslationPluralCount.one && value?.one) {\n forProcessing = value.one\n } else if (count === TranslationPluralCount.two && value?.two) {\n forProcessing = value.two\n } else if (TranslationPluralCount.few <= count && count < TranslationPluralCount.many && value?.few) {\n forProcessing = value.few\n } else if (count > TranslationPluralCount.many && value?.many) {\n forProcessing = value.many\n } else {\n forProcessing = value.other\n }\n } else {\n forProcessing = value\n }\n forProcessing = forProcessing.replace(/\\{\\{(\\w+)}}/g, (_, placeholder) => {\n return replacements[placeholder] ?? `{{key:${placeholder}}}` // fallback if key is missing\n })\n return forProcessing\n }\n } catch (e) {\n console.error(e)\n }\n return `{{${usedLanguage}:${key}}}`\n }\n}","export const noop = () => undefined\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\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\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}\n","import { equalSizeGroups } from './array'\n\nexport const monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nexport const 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 getDaysInMonth = (year: number, month: number): number => {\n const lastDayOfMonth = new Date(year, month + 1, 0)\n return lastDayOfMonth.getDate()\n}\n\nexport type Duration = {\n years?: number,\n months?: number,\n days?: number,\n hours?: number,\n minutes?: number,\n seconds?: number,\n milliseconds?: number,\n}\n\nexport const changeDuration = (date: Date, duration: Duration, 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: Duration): Date => {\n return changeDuration(date, duration, true)\n}\n\nexport const subtractDuration = (date: Date, duration: Duration): Date => {\n return changeDuration(date, duration, false)\n}\n\nexport const getBetweenDuration = (startDate: Date, endDate: Date): Duration => {\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 */\nexport const 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","import type { ButtonHTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport { forwardRef } from 'react'\nimport clsx from 'clsx'\n\n\nexport const ButtonColorUtil = {\n solid: ['primary', 'secondary', 'tertiary', 'positive', 'warning', 'negative', 'neutral'] as const,\n text: ['primary', 'negative', 'neutral'] as const,\n outline: ['primary'] as const,\n}\n\nexport const IconButtonUtil = {\n icon: [...ButtonColorUtil.solid, 'transparent'] as const,\n}\n\n\n/**\n * The allowed colors for the SolidButton and IconButton\n */\nexport type SolidButtonColor = typeof ButtonColorUtil.solid[number]\n/**\n * The allowed colors for the OutlineButton\n */\nexport type OutlineButtonColor = typeof ButtonColorUtil.outline[number]\n/**\n * The allowed colors for the TextButton\n */\nexport type TextButtonColor = typeof ButtonColorUtil.text[number]\n/**\n * The allowed colors for the IconButton\n */\nexport type IconButtonColor = typeof IconButtonUtil.icon[number]\n\n\n/**\n * The different sizes for a button\n */\ntype ButtonSizes = 'small' | 'medium' | 'large'\n\ntype IconButtonSize = 'tiny' | 'small' | 'medium' | 'large'\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = PropsWithChildren<{\n /**\n * @default 'medium'\n */\n size?: ButtonSizes,\n}> & ButtonHTMLAttributes<Element>\n\nconst paddingMapping: Record<ButtonSizes, string> = {\n small: 'btn-sm',\n medium: 'btn-md',\n large: 'btn-lg'\n}\n\nconst iconPaddingMapping: Record<IconButtonSize, string> = {\n tiny: 'icon-btn-xs',\n small: 'icon-btn-sm',\n medium: 'icon-btn-md',\n large: 'icon-btn-lg'\n}\n\nexport const ButtonUtil = {\n paddingMapping,\n iconPaddingMapping\n}\n\ntype ButtonWithIconsProps = ButtonProps & {\n startIcon?: ReactNode,\n endIcon?: ReactNode,\n}\n\nexport type SolidButtonProps = ButtonWithIconsProps & {\n color?: SolidButtonColor,\n}\n\nexport type OutlineButtonProps = ButtonWithIconsProps & {\n color?: OutlineButtonColor,\n}\n\nexport type TextButtonProps = ButtonWithIconsProps & {\n color?: TextButtonColor,\n}\n\n/**\n * The shard properties between all button types\n */\nexport type IconButtonProps = PropsWithChildren<{\n /**\n * @default 'medium'\n */\n size?: IconButtonSize,\n color?: IconButtonColor,\n}> & ButtonHTMLAttributes<Element>\n\n/**\n * A button with a solid background and different sizes\n */\nconst SolidButton = forwardRef<HTMLButtonElement, SolidButtonProps>(function SolidButton({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }, ref) {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-solid-primary-icon',\n secondary: 'text-button-solid-secondary-icon',\n tertiary: 'text-button-solid-tertiary-icon',\n positive: 'text-button-solid-positive-icon',\n warning: 'text-button-solid-warning-icon',\n negative: 'text-button-solid-negative-icon',\n neutral: 'text-button-solid-neutral-icon',\n }[color]\n\n return (\n <button\n ref={ref}\n onClick={onClick}\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n})\n\n/**\n * A button with an outline border and different sizes\n */\nconst OutlineButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: OutlineButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent border-2 border-button-outline-primary-text text-button-outline-primary-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-outline-primary-icon',\n }[color]\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text border-disabled-outline cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-80')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A text that is a button that can have different sizes\n */\nconst TextButton = ({\n children,\n disabled = false,\n color = 'neutral',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: TextButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent text-button-text-primary-text',\n negative: 'bg-transparent text-button-text-negative-text',\n neutral: 'bg-transparent text-button-text-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-text-primary-icon',\n negative: 'text-button-text-negative-icon',\n neutral: 'text-button-text-neutral-icon',\n }[color]\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:bg-button-text-hover-background')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n\n/**\n * A button for icons with a solid background and different sizes\n */\nconst IconButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n className,\n ...restProps\n }: IconButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n transparent: 'bg-transparent',\n }[color]\n\n return (\n <button\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled && color !== 'transparent',\n 'text-disabled-text cursor-not-allowed opacity-70': disabled && color === 'transparent',\n 'hover:bg-button-text-hover-background': !disabled && color === 'transparent',\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled,\n },\n ButtonUtil.iconPaddingMapping[size],\n className\n )}\n {...restProps}\n >\n {children}\n </button>\n )\n}\n\nexport { SolidButton, OutlineButton, TextButton, IconButton }\n","import { useEffect, useRef, useState } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { noop } from '../../util/noop'\nimport { equalSizeGroups, range } from '../../util/array'\nimport clsx from 'clsx'\nimport { ExpandableUncontrolled } from '../layout-and-navigation/Expandable'\nimport { addDuration, monthsList, subtractDuration } from '../../util/date'\nimport { useLocale } from '../../localization/LanguageProvider'\nimport { SolidButton } from '../user-action/Button'\n\nexport type YearMonthPickerProps = {\n displayedYearMonth?: Date,\n start?: Date,\n end?: Date,\n onChange?: (date: Date) => void,\n className?: string,\n maxHeight?: number,\n showValueOpen?: boolean,\n}\n\n// TODO use a dynamically loading infinite list here\nexport const YearMonthPicker = ({\n displayedYearMonth = new Date(),\n start = subtractDuration(new Date(), { years: 50 }),\n end = addDuration(new Date(), { years: 50 }),\n onChange = noop,\n className = '',\n maxHeight = 300,\n showValueOpen = true\n }: YearMonthPickerProps) => {\n const locale = useLocale()\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const scrollToItem = () => {\n if (ref.current) {\n ref.current.scrollIntoView({\n behavior: 'instant',\n block: 'center',\n })\n }\n }\n\n scrollToItem()\n }, [ref])\n\n if (end < start) {\n console.error(`startYear: (${start}) less than endYear: (${end})`)\n return null\n }\n\n const years = range([start.getFullYear(), end.getFullYear()], { exclusiveEnd: false })\n\n return (\n <div className={clsx('flex-col-0 select-none', className)}>\n <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n <div className=\"flex-col-1 mr-3\">\n {years.map(year => {\n const selectedYear = displayedYearMonth.getFullYear() === year\n return (\n <ExpandableUncontrolled\n key={year}\n ref={(displayedYearMonth.getFullYear() ?? new Date().getFullYear()) === year ? ref : undefined}\n label={<span className={clsx({ 'text-primary font-bold': selectedYear })}>{year}</span>}\n isExpanded={showValueOpen && selectedYear}\n contentClassName=\"gap-y-1\"\n >\n {equalSizeGroups([...monthsList], 3).map((monthList, index) => (\n <div key={index} className=\"flex-row-1\">\n {monthList.map(month => {\n const monthIndex = monthsList.indexOf(month)\n const newDate = new Date(year, monthIndex)\n\n const selectedMonth = selectedYear && monthIndex === displayedYearMonth.getMonth()\n const firstOfMonth = new Date(year, monthIndex, 1)\n const lastOfMonth = new Date(year, monthIndex, 1)\n const isAfterStart = start === undefined || start <= addDuration(subtractDuration(lastOfMonth, { days: 1 }), { months: 1 })\n const isBeforeEnd = end === undefined || firstOfMonth <= end\n const isValid = isAfterStart && isBeforeEnd\n return (\n <SolidButton\n key={month}\n disabled={!isValid}\n color={selectedMonth && isValid ? 'primary' : 'neutral'}\n className=\"flex-1\"\n size=\"small\"\n onClick={() => {\n onChange(newDate)\n }}\n >\n {new Intl.DateTimeFormat(locale, { month: 'short' }).format(newDate)}\n </SolidButton>\n )\n })}\n </div>\n ))}\n </ExpandableUncontrolled>\n )\n })}\n </div>\n </Scrollbars>\n </div>\n )\n}\n\nexport const YearMonthPickerUncontrolled = ({\n displayedYearMonth,\n onChange = noop,\n ...props\n }: YearMonthPickerProps) => {\n const [yearMonth, setYearMonth] = useState<Date>(displayedYearMonth ?? new Date())\n\n useEffect(() => setYearMonth(displayedYearMonth), [displayedYearMonth])\n\n return (\n <YearMonthPicker\n displayedYearMonth={yearMonth}\n onChange={date => {\n setYearMonth(date)\n onChange(date)\n }}\n {...props}\n />\n )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { forwardRef, useCallback, useEffect, useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\n\ntype IconBuilder = (expanded: boolean) => ReactNode\n\nexport type ExpandableProps = PropsWithChildren<{\n label: ReactNode,\n icon?: IconBuilder,\n isExpanded?: boolean,\n onChange?: (isExpanded: boolean) => void,\n /**\n * Whether the expansion should only happen when the header is clicked or on the entire component\n */\n clickOnlyOnHeader?: boolean,\n disabled?: boolean,\n className?: string,\n headerClassName?: string,\n contentClassName?: string,\n contentExpandedClassName?: string,\n}>\n\n\nexport type ExpansionIconProps = {\n isExpanded: boolean,\n className?: string,\n}\n\nexport const ExpansionIcon = ({ isExpanded, className }: ExpansionIconProps) => {\n return (\n <ChevronDown\n className={clsx(\n 'min-w-6 w-6 min-h-6 h-6 transition-transform duration-200 ease-in-out',\n { 'rotate-180': isExpanded },\n className\n )}\n />\n )\n}\n\n\n/**\n * A Component for showing and hiding content\n */\nexport const Expandable = forwardRef<HTMLDivElement, ExpandableProps>(function Expandable({\n children,\n label,\n icon,\n isExpanded = false,\n onChange = noop,\n clickOnlyOnHeader = true,\n disabled = false,\n className,\n headerClassName,\n contentClassName,\n contentExpandedClassName,\n }, ref) {\n const defaultIcon = useCallback((expanded: boolean) => <ExpansionIcon isExpanded={expanded}/>, [])\n icon ??= defaultIcon\n\n return (\n <div\n ref={ref}\n className={clsx('flex-col-0 bg-surface text-on-surface group rounded-lg shadow-sm', { 'cursor-pointer': !clickOnlyOnHeader && !disabled }, className)}\n onClick={() => !clickOnlyOnHeader && !disabled && onChange(!isExpanded)}\n >\n <div\n className={clsx(\n 'flex-row-2 py-2 px-4 rounded-lg justify-between items-center bg-surface text-on-surface select-none',\n {\n 'group-hover:brightness-97': !isExpanded,\n 'hover:brightness-97': isExpanded && !disabled,\n 'cursor-pointer': clickOnlyOnHeader && !disabled,\n },\n headerClassName\n )}\n onClick={() => clickOnlyOnHeader && !disabled && onChange(!isExpanded)}\n >\n {label}\n {icon(isExpanded)}\n </div>\n <div\n className={clsx(\n 'flex-col-2 px-4 transition-all duration-300 ease-in-out',\n {\n [clsx('max-h-96 opacity-100 pb-2 overflow-y-auto', contentExpandedClassName)]: isExpanded,\n 'max-h-0 opacity-0 overflow-hidden': !isExpanded,\n },\n contentClassName\n )}\n >\n {children}\n </div>\n </div>\n )\n})\n\nexport const ExpandableUncontrolled = forwardRef<HTMLDivElement, ExpandableProps>(function ExpandableUncontrolled({\n isExpanded,\n onChange = noop,\n ...props\n },\n ref) {\n const [usedIsExpanded, setUsedIsExpanded] = useState(isExpanded)\n\n useEffect(() => {\n setUsedIsExpanded(isExpanded)\n }, [isExpanded])\n\n return (\n <Expandable\n {...props}\n ref={ref}\n isExpanded={usedIsExpanded}\n onChange={value => {\n onChange(value)\n setUsedIsExpanded(value)\n }}\n />\n )\n})\n","import type { WeekDay } from '../../util/date'\nimport { equalDate, getWeeksForCalenderMonth, isInTimeSpan } from '../../util/date'\nimport { noop } from '../../util/noop'\nimport clsx from 'clsx'\nimport { useLocale } from '../../localization/LanguageProvider'\nimport { useEffect, useState } from 'react'\n\nexport type DayPickerProps = {\n displayedMonth: Date,\n selected?: Date,\n start?: Date,\n end?: Date,\n onChange?: (date: Date) => void,\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 selected,\n start,\n end,\n onChange = noop,\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 return (\n <div className={clsx('flex-col-1 min-w-[220px] select-none', className)}>\n <div className=\"flex-row-2 text-center\">\n {weeks[0]!.map((weekDay, index) => (\n <div key={index} className=\"flex-1 font-semibold\">\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} className=\"flex-row-2 text-center\">\n {week.map((date) => {\n const isSelected = !!selected && equalDate(selected, date)\n const isToday = equalDate(new Date(), date)\n const isSameMonth = date.getMonth() === month\n const isDayValid = isInTimeSpan(date, start, end)\n return (\n <button\n disabled={!isDayValid}\n key={date.getDate()}\n className={clsx(\n 'flex-1 rounded-full border-2',\n {\n 'text-description': !isSameMonth && !isSelected && isDayValid,\n 'text-button-solid-neutral-text bg-button-solid-neutral-background': !isSelected && isSameMonth && isDayValid,\n 'text-button-solid-primary-text bg-button-solid-primary-background': isSelected && isDayValid,\n 'hover:brightness-90 hover:bg-button-solid-primary-background hover:text-button-solid-primary-text': isDayValid,\n 'text-disabled-text bg-disabled-background cursor-not-allowed': !isDayValid,\n 'border-secondary': isToday && markToday,\n 'border-transparent': !isToday || !markToday,\n }\n )}\n onClick={() => onChange(date)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n ))}\n </div>\n )\n}\n\nexport const DayPickerUncontrolled = ({\n displayedMonth,\n selected,\n onChange = noop,\n ...restProps\n }: DayPickerProps) => {\n const [date, setDate] = useState(selected)\n const [usedDisplayedMonth, setUsedDDisplayedMonth] = useState(displayedMonth)\n\n useEffect(() => {\n setDate(selected)\n setUsedDDisplayedMonth(selected)\n }, [selected])\n\n return (\n <DayPicker\n displayedMonth={usedDisplayedMonth}\n selected={date}\n onChange={newDate => {\n setDate(newDate)\n setUsedDDisplayedMonth(newDate)\n onChange(newDate)\n }}\n {...restProps}\n />\n )\n}\n","import type { TranslationPlural, Translation } from '../useTranslation'\n\nexport type MonthTranslationType = {\n january: string,\n february: string,\n march: string,\n april: string,\n may: string,\n june: string,\n july: string,\n august: string,\n september: string,\n october: string,\n november: string,\n december: string,\n}\n\nexport const monthTranslation: Translation<MonthTranslationType> = {\n en: {\n january: 'January',\n february: 'Febuary',\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 },\n de: {\n january: 'Januar',\n february: 'Febuar',\n march: 'März',\n april: 'April',\n may: 'Mai',\n june: 'Juni',\n july: 'Juli',\n august: 'August',\n september: 'September',\n october: 'October',\n november: 'November',\n december: 'December',\n }\n}\n\nexport type TimeTranslationType = {\n century: TranslationPlural,\n decade: TranslationPlural,\n year: TranslationPlural,\n month: TranslationPlural,\n day: TranslationPlural,\n hour: TranslationPlural,\n minute: TranslationPlural,\n second: TranslationPlural,\n millisecond: TranslationPlural,\n microsecond: TranslationPlural,\n nanosecond: TranslationPlural,\n yesterday: string,\n today: string,\n tomorrow: string,\n in: string,\n ago: string,\n} & MonthTranslationType\n\nexport const timeTranslation: Translation<TimeTranslationType> = {\n en: {\n ...monthTranslation.en,\n century: { one: 'Century', other: 'Centuries' },\n decade: { one: 'Decade', other: 'Decades' },\n year: { one: 'Year', other: 'Years' },\n month: { one: 'Month', other: 'Months' },\n day: { one: 'Day', other: 'Days' },\n hour: { one: 'Hour', other: 'Hours' },\n minute: { one: 'Minute', other: 'Minutes' },\n second: { one: 'Second', other: 'Seconds' },\n millisecond: { one: 'Millisecond', other: 'Milliseconds' },\n microsecond: { one: 'Microsecond', other: 'Microseconds' },\n nanosecond: { one: 'Nanosecond', other: 'Nanoseconds' },\n yesterday: 'Yesterday',\n today: 'Today',\n tomorrow: 'Tomorrow',\n in: 'in',\n ago: 'ago',\n },\n de: {\n ...monthTranslation.de,\n century: { one: 'Jahrhundert', other: 'Jahrhunderte' },\n decade: { one: 'Jahrzehnt', other: 'Jahrzehnte' },\n year: { one: 'Jahr', other: 'Jahre' },\n month: { one: 'Monat', other: 'Monate' },\n day: { one: 'Tag', other: 'Tage' },\n hour: { one: 'Stunde', other: 'Stunden' },\n minute: { one: 'Minute', other: 'Minuten' },\n second: { one: 'Sekunde', other: 'Sekunden' },\n millisecond: { one: 'Millisekunde', other: 'Millisekunden' },\n microsecond: { one: 'Mikrosekunde', other: 'Mikrosekunden' },\n nanosecond: { one: 'Nanosekunde', other: 'Nanosekunden' },\n yesterday: 'Gestern',\n today: 'Heute',\n tomorrow: 'Morgen',\n in: 'in',\n ago: 'vor',\n }\n}","import type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { TimeTranslationType } from '../../localization/defaults/time'\nimport { timeTranslation } from '../../localization/defaults/time'\n\ntype TimeDisplayTranslationType = TimeTranslationType & {\n inDays: string,\n agoDays: string,\n}\n\nconst defaultTimeDisplayTranslations: Translation<TimeDisplayTranslationType> = {\n en: {\n ...timeTranslation.en,\n inDays: `in {{days}} days`,\n agoDays: `{{days}} days ago`,\n },\n de: {\n ...timeTranslation.de,\n inDays: `in {{days}} Tagen`,\n agoDays: `vor {{days}} Tagen`,\n }\n}\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 overwriteTranslation,\n date,\n mode = 'daysFromToday'\n }: PropsForTranslation<TimeDisplayTranslationType, TimeDisplayProps>) => {\n const translation = useTranslation([defaultTimeDisplayTranslations], overwriteTranslation)\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('today')\n } else if (differenceInDays === 1) {\n displayString = isBefore ? translation('yesterday') : translation('tomorrow')\n } else {\n displayString = isBefore ? translation('agoDays', { replacements: { days: differenceInDays.toString() } }) : translation('inDays', { replacements: { days: differenceInDays.toString() } })\n }\n const monthToTranslation: { [key: number]: string } = {\n 0: translation('january'),\n 1: translation('february'),\n 2: translation('march'),\n 3: translation('april'),\n 4: translation('may'),\n 5: translation('june'),\n 6: translation('july'),\n 7: translation('august'),\n 8: translation('september'),\n 9: translation('october'),\n 10: translation('november'),\n 11: translation('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 (\n <span>\n {fullString}\n </span>\n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { noop } from '../../util/noop'\nimport { closestMatch, range } from '../../util/array'\nimport clsx from 'clsx'\n\ntype MinuteIncrement = '1min' | '5min' | '10min' | '15min' | '30min'\n\nexport type TimePickerProps = {\n time?: Date,\n onChange?: (time: Date) => void,\n is24HourFormat?: boolean,\n minuteIncrement?: MinuteIncrement,\n maxHeight?: number,\n className?: string,\n}\n\nexport const TimePicker = ({\n time = new Date(),\n onChange = noop,\n is24HourFormat = true,\n minuteIncrement = '5min',\n maxHeight = 300,\n className = ''\n }: TimePickerProps) => {\n const minuteRef = useRef<HTMLButtonElement>(null)\n const hourRef = useRef<HTMLButtonElement>(null)\n\n const isPM = time.getHours() >= 11\n const hours = is24HourFormat ? range(24) : range([1, 12], { exclusiveEnd: false })\n let minutes = range(60)\n\n useEffect(() => {\n const scrollToItem = () => {\n if (minuteRef.current) {\n const container = minuteRef.current.parentElement!\n\n const hasOverflow = container.scrollHeight > maxHeight\n if (hasOverflow) {\n minuteRef.current.scrollIntoView({\n behavior: 'instant',\n block: 'nearest',\n })\n }\n }\n }\n scrollToItem()\n }, [minuteRef, minuteRef.current]) // eslint-disable-line\n\n useEffect(() => {\n const scrollToItem = () => {\n if (hourRef.current) {\n const container = hourRef.current.parentElement!\n\n const hasOverflow = container.scrollHeight > maxHeight\n if (hasOverflow) {\n hourRef.current.scrollIntoView({\n behavior: 'instant',\n block: 'nearest',\n })\n }\n }\n }\n scrollToItem()\n }, [hourRef, hourRef.current]) // eslint-disable-line\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 - time.getMinutes()) < Math.abs(item2 - time.getMinutes()))\n\n const style = (selected: boolean) => clsx('chip-full hover:brightness-90 hover:bg-primary hover:text-on-primary rounded-md mr-3',\n { 'bg-primary text-on-primary': selected, 'bg-white text-black': !selected })\n\n const onChangeWrapper = (transformer: (newDate: Date) => void) => {\n const newDate = new Date(time)\n transformer(newDate)\n onChange(newDate)\n }\n\n return (\n <div className={clsx('flex-row-2 w-fit min-w-[150px] select-none', className)}>\n <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n <div className=\"flex-col-1 h-full\">\n {hours.map(hour => {\n const currentHour = hour === time.getHours() - (!is24HourFormat && isPM ? 12 : 0)\n return (\n <button\n key={hour}\n ref={currentHour ? hourRef : undefined}\n className={style(currentHour)}\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 </Scrollbars>\n <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n <div className=\"flex-col-1 h-full\">\n {minutes.map(minute => {\n const currentMinute = minute === closestMinute\n return (\n <button\n key={minute + minuteIncrement} // minute increment so that scroll works\n ref={currentMinute ? minuteRef : undefined}\n className={style(currentMinute)}\n onClick={() => onChangeWrapper(newDate => newDate.setMinutes(minute))}\n >\n {minute.toString().padStart(2, '0')}\n </button>\n )\n })}\n </div>\n </Scrollbars>\n {!is24HourFormat && (\n <div className=\"flex-col-1\">\n <button\n className={style(!isPM)}\n onClick={() => onChangeWrapper(newDate => isPM && newDate.setHours(newDate.getHours() - 12))}\n >\n AM\n </button>\n <button\n className={style(isPM)}\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 time,\n onChange = noop,\n ...props\n }: TimePickerProps) => {\n const [value, setValue] = useState(time)\n useEffect(() => setValue(time), [time])\n\n return (\n <TimePicker\n {...props}\n time={value}\n onChange={time1 => {\n setValue(time1)\n onChange(time1)\n }}\n />\n )\n}\n","import type { PropsWithChildren } from 'react'\nimport type { SolidButtonColor } from '../user-action/Button'\nimport { SolidButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { DialogProps } from '../layout-and-navigation/Overlay'\nimport { Dialog } from '../layout-and-navigation/Overlay'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype ConfirmDialogTranslation = FormTranslationType\n\nexport type ConfirmDialogType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n text?: string,\n color?: SolidButtonColor,\n disabled?: boolean,\n}\n\nexport type ConfirmDialogProps = DialogProps & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onConfirm: () => void,\n onDecline?: () => void,\n confirmType?: ConfirmDialogType,\n /**\n * Order: Decline, Confirm\n */\n buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Dialog for demanding the user for confirmation\n *\n * To allow for background closing, prefer using a ConfirmModal\n */\nexport const ConfirmDialog = ({\n overwriteTranslation,\n children,\n onConfirm,\n onDecline,\n confirmType = 'positive',\n buttonOverwrites,\n className,\n ...restProps\n }: PropsForTranslation<ConfirmDialogTranslation, PropsWithChildren<ConfirmDialogProps>>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n\n const mapping: Record<ConfirmDialogType, SolidButtonColor> = {\n neutral: 'primary',\n negative: 'negative',\n positive: 'positive',\n primary: 'primary',\n }\n\n return (\n <Dialog {...restProps} 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 {onDecline && (\n <SolidButton\n color={buttonOverwrites?.[0].color ?? 'negative'}\n onClick={onDecline}\n\n disabled={buttonOverwrites?.[0].disabled ?? false}\n >\n {buttonOverwrites?.[0].text ?? translation('decline')}\n </SolidButton>\n )}\n <SolidButton\n autoFocus\n color={buttonOverwrites?.[1].color ?? mapping[confirmType]}\n onClick={onConfirm}\n disabled={buttonOverwrites?.[1].disabled ?? false}\n >\n {buttonOverwrites?.[1].text ?? translation('confirm')}\n </SolidButton>\n </div>\n </Dialog>\n )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport clsx from 'clsx'\nimport { Tooltip } from '../user-action/Tooltip'\nimport { X } from 'lucide-react'\nimport { IconButton } from '../user-action/Button'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\nexport type OverlayProps = PropsWithChildren<{\n /**\n * Whether the overlay should be currently displayed\n */\n isOpen: boolean,\n /**\n * Callback when the background is clicked\n */\n onBackgroundClick?: () => void,\n /**\n * Styling for the background\n *\n * To remove the darkening, set bg-transparent\n */\n backgroundClassName?: string,\n}>\n\n/**\n * A generic overlay window which is managed by its parent\n */\nexport const Overlay = ({\n children,\n isOpen,\n onBackgroundClick,\n backgroundClassName,\n }: PropsWithChildren<OverlayProps>) => {\n // The element to which the overlay will be attached to\n const [root, setRoot] = useState<HTMLElement>()\n\n useEffect(() => {\n setRoot(document.body)\n }, [])\n\n if (!root || !isOpen) return null\n\n return ReactDOM.createPortal(\n <div className={clsx('fixed inset-0 z-[9999]')}>\n <div\n className={clsx('fixed inset-0 h-screen w-screen bg-overlay-shadow', backgroundClassName)}\n onClick={onBackgroundClick}\n />\n {children}\n </div>,\n root\n )\n}\n\n\nlet overlayStack: HTMLDivElement[] = []\n\n\n// --- Modal ---\n\ntype ModalHeaderTranslation = FormTranslationType\n\nconst defaultModalHeaderTranslation: Translation<FormTranslationType> = {\n en: {\n ...formTranslation.en\n },\n de: {\n ...formTranslation.de\n }\n}\n\nexport type OverlayHeaderProps = {\n /**\n * Callback when the close button is clicked. If omitted or undefined, the button is hidden\n */\n onClose?: () => void,\n /** The title of the Modal. If you want to only set the text use `titleText` instead */\n title?: ReactNode,\n /** The title text of the Modal. If you want to set a custom title use `title` instead */\n titleText?: string,\n /** The description of the Modal. If you want to only set the text use `descriptionText` instead */\n description?: ReactNode,\n /** The description text of the Modal. If you want to set a custom description use `description` instead */\n descriptionText?: string,\n}\n\n/**\n * A header that should be in an Overlay\n */\nexport const OverlayHeader = ({\n overwriteTranslation,\n onClose,\n title,\n titleText = '',\n description,\n descriptionText = ''\n }: PropsForTranslation<ModalHeaderTranslation, OverlayHeaderProps>) => {\n const translation = useTranslation([defaultModalHeaderTranslation], overwriteTranslation)\n const hasTitleRow = !!title || !!titleText || !!onClose\n const titleRow = (\n <div className=\"flex-row-8 justify-between items-start\">\n {title ?? (\n <h2\n className={clsx('textstyle-title-lg', {\n 'mb-1': description || descriptionText,\n })}\n >\n {titleText}\n </h2>\n )}\n {!!onClose && (\n <Tooltip tooltip={translation('close')}>\n <IconButton color=\"neutral\" size=\"small\" onClick={onClose}>\n <X className=\"w-full h-full\"/>\n </IconButton>\n </Tooltip>\n )}\n </div>\n )\n\n return (\n <div className=\"flex-col-2\">\n {hasTitleRow && (titleRow)}\n {description ?? (descriptionText && (<span className=\"textstyle-description\">{descriptionText}</span>))}\n </div>\n )\n}\n\nexport type ModalProps = {\n isOpen: boolean,\n onClose: () => void,\n className?: string,\n backgroundClassName?: string,\n headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n}\n\n/**\n * A Generic Modal Window\n */\nexport const Modal = ({\n children,\n isOpen,\n onClose,\n className,\n backgroundClassName,\n headerProps,\n }: PropsWithChildren<ModalProps>) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!isOpen) return\n\n const modal = ref.current\n\n if (!modal) {\n console.error('modal open, but no ref found')\n return\n }\n\n overlayStack.push(modal)\n\n const focusable = modal?.querySelectorAll(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n )\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isTopmost = overlayStack[overlayStack.length - 1] === modal\n if (!isTopmost) return\n\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose()\n } else if (e.key === 'Tab') {\n if (focusable.length === 0) return\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n (last as HTMLElement).focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n (first as HTMLElement).focus()\n }\n }\n }\n\n modal.focus()\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n overlayStack = overlayStack.filter(m => m !== modal)\n }\n }, [isOpen, onClose])\n\n return (\n <Overlay\n isOpen={isOpen}\n onBackgroundClick={onClose}\n backgroundClassName={backgroundClassName}\n >\n <div\n ref={ref}\n tabIndex={-1}\n className={clsx(\n 'flex-col-2 fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 p-4 bg-overlay-background text-overlay-text rounded-xl shadow-xl animate-pop-in',\n className\n )}\n role=\"dialog\"\n aria-modal={true}\n >\n <OverlayHeader {...headerProps} onClose={onClose}/>\n {children}\n </div>\n </Overlay>\n )\n}\n\n// --- Dialog ---\n\nexport type DialogProps = Omit<OverlayProps, 'onBackgroundClick'> & {\n headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n className?: string,\n}\n\n/**\n * A Generic Dialog Window\n */\nexport const Dialog = ({\n children,\n isOpen,\n className,\n backgroundClassName,\n headerProps,\n }: PropsWithChildren<DialogProps>) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!isOpen) return\n\n const dialog = ref.current\n\n if (!dialog) {\n console.error('dialog open, but no ref found')\n return\n }\n\n overlayStack.push(dialog)\n\n const focusable = dialog?.querySelectorAll(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n )\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isTopmost = overlayStack[overlayStack.length - 1] === dialog\n if (!isTopmost) return\n\n if (e.key === 'Escape') {\n e.stopPropagation()\n } else if (e.key === 'Tab') {\n if (focusable.length === 0) return\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n (last as HTMLElement).focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n (first as HTMLElement).focus()\n }\n }\n }\n\n dialog.focus()\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n overlayStack = overlayStack.filter(m => m !== dialog)\n }\n }, [isOpen])\n\n return (\n <Overlay\n isOpen={isOpen}\n backgroundClassName={backgroundClassName}\n >\n <div\n ref={ref}\n tabIndex={-1}\n className={clsx(\n 'flex-col-2 fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 p-4 bg-overlay-background text-overlay-text rounded-xl shadow-xl animate-pop-in',\n className\n )}\n role=\"dialog\"\n aria-modal={true}\n >\n {!!headerProps && (<OverlayHeader {...headerProps}/>)}\n {children}\n </div>\n </Overlay>\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 { CSSProperties, PropsWithChildren, ReactNode } from 'react'\nimport { useHoverState } from '../../hooks/useHoverState'\nimport { clsx } from 'clsx'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type TooltipProps = PropsWithChildren<{\n tooltip: ReactNode,\n /**\n * Number of milliseconds until the tooltip appears\n *\n * defaults to 1000ms\n */\n animationDelay?: number,\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 animationDelay The delay before the tooltip appears\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 Tooltip = ({\n tooltip,\n children,\n animationDelay = 650,\n tooltipClassName = '',\n containerClassName = '',\n position = 'bottom',\n zIndex = 10,\n }: TooltipProps) => {\n const { isHovered, handlers } = useHoverState()\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', containerClassName)}\n {...handlers}\n >\n {children}\n {isHovered && (\n <div\n className={clsx(\n `opacity-0 absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap\n animate-tooltip-fade-in shadow-around-md bg-tooltip-background`,\n positionClasses[position], tooltipClassName\n )}\n style={{ zIndex, animationDelay: animationDelay + 'ms' }}\n >\n {tooltip}\n <div\n className={clsx(`absolute w-0 h-0`, triangleClasses[position])}\n style={{ ...triangleStyle[position], zIndex: zIndex + 1 }}\n />\n </div>\n )}\n </div>\n )\n}\n","import type { Translation } from '../useTranslation'\n\nexport type FormTranslationType = {\n add: string,\n all: string,\n apply: string,\n back: string,\n cancel: string,\n change: string,\n clear: string,\n click: string,\n clickToCopy: string,\n close: string,\n confirm: string,\n copy: string,\n copied: string,\n create: string,\n decline: string,\n delete: string,\n discard: string,\n discardChanges: string,\n done: string,\n edit: string,\n enterText: string,\n error: string,\n exit: string,\n fieldRequiredError: string,\n invalidEmailError: string,\n less: string,\n loading: string,\n maxLengthError: string,\n minLengthError: string,\n more: string,\n next: string,\n no: string,\n none: string,\n of: string,\n optional: string,\n pleaseWait: string,\n previous: string,\n remove: string,\n required: string,\n reset: string,\n save: string,\n saved: string,\n search: string,\n select: string,\n selectOption: string,\n show: string,\n showMore: string,\n showLess: string,\n submit: string,\n success: string,\n unsavedChanges: string,\n unsavedChangesSaveQuestion: string,\n update: string,\n yes: string,\n}\n\nexport const formTranslation: Translation<FormTranslationType> = {\n en: {\n add: 'Add',\n all: 'All',\n apply: 'Apply',\n back: 'Back',\n cancel: 'Cancel',\n change: 'Change',\n clear: 'Clear',\n click: 'Click',\n clickToCopy: 'Click to Copy',\n close: 'Close',\n confirm: 'Confirm',\n copy: 'Copy',\n copied: 'Copied',\n create: 'Create',\n decline: 'Decline',\n delete: 'Delete',\n discard: 'Discard',\n discardChanges: 'Discard Changes',\n done: 'Done',\n edit: 'Edit',\n enterText: 'Enter text here',\n error: 'Error',\n exit: 'Exit',\n fieldRequiredError: 'This field is required.',\n invalidEmailError: 'Please enter a valid email address.',\n less: 'Less',\n loading: 'Loading',\n maxLengthError: 'Maximum length exceeded.',\n minLengthError: 'Minimum length not met.',\n more: 'More',\n next: 'Next',\n no: 'No',\n none: 'None',\n of: 'of',\n optional: 'Optional',\n pleaseWait: 'Please wait...',\n previous: 'Previous',\n remove: 'Remove',\n required: 'Required',\n reset: 'Reset',\n save: 'Save',\n saved: 'Saved',\n search: 'Search',\n select: 'Select',\n selectOption: 'Select an option',\n show: 'Show',\n showMore: 'Show more',\n showLess: 'Show less',\n submit: 'Submit',\n success: 'Success',\n update: 'Update',\n unsavedChanges: 'Unsaved Changes',\n unsavedChangesSaveQuestion: 'Do you want to save your changes?',\n yes: 'Yes',\n },\n de: {\n add: 'Hinzufügen',\n all: 'Alle',\n apply: 'Anwenden',\n back: 'Zurück',\n cancel: 'Abbrechen',\n change: 'Ändern',\n clear: 'Löschen',\n click: 'Klicken',\n clickToCopy: 'Zum kopieren klicken',\n close: 'Schließen',\n confirm: 'Bestätigen',\n copy: 'Kopieren',\n copied: 'Kopiert',\n create: 'Erstellen',\n decline: 'Ablehnen',\n delete: 'Löschen',\n discard: 'Verwerfen',\n discardChanges: 'Änderungen Verwerfen',\n done: 'Fertig',\n edit: 'Bearbeiten',\n enterText: 'Text hier eingeben',\n error: 'Fehler',\n exit: 'Beenden',\n fieldRequiredError: 'Dieses Feld ist erforderlich.',\n invalidEmailError: 'Bitte geben Sie eine gültige E-Mail-Adresse ein.',\n less: 'Weniger',\n loading: 'Lädt',\n maxLengthError: 'Maximale Länge überschritten.',\n minLengthError: 'Mindestlänge nicht erreicht.',\n more: 'Mehr',\n next: 'Weiter',\n no: 'Nein',\n none: 'Nichts',\n of: 'von',\n optional: 'Optional',\n pleaseWait: 'Bitte warten...',\n previous: 'Vorherige',\n remove: 'Entfernen',\n required: 'Erforderlich',\n reset: 'Zurücksetzen',\n save: 'Speichern',\n saved: 'Gespeichert',\n search: 'Suche',\n select: 'Select',\n selectOption: 'Option auswählen',\n show: 'Anzeigen',\n showMore: 'Mehr anzeigen',\n showLess: 'Weniger anzeigen',\n submit: 'Abschicken',\n success: 'Erfolg',\n update: 'Update',\n unsavedChanges: 'Ungespeicherte Änderungen',\n unsavedChangesSaveQuestion: 'Möchtest du die Änderungen speichern?',\n yes: 'Ja',\n }\n}\n","import clsx from 'clsx'\n\nexport const avtarSizeList = ['tiny', 'small', 'medium', 'large'] as const\nexport type AvatarSize = typeof avtarSizeList[number]\nexport const avatarSizeMapping: Record<AvatarSize, number> = {\n tiny: 24,\n small: 32,\n medium: 48,\n large: 64\n}\n\nexport type AvatarProps = {\n avatarUrl: string,\n alt: string,\n size?: AvatarSize,\n className?: string,\n}\n\n/**\n * A component for showing a profile picture\n */\nexport const Avatar = ({ avatarUrl, alt, size = 'medium', className = '' }: AvatarProps) => {\n // TODO remove later\n avatarUrl = 'https://cdn.helpwave.de/boringavatar.svg'\n\n const avtarSize = {\n tiny: 24,\n small: 32,\n medium: 48,\n large: 64,\n }[size]\n\n const style = {\n width: avtarSize + 'px',\n height: avtarSize + 'px',\n maxWidth: avtarSize + 'px',\n maxHeight: avtarSize + 'px',\n minWidth: avtarSize + 'px',\n minHeight: avtarSize + 'px',\n }\n\n return (\n // TODO transparent or white background later\n <div className={clsx(`rounded-full bg-primary shadow`, className)} style={style}>\n <img\n className=\"rounded-full\"\n style={style}\n src={avatarUrl}\n alt={alt}\n width={avtarSize}\n height={avtarSize}\n />\n </div>\n )\n}\n\nexport type AvatarGroupProps = {\n avatars: Omit<AvatarProps, 'size'>[],\n maxShownProfiles?: number,\n size?: AvatarSize,\n}\n\n/**\n * A component for showing a group of Avatar's\n */\nexport const AvatarGroup = ({\n avatars,\n maxShownProfiles = 5,\n size = 'tiny'\n }: AvatarGroupProps) => {\n const displayedProfiles = avatars.length < maxShownProfiles ? avatars : avatars.slice(0, maxShownProfiles)\n const diameter = avatarSizeMapping[size]\n const stackingOverlap = 0.5 // given as a percentage\n const notDisplayedProfiles = avatars.length - maxShownProfiles\n const avatarGroupWidth = diameter * (stackingOverlap * (displayedProfiles.length - 1) + 1)\n return (\n <div className=\"flex-row-2 relative\" style={{ height: diameter + 'px' }}>\n <div style={{ width: avatarGroupWidth + 'px' }}>\n {displayedProfiles.map((avatar, index) => (\n <div\n key={index}\n className=\"absolute\"\n style={{ left: (index * diameter * stackingOverlap) + 'px', zIndex: maxShownProfiles - index }}\n >\n <Avatar avatarUrl={avatar.avatarUrl} alt={avatar.alt} size={size}/>\n </div>\n ))}\n </div>\n {\n notDisplayedProfiles > 0 && (\n <div\n className=\"flex-row-2 truncate items-center\"\n style={{ fontSize: (diameter / 2) + 'px', marginLeft: (1 + diameter / 16) + 'px' }}\n >\n <span>+ {notDisplayedProfiles}</span>\n </div>\n )\n }\n </div>\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 type { CSSProperties } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { noop } from '../../util/noop'\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 = noop,\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 = noop,\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","export 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 <img\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 Link from 'next/link'\nimport clsx from 'clsx'\n\nexport type Crumb = {\n display: string,\n link: string,\n}\n\ntype BreadCrumbProps = {\n crumbs: Crumb[],\n linkClassName?: string,\n containerClassName?: string,\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 BreadCrumb = ({ crumbs, linkClassName, containerClassName }: BreadCrumbProps) => {\n const color = 'text-description'\n\n return (\n <div className={clsx('flex-row-0', containerClassName)}>\n {crumbs.map((crumb, index) => (\n <div key={index}>\n <Link href={crumb.link}\n className={clsx(linkClassName, { [`${color} hover:brightness-60`]: index !== crumbs.length - 1 })}>\n {crumb.display}\n </Link>\n {index !== crumbs.length - 1 && <span className={clsx(`px-1`, color)}>/</span>}\n </div>\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '../../util/array'\nimport { clamp } from '../../util/math'\nimport { EaseFunctions } from '../../util/easeFunctions'\nimport type { Direction } from '../../util/loopingArray'\nimport { LoopingArrayCalculator } from '../../util/loopingArray'\nimport { IconButton } from '../user-action/Button'\n\n\nexport type CarouselProps = {\n children: ReactNode[],\n animationTime?: number,\n isLooping?: boolean,\n isAutoLooping?: 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 className?: string,\n heightClassName?: string,\n widthClassName?: string,\n}\n\ntype ItemType = {\n item: ReactNode,\n index: number,\n}\n\ntype CarouselAnimationState = {\n targetPosition: number,\n /**\n * Value of either 1 or -1, 1 is forwards -1 is backwards\n */\n direction: Direction,\n startPosition: number,\n startTime?: number,\n lastUpdateTime?: number,\n isAutoLooping: boolean,\n}\n\ntype DragState = {\n startX: number,\n startTime: number,\n lastX: number,\n startIndex: number,\n}\n\ntype CarouselInformation = {\n currentPosition: number,\n dragState?: DragState,\n animationState?: CarouselAnimationState,\n}\n\nexport const Carousel = ({\n children,\n animationTime = 200,\n isLooping = false,\n isAutoLooping = false,\n autoLoopingTimeOut = 5000,\n autoLoopAnimationTime = 500,\n hintNext = false,\n arrows = false,\n dots = true,\n overScrollThreshold = 0.1,\n blurColor = 'from-background',\n className = '',\n heightClassName = 'h-96',\n widthClassName = 'w-[70%] desktop:w-1/2',\n }: CarouselProps) => {\n if (isAutoLooping && !isLooping) {\n console.error('When isAutoLooping is true, isLooping should also be true')\n isLooping = true\n }\n\n const [{\n currentPosition,\n dragState,\n animationState,\n }, setCarouselInformation] = useState<CarouselInformation>({\n currentPosition: 0,\n })\n const animationId = useRef<number | undefined>(undefined)\n const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut)\n\n const length = children.length\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 util = useMemo(() => new LoopingArrayCalculator(length, isLooping, overScrollThreshold), [length, isLooping, overScrollThreshold])\n const currentIndex = util.getCorrectedPosition(LoopingArrayCalculator.withoutOffset(currentPosition))\n animationTime = Math.max(200, animationTime) // in ms, must be > 0\n autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n const getStyleOffset = (index: number) => {\n const baseOffset = -50 + (index - currentPosition) * 100\n return `${baseOffset}%`\n }\n\n const animation = useCallback((time: number) => {\n let keepAnimating: boolean = true\n\n // Other calculation in the setState call to avoid updating the useCallback to often\n setCarouselInformation((state) => {\n const {\n animationState,\n dragState\n } = state\n if (animationState === undefined || dragState !== undefined) {\n keepAnimating = false\n return state\n }\n if (!animationState.startTime || !animationState.lastUpdateTime) {\n return {\n ...state,\n animationState: {\n ...animationState,\n startTime: time,\n lastUpdateTime: time\n }\n }\n }\n const useAnimationTime = animationState.isAutoLooping ? autoLoopAnimationTime : animationTime\n const progress = clamp((time - animationState.startTime) / useAnimationTime) // progress\n const easedProgress = EaseFunctions.easeInEaseOut(progress)\n const distance = util.getDistanceDirectional(animationState.startPosition, animationState.targetPosition, animationState.direction)\n const newPosition = util.getCorrectedPosition(easedProgress * distance * animationState.direction + animationState.startPosition)\n\n if (animationState.targetPosition === newPosition || progress === 1) {\n keepAnimating = false\n return ({\n currentPosition: LoopingArrayCalculator.withoutOffset(newPosition),\n animationState: undefined\n })\n }\n return ({\n currentPosition: newPosition,\n animationState: {\n ...animationState!,\n lastUpdateTime: time\n }\n })\n })\n if (keepAnimating) {\n animationId.current = requestAnimationFrame(time1 => animation(time1))\n }\n }, [animationTime, autoLoopAnimationTime, util])\n\n useEffect(() => {\n if (animationState) {\n animationId.current = requestAnimationFrame(animation)\n }\n return () => {\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = 0\n }\n }\n }, [animationState]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAutoLoop = () => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: prevState.dragState,\n animationState: prevState.animationState || prevState.dragState ? prevState.animationState : {\n startPosition: currentPosition,\n targetPosition: (currentPosition + 1) % length,\n direction: 1, // always move forward\n isAutoLooping: true\n }\n }))\n\n useEffect(() => {\n if (!animationId.current && !animationState && !dragState && !timeOut.current) {\n if (autoLoopingTimeOut > 0) {\n timeOut.current = setTimeout(() => {\n startAutoLoop()\n timeOut.current = undefined\n }, autoLoopingTimeOut)\n } else {\n startAutoLoop()\n }\n }\n }, [animationState, dragState, animationId.current, timeOut.current]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAnimation = (targetPosition?: number) => {\n if (targetPosition === undefined) {\n targetPosition = LoopingArrayCalculator.withoutOffset(currentPosition)\n }\n if (targetPosition === currentPosition) {\n return // we are exactly where we want to be\n }\n\n // find target index and fastest path to it\n const direction = util.getBestDirection(currentPosition, targetPosition)\n clearTimeout(timeOut.current)\n timeOut.current = undefined\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = undefined\n }\n\n setCarouselInformation(prevState => ({\n ...prevState,\n dragState: undefined,\n animationState: {\n targetPosition: targetPosition!,\n direction,\n startPosition: currentPosition,\n isAutoLooping: false\n },\n timeOut: undefined\n }))\n }\n\n const canGoLeft = () => {\n return isLooping || currentPosition !== 0\n }\n\n const canGoRight = () => {\n return isLooping || currentPosition !== length - 1\n }\n\n const left = () => {\n if (canGoLeft()) {\n startAnimation(currentPosition === 0 ? length - 1 : LoopingArrayCalculator.withoutOffset(currentPosition - 1))\n }\n }\n\n const right = () => {\n if (canGoRight()) {\n startAnimation(LoopingArrayCalculator.withoutOffset((currentPosition + 1) % length))\n }\n }\n\n let items: ItemType[] = children.map((item, index) => ({\n index,\n item\n }))\n\n if (isLooping) {\n const before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n index,\n item\n }))\n const after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n index,\n item\n }))\n items = [\n ...before,\n ...items,\n ...after\n ]\n }\n\n const onDragStart = (x: number) => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: {\n lastX: x,\n startX: x,\n startTime: Date.now(),\n startIndex: currentPosition,\n },\n animationState: undefined // cancel animation\n }))\n\n const onDrag = (x: number, width: number) => {\n // For some weird reason the clientX is 0 on the last dragUpdate before drag end causing issues\n if (!dragState || x === 0) {\n return\n }\n const offsetUpdate = (dragState.lastX - x) / width\n const newPosition = util.getCorrectedPosition(currentPosition + offsetUpdate)\n\n setCarouselInformation(prevState => ({\n ...prevState,\n currentPosition: newPosition,\n dragState: {\n ...dragState,\n lastX: x\n },\n }))\n }\n\n const onDragEnd = (x: number, width: number) => {\n if (!dragState) {\n return\n }\n const distance = dragState.startX - x\n const relativeDistance = distance / width\n const duration = (Date.now() - dragState.startTime) // in milliseconds\n const velocity = distance / (Date.now() - dragState.startTime)\n\n const isSlide = Math.abs(velocity) > 2 || (duration < 200 && (Math.abs(relativeDistance) > 0.2 || Math.abs(distance) > 50))\n if (isSlide) {\n if (distance > 0 && canGoRight()) {\n right()\n return\n } else if (distance < 0 && canGoLeft()) {\n left()\n return\n }\n }\n startAnimation()\n }\n\n const dragHandlers = {\n draggable: true,\n onDragStart: (event: React.DragEvent<HTMLDivElement>) => {\n onDragStart(event.clientX)\n event.dataTransfer.setDragImage(document.createElement('div'), 0, 0)\n },\n onDrag: (event: React.DragEvent<HTMLDivElement>) => onDrag(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onDragEnd: (event: React.DragEvent<HTMLDivElement>) => onDragEnd(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchStart: (event: React.TouchEvent<HTMLDivElement>) => onDragStart(event.touches[0]!.clientX),\n onTouchMove: (event: React.TouchEvent<HTMLDivElement>) => onDrag(event.touches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchEnd: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchCancel: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n }\n\n return (\n <div className=\"flex-col-2 items-center w-full\">\n <div className={clsx(`relative w-full overflow-hidden`, heightClassName, className)}>\n {arrows && (\n <>\n <IconButton\n color=\"neutral\"\n className={clsx('absolute z-10 left-0 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoLeft() })}\n disabled={!canGoLeft()}\n onClick={() => left()}\n >\n <ChevronLeft size={24}/>\n </IconButton>\n <IconButton\n color=\"neutral\"\n className={clsx('absolute z-10 right-0 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoRight() })}\n disabled={!canGoRight()}\n onClick={() => right()}\n >\n <ChevronRight size={24}/>\n </IconButton>\n </>\n )}\n {hintNext ? (\n <div className={clsx(`flex-row-2 relative h-full`, heightClassName)}>\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 <div\n key={listIndex}\n className={clsx(`absolute left-[50%] h-full overflow-hidden`, widthClassName, { '!cursor-grabbing': !!dragState })}\n style={{ translate: getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0)) }}\n {...dragHandlers}\n onClick={() => startAnimation(index)}\n >\n {item}\n </div>\n ))}\n </div>\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n />\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n />\n </div>\n ) : (\n <div className={clsx('px-16 h-full', { '!cursor-grabbing': !!dragState })} {...dragHandlers}>\n {children[currentIndex]}\n </div>\n )}\n </div>\n {dots && (\n <div\n className=\"flex-row-2 items-center justify-center w-full my-2\">\n {range(length).map(index => (\n <button\n key={index}\n className={clsx('w-8 min-w-8 h-3 min-h-3 first:rounded-l-md last:rounded-r-md', {\n 'bg-carousel-dot-disabled hover:bg-carousel-dot-active': currentIndex !== index,\n 'bg-carousel-dot-active hover:brightness-90': currentIndex === index\n })}\n onClick={() => startAnimation(index)}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n","export const clamp = (value: number, min: number = 0, max: number = 1): number => {\n return Math.min(Math.max(value, min), max)\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","import type { HTMLProps, PropsWithChildren, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nexport type ChipColor = 'default' | 'dark' | 'red' | 'yellow' | 'green' | 'blue' | 'pink'\ntype ChipVariant = 'normal' | 'fullyRounded'\n\nexport type ChipProps = HTMLProps<HTMLDivElement> & PropsWithChildren<{\n color?: ChipColor,\n variant?: ChipVariant,\n trailingIcon?: ReactNode,\n}>\n\n/**\n * A component for displaying a single chip\n */\nexport const Chip = ({\n children,\n trailingIcon,\n color = 'default',\n variant = 'normal',\n className = '',\n ...restProps\n }: ChipProps) => {\n const colorMapping: string = {\n default: 'text-tag-default-text bg-tag-default-background',\n dark: 'text-tag-dark-text bg-tag-dark-background',\n red: 'text-tag-red-text bg-tag-red-background',\n yellow: 'text-tag-yellow-text bg-tag-yellow-background',\n green: 'text-tag-green-text bg-tag-green-background',\n blue: 'text-tag-blue-text bg-tag-blue-background',\n pink: 'text-tag-pink-text bg-tag-pink-background',\n }[color]\n\n const colorMappingIcon: string = {\n default: 'text-tag-default-icon',\n dark: 'text-tag-dark-icon',\n red: 'text-tag-red-icon',\n yellow: 'text-tag-yellow-icon',\n green: 'text-tag-green-icon',\n blue: 'text-tag-blue-icon',\n pink: 'text-tag-pink-icon',\n }[color]\n\n return (\n <div\n {...restProps}\n className={clsx(\n `row w-fit px-2 py-1`,\n colorMapping,\n {\n 'rounded-md': variant === 'normal',\n 'rounded-full': variant === 'fullyRounded',\n },\n className\n )}\n >\n {children}\n {trailingIcon && (<span className={colorMappingIcon}>{trailingIcon}</span>)}\n </div>\n )\n}\n\nexport type ChipListProps = {\n list: ChipProps[],\n className?: string,\n}\n\n/**\n * A component for displaying a list of chips\n */\nexport const ChipList = ({\n list,\n className = ''\n }: ChipListProps) => {\n return (\n <div className={clsx('flex flex-wrap gap-x-2 gap-y-2', className)}>\n {list.map((value, index) => (\n <Chip\n key={index}\n {...value}\n color={value.color ?? 'dark'}\n variant={value.variant ?? 'normal'}\n >\n {value.children}\n </Chip>\n ))}\n </div>\n )\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","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { ExpandableProps } from './Expandable'\nimport { ExpansionIcon } from './Expandable'\nimport { ExpandableUncontrolled } from './Expandable'\nimport { MarkdownInterpreter } from './MarkdownInterpreter'\n\ntype ContentType = {\n type: 'markdown',\n value: string,\n} | {\n type: 'custom',\n value: ReactNode,\n}\n\nexport type FAQItem = Pick<ExpandableProps, 'isExpanded' | 'className'> & {\n id: string,\n title: string,\n content: ContentType,\n}\n\nexport type FAQSectionProps = {\n entries: FAQItem[],\n expandableClassName?: string,\n}\n\n/**\n * Description\n */\nexport const FAQSection = ({\n entries,\n expandableClassName\n }: FAQSectionProps) => {\n return (\n <div className=\"flex-col-4\">\n {entries.map(({ id, title, content, ...restProps }) => (\n <ExpandableUncontrolled\n key={id}\n {...restProps}\n label={(<h3 id={id} className=\"textstyle-title-md\">{title}</h3>)}\n clickOnlyOnHeader={false}\n icon={(expanded) => (<ExpansionIcon isExpanded={expanded} className=\"text-primary\"/>)}\n className={clsx('rounded-xl', expandableClassName)}\n >\n <div className=\"mt-2\">\n {content.type === 'markdown' ? (<MarkdownInterpreter text={content.value}/>) : content.value}\n </div>\n </ExpandableUncontrolled>\n ))}\n </div>\n )\n}\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 { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { Input } from '../user-action/Input'\nimport { clamp } from '../../util/math'\nimport type { CSSProperties } from 'react'\nimport { useEffect, useState } from 'react'\nimport { IconButton } from '../user-action/Button'\n\ntype PaginationTranslation = FormTranslationType\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 overwriteTranslation,\n pageIndex,\n pageCount,\n onPageChanged,\n className,\n style,\n }: PropsForTranslation<PaginationTranslation, PaginationProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\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 <IconButton color=\"transparent\" onClick={() => changePage(0)} disabled={onFirstPage || noPages}>\n <ChevronFirst/>\n </IconButton>\n <IconButton color=\"transparent\" onClick={() => changePage(pageIndex - 1)} disabled={onFirstPage || noPages}>\n <ChevronLeft/>\n </IconButton>\n <div className=\"flex-row-2 min-w-56 items-center justify-center mx-2 text-center\">\n <Input\n value={value}\n containerClassName=\"flex flex-1 h-10\"\n className={clsx(\n 'w-full text-center font-bold input-indicator-hidden'\n )}\n type=\"number\"\n min={1}\n max={pageCount}\n disabled={noPages}\n onChangeText={value => {\n if (value) {\n setValue(clamp(Number(value), 1, pageCount).toString())\n } else {\n setValue(value)\n }\n }}\n onEditCompleted={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 flex-1 items-center justify-center select-none h-10 bg-surface text-on-surface rounded-md font-bold\">{pageCount}</span>\n </div>\n <IconButton color=\"transparent\" onClick={() => changePage(pageIndex + 1)} disabled={onLastPage || noPages}>\n <ChevronRight/>\n </IconButton>\n <IconButton color=\"transparent\" onClick={() => changePage(pageCount - 1)} disabled={onLastPage || noPages}>\n <ChevronLast/>\n </IconButton>\n </div>\n )\n}\n","import React, { forwardRef, type InputHTMLAttributes, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { UseDelayOptionsResolved } from '../../hooks/useDelay'\nimport { useDelay } from '../../hooks/useDelay'\nimport { noop } from '../../util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\nimport { useFocusManagement } from '../../hooks/useFocusManagement'\nimport { useFocusOnceVisible } from '../../hooks/useFocusOnceVisible'\n\ntype GetInputClassNameProps = {\n disabled?: boolean,\n hasError?: boolean,\n}\nconst getInputClassName = ({ disabled = false, hasError = false }: GetInputClassNameProps) => {\n return clsx(\n 'px-2 py-1.5 rounded-md border-2',\n {\n 'bg-surface text-on-surface hover:border-primary focus:border-primary': !disabled && !hasError,\n 'bg-on-negative text-negative border-negative-border hover:border-negative-border-hover': !disabled && hasError,\n 'bg-disabled-background text-disabled-text border-disabled-border': disabled,\n }\n )\n}\n\nexport type EditCompleteOptionsResolved = {\n onBlur: boolean,\n afterDelay: boolean,\n} & Omit<UseDelayOptionsResolved, 'disabled'>\n\nexport type EditCompleteOptions = Partial<EditCompleteOptionsResolved>\n\nconst defaultEditCompleteOptions: EditCompleteOptionsResolved = {\n onBlur: true,\n afterDelay: true,\n delay: 2500\n}\n\nexport type InputProps = {\n /**\n * used for the label's `for` attribute\n */\n label?: Omit<LabelProps, 'id'>,\n /**\n * Callback for when the input's value changes\n * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n * That could be enforced through a union type but that seems a bit overkill\n * @default noop\n */\n onChangeText?: (text: string) => void,\n className?: string,\n onEditCompleted?: (text: string) => void,\n allowEnterComplete?: boolean,\n expanded?: boolean,\n containerClassName?: string,\n editCompleteOptions?: EditCompleteOptions,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'label'>\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nconst Input = forwardRef<HTMLInputElement, InputProps>(function Input({\n id,\n type = 'text',\n value,\n label,\n onChange = noop,\n onChangeText = noop,\n onEditCompleted,\n className = '',\n allowEnterComplete = true,\n expanded = true,\n autoFocus = false,\n onBlur,\n editCompleteOptions,\n containerClassName,\n disabled,\n ...restProps\n }, forwardedRef) {\n const { onBlur: allowEditCompleteOnBlur, afterDelay, delay } = { ...defaultEditCompleteOptions, ...editCompleteOptions }\n\n const {\n restartTimer,\n clearTimer\n } = useDelay({ delay, disabled: !afterDelay })\n\n const innerRef = useRef<HTMLInputElement>(null)\n const { focusNext } = useFocusManagement()\n\n useFocusOnceVisible(innerRef, !autoFocus)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n innerRef.current?.blur()\n focusNext()\n }\n }\n\n return (\n <div className={clsx({ 'w-full': expanded }, containerClassName)}>\n {label && <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)} />}\n <input\n {...restProps}\n ref={innerRef}\n value={value}\n id={id}\n type={type}\n disabled={disabled}\n className={clsx(getInputClassName({ disabled }), className)}\n onKeyDown={allowEnterComplete ? handleKeyDown : undefined}\n onBlur={event => {\n onBlur?.(event)\n if (onEditCompleted && allowEditCompleteOnBlur) {\n onEditCompleted(event.target.value)\n clearTimer()\n }\n }}\n onChange={e => {\n const value = e.target.value\n if (onEditCompleted) {\n restartTimer(() => {\n if(innerRef.current){\n innerRef.current.blur()\n if(!allowEditCompleteOnBlur) {\n onEditCompleted(value)\n }\n } else {\n onEditCompleted(value)\n }\n })\n }\n onChange(e)\n onChangeText(value)\n }}\n />\n </div>\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 */\nconst InputUncontrolled = ({\n value = '',\n onChangeText = noop,\n ...props\n }: InputProps) => {\n const [usedValue, setUsedValue] = useState(value)\n\n useEffect(() => {\n setUsedValue(value)\n }, [value])\n\n return (\n <Input\n {...props}\n value={usedValue}\n onChangeText={text => {\n setUsedValue(text)\n onChangeText(text)\n }}\n />\n )\n}\n\nexport type FormInputProps = InputHTMLAttributes<HTMLInputElement> & {\n id: string,\n labelText?: string,\n errorText?: string,\n labelClassName?: string,\n errorClassName?: string,\n containerClassName?: string,\n}\n\nconst FormInput = forwardRef<HTMLInputElement, FormInputProps>(function FormInput({\n id,\n labelText,\n errorText,\n className,\n labelClassName,\n errorClassName,\n containerClassName,\n required,\n disabled,\n ...restProps\n }, ref) {\n const input = (\n <input\n {...restProps}\n ref={ref}\n id={id}\n disabled={disabled}\n className={clsx(\n getInputClassName({ disabled, hasError: !!errorText }),\n className\n )}\n />\n )\n\n return (\n <div className={clsx('flex flex-col gap-y-1', containerClassName)}>\n {labelText && (\n <label htmlFor={id} className={clsx('textstyle-label-md', labelClassName)}>\n {labelText}\n {required && <span className=\"text-primary font-bold\">*</span>}\n </label>\n )}\n {input}\n {errorText && <label htmlFor={id} className={clsx('text-negative', errorClassName)}>{errorText}</label>}\n </div>\n )\n})\n\nexport {\n InputUncontrolled,\n Input,\n FormInput\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 type { LabelHTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type LabelType = 'labelSmall' | 'labelMedium' | 'labelBig'\n\nconst styleMapping: Record<LabelType, string> = {\n labelSmall: 'textstyle-label-sm',\n labelMedium: 'textstyle-label-md',\n labelBig: 'textstyle-label-lg',\n}\n\nexport type LabelProps = {\n /** The text for the label */\n name?: string,\n /** The styling for the label */\n labelType?: LabelType,\n} & LabelHTMLAttributes<HTMLLabelElement>\n\n/**\n * A Label component\n */\nexport const Label = ({\n children,\n name,\n labelType = 'labelSmall',\n className,\n ...props\n }: LabelProps) => {\n return (\n <label {...props} className={clsx(styleMapping[labelType], className)}>\n {children ? children : name}\n </label>\n )\n}\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 { MutableRefObject } from 'react'\nimport React, { useEffect } from 'react'\n\nexport const useFocusOnceVisible = (\n ref: MutableRefObject<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 type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Input } from '../user-action/Input'\nimport { IconButton } from '../user-action/Button'\nimport type { UseSearchProps } from '../../hooks/useSearch'\nimport { useSearch } from '../../hooks/useSearch'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype SearchableListAddonTranslation = {\n nothingFound: string,\n}\n\ntype SearchableListTranslation = SearchableListAddonTranslation & FormTranslationType\n\nconst defaultSearchableListTranslation: Translation<SearchableListAddonTranslation> = {\n en: {\n nothingFound: 'Nothing found'\n },\n de: {\n nothingFound: 'Nichts gefunden'\n }\n}\n\nexport type SearchableListProps<T> = UseSearchProps<T> & {\n autoFocus?: boolean,\n minimumItemsForSearch?: number,\n itemMapper: (value: T, index: number) => ReactNode,\n className?: string,\n resultListClassName?: string,\n}\n\n/**\n * A component for searching a list\n */\nexport const SearchableList = <T, >({\n overwriteTranslation,\n list,\n initialSearch = '',\n searchMapping,\n autoFocus,\n minimumItemsForSearch = 6,\n itemMapper,\n className,\n resultListClassName\n }: PropsForTranslation<SearchableListTranslation, SearchableListProps<T>>) => {\n const translation = useTranslation([defaultSearchableListTranslation, formTranslation], overwriteTranslation)\n const { result, hasResult, search, setSearch, updateSearch } = useSearch<T>({ list, initialSearch, searchMapping })\n\n return (\n <div className={clsx('flex-col-2', className)}>\n {list.length > minimumItemsForSearch && (\n <div className=\"flex-row-2 justify-between items-center\">\n <Input\n value={search}\n onChangeText={setSearch}\n placeholder={translation('search')}\n autoFocus={autoFocus}\n className=\"w-full\"\n />\n <IconButton color=\"neutral\" onClick={() => updateSearch()}>\n <Search className=\"w-full h-full\"/>\n </IconButton>\n </div>\n )}\n {hasResult ? (\n <div className={clsx('flex-col-1 overflow-y-auto', resultListClassName)}>\n {result.map(itemMapper)}\n </div>\n ) : (\n <div className=\"flex-row-2 text-description py-2 px-2\">{translation('nothingFound')}</div>\n )}\n </div>\n )\n}","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { MultiSubjectSearchWithMapping } from '../util/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","import { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { range } from '../../util/array'\nimport { SolidButton } from '../user-action/Button'\nimport clsx from 'clsx'\nimport { useEffect, useState } from 'react'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype StepperBarTranslation = FormTranslationType\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 overwriteTranslation,\n state,\n numberOfSteps,\n disabledSteps = new Set(),\n onChange,\n onFinish,\n finishText,\n showDots = true,\n className = '',\n }: PropsForTranslation<StepperBarTranslation, StepperBarProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\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 <SolidButton\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 </SolidButton>\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 <SolidButton\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 </SolidButton>\n </div>\n )}\n {currentStep === numberOfSteps && (\n <div className=\"flex-row-2 flex-[2] justify-end\">\n <SolidButton\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 </SolidButton>\n </div>\n )}\n </div>\n )\n}\n\nexport const StepperBarUncontrolled = ({ state, onChange, ...props }: StepperBarProps) => {\n const [usedState, setUsedState] = useState<StepperState>(state ?? defaultState)\n\n useEffect(() => {\n setUsedState(state ?? defaultState)\n }, [state])\n\n return (\n <StepperBar\n {...props}\n state={usedState}\n onChange={newState => {\n setUsedState(newState)\n onChange(newState)\n }}\n />\n )\n}","import type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype TextImageColor = 'primary' | 'secondary' | 'dark'\n\ntype TextImageTranslation = FormTranslationType\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 overwriteTranslation,\n title,\n description,\n imageUrl,\n onShowMoreClicked,\n color = 'primary',\n badge,\n contentClassName = '',\n className = '',\n }: PropsForTranslation<TextImageTranslation, TextImageProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\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=\"textstyle-title-xl\">{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 onClick={onShowMoreClicked}>{translation('showMore')}</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 { AlertOctagon } from 'lucide-react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\n\ntype ErrorComponentTranslation = {\n errorOccurred: string,\n}\n\nconst defaultErrorComponentTranslation: Translation<ErrorComponentTranslation> = {\n en: {\n errorOccurred: 'An error occurred'\n },\n de: {\n errorOccurred: 'Ein Fehler ist aufgetreten'\n }\n}\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 overwriteTranslation,\n errorText,\n classname\n }: PropsForTranslation<ErrorComponentTranslation, ErrorComponentProps>) => {\n const translation = useTranslation([defaultErrorComponentTranslation], overwriteTranslation)\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 './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,\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-background rounded-md', className)}/>\n )\n}","import type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport { Helpwave } from '../icons-and-geometry/Helpwave'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype LoadingAnimationTranslation = FormTranslationType\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 overwriteTranslation,\n loadingText,\n classname\n }: PropsForTranslation<LoadingAnimationTranslation, LoadingAnimationProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n return (\n <div className={clsx('flex-col-2 items-center justify-center w-full h-24', classname)}>\n <Helpwave animate=\"loading\"/>\n {loadingText ?? `${translation('loading')}...`}\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type { SolidButtonProps } from '../user-action/Button'\nimport { ButtonUtil, SolidButton } from '../user-action/Button'\nimport { noop } from '../../util/noop'\nimport { Helpwave } from '../icons-and-geometry/Helpwave'\n\ntype LoadingButtonProps = {\n isLoading?: boolean,\n} & SolidButtonProps\n\nexport const LoadingButton = ({ isLoading = false, size = 'medium', onClick, ...rest }: LoadingButtonProps) => {\n const paddingClass = ButtonUtil.paddingMapping[size]\n\n return (\n <div className=\"inline-block relative\">\n {\n isLoading && (\n <div className={clsx('flex-row-2 absolute inset-0 items-center justify-center bg-white/40', paddingClass)}>\n <Helpwave animate=\"loading\" className=\"text-white\"/>\n </div>\n )\n }\n <SolidButton {...rest} disabled={rest.disabled} onClick={isLoading ? noop : onClick}/>\n </div>\n )\n}\n","export type ProgressIndicatorProps = {\n /*\n The amount of progress that has been made\n Value form 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 { PropsWithChildren } from 'react'\nimport type { SolidButtonColor } from '../user-action/Button'\nimport { SolidButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { ModalProps } from '../layout-and-navigation/Overlay'\nimport { Modal } from '../layout-and-navigation/Overlay'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype ConfirmModalTranslation = FormTranslationType\n\nexport type ConfirmModalType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n text?: string,\n color?: SolidButtonColor,\n disabled?: boolean,\n}\n\nexport type ConfirmModalProps = Omit<ModalProps, 'onClose'> & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onConfirm: () => void,\n onDecline?: () => void,\n confirmType?: ConfirmModalType,\n /**\n * Order: Cancel, Decline, Confirm\n */\n buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Modal for asking the user for confirmation\n */\nexport const ConfirmModal = ({\n overwriteTranslation,\n children,\n onCancel,\n onConfirm,\n onDecline,\n confirmType = 'positive',\n buttonOverwrites,\n className,\n ...restProps\n }: PropsForTranslation<ConfirmModalTranslation, PropsWithChildren<ConfirmModalProps>>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n\n const mapping: Record<ConfirmModalType, SolidButtonColor> = {\n neutral: 'neutral',\n negative: 'negative',\n positive: 'positive',\n primary: 'primary',\n }\n\n return (\n <Modal {...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 <SolidButton\n color={buttonOverwrites?.[0].color ?? 'neutral'}\n onClick={onCancel}\n disabled={buttonOverwrites?.[0].disabled ?? false}\n >\n {buttonOverwrites?.[0].text ?? translation('cancel')}\n </SolidButton>\n )}\n {onDecline && (\n <SolidButton\n color={buttonOverwrites?.[1].color ?? 'negative'}\n onClick={onDecline}\n\n disabled={buttonOverwrites?.[1].disabled ?? false}\n >\n {buttonOverwrites?.[1].text ?? translation('decline')}\n </SolidButton>\n )}\n <SolidButton\n autoFocus\n color={buttonOverwrites?.[2].color ?? mapping[confirmType]}\n onClick={onConfirm}\n disabled={buttonOverwrites?.[2].disabled ?? false}\n >\n {buttonOverwrites?.[2].text ?? translation('confirm')}\n </SolidButton>\n </div>\n </Modal>\n )\n}\n","import type { PropsWithChildren } from 'react'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { ConfirmModalProps } from './ConfirmModal'\nimport { ConfirmModal } from './ConfirmModal'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\n\ntype DiscardChangesModalTranslation = FormTranslationType\n\ntype DiscardChangesModalProps = Omit<ConfirmModalProps, 'onDecline' | 'onConfirm' | 'buttonOverwrites'> & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onSave: () => void,\n onDontSave: () => void,\n}\n\nexport const DiscardChangesModal = ({\n overwriteTranslation,\n children,\n onCancel,\n onSave,\n onDontSave,\n headerProps,\n ...modalProps\n }: PropsForTranslation<DiscardChangesModalTranslation, PropsWithChildren<DiscardChangesModalProps>>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n return (\n <ConfirmModal\n headerProps={{\n ...headerProps,\n titleText: headerProps?.titleText ?? translation('unsavedChanges'),\n descriptionText: headerProps?.descriptionText ?? translation('unsavedChangesSaveQuestion'),\n }}\n onConfirm={onSave}\n onCancel={onCancel}\n onDecline={onDontSave}\n buttonOverwrites={[{ text: translation('cancel') }, { text: translation('discardChanges') }, { text: translation('save') }]}\n {...modalProps}\n >\n {children}\n </ConfirmModal>\n )\n}\n","import type { InputProps } from '../user-action/Input'\nimport { Input } from '../user-action/Input'\nimport type { ConfirmModalProps } from './ConfirmModal'\nimport { ConfirmModal } from './ConfirmModal'\n\nexport type InputModalProps = ConfirmModalProps & {\n inputs: InputProps[],\n}\n\n/**\n * A modal for receiving multiple inputs\n */\nexport const InputModal = ({\n inputs,\n buttonOverwrites,\n ...restProps\n }: InputModalProps) => {\n return (\n <ConfirmModal\n buttonOverwrites={buttonOverwrites}\n {...restProps}\n >\n {inputs.map((inputProps, index) => <Input key={`input ${index}`} {...inputProps}/>)}\n </ConfirmModal>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useCallback } from 'react'\nimport { useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\nimport type { TileProps } from '../layout-and-navigation/Tile'\nimport { Tile } from '../layout-and-navigation/Tile'\nimport { ExpansionIcon } from '../layout-and-navigation/Expandable'\nimport type { MenuBag, MenuProps } from './Menu'\nimport { Menu } from './Menu'\nimport { SearchBar } from './SearchBar'\nimport type { UseSearchProps } from '../../hooks/useSearch'\nimport { useSearch } from '../../hooks/useSearch'\n\nexport type SelectTileProps = TileProps\n\nexport const SelectTile = ({\n className,\n disabledClassName,\n title,\n ...restProps\n }: SelectTileProps) => {\n return (\n <Tile\n {...restProps}\n className={clsx('px-2 py-1 rounded-md', className)}\n disabledClassName={disabledClassName ?? 'text-disabled-text cursor-not-allowed'}\n title={{ ...title, className: title.className ?? 'font-semibold' }}\n />\n )\n}\n\nexport type SelectOption<T> = {\n label: ReactNode,\n value: T,\n searchTags?: string[],\n disabled?: boolean,\n className?: string,\n}\n\nexport type SelectBag<T> = MenuBag & {\n selected?: T,\n search: string,\n}\n\nexport type SelectProps<T> = Omit<MenuProps<HTMLButtonElement>, 'trigger' | 'children'> & {\n value?: T,\n label?: LabelProps,\n options: SelectOption<T>[],\n onChange: (value: T) => void,\n hintText?: string,\n selectedDisplayOverwrite?: ReactNode,\n searchOptions?: Omit<UseSearchProps<SelectOption<T>>, 'list' | 'searchMapping'>,\n additionalItems?: (bag: SelectBag<T>) => ReactNode,\n className?: string,\n triggerClassName?: string,\n hintTextClassName?: string,\n};\n\n/**\n * A Select Component for selecting form a list of options\n *\n * The State is managed by the parent\n */\nexport const Select = <T, >({\n value,\n label,\n options,\n onChange,\n hintText = '',\n selectedDisplayOverwrite,\n searchOptions,\n additionalItems,\n className,\n triggerClassName,\n hintTextClassName,\n ...menuProps\n }: SelectProps<T>) => {\n const selectedOption = options.find(option => option.value === value)\n if (value !== undefined && selectedOption === undefined && selectedDisplayOverwrite === undefined) {\n console.warn('The selected value is not found in the options list. This might be an error on your part or' +\n ' default behavior if it is complex data type on which === does not work. In case of the latter' +\n ' use selectedDisplayOverwrite to set your selected text or component')\n }\n\n const isShowingHint = !selectedDisplayOverwrite && !selectedOption?.label\n\n const { result, search, setSearch } = useSearch<SelectOption<T>>({\n list: options,\n searchMapping: useCallback((item: SelectOption<T>) => item.searchTags, []),\n ...searchOptions\n })\n\n return (\n <div className={clsx(className)}>\n {label && (\n <Label {...label} labelType={label.labelType ?? 'labelBig'} className={clsx('mb-1', label.className)}/>\n )}\n <Menu<HTMLButtonElement>\n {...menuProps}\n trigger={({ toggleOpen, isOpen, disabled }, ref) => (\n <button\n ref={ref}\n className={clsx(\n 'btn-md justify-between w-full border-2',\n {\n 'rounded-b-lg': !open,\n 'bg-menu-background text-menu-text border-menu-border hover:border-primary': !disabled,\n 'bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed': disabled\n },\n triggerClassName\n )}\n onClick={toggleOpen}\n disabled={disabled}\n >\n {!isShowingHint &&\n <span className=\"font-semibold\">{selectedDisplayOverwrite ?? selectedOption?.label}</span>}\n {isShowingHint && (\n <span className={clsx('textstyle-description', hintTextClassName)}>\n {hintText}\n </span>\n )}\n <ExpansionIcon isExpanded={isOpen}/>\n </button>\n )}\n menuClassName={clsx('flex-col-2 p-2 max-h-96 overflow-hidden', menuProps.menuClassName)}\n >\n {(bag) => {\n const { close } = bag\n return (\n <>\n {!searchOptions?.disabled && (\n <SearchBar\n value={search}\n onChangeText={setSearch}\n autoFocus={true}\n />\n )}\n <div className=\"flex-col-2 overflow-y-auto\">\n {result.map((option, index) => (\n <SelectTile\n key={index}\n isSelected={option === selectedOption}\n title={{ value: option.label }}\n onClick={() => {\n onChange(option.value)\n close()\n }}\n disabled={option.disabled}\n />\n ))}\n {additionalItems && additionalItems({ ...bag, search, selected: value })}\n </div>\n </>\n )\n }}\n </Menu>\n </div>\n )\n}\n\nexport const SelectUncontrolled = <T, >({\n options, onChange, value, hintText, ...props\n }: SelectProps<T>) => {\n const [selected, setSelected] = useState(value)\n\n useEffect(() => {\n if (options.find(options => options.value === value)) {\n setSelected(value)\n }\n }, [options, value])\n\n return (\n <Select\n value={selected}\n options={options}\n onChange={value => {\n setSelected(value)\n onChange(value)\n }}\n hintText={hintText}\n {...props}\n />\n )\n}","import {\n type PropsWithChildren,\n type ReactNode,\n type RefObject,\n useEffect,\n useRef, useState\n} from 'react'\nimport clsx from 'clsx'\nimport { useOutsideClick } from '../../hooks/useOutsideClick'\nimport { useHoverState } from '../../hooks/useHoverState'\nimport type { PropsWithBagFunctionOrChildren } from '../../util/PropsWithFunctionChildren'\nimport { BagFunctionUtil } from '../../util/PropsWithFunctionChildren'\nimport type { PopoverHorizontalAlignment, PopoverVerticalAlignment } from '../../hooks/usePopoverPosition'\nimport { usePopoverPosition } from '../../hooks/usePopoverPosition'\nimport { createPortal } from 'react-dom'\n\nexport type MenuItemProps = {\n onClick?: () => void,\n alignment?: 'left' | 'right',\n isDisabled?: boolean,\n className?: string,\n}\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', {\n 'text-right': alignment === 'right',\n 'text-left': alignment === 'left',\n 'text-disabled-text 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<T> = PropsWithBagFunctionOrChildren<MenuBag> & {\n trigger: (bag: MenuBag, ref: RefObject<T>) => 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 = <T extends HTMLElement>({\n trigger,\n children,\n alignmentHorizontal = 'leftInside',\n alignmentVertical = 'bottomOutside',\n showOnHover = false,\n disabled = false,\n menuClassName = '',\n }: MenuProps<T>) => {\n const { isHovered: isOpen, setIsHovered: setIsOpen } = useHoverState({ isDisabled: !showOnHover || disabled })\n const triggerRef = useRef<T>(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 return (\n <>\n {trigger(bag, triggerRef)}\n {createPortal((<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 z-10',\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 }}\n >\n {BagFunctionUtil.resolve<MenuBag>(children, bag)}\n </div>), document.body)}\n </>\n )\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 type { ReactNode } from 'react'\n\nexport type BagFunction<T> = (bag: T) => ReactNode\n\nexport type PropsWithBagFunction<T, P = unknown> = P & { children?: BagFunction<T> }\n\nexport type PropsWithBagFunctionOrChildren<T, P = unknown> = P & { children?: BagFunction<T> | ReactNode }\n\nconst resolve = <T>(children: BagFunction<T> | ReactNode, bag: T): ReactNode => {\n if (typeof children === 'function') {\n return (children as BagFunction<T>)(bag)\n }\n\n return children ?? undefined\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 { InputProps } from './Input'\nimport { Input } from './Input'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { IconButton } from './Button'\nimport { Search } from 'lucide-react'\nimport { clsx } from 'clsx'\n\ntype TranslationType = FormTranslationType\n\nexport type SearchBarProps = InputProps & {\n onSearch?: () => void,\n disableOnSearch?: boolean,\n containerClassName?: string,\n}\n\nexport const SearchBar = ({\n placeholder,\n onSearch,\n disableOnSearch,\n containerClassName,\n ...inputProps\n }: SearchBarProps) => {\n const translation = useTranslation<TranslationType>([formTranslation])\n\n return (\n <div className={clsx('flex-row-2 justify-between items-center', containerClassName)}>\n <Input\n {...inputProps}\n placeholder={placeholder ?? translation('search')}\n />\n {onSearch && (\n <IconButton color=\"neutral\" disabled={disableOnSearch} onClick={onSearch}>\n <Search className=\"w-full h-full\"/>\n </IconButton>\n )}\n </div>\n )\n}","import { type PropsWithChildren } from 'react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Select } from '../user-action/Select'\nimport type { Language } from '../../localization/util'\nimport { LanguageUtil } from '../../localization/util'\nimport { useLanguage } from '../../localization/LanguageProvider'\nimport { SolidButton } from '../user-action/Button'\nimport { Modal, type ModalProps } from '../layout-and-navigation/Overlay'\n\ntype LanguageModalTranslation = {\n language: string,\n chooseLanguage: string,\n done: string,\n} & Record<Language, string>\n\nconst defaultLanguageModalTranslation: Translation<LanguageModalTranslation> = {\n en: {\n language: 'Language',\n chooseLanguage: 'Choose your language',\n done: 'Done',\n ...LanguageUtil.languagesLocalNames\n },\n de: {\n language: 'Sprache',\n chooseLanguage: 'Wähle deine bevorzugte Sprache',\n done: 'Fertig',\n ...LanguageUtil.languagesLocalNames\n }\n}\n\ntype LanguageModalProps = ModalProps\n\n/**\n * A Modal for selecting the Language\n *\n * The State of open needs to be managed by the parent\n */\nexport const LanguageModal = ({\n overwriteTranslation,\n headerProps,\n onClose,\n ...modalProps\n }: PropsForTranslation<LanguageModalTranslation, PropsWithChildren<LanguageModalProps>>) => {\n const { language, setLanguage } = useLanguage()\n const translation = useTranslation([defaultLanguageModalTranslation], overwriteTranslation)\n\n return (\n <Modal\n headerProps={{\n ...headerProps,\n titleText: headerProps?.titleText ?? translation('language'),\n descriptionText: headerProps?.descriptionText ?? translation('chooseLanguage'),\n }}\n onClose={onClose}\n {...modalProps}\n >\n <div className=\"w-64\">\n <Select\n className=\"mt-2\"\n value={language}\n options={LanguageUtil.languages.map((language) => ({ label: translation(language), value: language }))}\n onChange={(language: string) => setLanguage(language as Language)}\n />\n <div className=\"flex-row-4 mt-3 justify-end\">\n <SolidButton autoFocus color=\"positive\" onClick={onClose}>\n {translation('done')}\n </SolidButton>\n </div>\n </div>\n </Modal>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport type { Translation, TranslationPlural } from '../localization/useTranslation'\nimport { noop } from '../util/noop'\n\nconst themes = ['light', 'dark'] as const\n\nexport type ThemeType = typeof themes[number]\n\nexport type ThemeTypeTranslation = Record<ThemeType, string> & {\n theme: TranslationPlural,\n}\n\nconst defaultThemeTypeTranslation: Translation<ThemeTypeTranslation> = {\n en: {\n dark: 'Dark',\n light: 'Light',\n theme: {\n one: 'Theme',\n other: 'Themes'\n }\n },\n de: {\n dark: 'Dunkel',\n light: 'Hell',\n theme: {\n one: 'Farbschema',\n other: 'Farbschemas'\n }\n }\n}\n\nexport const ThemeUtil = {\n themes,\n translation: defaultThemeTypeTranslation,\n}\n\ntype ThemeContextType = {\n theme: ThemeType,\n setTheme: Dispatch<SetStateAction<ThemeType>>,\n}\n\nexport const ThemeContext = createContext<ThemeContextType>({\n theme: 'light',\n setTheme: noop\n})\n\ntype ThemeProviderProps = {\n initialTheme?: ThemeType,\n}\n\nexport const ThemeProvider = ({ children, initialTheme = 'light' }: PropsWithChildren<ThemeProviderProps>) => {\n const [theme, setTheme] = useState<ThemeType>(initialTheme)\n\n useEffect(() => {\n if (theme !== initialTheme) {\n console.warn('ThemeProvider initial state changed: Prefer using useTheme\\'s setTheme instead')\n setTheme(initialTheme)\n }\n }, [initialTheme]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', theme)\n }, [theme])\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\n\nexport const useTheme = () => useContext(ThemeContext)\n","import { type PropsWithChildren } from 'react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Select } from '../user-action/Select'\nimport { SolidButton } from '../user-action/Button'\nimport { Modal, type ModalProps } from '../layout-and-navigation/Overlay'\nimport type { ThemeType, ThemeTypeTranslation } from '../../theming/useTheme'\nimport { useTheme } from '../../theming/useTheme'\nimport { ThemeUtil } from '../../theming/useTheme'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype ThemeModalTranslationAddon = {\n chooseTheme: string,\n}\n\ntype ThemeModalTranslation = ThemeModalTranslationAddon & ThemeTypeTranslation & FormTranslationType\n\nconst defaultConfirmDialogTranslation: Translation<ThemeModalTranslationAddon> = {\n en: {\n chooseTheme: 'Choose your preferred theme',\n },\n de: {\n chooseTheme: 'Wähle dein bevorzugtes Farbschema',\n }\n}\n\ntype ThemeModalProps = ModalProps\n\n/**\n * A Modal for selecting the Theme\n *\n * The State of open needs to be managed by the parent\n */\nexport const ThemeModal = ({\n overwriteTranslation,\n headerProps,\n onClose,\n ...modalProps\n }: PropsForTranslation<ThemeModalTranslation, PropsWithChildren<ThemeModalProps>>) => {\n const { theme, setTheme } = useTheme()\n const translation = useTranslation([defaultConfirmDialogTranslation, formTranslation, ThemeUtil.translation], overwriteTranslation)\n\n return (\n <Modal\n headerProps={{\n ...headerProps,\n titleText: headerProps?.titleText ?? translation('theme'),\n descriptionText: headerProps?.descriptionText ?? translation('chooseTheme'),\n }}\n onClose={onClose}\n {...modalProps}\n >\n <div className=\"w-64\">\n <Select\n className=\"mt-2\"\n value={theme}\n options={ThemeUtil.themes.map((theme) => ({ label: translation(theme), value: theme }))}\n onChange={(theme: string) => setTheme(theme as ThemeType)}\n />\n <div className=\"flex-row-4 mt-3 justify-end\">\n <SolidButton autoFocus color=\"positive\" onClick={onClose}>\n {translation('done')}\n </SolidButton>\n </div>\n </div>\n </Modal>\n )\n}\n","import { Check } from 'lucide-react'\nimport { noop } from '../../util/noop'\nimport { Checkbox } from '../user-action/Checkbox'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype CheckboxPropertyTranslation = FormTranslationType\n\nexport type CheckboxPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue' | 'onRemove'> & {\n value?: boolean,\n onChange?: (value: boolean) => void,\n}\n\n/**\n * An Input component for a boolean values\n */\nexport const CheckboxProperty = ({\n overwriteTranslation,\n value,\n onChange = noop,\n readOnly,\n ...baseProps\n }: PropsForTranslation<CheckboxPropertyTranslation, CheckboxPropertyProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n\n return (\n <PropertyBase\n {...baseProps}\n hasValue={true}\n readOnly={readOnly}\n icon={<Check size={24}/>}\n input={() => (\n <Checkbox\n checked={value ?? true}\n disabled={readOnly}\n onChange={onChange}\n label={{ name: `${translation('yes')}/${translation('no')}`, labelType: 'labelMedium' }}\n containerClassName=\"w-full\"\n />\n )}\n />\n )\n}\n","import { useState } from 'react'\nimport type { CheckedState } from '@radix-ui/react-checkbox'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check, Minus } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\ntype CheckBoxSize = 'small' | 'medium' | 'large'\n\nconst checkboxSizeMapping: Record<CheckBoxSize, string> = {\n small: 'size-5',\n medium: 'size-6',\n large: 'size-8',\n}\n\nconst checkboxIconSizeMapping: Record<CheckBoxSize, string> = {\n small: 'size-4',\n medium: 'size-5',\n large: 'size-7',\n}\n\ntype CheckboxProps = {\n /** used for the label's `for` attribute */\n id?: string,\n label?: Omit<LabelProps, 'id'>,\n /**\n * @default false\n */\n checked: CheckedState,\n disabled?: boolean,\n onChange?: (checked: boolean) => void,\n onChangeTristate?: (checked: CheckedState) => void,\n size?: CheckBoxSize,\n className?: string,\n containerClassName?: string,\n}\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by the parent\n */\nconst Checkbox = ({\n id,\n label,\n checked,\n disabled,\n onChange,\n onChangeTristate,\n size = 'medium',\n className = '',\n containerClassName\n }: CheckboxProps) => {\n const usedSizeClass = checkboxSizeMapping[size]\n const innerIconSize = checkboxIconSizeMapping[size]\n\n const propagateChange = (checked: CheckedState) => {\n if (onChangeTristate) {\n onChangeTristate(checked)\n }\n if (onChange) {\n onChange(checked === 'indeterminate' ? false : checked)\n }\n }\n\n const changeValue = () => {\n const newValue = checked === 'indeterminate' ? false : !checked\n propagateChange(newValue)\n }\n\n return (\n <div className={clsx('group flex-row-2 items-center cursor-pointer', containerClassName)} onClick={changeValue}>\n <CheckboxPrimitive.Root\n onCheckedChange={propagateChange}\n checked={checked}\n disabled={disabled}\n id={id}\n className={clsx(usedSizeClass, `items-center border-2 rounded outline-none `, {\n 'text-disabled-text border-disabled-outline bg-disabled-background cursor-not-allowed': disabled,\n 'focus:border-primary group-hover:border-primary ': !disabled,\n 'bg-surface': !disabled && !checked,\n 'bg-primary/30 border-primary text-primary': !disabled && checked === true || checked === 'indeterminate',\n }, className)}\n >\n <CheckboxPrimitive.Indicator>\n {checked === true && <Check className={innerIconSize}/>}\n {checked === 'indeterminate' && <Minus className={innerIconSize}/>}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <Label {...label} className={clsx(label.className)} htmlFor={id}/>\n )}\n </div>\n )\n}\n\ntype CheckboxUncontrolledProps = Omit<CheckboxProps, 'value' | 'checked'> & {\n /**\n * @default false\n */\n defaultValue?: CheckedState,\n}\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by this component\n */\nconst CheckboxUncontrolled = ({\n onChange,\n onChangeTristate,\n defaultValue = false,\n ...props\n }: CheckboxUncontrolledProps) => {\n const [checked, setChecked] = useState(defaultValue)\n\n const handleChange = (checked: CheckedState) => {\n if (onChangeTristate) {\n onChangeTristate(checked)\n }\n if (onChange) {\n onChange(checked === 'indeterminate' ? false : checked)\n }\n setChecked(checked)\n }\n\n return (\n <Checkbox\n {...props}\n checked={checked}\n onChangeTristate={handleChange}\n />\n )\n}\n\nexport {\n CheckboxProps,\n CheckboxUncontrolled,\n Checkbox,\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport clsx from 'clsx'\nimport { TextButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype PropertyBaseTranslation = FormTranslationType\n\nexport type PropertyBaseProps = {\n name: string,\n input: (props: { softRequired: boolean, hasValue: boolean }) => ReactNode,\n onRemove?: () => void,\n hasValue: boolean,\n softRequired?: boolean,\n readOnly?: boolean,\n icon?: ReactNode,\n className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n overwriteTranslation,\n name,\n input,\n softRequired = false,\n hasValue,\n icon,\n readOnly,\n onRemove,\n className = '',\n }: PropsForTranslation<PropertyBaseTranslation, PropertyBaseProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n const requiredAndNoValue = softRequired && !hasValue\n return (\n <div className={clsx('flex-row-0 group', className)}>\n <div\n className={clsx(\n 'flex-row-2 max-w-48 min-w-48 px-3 py-2 items-center rounded-l-xl border-2 border-r-0', {\n 'bg-property-title-background text-property-title-text group-hover:border-primary': !requiredAndNoValue,\n 'bg-warning text-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className\n )}\n >\n <div className=\"max-w-6 min-w-6 text-text-default\">{icon}</div>\n <span className=\"font-semibold\">{name}</span>\n </div>\n <div\n className={clsx(\n 'flex-row-2 grow px-3 py-2 justify-between items-center rounded-r-xl border-2 border-l-0 min-h-15', {\n 'bg-surface group-hover:border-primary': !requiredAndNoValue,\n 'bg-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className\n )}\n >\n {input({ softRequired, hasValue })}\n {requiredAndNoValue && (\n <div className=\"text-warning\"><AlertTriangle size={24}/></div>\n )}\n {onRemove && hasValue && (\n <TextButton\n onClick={onRemove}\n color=\"negative\"\n className={clsx('items-center', { '!text-transparent': !hasValue || readOnly })}\n disabled={!hasValue || readOnly}\n >\n {translation('remove')}\n </TextButton>\n )}\n </div>\n </div>\n )\n}\n","import { CalendarDays } from 'lucide-react'\nimport clsx from 'clsx'\nimport { formatDate, formatDateTime } from '../../util/date'\nimport { noop } from '../../util/noop'\nimport { Input } from '../user-action/Input'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\nexport type DatePropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: Date,\n onChange?: (date: Date) => void,\n onEditComplete?: (value: Date) => void,\n type?: 'dateTime' | 'date',\n}\n\n/**\n * An Input for date properties\n */\nexport const DateProperty = ({\n value,\n onChange = noop,\n onEditComplete = noop,\n readOnly,\n type = 'dateTime',\n ...baseProps\n }: DatePropertyProps) => {\n const hasValue = !!value\n\n const dateText = value ? (type === 'dateTime' ? formatDateTime(value) : formatDate(value)) : ''\n return (\n <PropertyBase\n {...baseProps}\n hasValue={hasValue}\n icon={<CalendarDays size={24}/>}\n input={({ softRequired }) => (\n <Input\n className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !shadow-none !w-fit !rounded-none', { 'bg-surface-warning': softRequired && !hasValue })}\n value={dateText}\n type={type === 'dateTime' ? 'datetime-local' : 'date'}\n readOnly={readOnly}\n onChange={(event) => {\n const value = event.target.value\n if (!value) {\n event.preventDefault()\n return\n }\n const dueDate = new Date(value)\n onChange(dueDate)\n }}\n onEditCompleted={(value) => onEditComplete(new Date(value))}\n />\n )}\n />\n )\n}\n","import { List, Plus } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { MultiSelectProps } from '../user-action/MultiSelect'\nimport { MultiSelect } from '../user-action/MultiSelect'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { SelectTile } from '../user-action/Select'\n\ntype TranslationType = FormTranslationType\n\nexport type MultiSelectPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue' | 'className'> &\n Omit<MultiSelectProps<string>, 'className' | 'disabled' | 'label'> & {\n onAddNew?: (value: string) => void,\n}\n\n/**\n * An Input for MultiSelect properties\n */\nexport const MultiSelectProperty = ({\n overwriteTranslation,\n options,\n name,\n readOnly = false,\n softRequired,\n onRemove,\n onAddNew,\n ...multiSelectProps\n }: PropsForTranslation<TranslationType, MultiSelectPropertyProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n const hasValue = options.some(value => value.selected)\n\n return (\n <PropertyBase\n name={name}\n onRemove={onRemove}\n readOnly={readOnly}\n softRequired={softRequired}\n hasValue={hasValue}\n icon={<List size={24}/>}\n input={({ softRequired }) => (\n <MultiSelect\n {...multiSelectProps}\n className={clsx('w-full', { 'bg-surface-warning': softRequired && !hasValue })}\n options={options}\n disabled={readOnly}\n useChipDisplay={true}\n hintText={`${translation('select')}...`}\n searchOptions={{\n sortingFunction: (a, b) => a.value.localeCompare(b.value),\n ...multiSelectProps?.searchOptions\n }}\n additionalItems={({ close, search }) => {\n if (!onAddNew && !search.trim()) {\n return undefined\n }\n return (\n <SelectTile\n prefix={(<Plus/>)}\n title={{ value: `${translation('add')} ${search.trim()}` }}\n onClick={() => {\n onAddNew(search)\n close()\n }}\n disabled={options.some(value => value.value === search.trim())}\n />\n )\n }}\n triggerClassName={clsx(\n '!border-none !p-0 !min-h-10',\n {\n '!bg-warning !text-surface-warning': softRequired && !hasValue,\n '': !softRequired || hasValue,\n }\n )}\n />\n )}\n />\n )\n}\n","import type { ReactNode } from 'react'\nimport { useCallback } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\nimport type { SelectOption } from './Select'\nimport { SelectTile } from './Select'\nimport { IconButton, SolidButton } from './Button'\nimport { ChipList } from '../layout-and-navigation/Chip'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport type { MenuBag, MenuProps } from './Menu'\nimport { Menu } from './Menu'\nimport { ExpansionIcon } from '../layout-and-navigation/Expandable'\nimport { SearchBar } from './SearchBar'\nimport type { UseSearchProps } from '../../hooks/useSearch'\nimport { useSearch } from '../../hooks/useSearch'\nimport { Checkbox } from './Checkbox'\nimport { Plus } from 'lucide-react'\n\ntype MultiSelectAddonTranslation = {\n selected: string,\n}\n\ntype MultiSelectTranslation = MultiSelectAddonTranslation & FormTranslationType\n\nconst defaultMultiSelectTranslation: Translation<MultiSelectAddonTranslation> = {\n en: {\n selected: `{{amount}} selected`\n },\n de: {\n selected: `{{amount}} ausgewählt`\n }\n}\n\nexport type MultiSelectOption<T> = SelectOption<T> & {\n selected: boolean,\n}\n\nexport type MultiSelectBag = MenuBag & {\n search: string,\n}\n\n\nexport type MultiSelectProps<T> = Omit<MenuProps<HTMLButtonElement>, 'trigger' | 'children'> & {\n options: MultiSelectOption<T>[],\n label?: LabelProps,\n onChange: (options: MultiSelectOption<T>[]) => void,\n hintText?: string,\n selectedDisplayOverwrite?: ReactNode,\n searchOptions?: Omit<UseSearchProps<SelectOption<T>>, 'list' | 'searchMapping'>,\n additionalItems?: (bag: MultiSelectBag) => ReactNode,\n useChipDisplay?: boolean,\n className?: string,\n triggerClassName?: string,\n hintTextClassName?: string,\n}\n\n/**\n * A Component for multi selection\n */\nexport const MultiSelect = <T, >({\n overwriteTranslation,\n label,\n options,\n onChange,\n hintText,\n selectedDisplayOverwrite,\n searchOptions,\n additionalItems,\n useChipDisplay = false,\n className,\n triggerClassName,\n hintTextClassName,\n ...menuProps\n }:\n PropsForTranslation<MultiSelectTranslation, MultiSelectProps<T>>\n) => {\n const translation = useTranslation([formTranslation, defaultMultiSelectTranslation], overwriteTranslation)\n const { result, search, setSearch } = useSearch<MultiSelectOption<T>>({\n list: options,\n searchMapping: useCallback((item: MultiSelectOption<T>) => item.searchTags, []),\n ...searchOptions,\n })\n\n const selectedItems = options.filter(value => value.selected)\n\n const isShowingHint = !selectedDisplayOverwrite && selectedItems.length === 0\n\n return (\n <div className={clsx(className)}>\n {label && (\n <Label\n {...label}\n htmlFor={label.name}\n className={clsx(' mb-1', label.className)}\n labelType={label.labelType ?? 'labelBig'}\n />\n )}\n <Menu<HTMLButtonElement>\n {...menuProps}\n trigger={({ toggleOpen, isOpen, disabled }, ref) => (\n <button\n ref={ref}\n className={clsx(\n 'btn-md justify-between w-full border-2 h-auto',\n {\n 'min-h-14': useChipDisplay,\n 'bg-menu-background text-menu-text border-menu-border hover:border-primary': !disabled,\n 'bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed': disabled\n },\n triggerClassName\n )}\n onClick={toggleOpen}\n disabled={disabled}\n >\n {useChipDisplay ? (\n <>\n {isShowingHint ? (\n <IconButton disabled={disabled} size=\"small\" color=\"neutral\">\n <Plus/>\n </IconButton>\n ) : (\n <ChipList list={selectedItems.map(value => ({ children: value.label }))}/>\n )}\n </>\n ) : (\n <>\n {!isShowingHint && (\n <span className=\"font-semibold\">\n {selectedDisplayOverwrite ?? translation('selected', { replacements: { amount: selectedItems.length.toString() } })}\n </span>\n )}\n {isShowingHint && (\n <span className={clsx('textstyle-description', hintTextClassName)}>\n {hintText ?? translation('select')}\n </span>\n )}\n <ExpansionIcon isExpanded={isOpen}/>\n </>\n )}\n </button>\n )}\n menuClassName={clsx('flex-col-2 p-2 max-h-96 overflow-hidden', menuProps.menuClassName)}\n >\n {(bag) => {\n const { close } = bag\n return (\n <>\n {!searchOptions?.disabled && (\n <SearchBar\n value={search}\n onChangeText={setSearch}\n autoFocus={true}\n />\n )}\n <div className=\"flex-col-2 overflow-y-auto\">\n {result.map((option, index) => {\n const update = () => {\n onChange(options.map(value => value.value === option.value ? ({\n ...option,\n selected: !value.selected\n }) : value))\n }\n return (\n <SelectTile\n key={index}\n prefix={(\n <Checkbox checked={option.selected} onChange={update} size=\"small\"\n disabled={option.disabled}/>\n )}\n title={{ value: option.label }}\n onClick={update}\n disabled={option.disabled}\n />\n )\n })}\n {additionalItems && additionalItems({ ...bag, search })}\n </div>\n <div className=\"flex-row-2 justify-between\">\n <div className=\"flex-row-2\">\n <SolidButton\n color=\"neutral\"\n size=\"small\"\n onClick={() => {\n onChange(options.map(option => ({\n ...option,\n selected: !option.disabled\n })))\n }}\n disabled={options.every(value => value.selected || value.disabled)}\n >\n {translation('all')}\n </SolidButton>\n <SolidButton\n color=\"neutral\"\n size=\"small\"\n onClick={() => {\n onChange(options.map(option => ({\n ...option,\n selected: false\n })))\n }}\n >\n {translation('none')}\n </SolidButton>\n </div>\n <SolidButton size=\"small\" onClick={close}>Done</SolidButton>\n </div>\n </>\n )\n }}\n </Menu>\n </div>\n )\n}\n\nexport const MultiSelectUncontrolled = <T, >({\n options,\n onChange,\n ...props\n }:\n PropsForTranslation<MultiSelectTranslation, MultiSelectProps<T>>) => {\n const [usedOptions, setUsedOptions] = useState<MultiSelectOption<T>[]>(options)\n\n useEffect(() => {\n setUsedOptions(options)\n }, [options])\n\n return (\n <MultiSelect\n {...props}\n options={usedOptions}\n onChange={options => {\n setUsedOptions(options)\n onChange(options)\n }}\n />\n )\n}","import { Binary } from 'lucide-react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\nimport { Input } from '../user-action/Input'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype NumberPropertyTranslation = {\n value: string,\n}\n\nconst defaultNumberPropertyTranslation: Translation<NumberPropertyTranslation> = {\n en: {\n value: 'Value'\n },\n de: {\n value: 'Wert'\n }\n}\n\nexport type NumberPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: number,\n suffix?: string,\n onChange?: (value: number) => void,\n onEditComplete?: (value: number) => void,\n}\n\n/**\n * An Input for number properties\n */\nexport const NumberProperty = ({\n overwriteTranslation,\n value,\n onChange = noop,\n onRemove = noop,\n onEditComplete = noop,\n readOnly,\n suffix,\n ...baseProps\n }: PropsForTranslation<NumberPropertyTranslation, NumberPropertyProps>) => {\n const translation = useTranslation([defaultNumberPropertyTranslation], overwriteTranslation)\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Binary size={24}/>}\n input={({ softRequired }) => (\n <div\n className={clsx('flex-row-2 grow', { 'text-warning': softRequired && !hasValue })}\n >\n <Input\n expanded={false}\n className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !w-fit !shadow-none !rounded-none', { 'bg-surface-warning placeholder-warning': softRequired && !hasValue })}\n value={value?.toString() ?? ''}\n type=\"number\"\n readOnly={readOnly}\n placeholder={`${translation('value')}...`}\n onChangeText={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onChange(numberValue)\n }\n }}\n onEditCompleted={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onEditComplete(numberValue)\n }\n }}\n />\n {suffix && <span className={clsx('ml-1', { 'bg-surface-warning': softRequired && !hasValue })}>{suffix}</span>}\n </div>\n )}\n />\n )\n}\n","import { List, Plus } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport type { SelectProps } from '../user-action/Select'\nimport { SelectTile } from '../user-action/Select'\nimport { Select } from '../user-action/Select'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype SingleSelectPropertyTranslation = FormTranslationType\n\nexport type SingleSelectPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue' | 'className'> &\n Omit<SelectProps<string>, 'className' | 'disabled' | 'label'> & {\n onAddNew?: (value: string) => void,\n}\n\n/**\n * An Input for SingleSelect properties\n */\nexport const SingleSelectProperty = ({\n overwriteTranslation,\n value,\n options,\n name,\n readOnly = false,\n softRequired,\n onRemove,\n onAddNew,\n ...selectProps\n }: PropsForTranslation<SingleSelectPropertyTranslation, SingleSelectPropertyProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n name={name}\n onRemove={onRemove}\n readOnly={readOnly}\n softRequired={softRequired}\n hasValue={hasValue}\n icon={<List size={24}/>}\n input={({ softRequired }) => (\n <Select\n {...selectProps}\n value={value}\n options={options}\n disabled={readOnly}\n className={clsx('w-full')}\n hintText={`${translation('select')}...`}\n searchOptions={{\n sortingFunction: (a, b) => a.value.localeCompare(b.value),\n ...selectProps?.searchOptions\n }}\n additionalItems={({ close, search }) => {\n if (!onAddNew && !search.trim()) {\n return undefined\n }\n return (\n <SelectTile\n prefix={(<Plus/>)}\n title={{ value: `${translation('add')} ${search.trim()}` }}\n onClick={() => {\n onAddNew(search)\n close()\n }}\n disabled={options.some(value => value.value === search.trim())}\n />\n )\n }}\n triggerClassName={clsx(\n '!border-none',\n {\n '!bg-warning !text-surface-warning': softRequired && !hasValue,\n '!bg-property-title-background': !softRequired || hasValue,\n }\n )}\n hintTextClassName={(softRequired && !hasValue) ? 'text-surface-warning' : undefined}\n />\n )}\n />\n )\n}\n","import { Text } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Textarea } from '../user-action/Textarea'\nimport { noop } from '../../util/noop'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype TextPropertyTranslation = {\n text: string,\n}\n\nconst defaultTextPropertyTranslation: Translation<TextPropertyTranslation> = {\n en: {\n text: 'Text'\n },\n de: {\n text: 'Text'\n }\n}\n\nexport type TextPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: string,\n onChange?: (value: string) => void,\n onEditComplete?: (value: string) => void,\n}\n\n/**\n * An Input for Text properties\n */\nexport const TextProperty = ({\n overwriteTranslation,\n value,\n readOnly,\n onChange = noop,\n onRemove = noop,\n onEditComplete = noop,\n ...baseProps\n }: PropsForTranslation<TextPropertyTranslation, TextPropertyProps>) => {\n const translation = useTranslation([defaultTextPropertyTranslation], overwriteTranslation)\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Text size={24}/>}\n input={({ softRequired }) => (\n <Textarea\n className={clsx('ring-0 border-0 outline-0 !px-0 p-0 m-0 shadow-none rounded-none', { 'bg-surface-warning placeholder-warning': softRequired && !hasValue })}\n rows={5}\n defaultStyle={false}\n value={value ?? ''}\n readOnly={readOnly}\n placeholder={`${translation('text')}...`}\n onChangeText={(value) => {\n if (!value) {\n onRemove()\n } else {\n onChange(value)\n }\n }}\n onEditCompleted={(value) => {\n if (!value) {\n onRemove()\n } else {\n onEditComplete(value)\n }\n }}\n />\n )}\n />\n )\n}\n","import type { TextareaHTMLAttributes } from 'react'\nimport { useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { useDelay, type UseDelayOptions } from '../../hooks/useDelay'\nimport { noop } from '../../util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type TextareaProps = {\n /** Outside the area */\n label?: Omit<LabelProps, 'id'>,\n /** Inside the area */\n headline?: string,\n value?: string,\n resizable?: boolean,\n onChangeText?: (text: string) => void,\n disclaimer?: string,\n onEditCompleted?: (text: string) => void,\n saveDelayOptions?: UseDelayOptions,\n defaultStyle?: boolean,\n} & Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>\n\n/**\n * A Textarea component for inputting longer texts\n *\n * The State is managed by the parent\n */\nexport const Textarea = ({\n label,\n headline,\n id,\n resizable = false,\n onChange = noop,\n onChangeText = noop,\n disclaimer,\n onBlur = noop,\n onEditCompleted = noop,\n saveDelayOptions,\n defaultStyle = true,\n disabled = false,\n className,\n ...props\n }: TextareaProps) => {\n const [hasFocus, setHasFocus] = useState(false)\n const { restartTimer, clearTimer } = useDelay(saveDelayOptions)\n\n const onEditCompletedWrapper = (text: string) => {\n onEditCompleted(text)\n clearTimer()\n }\n\n return (\n <div className=\"w-full\">\n {label && (\n <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)}\n labelType={label.labelType ?? 'labelSmall'}/>\n )}\n <div\n className={clsx('bg-surface text-on-surface relative',\n {\n 'shadow border-2 rounded-lg': defaultStyle,\n 'hover:border-primary focus-within:border-primary': defaultStyle && !disabled,\n 'border-disabled-border cursor-not-allowed': defaultStyle && !disabled,\n })}\n >\n {headline && (\n <span className=\"mx-3 mt-3 block textstyle-label-md\">\n {headline}\n </span>\n )}\n <textarea\n id={id}\n className={clsx('pt-0 px-3 border-transparent appearance-none w-full leading-tight focus:ring-0 focus:outline-none', {\n 'resize-none': !resizable,\n 'h-32': defaultStyle,\n 'mt-3': !headline,\n 'text-disabled-text': disabled,\n }, className)}\n onChange={(event) => {\n const value = event.target.value\n restartTimer(() => {\n onEditCompletedWrapper(value)\n })\n onChange(event)\n onChangeText(value)\n }}\n onFocus={() => {\n setHasFocus(true)\n }}\n onBlur={(event) => {\n onBlur(event)\n onEditCompletedWrapper(event.target.value)\n setHasFocus(false)\n }}\n disabled={disabled}\n {...props}\n >\n </textarea>\n </div>\n {(hasFocus && disclaimer) && (\n <label className=\"text-negative\">\n {disclaimer}\n </label>\n )}\n </div>\n )\n}\n\n/**\n * A Textarea component that is not controlled by its parent\n */\nexport const TextareaUncontrolled = ({\n value = '',\n onChangeText = noop,\n ...props\n }: TextareaProps) => {\n const [text, setText] = useState<string>(value)\n\n useEffect(() => {\n setText(value)\n }, [value])\n\n return (\n <Textarea\n {...props}\n value={text}\n onChangeText={text => {\n setText(text)\n onChangeText(text)\n }}\n />\n )\n}","import { clsx } from 'clsx'\n\nexport type FillerRowElementProps = {\n className?: string,\n}\nexport const FillerRowElement = ({\n className\n }: FillerRowElementProps) => {\n return (\n <div className={clsx('flex flex-row items-center w-1/2 h-4 text-disabled-text font-bold', className)}>\n -\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 { Pagination } from '../layout-and-navigation/Pagination'\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 '../../util/array'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { Checkbox } from '../user-action/Checkbox'\nimport { clamp } from '../../util/math'\nimport { noop } from '../../util/noop'\nimport type { TableFilterType } from './TableFilterButton'\nimport { TableFilterButton } from './TableFilterButton'\nimport { TableSortButton } from './TableSortButton'\nimport { FillerRowElement } from './FillerRowElement'\nimport { TableFilters } from './Filter'\nimport { useResizeCallbackWrapper } from '../../hooks/useResizeCallbackWrapper'\nimport { TableCell } from './TableCell'\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\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface TableMeta<TData> {\n headerRowClassName?: TableFilterType,\n bodyRowClassName?: 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 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 = noop,\n className,\n tableClassName,\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`] = Math.floor(header.getSize())\n colSizes[`--col-${header.column.id}-size`] = Math.floor(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} className={clsx('flex-col-4', className)}>\n <Scrollbars\n autoHeight={true}\n autoHeightMax={tableRef.current?.offsetHeight + 2}\n autoHide={true}\n >\n <table\n ref={tableRef}\n className={clsx(tableClassName)}\n style={{\n ...columnSizeVars,\n width: Math.floor(Math.max(table.getTotalSize() - columns.length, ref.current?.offsetWidth ?? table.getTotalSize())),\n }}\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} className={table.options.meta?.headerRowClassName}>\n {headerGroup.headers.map(header => {\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n className={clsx('relative group', header.column.columnDef.meta?.className)}\n >\n <div className=\"flex-row-2 w-full\">\n {header.isPlaceholder ? null : (\n <div className=\"flex-row-1 items-center\">\n {header.column.getCanSort() && (\n <TableSortButton\n sortDirection={header.column.getIsSorted()}\n onClick={() => header.column.toggleSorting()}\n />\n )}\n {header.column.getCanFilter() && header.column.columnDef.meta?.filterType ? (\n <TableFilterButton\n column={header.column}\n filterType={header.column.columnDef.meta.filterType}\n />\n ) : null}\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </div>\n )}\n </div>\n {header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => {\n header.column.resetSize()\n }}\n className=\"table-resize-indicator w-2 rounded bg-primary cursor-col-resize select-none touch-none opacity-0 group-hover:opacity-100 transition-opacity\"\n style={{\n opacity: !columnSizingInfo?.columnSizingStart ?\n undefined : (columnSizingInfo?.columnSizingStart?.findIndex(([id, _]) => id === header.column.id) !== -1 ?\n 1 : (columnSizingInfo?.columnSizingStart?.length !== 0 ?\n 0 : undefined)),\n }}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr key={row.id} onClick={() => onRowClick(row, table)} className={table.options.meta?.bodyRowClassName}>\n {row.getVisibleCells().map(cell => {\n return (\n <td key={cell.id}>\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) : (<FillerRowElement/>)}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </Scrollbars>\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, setUsedData] = useState<T[]>(data)\n\n useEffect(() => {\n setUsedData(data)\n }, [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 = noop,\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 checked={table.getIsSomeRowsSelected() ? 'indeterminate' : table.getIsAllRowsSelected()}\n onChangeTristate={value => {\n const newValue = !!value\n table.toggleAllRowsSelected(newValue)\n }}\n containerClassName=\"max-w-6\"\n />\n )\n },\n cell: ({ row }) => {\n return (\n <Checkbox\n disabled={!row.getCanSelect()}\n checked={row.getIsSelected()}\n onChange={row.getToggleSelectedHandler()}\n containerClassName=\"max-w-6\"\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 checked={false} disabled={true} containerClassName=\"max-w-6\"/>)\n }\n return fillerRow ? fillerRow(columnId, table) : (<FillerRowElement/>)\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 { IconButton, SolidButton } from '../user-action/Button'\nimport { Input } from '../user-action/Input'\nimport { FilterIcon } from 'lucide-react'\nimport { Menu } from '../user-action/Menu'\nimport type { Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { useEffect, useState } from 'react'\nimport type { Column } from '@tanstack/react-table'\n\nexport type TableFilterType = 'text' | 'range' | 'dateRange'\n\ntype TableFilterTranslationType = {\n filter: string,\n min: string,\n max: string,\n startDate: string,\n endDate: string,\n text: string,\n}\n\nconst defaultTableFilterTranslation: Translation<TableFilterTranslationType> = {\n en: {\n filter: 'Filter',\n min: 'Min',\n max: 'Max',\n startDate: 'Start',\n endDate: 'End',\n text: 'Text...',\n },\n de: {\n filter: 'Filter',\n min: 'Min',\n max: 'Max',\n startDate: 'Start',\n endDate: 'Ende',\n text: 'Text...',\n }\n}\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 = useTranslation([formTranslation, defaultTableFilterTranslation])\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<HTMLDivElement>\n trigger={({ toggleOpen }, ref) => (\n <div ref={ref} className=\"relative\">\n <IconButton color=\"neutral\" size=\"tiny\" onClick={toggleOpen}>\n <FilterIcon/>\n </IconButton>\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=\"textstyle-title-sm\">{translation('filter')}</h4>\n {filterType === 'text' && (\n <Input\n value={(filterValue ?? '') as string}\n autoFocus={true}\n placeholder={translation('text')}\n onChangeText={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] ?? ''}\n type=\"number\"\n placeholder={translation('min')}\n onChangeText={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] ?? ''}\n type=\"number\"\n placeholder={translation('max')}\n onChangeText={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 onChangeText={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 onChangeText={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 <SolidButton color=\"negative\" size=\"small\" onClick={() => {\n column.setFilterValue(undefined)\n close()\n }}>\n {translation('remove')}\n </SolidButton>\n )}\n <SolidButton size=\"small\" onClick={() => {\n column.setFilterValue(filterValue)\n close()\n }}>\n {translation('apply')}\n </SolidButton>\n </div>\n </div>\n )}\n </Menu>\n )\n}","import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react'\nimport type { IconButtonProps } from '../user-action/Button'\nimport { IconButton } from '../user-action/Button'\nimport clsx from 'clsx'\nimport type { SortDirection } from '@tanstack/react-table'\n\nexport type TableSortButtonProps = IconButtonProps & {\n sortDirection: SortDirection | false,\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 className,\n ...buttonProps\n }: TableSortButtonProps) => {\n let icon = <ChevronsUpDown className=\"w-full h-full\"/>\n if (sortDirection) {\n let usedSortDirection = sortDirection\n if (invert) {\n usedSortDirection = usedSortDirection === 'desc' ? 'asc' : 'desc'\n }\n icon = usedSortDirection === 'asc' ? (<ChevronUp className=\"w-full h-full\"/>) : (\n <ChevronDown className=\"w-full h-full\"/>)\n }\n\n return (\n <IconButton\n size=\"tiny\"\n color={color}\n className={clsx(className)}\n {...buttonProps}\n >\n {icon}\n </IconButton>\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 { 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 type { CSSProperties, PropsWithChildren } from 'react'\nimport { useState } from 'react'\nimport { clsx } from 'clsx'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { writeToClipboard } from '../../util/writeToClipboard'\nimport { CheckIcon, Copy } from 'lucide-react'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\ntype CopyToClipboardWrapperTranslationType = FormTranslationType\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 = useTranslation<CopyToClipboardWrapperTranslationType>([formTranslation])\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","export const writeToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text)\n}","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { noop } from '../../util/noop'\nimport { addDuration, subtractDuration } from '../../util/date'\nimport { SolidButton } from './Button'\nimport type { TimePickerProps } from '../date/TimePicker'\nimport { TimePicker } from '../date/TimePicker'\nimport type { DatePickerProps } from '../date/DatePicker'\nimport { DatePicker } from '../date/DatePicker'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport type { TimeTranslationType } from '../../localization/defaults/time'\nimport { timeTranslation } from '../../localization/defaults/time'\n\ntype DateAndTimePickerTranslationType = FormTranslationType & TimeTranslationType\n\nexport type DateTimePickerMode = 'date' | 'time' | 'dateTime'\n\nexport type DateTimePickerProps = {\n mode?: DateTimePickerMode,\n value?: Date,\n start?: Date,\n end?: Date,\n onChange?: (date: Date) => void,\n onFinish?: (date: Date) => void,\n onRemove?: () => void,\n datePickerProps?: Omit<DatePickerProps, 'onChange' | 'value' | 'start' | 'end'>,\n timePickerProps?: Omit<TimePickerProps, 'onChange' | 'time' | 'maxHeight'>,\n}\n\n/**\n * A Component for picking a Date and Time\n */\nexport const DateTimePicker = ({\n overwriteTranslation,\n value = new Date(),\n start = subtractDuration(new Date(), { years: 50 }),\n end = addDuration(new Date(), { years: 50 }),\n mode = 'dateTime',\n onFinish = noop,\n onChange = noop,\n onRemove = noop,\n timePickerProps,\n datePickerProps,\n }: PropsForTranslation<DateAndTimePickerTranslationType, DateTimePickerProps>) => {\n const translation = useTranslation([formTranslation, timeTranslation], overwriteTranslation)\n\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-[320px] min-h-[250px]\"\n yearMonthPickerProps={{ maxHeight: 218 }}\n value={value}\n start={start}\n end={end}\n onChange={onChange}\n />\n )\n }\n if (useTime) {\n timeDisplay = (\n <TimePicker\n {...timePickerProps}\n className={clsx('h-full', { 'justify-between w-full': mode === 'time' })}\n maxHeight={250}\n time={value}\n onChange={onChange}\n />\n )\n }\n\n return (\n <div className=\"flex-col-2 w-fit\">\n <div className=\"flex-row-4\">\n {dateDisplay}\n {timeDisplay}\n </div>\n <div className=\"flex-row-2 justify-end\">\n <div className=\"flex-row-2 mt-1\">\n <SolidButton size=\"medium\" color=\"negative\" onClick={onRemove}>{translation('clear')}</SolidButton>\n <SolidButton\n size=\"medium\"\n onClick={() => onFinish(value)}\n >\n {translation('change')}\n </SolidButton>\n </div>\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\nimport { getNeighbours, range } from '../../util/array'\nimport { clamp } from '../../util/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 = noop,\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 === 0 && (!lastScrollTimeStamp || timestamp - lastScrollTimeStamp > 300)\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 // TODO slower increase\n setAnimation(({ velocity, ...animationData }) =>\n ({ ...animationData, velocity: velocity + event.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/30 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 { HTMLInputTypeAttribute, InputHTMLAttributes } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { Pencil } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { UseDelayOptions } from '../../hooks/useDelay'\nimport { useDelay } from '../../hooks/useDelay'\nimport { noop } from '../../util/noop'\n\ntype InputProps = {\n /**\n * The value\n */\n value: string,\n /**\n * @default 'text'\n */\n type?: HTMLInputTypeAttribute,\n /**\n * Callback for when the input's value changes\n * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n * That could be enforced through a union type but that seems a bit overkill\n * @default noop\n */\n onChangeText?: (text: string) => void,\n onEditCompleted?: (text: string) => void,\n labelClassName?: string,\n initialState?: 'editing' | 'display',\n size?: number,\n disclaimer?: string,\n saveDelayOptions?: UseDelayOptions,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'label' | 'type' | 'crossOrigin'>\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 = ({\n type = 'text',\n value,\n onChange = noop,\n onChangeText = noop,\n onEditCompleted = noop,\n labelClassName = '',\n initialState = 'display',\n size = 16,\n disclaimer,\n onBlur,\n saveDelayOptions,\n ...restProps\n }: InputProps) => {\n const [isEditing, setIsEditing] = useState(initialState !== 'display')\n const { restartTimer, clearTimer } = useDelay(saveDelayOptions)\n const ref = useRef<HTMLInputElement>(null)\n\n const onEditCompletedWrapper = (text: string) => {\n onEditCompleted(text)\n clearTimer()\n }\n\n useEffect(() => {\n if (isEditing) {\n ref.current?.focus()\n }\n }, [isEditing])\n\n return (\n <div>\n <div\n className={clsx('flex-row-2 items-center w-full overflow-hidden', { 'cursor-pointer': !isEditing })}\n onClick={() => !isEditing ? setIsEditing(!isEditing) : undefined}\n >\n <div className={clsx('flex-row-2 overflow-hidden', { 'flex-1': isEditing })}>\n {isEditing ? (\n <input\n ref={ref}\n {...restProps}\n value={value}\n type={type}\n onChange={event => {\n const value = event.target.value\n restartTimer(() => {\n onEditCompletedWrapper(value)\n })\n onChangeText(value)\n onChange(event)\n }}\n onBlur={(event) => {\n if (onBlur) {\n onBlur(event)\n }\n onEditCompletedWrapper(value)\n setIsEditing(false)\n }}\n onKeyDown={event => {\n if (event.key === 'Enter') {\n setIsEditing(false)\n onEditCompletedWrapper(value)\n }\n }}\n className={clsx(`w-full border-none rounded-none ring-0 outline-0 text-inherit bg-inherit shadow-transparent decoration-primary p-0 underline-offset-4`, {\n underline: isEditing\n }, labelClassName)}\n onFocus={event => event.target.select()}\n />\n ) : (\n <span className={clsx('max-w-xs break-words overflow-hidden', labelClassName)}>\n {value}\n </span>\n )}\n </div>\n <Pencil\n className={clsx(`cursor-pointer`, { 'text-transparent': isEditing })}\n size={size}\n style={{ minWidth: `${size}px` }}\n />\n </div>\n {(isEditing && disclaimer) && (\n <label className=\"text-negative\">\n {disclaimer}\n </label>\n )}\n </div>\n )\n}\n\nexport const ToggleableInputUncontrolled = ({\n value: initialValue,\n onChangeText = noop,\n ...restProps\n }: InputProps) => {\n const [value, setValue] = useState(initialValue)\n\n useEffect(() => {\n setValue(initialValue)\n }, [initialValue])\n\n return (\n <ToggleableInput\n value={value}\n onChangeText={text => {\n setValue(text)\n onChangeText(text)\n }}\n {...restProps}\n />\n )\n}\n","import { useReducer } from 'react'\n\nexport const useRerender = () => {\n return useReducer(() => ({}), {})[1]\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 const validateEmail = (email: string): boolean => {\n return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(email)\n}\n","import { z } from 'zod'\nimport type { Language } from '../localization/util'\nimport { LanguageUtil } from '../localization/util'\n\nexport type News = {\n title: string,\n date: Date,\n description: (string | URL)[],\n externalResource?: URL,\n keys: string[],\n}\n\nexport type LocalizedNews = Record<Language, News[]>\n\nexport const newsSchema = z.object({\n title: z.string(),\n description: z.string(),\n date: z.string(),\n image: z.string().url().optional(),\n externalResource: z.string().url().optional(),\n keys: z.array(z.string())\n}).transform<News>((obj) => {\n let description: (string | URL)[] = [obj.description]\n if (obj.image) {\n description = [new URL(obj.image), ...description]\n }\n\n return {\n title: obj.title,\n date: new Date(obj.date),\n description,\n externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,\n keys: obj.keys\n }\n})\n\nexport const newsListSchema = z.array(newsSchema)\n\nexport const localizedNewsSchema = z.record(z.enum(LanguageUtil.languages), newsListSchema)\n\nexport const filterNews = (localizedNews: News[], requiredKeys: string[]) => {\n return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))\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}"],"mappings":"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","names":["nodeInterop","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","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","removeTrailingSlash","route","replace","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","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","getRouteMatcher","re","groups","pathname","routeMatch","exec","decode","param","decodeURIComponent","DecodeError","params","key","group","Object","entries","match","pos","undefined","repeat","split","map","entry","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","INFINITE_CACHE","INSTRUMENTATION_HOOK_FILENAME","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_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","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","escapeStringRegexp","reHasRegExp","reReplaceRegExp","str","test","replace","getNamedMiddlewareRegex","getNamedRouteRegex","getRouteRegex","parseParameter","PARAMETER_PATTERN","param","match","parseMatchedParameter","optional","startsWith","endsWith","slice","repeat","key","getParametrizedRoute","route","includeSuffix","includePrefix","groups","groupIndex","segments","segment","removeTrailingSlash","split","markerMatch","INTERCEPTION_ROUTE_MARKERS","find","m","paramMatches","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","URL","startsWith","asPath","_","finalUrl","normalizePathTrailingSlash","interpolatedAs","isDynamicRoute","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","RouterContext","React","createContext","process","env","NODE_ENV","displayName","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","useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","errorOnce","_","process","env","NODE_ENV","errors","Set","msg","has","console","error","add","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","current","clsx","clsx","jsx","jsxs","jsx","clsx","useEffect","useState","ChevronDown","useEffect","useState","jsx","useState","useEffect","language","date","clsx","clsx","jsx","jsxs","SolidButton","useEffect","useState","clsx","forwardRef","useCallback","useEffect","useState","clsx","jsx","jsxs","clsx","forwardRef","Expandable","useCallback","ExpandableUncontrolled","useState","useEffect","jsx","useEffect","clsx","useState","clsx","useEffect","useState","jsx","jsxs","clsx","jsx","jsxs","useState","useEffect","clsx","ChevronDown","jsx","useEffect","useRef","useState","Scrollbars","clsx","jsx","jsxs","useRef","useEffect","Scrollbars","useState","clsx","useEffect","useRef","useState","clsx","useEffect","useState","clsx","jsx","jsxs","jsx","jsxs","useState","useEffect","clsx","useRef","jsx","jsxs","clsx","clsx","jsx","jsxs","clsx","jsx","useCallback","useEffect","useState","clsx","jsx","jsxs","useState","useCallback","useEffect","jsx","clsx","jsx","jsxs","Link","useCallback","useEffect","useRef","useState","clsx","jsx","jsxs","useState","useRef","useCallback","animationState","dragState","useEffect","clsx","clsx","jsx","jsxs","clsx","jsx","clsx","Fragment","jsx","open","jsx","clsx","ChevronLeft","ChevronRight","clsx","forwardRef","useEffect","useRef","useState","clsx","useEffect","useState","clsx","jsx","useCallback","React","useEffect","jsx","jsxs","clsx","forwardRef","Input","useRef","value","useState","useEffect","FormInput","useEffect","useState","jsx","jsxs","useState","useEffect","clsx","ChevronLeft","value","ChevronRight","clsx","useCallback","useEffect","useMemo","useState","useState","useMemo","useCallback","useEffect","jsx","jsxs","clsx","Check","ChevronLeft","ChevronRight","clsx","useEffect","useState","jsx","jsxs","clsx","ChevronLeft","ChevronRight","Check","useState","useEffect","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","jsxs","useState","clsx","jsx","clsx","jsx","useState","clsx","jsx","jsxs","clsx","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","jsx","useCallback","useEffect","useState","clsx","useEffect","useRef","useState","clsx","useEffect","Fragment","jsx","jsxs","clsx","useRef","useState","useEffect","Search","clsx","jsx","jsxs","Fragment","jsx","jsxs","clsx","useCallback","useState","useEffect","options","value","jsx","jsxs","language","createContext","useContext","useEffect","useState","jsx","createContext","useState","useEffect","useContext","jsx","jsxs","theme","Check","useState","Check","clsx","jsx","jsxs","checked","clsx","Check","useState","clsx","jsx","jsxs","clsx","jsx","Check","clsx","jsx","clsx","value","Plus","clsx","useCallback","useEffect","useState","clsx","Fragment","jsx","jsxs","useCallback","clsx","useState","useEffect","options","jsx","softRequired","clsx","Plus","clsx","jsx","jsxs","clsx","value","List","Plus","clsx","jsx","List","softRequired","clsx","Plus","value","clsx","useEffect","useState","clsx","jsx","jsxs","useState","clsx","useEffect","text","jsx","clsx","value","clsx","jsx","useCallback","useEffect","useMemo","useRef","useState","clsx","Scrollbars","useEffect","useState","Fragment","jsx","jsxs","ChevronDown","clsx","jsx","ChevronDown","useEffect","clsx","jsx","jsx","jsxs","useRef","useState","useMemo","useEffect","useCallback","clsx","Scrollbars","useState","clsx","jsx","jsxs","useState","clsx","clsx","jsx","jsxs","clsx","useCallback","useEffect","useState","clsx","jsx","jsxs","useState","useCallback","currentIndex","transition","items","useEffect","distance","clsx","useEffect","useRef","useState","clsx","jsx","jsxs","useState","useRef","useEffect","clsx","value"]}
1
+ {"version":3,"sources":["../node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs","../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/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/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/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/src/shared/lib/router-context.shared-runtime.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/client/use-merged-ref.ts","../node_modules/next/src/shared/lib/utils/error-once.ts","../node_modules/next/src/client/link.tsx","../node_modules/next/link.js","../src/coloring/shading.ts","../src/coloring/types.ts","../src/components/branding/HelpwaveBadge.tsx","../src/components/layout-and-navigation/Tile.tsx","../src/components/icons-and-geometry/Helpwave.tsx","../src/components/date/DatePicker.tsx","../src/localization/LanguageProvider.tsx","../src/hooks/useLocalStorage.ts","../src/util/storage.ts","../src/localization/util.ts","../src/localization/useTranslation.ts","../src/util/noop.ts","../src/util/array.ts","../src/util/date.ts","../src/components/user-action/Button.tsx","../src/components/date/YearMonthPicker.tsx","../src/components/layout-and-navigation/Expandable.tsx","../src/components/date/DayPicker.tsx","../src/localization/defaults/time.ts","../src/components/date/TimeDisplay.tsx","../src/components/date/TimePicker.tsx","../src/components/dialogs/ConfirmDialog.tsx","../src/components/layout-and-navigation/Overlay.tsx","../src/hooks/useHoverState.ts","../src/components/user-action/Tooltip.tsx","../src/localization/defaults/form.ts","../src/components/icons-and-geometry/Avatar.tsx","../src/components/icons-and-geometry/Circle.tsx","../src/components/icons-and-geometry/Ring.tsx","../src/components/icons-and-geometry/Tag.tsx","../src/components/layout-and-navigation/BreadCrumb.tsx","../src/components/layout-and-navigation/Carousel.tsx","../src/util/math.ts","../src/util/easeFunctions.ts","../src/util/loopingArray.ts","../src/components/layout-and-navigation/Chip.tsx","../src/components/layout-and-navigation/DividerInserter.tsx","../src/components/layout-and-navigation/FAQSection.tsx","../src/components/layout-and-navigation/MarkdownInterpreter.tsx","../src/components/layout-and-navigation/Pagination.tsx","../src/components/user-action/Input.tsx","../src/hooks/useDelay.ts","../src/components/user-action/Label.tsx","../src/hooks/useFocusManagement.ts","../src/hooks/useFocusOnceVisible.ts","../src/components/layout-and-navigation/SearchableList.tsx","../src/hooks/useSearch.ts","../src/util/simpleSearch.ts","../src/components/layout-and-navigation/StepperBar.tsx","../src/components/layout-and-navigation/TextImage.tsx","../src/components/layout-and-navigation/VerticalDivider.tsx","../src/components/loading-states/ErrorComponent.tsx","../src/components/loading-states/LoadingAndErrorComponent.tsx","../src/components/loading-states/LoadingContainer.tsx","../src/components/loading-states/LoadingAnimation.tsx","../src/components/loading-states/LoadingButton.tsx","../src/components/loading-states/ProgressIndicator.tsx","../src/components/modals/ConfirmModal.tsx","../src/components/modals/DiscardChangesModal.tsx","../src/components/modals/InputModal.tsx","../src/components/user-action/Select.tsx","../src/components/user-action/Menu.tsx","../src/hooks/useOutsideClick.ts","../src/util/PropsWithFunctionChildren.ts","../src/hooks/usePopoverPosition.ts","../src/components/user-action/SearchBar.tsx","../src/components/modals/LanguageModal.tsx","../src/theming/useTheme.tsx","../src/components/modals/ThemeModal.tsx","../src/components/properties/CheckboxProperty.tsx","../src/components/user-action/Checkbox.tsx","../src/components/properties/PropertyBase.tsx","../src/components/properties/DateProperty.tsx","../src/components/properties/MultiSelectProperty.tsx","../src/components/user-action/MultiSelect.tsx","../src/components/properties/NumberProperty.tsx","../src/components/properties/SelectProperty.tsx","../src/components/properties/TextProperty.tsx","../src/components/user-action/Textarea.tsx","../src/components/table/FillerRowElement.tsx","../src/components/table/Filter.ts","../src/components/table/Table.tsx","../src/components/table/TableFilterButton.tsx","../src/components/table/TableSortButton.tsx","../src/hooks/useResizeCallbackWrapper.ts","../src/components/table/TableCell.tsx","../src/components/user-action/CopyToClipboardWrapper.tsx","../src/util/writeToClipboard.ts","../src/components/user-action/DateAndTimePicker.tsx","../src/components/user-action/ScrollPicker.tsx","../src/components/user-action/ToggleableInput.tsx","../src/hooks/useRerender.ts","../src/util/builder.ts","../src/util/emailValidation.ts","../src/util/news.ts","../src/util/resolveSetState.ts"],"sourcesContent":["\"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 { 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\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\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","import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\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 return (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","import type { ServerRuntime } from '../types'\n\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_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 {\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'\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\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 */\nconst 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 */\nfunction 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\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'\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 const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\\/\\//)\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 base = new URL(\n urlAsString.startsWith('#') ? router.asPath : router.pathname,\n 'http://n'\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 require('../shared/lib/router/utils/add-locale').addLocale(path, ...args)\n )\n }\n return path\n}\n","\"use strict\";\n\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports._ = _interop_require_default;\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","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 require('../shared/lib/i18n/normalize-locale-path').normalizeLocalePath(\n pathname,\n locales\n )\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 require('../shared/lib/i18n/detect-domain-locale').detectDomainLocale(\n ...args\n )\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').normalizeLocalePath\n const detectDomainLocale: typeof DetectFn =\n require('./detect-domain-locale').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","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","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 * - `null` (default): For statically generated pages, this will prefetch the full React Server Component data. For dynamic pages, this will prefetch up to the nearest route segment with a [`loading.js`](https://nextjs.org/docs/app/api-reference/file-conventions/loading) file. If there is no loading file, it will not fetch the full tree to avoid fetching too much data.\n * - `true`: This will prefetch the full React Server Component data for all route segments, regardless of whether they contain a segment with `loading.js`.\n * - `false`: This will not prefetch any data, even on hover.\n *\n * In Pages Router:\n * - `true` (default): The full route & its data will be prefetched.\n * - `false`: Prefetching will not happen when entering the viewport, but will still happen on hover.\n * @defaultValue `true` (pages router) or `null` (app router)\n */\n prefetch?: boolean | null\n /**\n * The active locale is automatically prepended. `locale` allows for providing a different locale.\n * When `false` `href` has to include the locale as the default behavior is disabled.\n * Note: This is only available in the Pages Router.\n */\n locale?: string | false\n /**\n * Enable legacy link behavior.\n * @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 the webpack plugin runs.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type LinkProps<RouteInferType = any> = 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 === 'prefetch' ||\n key === 'legacyBehavior'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _: never = key\n }\n })\n }\n\n 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","import tinycolor from 'tinycolor2'\nimport type { ShadedColors } from './types'\nimport { shadingColorValues } from './types'\n\n// Function to generate a full shading of several colors\nexport const generateShadingColors = (partialShading: Omit<Partial<ShadedColors>, '0' | '1000'>): ShadedColors => {\n const shading: ShadedColors = {\n 0: '#FFFFFF',\n 1000: '#000000'\n } as ShadedColors\n\n let index = 1\n while (index < shadingColorValues.length - 1) {\n const previous = shadingColorValues[index - 1]!\n const current = shadingColorValues[index]!\n\n if (partialShading[current] !== undefined) {\n shading[current] = partialShading[current]\n index++\n continue\n }\n\n let j: number = index + 1\n while (j < shadingColorValues.length) {\n if (partialShading[shadingColorValues[j]!] !== undefined) {\n break\n }\n j++\n }\n if (j === shadingColorValues.length) {\n j = shadingColorValues.length - 1\n }\n\n const nextFound = shadingColorValues[j]!\n const interval = nextFound - previous\n for (let k = index; k < j; k++) {\n const current = shadingColorValues[k]!\n const previousValue = partialShading[previous] ?? shading[previous]\n const nextValue = partialShading[nextFound] ?? shading[nextFound]\n shading[current] = tinycolor.mix(tinycolor(previousValue), tinycolor(nextValue), (current - previous) / interval * 100).toHexString()\n }\n index = j\n }\n\n return shading\n}\n","export const shadingColorValues = [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000] as const\nexport type ColorShadingValue = typeof shadingColorValues[number]\nexport type ShadedColors = Record<ColorShadingValue, string>\n\nexport type ColoringStyle = 'background' | 'tonal' | 'tonal-opaque' | 'text' | 'text-border'\nexport type ColorMode = 'light' | 'dark'\n\nexport type Coloring = {\n color: '',\n style?: ColoringStyle,\n mode?: ColorMode,\n hover?: boolean,\n}\n","import clsx from 'clsx'\nimport { Tile } from '../layout-and-navigation/Tile'\nimport { Helpwave } from '../icons-and-geometry/Helpwave'\n\ntype Size = 'small' | 'large'\n\nexport type HelpwaveBadgeProps = {\n size?: Size,\n title?: string,\n className?: string,\n}\n\n/**\n * A Badge with the helpwave logo and the helpwave name\n */\nexport const HelpwaveBadge = ({\n size = 'small',\n title = 'helpwave',\n className = ''\n }: HelpwaveBadgeProps) => {\n const iconSize: number = size === 'small' ? 24 : 64\n\n return (\n <Tile\n prefix={(<Helpwave size={iconSize}/>)}\n title={{ value: title, className: size === 'small' ? 'textstyle-title-lg text-base' : 'textstyle-title-xl' }}\n className={clsx(\n {\n 'px-2 py-1 rounded-md': size === 'small',\n 'px-4 py-1 rounded-md': size === 'large',\n }, className\n )}\n />\n )\n}\n","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { Check } from 'lucide-react'\n\nexport type TileProps = {\n title: { value: ReactNode, className?: string },\n description?: { value: ReactNode, className?: string },\n onClick?: () => void,\n disabled?: boolean,\n isSelected?: boolean,\n prefix?: ReactNode,\n suffix?: ReactNode,\n className?: string,\n normalClassName?: string,\n selectedClassName?: string,\n disabledClassName?: string,\n}\n\n/**\n * A component for creating a tile similar to the flutter ListTile\n */\nexport const Tile = ({\n title,\n description,\n onClick,\n isSelected = false,\n disabled = false,\n prefix,\n suffix,\n normalClassName = 'hover:bg-primary/40 cursor-pointer',\n selectedClassName = ' bg-primary/20',\n disabledClassName = 'text-disabled-text bg-disabled-background cursor-not-allowed',\n className\n }: TileProps) => {\n return (\n <div\n className={clsx(\n 'flex-row-2 w-full items-center',\n {\n [normalClassName]: !!onClick && !disabled,\n [selectedClassName]: isSelected && !disabled,\n [disabledClassName]: disabled,\n },\n className\n )}\n onClick={disabled ? undefined : onClick}\n >\n {prefix}\n <div className=\"flex-col-0 w-full\">\n <h4 className={clsx(title.className ?? 'textstyle-title-normal')}>{title.value}</h4>\n {!!description &&\n <span className={clsx(description.className ?? 'textstyle-description')}>{description.value}</span>}\n </div>\n {suffix ?? (isSelected ? (<Check size={24}/>) : undefined)}\n </div>\n )\n}\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?: number,\n}\n\n/**\n * The helpwave loading spinner based on the svg logo.\n */\nexport const Helpwave = ({\n color = 'currentColor',\n animate = 'none',\n size = 64,\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 if (size < 0) {\n console.error('size cannot be less than 0')\n size = 64\n }\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 888 888\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeWidth={48}\n {...props}\n >\n <g className={clsx(svgAnimationKey)}>\n <path className={clsx({ 'animate-wave-big-left-up': isLoadingAnimation })}\n d=\"M144 543.235C144 423.259 232.164 326 340.92 326\" stroke={color} strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-big-right-down': isLoadingAnimation })}\n d=\"M537.84 544.104C429.084 544.104 340.92 446.844 340.92 326.869\" stroke={color} strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-left-up': isLoadingAnimation })}\n d=\"M462.223 518.035C462.223 432.133 525.348 362.495 603.217 362.495\" stroke={color}\n strokeDasharray=\"1000\"/>\n <path className={clsx({ 'animate-wave-small-right-down': isLoadingAnimation })}\n d=\"M745.001 519.773C666.696 519.773 603.218 450.136 603.218 364.233\" stroke={color}\n strokeDasharray=\"1000\"/>\n </g>\n </svg>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { ArrowDown, ArrowUp, ChevronDown } from 'lucide-react'\nimport { useLocale } from '../../localization/LanguageProvider'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { noop } from '../../util/noop'\nimport { addDuration, isInTimeSpan, subtractDuration } from '../../util/date'\nimport clsx from 'clsx'\nimport { SolidButton, TextButton } from '../user-action/Button'\nimport type { YearMonthPickerProps } from './YearMonthPicker'\nimport { YearMonthPicker } from './YearMonthPicker'\nimport type { DayPickerProps } from './DayPicker'\nimport { DayPicker } from './DayPicker'\nimport type { TimeTranslationType } from '../../localization/defaults/time'\nimport { timeTranslation } from '../../localization/defaults/time'\n\ntype DatePickerTranslationType = TimeTranslationType\n\ntype DisplayMode = 'yearMonth' | 'day'\n\nexport type DatePickerProps = {\n value?: Date,\n start?: Date,\n end?: Date,\n initialDisplay?: DisplayMode,\n onChange?: (date: Date) => void,\n dayPickerProps?: Omit<DayPickerProps, 'displayedMonth' | 'onChange' | 'selected'>,\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 overwriteTranslation,\n value = new Date(),\n start = subtractDuration(new Date(), { years: 50 }),\n end = addDuration(new Date(), { years: 50 }),\n initialDisplay = 'day',\n onChange = noop,\n yearMonthPickerProps,\n dayPickerProps,\n className = ''\n }: PropsForTranslation<DatePickerTranslationType, DatePickerProps>) => {\n const locale = useLocale()\n const translation = useTranslation([timeTranslation], overwriteTranslation)\n const [displayedMonth, setDisplayedMonth] = useState<Date>(value)\n const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplay)\n\n useEffect(() => {\n setDisplayedMonth(value)\n }, [value])\n\n return (\n <div className={clsx('flex-col-4', className)}>\n <div className=\"flex-row-2 items-center justify-between h-7\">\n <TextButton\n className={clsx('flex-row-1 items-center cursor-pointer select-none', {\n 'text-disabled-text': displayMode !== 'day',\n })}\n onClick={() => setDisplayMode(displayMode === 'day' ? 'yearMonth' : 'day')}\n >\n {`${new Intl.DateTimeFormat(locale, { month: 'long' }).format(displayedMonth)} ${displayedMonth.getFullYear()}`}\n <ChevronDown size={16}/>\n </TextButton>\n {displayMode === 'day' && (\n <div className=\"flex-row-2 justify-end\">\n <SolidButton\n size=\"small\"\n color=\"primary\"\n disabled={!isInTimeSpan(subtractDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(subtractDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowUp size={20}/>\n </SolidButton>\n <SolidButton\n size=\"small\"\n color=\"primary\"\n disabled={!isInTimeSpan(addDuration(displayedMonth, { months: 1 }), start, end)}\n onClick={() => {\n setDisplayedMonth(addDuration(displayedMonth, { months: 1 }))\n }}\n >\n <ArrowDown size={20}/>\n </SolidButton>\n </div>\n )}\n </div>\n {displayMode === 'yearMonth' ? (\n <YearMonthPicker\n {...yearMonthPickerProps}\n displayedYearMonth={value}\n start={start}\n end={end}\n onChange={newDate => {\n setDisplayedMonth(newDate)\n setDisplayMode('day')\n }}\n />\n ) : (\n <div>\n <DayPicker\n {...dayPickerProps}\n displayedMonth={displayedMonth}\n start={start}\n end={end}\n selected={value}\n onChange={date => {\n onChange(date)\n }}\n />\n <div className=\"mt-2\">\n <TextButton\n color=\"primary\"\n onClick={() => {\n const newDate = new Date()\n newDate.setHours(value.getHours(), value.getMinutes())\n onChange(newDate)\n }}\n >\n {translation('today')}\n </TextButton>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Example for the Date Picker\n */\nexport const DatePickerUncontrolled = ({\n value = new Date(),\n onChange = noop,\n ...props\n }: DatePickerProps) => {\n const [date, setDate] = useState<Date>(value)\n\n useEffect(() => setDate(value), [value])\n\n return (\n <DatePicker\n {...props}\n value={date}\n onChange={date1 => {\n setDate(date1)\n onChange(date1)\n }}\n />\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n document.documentElement.setAttribute('lang', language)\n setStoredLanguage(language)\n }, [language]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\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","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\n/**\n * A type describing the pluralization of a word\n */\nexport type TranslationPlural = {\n zero?: string,\n one?: string,\n two?: string,\n few?: string,\n many?: string,\n other: string,\n}\n\n/**\n * The type describing all values of a translation\n */\nexport type TranslationType = Record<string, string | TranslationPlural>\n\n/**\n * The type of translations\n */\nexport type Translation<T extends TranslationType> = Record<Language, T>\n\ntype OverwriteTranslationType<T extends TranslationType> = {\n language?: Language,\n translation?: Translation<Partial<T>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends TranslationType,\n Props = unknown\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n}\n\ntype StringKeys<T> = Extract<keyof T, string>;\n\ntype TranslationFunctionOptions = {\n replacements?: Record<string, string>,\n count?: number,\n}\ntype TranslationFunction<T extends TranslationType> = (key: StringKeys<T>, options?: TranslationFunctionOptions) => string\n\nexport const TranslationPluralCount = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 11,\n other: -1,\n}\n\n\nexport const useTranslation = <T extends TranslationType>(\n translations: Translation<Partial<TranslationType>>[],\n overwriteTranslation: OverwriteTranslationType<T> = {}\n): TranslationFunction<T> => {\n const { language: languageProp, translation: overwrite } = overwriteTranslation\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n const usedTranslations = [...translations]\n if (overwrite) {\n usedTranslations.push(overwrite)\n }\n\n return (key: StringKeys<T>, options?: TranslationFunctionOptions): string => {\n const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options }\n\n try {\n for (let i = translations.length - 1; i >= 0; i--) {\n const translation = translations[i]\n const localizedTranslation = translation[usedLanguage]\n if (!localizedTranslation) {\n continue\n }\n const value = localizedTranslation[key]\n if(!value) {\n continue\n }\n\n let forProcessing: string\n if (typeof value !== 'string') {\n if (count === TranslationPluralCount.zero && value?.zero) {\n forProcessing = value.zero\n } else if (count === TranslationPluralCount.one && value?.one) {\n forProcessing = value.one\n } else if (count === TranslationPluralCount.two && value?.two) {\n forProcessing = value.two\n } else if (TranslationPluralCount.few <= count && count < TranslationPluralCount.many && value?.few) {\n forProcessing = value.few\n } else if (count > TranslationPluralCount.many && value?.many) {\n forProcessing = value.many\n } else {\n forProcessing = value.other\n }\n } else {\n forProcessing = value\n }\n forProcessing = forProcessing.replace(/\\{\\{(\\w+)}}/g, (_, placeholder) => {\n return replacements[placeholder] ?? `{{key:${placeholder}}}` // fallback if key is missing\n })\n return forProcessing\n }\n } catch (e) {\n console.error(e)\n }\n return `{{${usedLanguage}:${key}}}`\n }\n}","export const noop = () => undefined\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\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\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}\n","import { equalSizeGroups } from './array'\n\nexport const monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nexport const 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 getDaysInMonth = (year: number, month: number): number => {\n const lastDayOfMonth = new Date(year, month + 1, 0)\n return lastDayOfMonth.getDate()\n}\n\nexport type Duration = {\n years?: number,\n months?: number,\n days?: number,\n hours?: number,\n minutes?: number,\n seconds?: number,\n milliseconds?: number,\n}\n\nexport const changeDuration = (date: Date, duration: Duration, 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: Duration): Date => {\n return changeDuration(date, duration, true)\n}\n\nexport const subtractDuration = (date: Date, duration: Duration): Date => {\n return changeDuration(date, duration, false)\n}\n\nexport const getBetweenDuration = (startDate: Date, endDate: Date): Duration => {\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 */\nexport const 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","import type { ButtonHTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport { forwardRef } from 'react'\nimport clsx from 'clsx'\n\n\nexport const ButtonColorUtil = {\n solid: ['primary', 'secondary', 'tertiary', 'positive', 'warning', 'negative', 'neutral'] as const,\n text: ['primary', 'negative', 'neutral'] as const,\n outline: ['primary'] as const,\n}\n\nexport const IconButtonUtil = {\n icon: [...ButtonColorUtil.solid, 'transparent'] as const,\n}\n\n\n/**\n * The allowed colors for the SolidButton and IconButton\n */\nexport type SolidButtonColor = typeof ButtonColorUtil.solid[number]\n/**\n * The allowed colors for the OutlineButton\n */\nexport type OutlineButtonColor = typeof ButtonColorUtil.outline[number]\n/**\n * The allowed colors for the TextButton\n */\nexport type TextButtonColor = typeof ButtonColorUtil.text[number]\n/**\n * The allowed colors for the IconButton\n */\nexport type IconButtonColor = typeof IconButtonUtil.icon[number]\n\n\n/**\n * The different sizes for a button\n */\ntype ButtonSizes = 'small' | 'medium' | 'large'\n\ntype IconButtonSize = 'tiny' | 'small' | 'medium' | 'large'\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = PropsWithChildren<{\n /**\n * @default 'medium'\n */\n size?: ButtonSizes,\n}> & ButtonHTMLAttributes<Element>\n\nconst paddingMapping: Record<ButtonSizes, string> = {\n small: 'btn-sm',\n medium: 'btn-md',\n large: 'btn-lg'\n}\n\nconst iconPaddingMapping: Record<IconButtonSize, string> = {\n tiny: 'icon-btn-xs',\n small: 'icon-btn-sm',\n medium: 'icon-btn-md',\n large: 'icon-btn-lg'\n}\n\nexport const ButtonUtil = {\n paddingMapping,\n iconPaddingMapping\n}\n\ntype ButtonWithIconsProps = ButtonProps & {\n startIcon?: ReactNode,\n endIcon?: ReactNode,\n}\n\nexport type SolidButtonProps = ButtonWithIconsProps & {\n color?: SolidButtonColor,\n}\n\nexport type OutlineButtonProps = ButtonWithIconsProps & {\n color?: OutlineButtonColor,\n}\n\nexport type TextButtonProps = ButtonWithIconsProps & {\n color?: TextButtonColor,\n}\n\n/**\n * The shard properties between all button types\n */\nexport type IconButtonProps = PropsWithChildren<{\n /**\n * @default 'medium'\n */\n size?: IconButtonSize,\n color?: IconButtonColor,\n}> & ButtonHTMLAttributes<Element>\n\n/**\n * A button with a solid background and different sizes\n */\nconst SolidButton = forwardRef<HTMLButtonElement, SolidButtonProps>(function SolidButton({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }, ref) {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-solid-primary-icon',\n secondary: 'text-button-solid-secondary-icon',\n tertiary: 'text-button-solid-tertiary-icon',\n positive: 'text-button-solid-positive-icon',\n warning: 'text-button-solid-warning-icon',\n negative: 'text-button-solid-negative-icon',\n neutral: 'text-button-solid-neutral-icon',\n }[color]\n\n return (\n <button\n ref={ref}\n onClick={onClick}\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n})\n\n/**\n * A button with an outline border and different sizes\n */\nconst OutlineButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: OutlineButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent border-2 border-button-outline-primary-text text-button-outline-primary-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-outline-primary-icon',\n }[color]\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text border-disabled-outline cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-80')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A text that is a button that can have different sizes\n */\nconst TextButton = ({\n children,\n disabled = false,\n color = 'neutral',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: TextButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent text-button-text-primary-text',\n negative: 'bg-transparent text-button-text-negative-text',\n neutral: 'bg-transparent text-button-text-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-text-primary-icon',\n negative: 'text-button-text-negative-icon',\n neutral: 'text-button-text-neutral-icon',\n }[color]\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:bg-button-text-hover-background')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n\n/**\n * A button for icons with a solid background and different sizes\n */\nconst IconButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n className,\n ...restProps\n }: IconButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n transparent: 'bg-transparent',\n }[color]\n\n return (\n <button\n disabled={disabled}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled && color !== 'transparent',\n 'text-disabled-text cursor-not-allowed opacity-70': disabled && color === 'transparent',\n 'hover:bg-button-text-hover-background': !disabled && color === 'transparent',\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled,\n },\n ButtonUtil.iconPaddingMapping[size],\n className\n )}\n {...restProps}\n >\n {children}\n </button>\n )\n}\n\nexport { SolidButton, OutlineButton, TextButton, IconButton }\n","import { useEffect, useRef, useState } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { noop } from '../../util/noop'\nimport { equalSizeGroups, range } from '../../util/array'\nimport clsx from 'clsx'\nimport { ExpandableUncontrolled } from '../layout-and-navigation/Expandable'\nimport { addDuration, monthsList, subtractDuration } from '../../util/date'\nimport { useLocale } from '../../localization/LanguageProvider'\nimport { SolidButton } from '../user-action/Button'\n\nexport type YearMonthPickerProps = {\n displayedYearMonth?: Date,\n start?: Date,\n end?: Date,\n onChange?: (date: Date) => void,\n className?: string,\n maxHeight?: number,\n showValueOpen?: boolean,\n}\n\n// TODO use a dynamically loading infinite list here\nexport const YearMonthPicker = ({\n displayedYearMonth = new Date(),\n start = subtractDuration(new Date(), { years: 50 }),\n end = addDuration(new Date(), { years: 50 }),\n onChange = noop,\n className = '',\n maxHeight = 300,\n showValueOpen = true\n }: YearMonthPickerProps) => {\n const locale = useLocale()\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const scrollToItem = () => {\n if (ref.current) {\n ref.current.scrollIntoView({\n behavior: 'instant',\n block: 'center',\n })\n }\n }\n\n scrollToItem()\n }, [ref])\n\n if (end < start) {\n console.error(`startYear: (${start}) less than endYear: (${end})`)\n return null\n }\n\n const years = range([start.getFullYear(), end.getFullYear()], { exclusiveEnd: false })\n\n return (\n <div className={clsx('flex-col-0 select-none', className)}>\n <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n <div className=\"flex-col-1 mr-3\">\n {years.map(year => {\n const selectedYear = displayedYearMonth.getFullYear() === year\n return (\n <ExpandableUncontrolled\n key={year}\n ref={(displayedYearMonth.getFullYear() ?? new Date().getFullYear()) === year ? ref : undefined}\n label={<span className={clsx({ 'text-primary font-bold': selectedYear })}>{year}</span>}\n isExpanded={showValueOpen && selectedYear}\n contentClassName=\"gap-y-1\"\n >\n {equalSizeGroups([...monthsList], 3).map((monthList, index) => (\n <div key={index} className=\"flex-row-1\">\n {monthList.map(month => {\n const monthIndex = monthsList.indexOf(month)\n const newDate = new Date(year, monthIndex)\n\n const selectedMonth = selectedYear && monthIndex === displayedYearMonth.getMonth()\n const firstOfMonth = new Date(year, monthIndex, 1)\n const lastOfMonth = new Date(year, monthIndex, 1)\n const isAfterStart = start === undefined || start <= addDuration(subtractDuration(lastOfMonth, { days: 1 }), { months: 1 })\n const isBeforeEnd = end === undefined || firstOfMonth <= end\n const isValid = isAfterStart && isBeforeEnd\n return (\n <SolidButton\n key={month}\n disabled={!isValid}\n color={selectedMonth && isValid ? 'primary' : 'neutral'}\n className=\"flex-1\"\n size=\"small\"\n onClick={() => {\n onChange(newDate)\n }}\n >\n {new Intl.DateTimeFormat(locale, { month: 'short' }).format(newDate)}\n </SolidButton>\n )\n })}\n </div>\n ))}\n </ExpandableUncontrolled>\n )\n })}\n </div>\n </Scrollbars>\n </div>\n )\n}\n\nexport const YearMonthPickerUncontrolled = ({\n displayedYearMonth,\n onChange = noop,\n ...props\n }: YearMonthPickerProps) => {\n const [yearMonth, setYearMonth] = useState<Date>(displayedYearMonth ?? new Date())\n\n useEffect(() => setYearMonth(displayedYearMonth), [displayedYearMonth])\n\n return (\n <YearMonthPicker\n displayedYearMonth={yearMonth}\n onChange={date => {\n setYearMonth(date)\n onChange(date)\n }}\n {...props}\n />\n )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { forwardRef, useCallback, useEffect, useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\n\ntype IconBuilder = (expanded: boolean) => ReactNode\n\nexport type ExpandableProps = PropsWithChildren<{\n label: ReactNode,\n icon?: IconBuilder,\n isExpanded?: boolean,\n onChange?: (isExpanded: boolean) => void,\n /**\n * Whether the expansion should only happen when the header is clicked or on the entire component\n */\n clickOnlyOnHeader?: boolean,\n disabled?: boolean,\n className?: string,\n headerClassName?: string,\n contentClassName?: string,\n contentExpandedClassName?: string,\n}>\n\n\nexport type ExpansionIconProps = {\n isExpanded: boolean,\n className?: string,\n}\n\nexport const ExpansionIcon = ({ isExpanded, className }: ExpansionIconProps) => {\n return (\n <ChevronDown\n className={clsx(\n 'min-w-6 w-6 min-h-6 h-6 transition-transform duration-200 ease-in-out',\n { 'rotate-180': isExpanded },\n className\n )}\n />\n )\n}\n\n\n/**\n * A Component for showing and hiding content\n */\nexport const Expandable = forwardRef<HTMLDivElement, ExpandableProps>(function Expandable({\n children,\n label,\n icon,\n isExpanded = false,\n onChange = noop,\n clickOnlyOnHeader = true,\n disabled = false,\n className,\n headerClassName,\n contentClassName,\n contentExpandedClassName,\n }, ref) {\n const defaultIcon = useCallback((expanded: boolean) => <ExpansionIcon isExpanded={expanded}/>, [])\n icon ??= defaultIcon\n\n return (\n <div\n ref={ref}\n className={clsx('flex-col-0 bg-surface text-on-surface group rounded-lg shadow-sm', { 'cursor-pointer': !clickOnlyOnHeader && !disabled }, className)}\n onClick={() => !clickOnlyOnHeader && !disabled && onChange(!isExpanded)}\n >\n <div\n className={clsx(\n 'flex-row-2 py-2 px-4 rounded-lg justify-between items-center bg-surface text-on-surface select-none',\n {\n 'group-hover:brightness-97': !isExpanded,\n 'hover:brightness-97': isExpanded && !disabled,\n 'cursor-pointer': clickOnlyOnHeader && !disabled,\n },\n headerClassName\n )}\n onClick={() => clickOnlyOnHeader && !disabled && onChange(!isExpanded)}\n >\n {label}\n {icon(isExpanded)}\n </div>\n <div\n className={clsx(\n 'flex-col-2 px-4 transition-all duration-300 ease-in-out',\n {\n [clsx('max-h-96 opacity-100 pb-2 overflow-y-auto', contentExpandedClassName)]: isExpanded,\n 'max-h-0 opacity-0 overflow-hidden': !isExpanded,\n },\n contentClassName\n )}\n >\n {children}\n </div>\n </div>\n )\n})\n\nexport const ExpandableUncontrolled = forwardRef<HTMLDivElement, ExpandableProps>(function ExpandableUncontrolled({\n isExpanded,\n onChange = noop,\n ...props\n },\n ref) {\n const [usedIsExpanded, setUsedIsExpanded] = useState(isExpanded)\n\n useEffect(() => {\n setUsedIsExpanded(isExpanded)\n }, [isExpanded])\n\n return (\n <Expandable\n {...props}\n ref={ref}\n isExpanded={usedIsExpanded}\n onChange={value => {\n onChange(value)\n setUsedIsExpanded(value)\n }}\n />\n )\n})\n","import type { WeekDay } from '../../util/date'\nimport { equalDate, getWeeksForCalenderMonth, isInTimeSpan } from '../../util/date'\nimport { noop } from '../../util/noop'\nimport clsx from 'clsx'\nimport { useLocale } from '../../localization/LanguageProvider'\nimport { useEffect, useState } from 'react'\n\nexport type DayPickerProps = {\n displayedMonth: Date,\n selected?: Date,\n start?: Date,\n end?: Date,\n onChange?: (date: Date) => void,\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 selected,\n start,\n end,\n onChange = noop,\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 return (\n <div className={clsx('flex-col-1 min-w-[220px] select-none', className)}>\n <div className=\"flex-row-2 text-center\">\n {weeks[0]!.map((weekDay, index) => (\n <div key={index} className=\"flex-1 font-semibold\">\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} className=\"flex-row-2 text-center\">\n {week.map((date) => {\n const isSelected = !!selected && equalDate(selected, date)\n const isToday = equalDate(new Date(), date)\n const isSameMonth = date.getMonth() === month\n const isDayValid = isInTimeSpan(date, start, end)\n return (\n <button\n disabled={!isDayValid}\n key={date.getDate()}\n className={clsx(\n 'flex-1 rounded-full border-2',\n {\n 'text-description': !isSameMonth && !isSelected && isDayValid,\n 'text-button-solid-neutral-text bg-button-solid-neutral-background': !isSelected && isSameMonth && isDayValid,\n 'text-button-solid-primary-text bg-button-solid-primary-background': isSelected && isDayValid,\n 'hover:brightness-90 hover:bg-button-solid-primary-background hover:text-button-solid-primary-text': isDayValid,\n 'text-disabled-text bg-disabled-background cursor-not-allowed': !isDayValid,\n 'border-secondary': isToday && markToday,\n 'border-transparent': !isToday || !markToday,\n }\n )}\n onClick={() => onChange(date)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n ))}\n </div>\n )\n}\n\nexport const DayPickerUncontrolled = ({\n displayedMonth,\n selected,\n onChange = noop,\n ...restProps\n }: DayPickerProps) => {\n const [date, setDate] = useState(selected)\n const [usedDisplayedMonth, setUsedDDisplayedMonth] = useState(displayedMonth)\n\n useEffect(() => {\n setDate(selected)\n setUsedDDisplayedMonth(selected)\n }, [selected])\n\n return (\n <DayPicker\n displayedMonth={usedDisplayedMonth}\n selected={date}\n onChange={newDate => {\n setDate(newDate)\n setUsedDDisplayedMonth(newDate)\n onChange(newDate)\n }}\n {...restProps}\n />\n )\n}\n","import type { TranslationPlural, Translation } from '../useTranslation'\n\nexport type MonthTranslationType = {\n january: string,\n february: string,\n march: string,\n april: string,\n may: string,\n june: string,\n july: string,\n august: string,\n september: string,\n october: string,\n november: string,\n december: string,\n}\n\nexport const monthTranslation: Translation<MonthTranslationType> = {\n en: {\n january: 'January',\n february: 'Febuary',\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 },\n de: {\n january: 'Januar',\n february: 'Febuar',\n march: 'März',\n april: 'April',\n may: 'Mai',\n june: 'Juni',\n july: 'Juli',\n august: 'August',\n september: 'September',\n october: 'October',\n november: 'November',\n december: 'December',\n }\n}\n\nexport type TimeTranslationType = {\n century: TranslationPlural,\n decade: TranslationPlural,\n year: TranslationPlural,\n month: TranslationPlural,\n day: TranslationPlural,\n hour: TranslationPlural,\n minute: TranslationPlural,\n second: TranslationPlural,\n millisecond: TranslationPlural,\n microsecond: TranslationPlural,\n nanosecond: TranslationPlural,\n yesterday: string,\n today: string,\n tomorrow: string,\n in: string,\n ago: string,\n} & MonthTranslationType\n\nexport const timeTranslation: Translation<TimeTranslationType> = {\n en: {\n ...monthTranslation.en,\n century: { one: 'Century', other: 'Centuries' },\n decade: { one: 'Decade', other: 'Decades' },\n year: { one: 'Year', other: 'Years' },\n month: { one: 'Month', other: 'Months' },\n day: { one: 'Day', other: 'Days' },\n hour: { one: 'Hour', other: 'Hours' },\n minute: { one: 'Minute', other: 'Minutes' },\n second: { one: 'Second', other: 'Seconds' },\n millisecond: { one: 'Millisecond', other: 'Milliseconds' },\n microsecond: { one: 'Microsecond', other: 'Microseconds' },\n nanosecond: { one: 'Nanosecond', other: 'Nanoseconds' },\n yesterday: 'Yesterday',\n today: 'Today',\n tomorrow: 'Tomorrow',\n in: 'in',\n ago: 'ago',\n },\n de: {\n ...monthTranslation.de,\n century: { one: 'Jahrhundert', other: 'Jahrhunderte' },\n decade: { one: 'Jahrzehnt', other: 'Jahrzehnte' },\n year: { one: 'Jahr', other: 'Jahre' },\n month: { one: 'Monat', other: 'Monate' },\n day: { one: 'Tag', other: 'Tage' },\n hour: { one: 'Stunde', other: 'Stunden' },\n minute: { one: 'Minute', other: 'Minuten' },\n second: { one: 'Sekunde', other: 'Sekunden' },\n millisecond: { one: 'Millisekunde', other: 'Millisekunden' },\n microsecond: { one: 'Mikrosekunde', other: 'Mikrosekunden' },\n nanosecond: { one: 'Nanosekunde', other: 'Nanosekunden' },\n yesterday: 'Gestern',\n today: 'Heute',\n tomorrow: 'Morgen',\n in: 'in',\n ago: 'vor',\n }\n}","import type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { TimeTranslationType } from '../../localization/defaults/time'\nimport { timeTranslation } from '../../localization/defaults/time'\n\ntype TimeDisplayTranslationType = TimeTranslationType & {\n inDays: string,\n agoDays: string,\n}\n\nconst defaultTimeDisplayTranslations: Translation<TimeDisplayTranslationType> = {\n en: {\n ...timeTranslation.en,\n inDays: `in {{days}} days`,\n agoDays: `{{days}} days ago`,\n },\n de: {\n ...timeTranslation.de,\n inDays: `in {{days}} Tagen`,\n agoDays: `vor {{days}} Tagen`,\n }\n}\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 overwriteTranslation,\n date,\n mode = 'daysFromToday'\n }: PropsForTranslation<TimeDisplayTranslationType, TimeDisplayProps>) => {\n const translation = useTranslation([defaultTimeDisplayTranslations], overwriteTranslation)\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('today')\n } else if (differenceInDays === 1) {\n displayString = isBefore ? translation('yesterday') : translation('tomorrow')\n } else {\n displayString = isBefore ? translation('agoDays', { replacements: { days: differenceInDays.toString() } }) : translation('inDays', { replacements: { days: differenceInDays.toString() } })\n }\n const monthToTranslation: { [key: number]: string } = {\n 0: translation('january'),\n 1: translation('february'),\n 2: translation('march'),\n 3: translation('april'),\n 4: translation('may'),\n 5: translation('june'),\n 6: translation('july'),\n 7: translation('august'),\n 8: translation('september'),\n 9: translation('october'),\n 10: translation('november'),\n 11: translation('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 (\n <span>\n {fullString}\n </span>\n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { noop } from '../../util/noop'\nimport { closestMatch, range } from '../../util/array'\nimport clsx from 'clsx'\n\ntype MinuteIncrement = '1min' | '5min' | '10min' | '15min' | '30min'\n\nexport type TimePickerProps = {\n time?: Date,\n onChange?: (time: Date) => void,\n is24HourFormat?: boolean,\n minuteIncrement?: MinuteIncrement,\n maxHeight?: number,\n className?: string,\n}\n\nexport const TimePicker = ({\n time = new Date(),\n onChange = noop,\n is24HourFormat = true,\n minuteIncrement = '5min',\n maxHeight = 300,\n className = ''\n }: TimePickerProps) => {\n const minuteRef = useRef<HTMLButtonElement>(null)\n const hourRef = useRef<HTMLButtonElement>(null)\n\n const isPM = time.getHours() >= 11\n const hours = is24HourFormat ? range(24) : range([1, 12], { exclusiveEnd: false })\n let minutes = range(60)\n\n useEffect(() => {\n const scrollToItem = () => {\n if (minuteRef.current) {\n const container = minuteRef.current.parentElement!\n\n const hasOverflow = container.scrollHeight > maxHeight\n if (hasOverflow) {\n minuteRef.current.scrollIntoView({\n behavior: 'instant',\n block: 'nearest',\n })\n }\n }\n }\n scrollToItem()\n }, [minuteRef, minuteRef.current]) // eslint-disable-line\n\n useEffect(() => {\n const scrollToItem = () => {\n if (hourRef.current) {\n const container = hourRef.current.parentElement!\n\n const hasOverflow = container.scrollHeight > maxHeight\n if (hasOverflow) {\n hourRef.current.scrollIntoView({\n behavior: 'instant',\n block: 'nearest',\n })\n }\n }\n }\n scrollToItem()\n }, [hourRef, hourRef.current]) // eslint-disable-line\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 - time.getMinutes()) < Math.abs(item2 - time.getMinutes()))\n\n const style = (selected: boolean) => clsx('chip-full hover:brightness-90 hover:bg-primary hover:text-on-primary rounded-md mr-3',\n { 'bg-primary text-on-primary': selected, 'bg-white text-black': !selected })\n\n const onChangeWrapper = (transformer: (newDate: Date) => void) => {\n const newDate = new Date(time)\n transformer(newDate)\n onChange(newDate)\n }\n\n return (\n <div className={clsx('flex-row-2 w-fit min-w-[150px] select-none', className)}>\n <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n <div className=\"flex-col-1 h-full\">\n {hours.map(hour => {\n const currentHour = hour === time.getHours() - (!is24HourFormat && isPM ? 12 : 0)\n return (\n <button\n key={hour}\n ref={currentHour ? hourRef : undefined}\n className={style(currentHour)}\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 </Scrollbars>\n <Scrollbars autoHeight autoHeightMax={maxHeight} style={{ height: '100%' }}>\n <div className=\"flex-col-1 h-full\">\n {minutes.map(minute => {\n const currentMinute = minute === closestMinute\n return (\n <button\n key={minute + minuteIncrement} // minute increment so that scroll works\n ref={currentMinute ? minuteRef : undefined}\n className={style(currentMinute)}\n onClick={() => onChangeWrapper(newDate => newDate.setMinutes(minute))}\n >\n {minute.toString().padStart(2, '0')}\n </button>\n )\n })}\n </div>\n </Scrollbars>\n {!is24HourFormat && (\n <div className=\"flex-col-1\">\n <button\n className={style(!isPM)}\n onClick={() => onChangeWrapper(newDate => isPM && newDate.setHours(newDate.getHours() - 12))}\n >\n AM\n </button>\n <button\n className={style(isPM)}\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 time,\n onChange = noop,\n ...props\n }: TimePickerProps) => {\n const [value, setValue] = useState(time)\n useEffect(() => setValue(time), [time])\n\n return (\n <TimePicker\n {...props}\n time={value}\n onChange={time1 => {\n setValue(time1)\n onChange(time1)\n }}\n />\n )\n}\n","import type { PropsWithChildren } from 'react'\nimport type { SolidButtonColor } from '../user-action/Button'\nimport { SolidButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { DialogProps } from '../layout-and-navigation/Overlay'\nimport { Dialog } from '../layout-and-navigation/Overlay'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype ConfirmDialogTranslation = FormTranslationType\n\nexport type ConfirmDialogType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n text?: string,\n color?: SolidButtonColor,\n disabled?: boolean,\n}\n\nexport type ConfirmDialogProps = DialogProps & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onConfirm: () => void,\n onDecline?: () => void,\n confirmType?: ConfirmDialogType,\n /**\n * Order: Decline, Confirm\n */\n buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Dialog for demanding the user for confirmation\n *\n * To allow for background closing, prefer using a ConfirmModal\n */\nexport const ConfirmDialog = ({\n overwriteTranslation,\n children,\n onConfirm,\n onDecline,\n confirmType = 'positive',\n buttonOverwrites,\n className,\n ...restProps\n }: PropsForTranslation<ConfirmDialogTranslation, PropsWithChildren<ConfirmDialogProps>>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n\n const mapping: Record<ConfirmDialogType, SolidButtonColor> = {\n neutral: 'primary',\n negative: 'negative',\n positive: 'positive',\n primary: 'primary',\n }\n\n return (\n <Dialog {...restProps} 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 {onDecline && (\n <SolidButton\n color={buttonOverwrites?.[0].color ?? 'negative'}\n onClick={onDecline}\n\n disabled={buttonOverwrites?.[0].disabled ?? false}\n >\n {buttonOverwrites?.[0].text ?? translation('decline')}\n </SolidButton>\n )}\n <SolidButton\n autoFocus\n color={buttonOverwrites?.[1].color ?? mapping[confirmType]}\n onClick={onConfirm}\n disabled={buttonOverwrites?.[1].disabled ?? false}\n >\n {buttonOverwrites?.[1].text ?? translation('confirm')}\n </SolidButton>\n </div>\n </Dialog>\n )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport clsx from 'clsx'\nimport { Tooltip } from '../user-action/Tooltip'\nimport { X } from 'lucide-react'\nimport { IconButton } from '../user-action/Button'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\nexport type OverlayProps = PropsWithChildren<{\n /**\n * Whether the overlay should be currently displayed\n */\n isOpen: boolean,\n /**\n * Callback when the background is clicked\n */\n onBackgroundClick?: () => void,\n /**\n * Styling for the background\n *\n * To remove the darkening, set bg-transparent\n */\n backgroundClassName?: string,\n}>\n\n/**\n * A generic overlay window which is managed by its parent\n */\nexport const Overlay = ({\n children,\n isOpen,\n onBackgroundClick,\n backgroundClassName,\n }: PropsWithChildren<OverlayProps>) => {\n // The element to which the overlay will be attached to\n const [root, setRoot] = useState<HTMLElement>()\n\n useEffect(() => {\n setRoot(document.body)\n }, [])\n\n if (!root || !isOpen) return null\n\n return ReactDOM.createPortal(\n <div className={clsx('fixed inset-0 z-[200]')}>\n <div\n className={clsx('fixed inset-0 h-screen w-screen bg-overlay-shadow', backgroundClassName)}\n onClick={onBackgroundClick}\n />\n {children}\n </div>,\n root\n )\n}\n\n\nlet overlayStack: HTMLDivElement[] = []\n\n\n// --- Modal ---\n\ntype ModalHeaderTranslation = FormTranslationType\n\nconst defaultModalHeaderTranslation: Translation<FormTranslationType> = {\n en: {\n ...formTranslation.en\n },\n de: {\n ...formTranslation.de\n }\n}\n\nexport type OverlayHeaderProps = {\n /**\n * Callback when the close button is clicked. If omitted or undefined, the button is hidden\n */\n onClose?: () => void,\n /** The title of the Modal. If you want to only set the text use `titleText` instead */\n title?: ReactNode,\n /** The title text of the Modal. If you want to set a custom title use `title` instead */\n titleText?: string,\n /** The description of the Modal. If you want to only set the text use `descriptionText` instead */\n description?: ReactNode,\n /** The description text of the Modal. If you want to set a custom description use `description` instead */\n descriptionText?: string,\n}\n\n/**\n * A header that should be in an Overlay\n */\nexport const OverlayHeader = ({\n overwriteTranslation,\n onClose,\n title,\n titleText = '',\n description,\n descriptionText = ''\n }: PropsForTranslation<ModalHeaderTranslation, OverlayHeaderProps>) => {\n const translation = useTranslation([defaultModalHeaderTranslation], overwriteTranslation)\n const hasTitleRow = !!title || !!titleText || !!onClose\n const titleRow = (\n <div className=\"flex-row-8 justify-between items-start\">\n {title ?? (\n <h2\n className={clsx('textstyle-title-lg', {\n 'mb-1': description || descriptionText,\n })}\n >\n {titleText}\n </h2>\n )}\n {!!onClose && (\n <Tooltip tooltip={translation('close')}>\n <IconButton color=\"neutral\" size=\"small\" onClick={onClose}>\n <X className=\"w-full h-full\"/>\n </IconButton>\n </Tooltip>\n )}\n </div>\n )\n\n return (\n <div className=\"flex-col-2\">\n {hasTitleRow && (titleRow)}\n {description ?? (descriptionText && (<span className=\"textstyle-description\">{descriptionText}</span>))}\n </div>\n )\n}\n\nexport type ModalProps = {\n isOpen: boolean,\n onClose: () => void,\n className?: string,\n backgroundClassName?: string,\n headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n}\n\n/**\n * A Generic Modal Window\n */\nexport const Modal = ({\n children,\n isOpen,\n onClose,\n className,\n backgroundClassName,\n headerProps,\n }: PropsWithChildren<ModalProps>) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!isOpen) return\n\n const modal = ref.current\n\n if (!modal) {\n console.error('modal open, but no ref found')\n return\n }\n\n overlayStack.push(modal)\n\n const focusable = modal?.querySelectorAll(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n )\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isTopmost = overlayStack[overlayStack.length - 1] === modal\n if (!isTopmost) return\n\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose()\n } else if (e.key === 'Tab') {\n if (focusable.length === 0) return\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n (last as HTMLElement).focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n (first as HTMLElement).focus()\n }\n }\n }\n\n modal.focus()\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n overlayStack = overlayStack.filter(m => m !== modal)\n }\n }, [isOpen, onClose])\n\n return (\n <Overlay\n isOpen={isOpen}\n onBackgroundClick={onClose}\n backgroundClassName={backgroundClassName}\n >\n <div\n ref={ref}\n tabIndex={-1}\n className={clsx(\n 'flex-col-2 fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 p-4 bg-overlay-background text-overlay-text rounded-xl shadow-xl animate-pop-in',\n className\n )}\n role=\"dialog\"\n aria-modal={true}\n >\n <OverlayHeader {...headerProps} onClose={onClose}/>\n {children}\n </div>\n </Overlay>\n )\n}\n\n// --- Dialog ---\n\nexport type DialogProps = Omit<OverlayProps, 'onBackgroundClick'> & {\n headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n className?: string,\n}\n\n/**\n * A Generic Dialog Window\n */\nexport const Dialog = ({\n children,\n isOpen,\n className,\n backgroundClassName,\n headerProps,\n }: PropsWithChildren<DialogProps>) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!isOpen) return\n\n const dialog = ref.current\n\n if (!dialog) {\n console.error('dialog open, but no ref found')\n return\n }\n\n overlayStack.push(dialog)\n\n const focusable = dialog?.querySelectorAll(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n )\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isTopmost = overlayStack[overlayStack.length - 1] === dialog\n if (!isTopmost) return\n\n if (e.key === 'Escape') {\n e.stopPropagation()\n } else if (e.key === 'Tab') {\n if (focusable.length === 0) return\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n (last as HTMLElement).focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n (first as HTMLElement).focus()\n }\n }\n }\n\n dialog.focus()\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n overlayStack = overlayStack.filter(m => m !== dialog)\n }\n }, [isOpen])\n\n return (\n <Overlay\n isOpen={isOpen}\n backgroundClassName={backgroundClassName}\n >\n <div\n ref={ref}\n tabIndex={-1}\n className={clsx(\n 'flex-col-2 fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 p-4 bg-overlay-background text-overlay-text rounded-xl shadow-xl animate-pop-in',\n className\n )}\n role=\"dialog\"\n aria-modal={true}\n >\n {!!headerProps && (<OverlayHeader {...headerProps}/>)}\n {children}\n </div>\n </Overlay>\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 { CSSProperties, PropsWithChildren, ReactNode } from 'react'\nimport { useHoverState } from '../../hooks/useHoverState'\nimport { clsx } from 'clsx'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type TooltipProps = PropsWithChildren<{\n tooltip: ReactNode,\n /**\n * Number of milliseconds until the tooltip appears\n *\n * defaults to 1000ms\n */\n animationDelay?: number,\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 animationDelay The delay before the tooltip appears\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 Tooltip = ({\n tooltip,\n children,\n animationDelay = 650,\n tooltipClassName = '',\n containerClassName = '',\n position = 'bottom',\n zIndex = 10,\n }: TooltipProps) => {\n const { isHovered, handlers } = useHoverState()\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', containerClassName)}\n {...handlers}\n >\n {children}\n {isHovered && (\n <div\n className={clsx(\n `opacity-0 absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap\n animate-tooltip-fade-in shadow-around-md bg-tooltip-background`,\n positionClasses[position], tooltipClassName\n )}\n style={{ zIndex, animationDelay: animationDelay + 'ms' }}\n >\n {tooltip}\n <div\n className={clsx(`absolute w-0 h-0`, triangleClasses[position])}\n style={{ ...triangleStyle[position], zIndex: zIndex + 1 }}\n />\n </div>\n )}\n </div>\n )\n}\n","import type { Translation } from '../useTranslation'\n\nexport type FormTranslationType = {\n add: string,\n all: string,\n apply: string,\n back: string,\n cancel: string,\n change: string,\n clear: string,\n click: string,\n clickToCopy: string,\n close: string,\n confirm: string,\n copy: string,\n copied: string,\n create: string,\n decline: string,\n delete: string,\n discard: string,\n discardChanges: string,\n done: string,\n edit: string,\n enterText: string,\n error: string,\n exit: string,\n fieldRequiredError: string,\n invalidEmailError: string,\n less: string,\n loading: string,\n maxLengthError: string,\n minLengthError: string,\n more: string,\n next: string,\n no: string,\n none: string,\n of: string,\n optional: string,\n pleaseWait: string,\n previous: string,\n remove: string,\n required: string,\n reset: string,\n save: string,\n saved: string,\n search: string,\n select: string,\n selectOption: string,\n show: string,\n showMore: string,\n showLess: string,\n submit: string,\n success: string,\n unsavedChanges: string,\n unsavedChangesSaveQuestion: string,\n update: string,\n yes: string,\n}\n\nexport const formTranslation: Translation<FormTranslationType> = {\n en: {\n add: 'Add',\n all: 'All',\n apply: 'Apply',\n back: 'Back',\n cancel: 'Cancel',\n change: 'Change',\n clear: 'Clear',\n click: 'Click',\n clickToCopy: 'Click to Copy',\n close: 'Close',\n confirm: 'Confirm',\n copy: 'Copy',\n copied: 'Copied',\n create: 'Create',\n decline: 'Decline',\n delete: 'Delete',\n discard: 'Discard',\n discardChanges: 'Discard Changes',\n done: 'Done',\n edit: 'Edit',\n enterText: 'Enter text here',\n error: 'Error',\n exit: 'Exit',\n fieldRequiredError: 'This field is required.',\n invalidEmailError: 'Please enter a valid email address.',\n less: 'Less',\n loading: 'Loading',\n maxLengthError: 'Maximum length exceeded.',\n minLengthError: 'Minimum length not met.',\n more: 'More',\n next: 'Next',\n no: 'No',\n none: 'None',\n of: 'of',\n optional: 'Optional',\n pleaseWait: 'Please wait...',\n previous: 'Previous',\n remove: 'Remove',\n required: 'Required',\n reset: 'Reset',\n save: 'Save',\n saved: 'Saved',\n search: 'Search',\n select: 'Select',\n selectOption: 'Select an option',\n show: 'Show',\n showMore: 'Show more',\n showLess: 'Show less',\n submit: 'Submit',\n success: 'Success',\n update: 'Update',\n unsavedChanges: 'Unsaved Changes',\n unsavedChangesSaveQuestion: 'Do you want to save your changes?',\n yes: 'Yes',\n },\n de: {\n add: 'Hinzufügen',\n all: 'Alle',\n apply: 'Anwenden',\n back: 'Zurück',\n cancel: 'Abbrechen',\n change: 'Ändern',\n clear: 'Löschen',\n click: 'Klicken',\n clickToCopy: 'Zum kopieren klicken',\n close: 'Schließen',\n confirm: 'Bestätigen',\n copy: 'Kopieren',\n copied: 'Kopiert',\n create: 'Erstellen',\n decline: 'Ablehnen',\n delete: 'Löschen',\n discard: 'Verwerfen',\n discardChanges: 'Änderungen Verwerfen',\n done: 'Fertig',\n edit: 'Bearbeiten',\n enterText: 'Text hier eingeben',\n error: 'Fehler',\n exit: 'Beenden',\n fieldRequiredError: 'Dieses Feld ist erforderlich.',\n invalidEmailError: 'Bitte geben Sie eine gültige E-Mail-Adresse ein.',\n less: 'Weniger',\n loading: 'Lädt',\n maxLengthError: 'Maximale Länge überschritten.',\n minLengthError: 'Mindestlänge nicht erreicht.',\n more: 'Mehr',\n next: 'Weiter',\n no: 'Nein',\n none: 'Nichts',\n of: 'von',\n optional: 'Optional',\n pleaseWait: 'Bitte warten...',\n previous: 'Vorherige',\n remove: 'Entfernen',\n required: 'Erforderlich',\n reset: 'Zurücksetzen',\n save: 'Speichern',\n saved: 'Gespeichert',\n search: 'Suche',\n select: 'Select',\n selectOption: 'Option auswählen',\n show: 'Anzeigen',\n showMore: 'Mehr anzeigen',\n showLess: 'Weniger anzeigen',\n submit: 'Abschicken',\n success: 'Erfolg',\n update: 'Update',\n unsavedChanges: 'Ungespeicherte Änderungen',\n unsavedChangesSaveQuestion: 'Möchtest du die Änderungen speichern?',\n yes: 'Ja',\n }\n}\n","import clsx from 'clsx'\n\nexport const avtarSizeList = ['tiny', 'small', 'medium', 'large'] as const\nexport type AvatarSize = typeof avtarSizeList[number]\nexport const avatarSizeMapping: Record<AvatarSize, number> = {\n tiny: 24,\n small: 32,\n medium: 48,\n large: 64\n}\n\nexport type AvatarProps = {\n avatarUrl: string,\n alt: string,\n size?: AvatarSize,\n className?: string,\n}\n\n/**\n * A component for showing a profile picture\n */\nexport const Avatar = ({ avatarUrl, alt, size = 'medium', className = '' }: AvatarProps) => {\n // TODO remove later\n avatarUrl = 'https://cdn.helpwave.de/boringavatar.svg'\n\n const avtarSize = {\n tiny: 24,\n small: 32,\n medium: 48,\n large: 64,\n }[size]\n\n const style = {\n width: avtarSize + 'px',\n height: avtarSize + 'px',\n maxWidth: avtarSize + 'px',\n maxHeight: avtarSize + 'px',\n minWidth: avtarSize + 'px',\n minHeight: avtarSize + 'px',\n }\n\n return (\n // TODO transparent or white background later\n <div className={clsx(`rounded-full bg-primary shadow`, className)} style={style}>\n <img\n className=\"rounded-full\"\n style={style}\n src={avatarUrl}\n alt={alt}\n width={avtarSize}\n height={avtarSize}\n />\n </div>\n )\n}\n\nexport type AvatarGroupProps = {\n avatars: Omit<AvatarProps, 'size'>[],\n maxShownProfiles?: number,\n size?: AvatarSize,\n}\n\n/**\n * A component for showing a group of Avatar's\n */\nexport const AvatarGroup = ({\n avatars,\n maxShownProfiles = 5,\n size = 'tiny'\n }: AvatarGroupProps) => {\n const displayedProfiles = avatars.length < maxShownProfiles ? avatars : avatars.slice(0, maxShownProfiles)\n const diameter = avatarSizeMapping[size]\n const stackingOverlap = 0.5 // given as a percentage\n const notDisplayedProfiles = avatars.length - maxShownProfiles\n const avatarGroupWidth = diameter * (stackingOverlap * (displayedProfiles.length - 1) + 1)\n return (\n <div className=\"flex-row-2 relative\" style={{ height: diameter + 'px' }}>\n <div style={{ width: avatarGroupWidth + 'px' }}>\n {displayedProfiles.map((avatar, index) => (\n <div\n key={index}\n className=\"absolute\"\n style={{ left: (index * diameter * stackingOverlap) + 'px', zIndex: maxShownProfiles - index }}\n >\n <Avatar avatarUrl={avatar.avatarUrl} alt={avatar.alt} size={size}/>\n </div>\n ))}\n </div>\n {\n notDisplayedProfiles > 0 && (\n <div\n className=\"flex-row-2 truncate items-center\"\n style={{ fontSize: (diameter / 2) + 'px', marginLeft: (1 + diameter / 16) + 'px' }}\n >\n <span>+ {notDisplayedProfiles}</span>\n </div>\n )\n }\n </div>\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 type { CSSProperties } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { noop } from '../../util/noop'\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 = noop,\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 = noop,\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","export 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 <img\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 Link from 'next/link'\nimport clsx from 'clsx'\n\nexport type Crumb = {\n display: string,\n link: string,\n}\n\ntype BreadCrumbProps = {\n crumbs: Crumb[],\n linkClassName?: string,\n containerClassName?: string,\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 BreadCrumb = ({ crumbs, linkClassName, containerClassName }: BreadCrumbProps) => {\n const color = 'text-description'\n\n return (\n <div className={clsx('flex-row-0', containerClassName)}>\n {crumbs.map((crumb, index) => (\n <div key={index}>\n <Link href={crumb.link}\n className={clsx(linkClassName, { [`${color} hover:brightness-60`]: index !== crumbs.length - 1 })}>\n {crumb.display}\n </Link>\n {index !== crumbs.length - 1 && <span className={clsx(`px-1`, color)}>/</span>}\n </div>\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '../../util/array'\nimport { clamp } from '../../util/math'\nimport { EaseFunctions } from '../../util/easeFunctions'\nimport type { Direction } from '../../util/loopingArray'\nimport { LoopingArrayCalculator } from '../../util/loopingArray'\nimport { IconButton } from '../user-action/Button'\n\n\nexport type CarouselProps = {\n children: ReactNode[],\n animationTime?: number,\n isLooping?: boolean,\n isAutoLooping?: 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 className?: string,\n heightClassName?: string,\n widthClassName?: string,\n}\n\ntype ItemType = {\n item: ReactNode,\n index: number,\n}\n\ntype CarouselAnimationState = {\n targetPosition: number,\n /**\n * Value of either 1 or -1, 1 is forwards -1 is backwards\n */\n direction: Direction,\n startPosition: number,\n startTime?: number,\n lastUpdateTime?: number,\n isAutoLooping: boolean,\n}\n\ntype DragState = {\n startX: number,\n startTime: number,\n lastX: number,\n startIndex: number,\n}\n\ntype CarouselInformation = {\n currentPosition: number,\n dragState?: DragState,\n animationState?: CarouselAnimationState,\n}\n\nexport const Carousel = ({\n children,\n animationTime = 200,\n isLooping = false,\n isAutoLooping = false,\n autoLoopingTimeOut = 5000,\n autoLoopAnimationTime = 500,\n hintNext = false,\n arrows = false,\n dots = true,\n overScrollThreshold = 0.1,\n blurColor = 'from-background',\n className = '',\n heightClassName = 'h-96',\n widthClassName = 'w-[70%] desktop:w-1/2',\n }: CarouselProps) => {\n if (isAutoLooping && !isLooping) {\n console.error('When isAutoLooping is true, isLooping should also be true')\n isLooping = true\n }\n\n const [{\n currentPosition,\n dragState,\n animationState,\n }, setCarouselInformation] = useState<CarouselInformation>({\n currentPosition: 0,\n })\n const animationId = useRef<number | undefined>(undefined)\n const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut)\n\n const length = children.length\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 util = useMemo(() => new LoopingArrayCalculator(length, isLooping, overScrollThreshold), [length, isLooping, overScrollThreshold])\n const currentIndex = util.getCorrectedPosition(LoopingArrayCalculator.withoutOffset(currentPosition))\n animationTime = Math.max(200, animationTime) // in ms, must be > 0\n autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n const getStyleOffset = (index: number) => {\n const baseOffset = -50 + (index - currentPosition) * 100\n return `${baseOffset}%`\n }\n\n const animation = useCallback((time: number) => {\n let keepAnimating: boolean = true\n\n // Other calculation in the setState call to avoid updating the useCallback to often\n setCarouselInformation((state) => {\n const {\n animationState,\n dragState\n } = state\n if (animationState === undefined || dragState !== undefined) {\n keepAnimating = false\n return state\n }\n if (!animationState.startTime || !animationState.lastUpdateTime) {\n return {\n ...state,\n animationState: {\n ...animationState,\n startTime: time,\n lastUpdateTime: time\n }\n }\n }\n const useAnimationTime = animationState.isAutoLooping ? autoLoopAnimationTime : animationTime\n const progress = clamp((time - animationState.startTime) / useAnimationTime) // progress\n const easedProgress = EaseFunctions.easeInEaseOut(progress)\n const distance = util.getDistanceDirectional(animationState.startPosition, animationState.targetPosition, animationState.direction)\n const newPosition = util.getCorrectedPosition(easedProgress * distance * animationState.direction + animationState.startPosition)\n\n if (animationState.targetPosition === newPosition || progress === 1) {\n keepAnimating = false\n return ({\n currentPosition: LoopingArrayCalculator.withoutOffset(newPosition),\n animationState: undefined\n })\n }\n return ({\n currentPosition: newPosition,\n animationState: {\n ...animationState!,\n lastUpdateTime: time\n }\n })\n })\n if (keepAnimating) {\n animationId.current = requestAnimationFrame(time1 => animation(time1))\n }\n }, [animationTime, autoLoopAnimationTime, util])\n\n useEffect(() => {\n if (animationState) {\n animationId.current = requestAnimationFrame(animation)\n }\n return () => {\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = 0\n }\n }\n }, [animationState]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAutoLoop = () => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: prevState.dragState,\n animationState: prevState.animationState || prevState.dragState ? prevState.animationState : {\n startPosition: currentPosition,\n targetPosition: (currentPosition + 1) % length,\n direction: 1, // always move forward\n isAutoLooping: true\n }\n }))\n\n useEffect(() => {\n if (!animationId.current && !animationState && !dragState && !timeOut.current) {\n if (autoLoopingTimeOut > 0) {\n timeOut.current = setTimeout(() => {\n startAutoLoop()\n timeOut.current = undefined\n }, autoLoopingTimeOut)\n } else {\n startAutoLoop()\n }\n }\n }, [animationState, dragState, animationId.current, timeOut.current]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAnimation = (targetPosition?: number) => {\n if (targetPosition === undefined) {\n targetPosition = LoopingArrayCalculator.withoutOffset(currentPosition)\n }\n if (targetPosition === currentPosition) {\n return // we are exactly where we want to be\n }\n\n // find target index and fastest path to it\n const direction = util.getBestDirection(currentPosition, targetPosition)\n clearTimeout(timeOut.current)\n timeOut.current = undefined\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = undefined\n }\n\n setCarouselInformation(prevState => ({\n ...prevState,\n dragState: undefined,\n animationState: {\n targetPosition: targetPosition!,\n direction,\n startPosition: currentPosition,\n isAutoLooping: false\n },\n timeOut: undefined\n }))\n }\n\n const canGoLeft = () => {\n return isLooping || currentPosition !== 0\n }\n\n const canGoRight = () => {\n return isLooping || currentPosition !== length - 1\n }\n\n const left = () => {\n if (canGoLeft()) {\n startAnimation(currentPosition === 0 ? length - 1 : LoopingArrayCalculator.withoutOffset(currentPosition - 1))\n }\n }\n\n const right = () => {\n if (canGoRight()) {\n startAnimation(LoopingArrayCalculator.withoutOffset((currentPosition + 1) % length))\n }\n }\n\n let items: ItemType[] = children.map((item, index) => ({\n index,\n item\n }))\n\n if (isLooping) {\n const before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n index,\n item\n }))\n const after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n index,\n item\n }))\n items = [\n ...before,\n ...items,\n ...after\n ]\n }\n\n const onDragStart = (x: number) => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: {\n lastX: x,\n startX: x,\n startTime: Date.now(),\n startIndex: currentPosition,\n },\n animationState: undefined // cancel animation\n }))\n\n const onDrag = (x: number, width: number) => {\n // For some weird reason the clientX is 0 on the last dragUpdate before drag end causing issues\n if (!dragState || x === 0) {\n return\n }\n const offsetUpdate = (dragState.lastX - x) / width\n const newPosition = util.getCorrectedPosition(currentPosition + offsetUpdate)\n\n setCarouselInformation(prevState => ({\n ...prevState,\n currentPosition: newPosition,\n dragState: {\n ...dragState,\n lastX: x\n },\n }))\n }\n\n const onDragEnd = (x: number, width: number) => {\n if (!dragState) {\n return\n }\n const distance = dragState.startX - x\n const relativeDistance = distance / width\n const duration = (Date.now() - dragState.startTime) // in milliseconds\n const velocity = distance / (Date.now() - dragState.startTime)\n\n const isSlide = Math.abs(velocity) > 2 || (duration < 200 && (Math.abs(relativeDistance) > 0.2 || Math.abs(distance) > 50))\n if (isSlide) {\n if (distance > 0 && canGoRight()) {\n right()\n return\n } else if (distance < 0 && canGoLeft()) {\n left()\n return\n }\n }\n startAnimation()\n }\n\n const dragHandlers = {\n draggable: true,\n onDragStart: (event: React.DragEvent<HTMLDivElement>) => {\n onDragStart(event.clientX)\n event.dataTransfer.setDragImage(document.createElement('div'), 0, 0)\n },\n onDrag: (event: React.DragEvent<HTMLDivElement>) => onDrag(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onDragEnd: (event: React.DragEvent<HTMLDivElement>) => onDragEnd(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchStart: (event: React.TouchEvent<HTMLDivElement>) => onDragStart(event.touches[0]!.clientX),\n onTouchMove: (event: React.TouchEvent<HTMLDivElement>) => onDrag(event.touches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchEnd: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchCancel: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n }\n\n return (\n <div className=\"flex-col-2 items-center w-full\">\n <div className={clsx(`relative w-full overflow-hidden`, heightClassName, className)}>\n {arrows && (\n <>\n <IconButton\n color=\"neutral\"\n className={clsx('absolute z-10 left-0 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoLeft() })}\n disabled={!canGoLeft()}\n onClick={() => left()}\n >\n <ChevronLeft size={24}/>\n </IconButton>\n <IconButton\n color=\"neutral\"\n className={clsx('absolute z-10 right-0 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoRight() })}\n disabled={!canGoRight()}\n onClick={() => right()}\n >\n <ChevronRight size={24}/>\n </IconButton>\n </>\n )}\n {hintNext ? (\n <div className={clsx(`flex-row-2 relative h-full`, heightClassName)}>\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 <div\n key={listIndex}\n className={clsx(`absolute left-[50%] h-full overflow-hidden`, widthClassName, { '!cursor-grabbing': !!dragState })}\n style={{ translate: getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0)) }}\n {...dragHandlers}\n onClick={() => startAnimation(index)}\n >\n {item}\n </div>\n ))}\n </div>\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n />\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n />\n </div>\n ) : (\n <div className={clsx('px-16 h-full', { '!cursor-grabbing': !!dragState })} {...dragHandlers}>\n {children[currentIndex]}\n </div>\n )}\n </div>\n {dots && (\n <div\n className=\"flex-row-2 items-center justify-center w-full my-2\">\n {range(length).map(index => (\n <button\n key={index}\n className={clsx('w-8 min-w-8 h-3 min-h-3 first:rounded-l-md last:rounded-r-md', {\n 'bg-carousel-dot-disabled hover:bg-carousel-dot-active': currentIndex !== index,\n 'bg-carousel-dot-active hover:brightness-90': currentIndex === index\n })}\n onClick={() => startAnimation(index)}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n","export const clamp = (value: number, min: number = 0, max: number = 1): number => {\n return Math.min(Math.max(value, min), max)\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","import type { HTMLProps, PropsWithChildren, ReactNode } from 'react'\nimport clsx from 'clsx'\n\nexport type ChipColor = 'default' | 'dark' | 'red' | 'yellow' | 'green' | 'blue' | 'pink'\ntype ChipVariant = 'normal' | 'fullyRounded'\n\nexport type ChipProps = HTMLProps<HTMLDivElement> & PropsWithChildren<{\n color?: ChipColor,\n variant?: ChipVariant,\n trailingIcon?: ReactNode,\n}>\n\n/**\n * A component for displaying a single chip\n */\nexport const Chip = ({\n children,\n trailingIcon,\n color = 'default',\n variant = 'normal',\n className = '',\n ...restProps\n }: ChipProps) => {\n const colorMapping: string = {\n default: 'text-tag-default-text bg-tag-default-background',\n dark: 'text-tag-dark-text bg-tag-dark-background',\n red: 'text-tag-red-text bg-tag-red-background',\n yellow: 'text-tag-yellow-text bg-tag-yellow-background',\n green: 'text-tag-green-text bg-tag-green-background',\n blue: 'text-tag-blue-text bg-tag-blue-background',\n pink: 'text-tag-pink-text bg-tag-pink-background',\n }[color]\n\n const colorMappingIcon: string = {\n default: 'text-tag-default-icon',\n dark: 'text-tag-dark-icon',\n red: 'text-tag-red-icon',\n yellow: 'text-tag-yellow-icon',\n green: 'text-tag-green-icon',\n blue: 'text-tag-blue-icon',\n pink: 'text-tag-pink-icon',\n }[color]\n\n return (\n <div\n {...restProps}\n className={clsx(\n `row w-fit px-2 py-1`,\n colorMapping,\n {\n 'rounded-md': variant === 'normal',\n 'rounded-full': variant === 'fullyRounded',\n },\n className\n )}\n >\n {children}\n {trailingIcon && (<span className={colorMappingIcon}>{trailingIcon}</span>)}\n </div>\n )\n}\n\nexport type ChipListProps = {\n list: ChipProps[],\n className?: string,\n}\n\n/**\n * A component for displaying a list of chips\n */\nexport const ChipList = ({\n list,\n className = ''\n }: ChipListProps) => {\n return (\n <div className={clsx('flex flex-wrap gap-x-2 gap-y-2', className)}>\n {list.map((value, index) => (\n <Chip\n key={index}\n {...value}\n color={value.color ?? 'dark'}\n variant={value.variant ?? 'normal'}\n >\n {value.children}\n </Chip>\n ))}\n </div>\n )\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","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { ExpandableProps } from './Expandable'\nimport { ExpansionIcon } from './Expandable'\nimport { ExpandableUncontrolled } from './Expandable'\nimport { MarkdownInterpreter } from './MarkdownInterpreter'\n\ntype ContentType = {\n type: 'markdown',\n value: string,\n} | {\n type: 'custom',\n value: ReactNode,\n}\n\nexport type FAQItem = Pick<ExpandableProps, 'isExpanded' | 'className'> & {\n id: string,\n title: string,\n content: ContentType,\n}\n\nexport type FAQSectionProps = {\n entries: FAQItem[],\n expandableClassName?: string,\n}\n\n/**\n * Description\n */\nexport const FAQSection = ({\n entries,\n expandableClassName\n }: FAQSectionProps) => {\n return (\n <div className=\"flex-col-4\">\n {entries.map(({ id, title, content, ...restProps }) => (\n <ExpandableUncontrolled\n key={id}\n {...restProps}\n label={(<h3 id={id} className=\"textstyle-title-md\">{title}</h3>)}\n clickOnlyOnHeader={false}\n icon={(expanded) => (<ExpansionIcon isExpanded={expanded} className=\"text-primary\"/>)}\n className={clsx('rounded-xl', expandableClassName)}\n >\n <div className=\"mt-2\">\n {content.type === 'markdown' ? (<MarkdownInterpreter text={content.value}/>) : content.value}\n </div>\n </ExpandableUncontrolled>\n ))}\n </div>\n )\n}\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 { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { Input } from '../user-action/Input'\nimport { clamp } from '../../util/math'\nimport type { CSSProperties } from 'react'\nimport { useEffect, useState } from 'react'\nimport { IconButton } from '../user-action/Button'\n\ntype PaginationTranslation = FormTranslationType\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 overwriteTranslation,\n pageIndex,\n pageCount,\n onPageChanged,\n className,\n style,\n }: PropsForTranslation<PaginationTranslation, PaginationProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\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 <IconButton color=\"transparent\" onClick={() => changePage(0)} disabled={onFirstPage || noPages}>\n <ChevronFirst/>\n </IconButton>\n <IconButton color=\"transparent\" onClick={() => changePage(pageIndex - 1)} disabled={onFirstPage || noPages}>\n <ChevronLeft/>\n </IconButton>\n <div className=\"flex-row-2 min-w-56 items-center justify-center mx-2 text-center\">\n <Input\n value={value}\n containerClassName=\"flex flex-1 h-10\"\n className={clsx(\n 'w-full text-center font-bold input-indicator-hidden'\n )}\n type=\"number\"\n min={1}\n max={pageCount}\n disabled={noPages}\n onChangeText={value => {\n if (value) {\n setValue(clamp(Number(value), 1, pageCount).toString())\n } else {\n setValue(value)\n }\n }}\n onEditCompleted={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 flex-1 items-center justify-center select-none h-10 bg-surface text-on-surface rounded-md font-bold\">{pageCount}</span>\n </div>\n <IconButton color=\"transparent\" onClick={() => changePage(pageIndex + 1)} disabled={onLastPage || noPages}>\n <ChevronRight/>\n </IconButton>\n <IconButton color=\"transparent\" onClick={() => changePage(pageCount - 1)} disabled={onLastPage || noPages}>\n <ChevronLast/>\n </IconButton>\n </div>\n )\n}\n","import React, { forwardRef, type InputHTMLAttributes, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { UseDelayOptionsResolved } from '../../hooks/useDelay'\nimport { useDelay } from '../../hooks/useDelay'\nimport { noop } from '../../util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\nimport { useFocusManagement } from '../../hooks/useFocusManagement'\nimport { useFocusOnceVisible } from '../../hooks/useFocusOnceVisible'\n\ntype GetInputClassNameProps = {\n disabled?: boolean,\n hasError?: boolean,\n}\nconst getInputClassName = ({ disabled = false, hasError = false }: GetInputClassNameProps) => {\n return clsx(\n 'px-2 py-1.5 rounded-md border-2',\n {\n 'bg-surface text-on-surface hover:border-primary focus:border-primary': !disabled && !hasError,\n 'bg-on-negative text-negative border-negative-border hover:border-negative-border-hover': !disabled && hasError,\n 'bg-disabled-background text-disabled-text border-disabled-border': disabled,\n }\n )\n}\n\nexport type EditCompleteOptionsResolved = {\n onBlur: boolean,\n afterDelay: boolean,\n} & Omit<UseDelayOptionsResolved, 'disabled'>\n\nexport type EditCompleteOptions = Partial<EditCompleteOptionsResolved>\n\nconst defaultEditCompleteOptions: EditCompleteOptionsResolved = {\n onBlur: true,\n afterDelay: true,\n delay: 2500\n}\n\nexport type InputProps = {\n /**\n * used for the label's `for` attribute\n */\n label?: Omit<LabelProps, 'id'>,\n /**\n * Callback for when the input's value changes\n * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n * That could be enforced through a union type but that seems a bit overkill\n * @default noop\n */\n onChangeText?: (text: string) => void,\n className?: string,\n onEditCompleted?: (text: string) => void,\n allowEnterComplete?: boolean,\n expanded?: boolean,\n containerClassName?: string,\n editCompleteOptions?: EditCompleteOptions,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'label'>\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nconst Input = forwardRef<HTMLInputElement, InputProps>(function Input({\n id,\n type = 'text',\n value,\n label,\n onChange = noop,\n onChangeText = noop,\n onEditCompleted,\n className = '',\n allowEnterComplete = true,\n expanded = true,\n autoFocus = false,\n onBlur,\n editCompleteOptions,\n containerClassName,\n disabled,\n ...restProps\n }, forwardedRef) {\n const { onBlur: allowEditCompleteOnBlur, afterDelay, delay } = { ...defaultEditCompleteOptions, ...editCompleteOptions }\n\n const {\n restartTimer,\n clearTimer\n } = useDelay({ delay, disabled: !afterDelay })\n\n const innerRef = useRef<HTMLInputElement>(null)\n const { focusNext } = useFocusManagement()\n\n useFocusOnceVisible(innerRef, !autoFocus)\n useImperativeHandle(forwardedRef, () => innerRef.current)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n innerRef.current?.blur()\n focusNext()\n }\n }\n\n return (\n <div className={clsx({ 'w-full': expanded }, containerClassName)}>\n {label && <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)} />}\n <input\n {...restProps}\n ref={innerRef}\n value={value}\n id={id}\n type={type}\n disabled={disabled}\n className={clsx(getInputClassName({ disabled }), className)}\n onKeyDown={allowEnterComplete ? handleKeyDown : undefined}\n onBlur={event => {\n onBlur?.(event)\n if (onEditCompleted && allowEditCompleteOnBlur) {\n onEditCompleted(event.target.value)\n clearTimer()\n }\n }}\n onChange={e => {\n const value = e.target.value\n if (onEditCompleted) {\n restartTimer(() => {\n if(innerRef.current){\n innerRef.current.blur()\n if(!allowEditCompleteOnBlur) {\n onEditCompleted(value)\n }\n } else {\n onEditCompleted(value)\n }\n })\n }\n onChange(e)\n onChangeText(value)\n }}\n />\n </div>\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 */\nconst InputUncontrolled = ({\n value = '',\n onChangeText = noop,\n ...props\n }: InputProps) => {\n const [usedValue, setUsedValue] = useState(value)\n\n useEffect(() => {\n setUsedValue(value)\n }, [value])\n\n return (\n <Input\n {...props}\n value={usedValue}\n onChangeText={text => {\n setUsedValue(text)\n onChangeText(text)\n }}\n />\n )\n}\n\nexport type FormInputProps = InputHTMLAttributes<HTMLInputElement> & {\n id: string,\n labelText?: string,\n errorText?: string,\n labelClassName?: string,\n errorClassName?: string,\n containerClassName?: string,\n}\n\nconst FormInput = forwardRef<HTMLInputElement, FormInputProps>(function FormInput({\n id,\n labelText,\n errorText,\n className,\n labelClassName,\n errorClassName,\n containerClassName,\n required,\n disabled,\n ...restProps\n }, ref) {\n const input = (\n <input\n {...restProps}\n ref={ref}\n id={id}\n disabled={disabled}\n className={clsx(\n getInputClassName({ disabled, hasError: !!errorText }),\n className\n )}\n />\n )\n\n return (\n <div className={clsx('flex flex-col gap-y-1', containerClassName)}>\n {labelText && (\n <label htmlFor={id} className={clsx('textstyle-label-md', labelClassName)}>\n {labelText}\n {required && <span className=\"text-primary font-bold\">*</span>}\n </label>\n )}\n {input}\n {errorText && <label htmlFor={id} className={clsx('text-negative', errorClassName)}>{errorText}</label>}\n </div>\n )\n})\n\nexport {\n InputUncontrolled,\n Input,\n FormInput\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 type { LabelHTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type LabelType = 'labelSmall' | 'labelMedium' | 'labelBig'\n\nconst styleMapping: Record<LabelType, string> = {\n labelSmall: 'textstyle-label-sm',\n labelMedium: 'textstyle-label-md',\n labelBig: 'textstyle-label-lg',\n}\n\nexport type LabelProps = {\n /** The text for the label */\n name?: string,\n /** The styling for the label */\n labelType?: LabelType,\n} & LabelHTMLAttributes<HTMLLabelElement>\n\n/**\n * A Label component\n */\nexport const Label = ({\n children,\n name,\n labelType = 'labelSmall',\n className,\n ...props\n }: LabelProps) => {\n return (\n <label {...props} className={clsx(styleMapping[labelType], className)}>\n {children ? children : name}\n </label>\n )\n}\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 { MutableRefObject } from 'react'\nimport React, { useEffect } from 'react'\n\nexport const useFocusOnceVisible = (\n ref: MutableRefObject<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 type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Input } from '../user-action/Input'\nimport { IconButton } from '../user-action/Button'\nimport type { UseSearchProps } from '../../hooks/useSearch'\nimport { useSearch } from '../../hooks/useSearch'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype SearchableListAddonTranslation = {\n nothingFound: string,\n}\n\ntype SearchableListTranslation = SearchableListAddonTranslation & FormTranslationType\n\nconst defaultSearchableListTranslation: Translation<SearchableListAddonTranslation> = {\n en: {\n nothingFound: 'Nothing found'\n },\n de: {\n nothingFound: 'Nichts gefunden'\n }\n}\n\nexport type SearchableListProps<T> = UseSearchProps<T> & {\n autoFocus?: boolean,\n minimumItemsForSearch?: number,\n itemMapper: (value: T, index: number) => ReactNode,\n className?: string,\n resultListClassName?: string,\n}\n\n/**\n * A component for searching a list\n */\nexport const SearchableList = <T, >({\n overwriteTranslation,\n list,\n initialSearch = '',\n searchMapping,\n autoFocus,\n minimumItemsForSearch = 6,\n itemMapper,\n className,\n resultListClassName\n }: PropsForTranslation<SearchableListTranslation, SearchableListProps<T>>) => {\n const translation = useTranslation([defaultSearchableListTranslation, formTranslation], overwriteTranslation)\n const { result, hasResult, search, setSearch, updateSearch } = useSearch<T>({ list, initialSearch, searchMapping })\n\n return (\n <div className={clsx('flex-col-2', className)}>\n {list.length > minimumItemsForSearch && (\n <div className=\"flex-row-2 justify-between items-center\">\n <Input\n value={search}\n onChangeText={setSearch}\n placeholder={translation('search')}\n autoFocus={autoFocus}\n className=\"w-full\"\n />\n <IconButton color=\"neutral\" onClick={() => updateSearch()}>\n <Search className=\"w-full h-full\"/>\n </IconButton>\n </div>\n )}\n {hasResult ? (\n <div className={clsx('flex-col-1 overflow-y-auto', resultListClassName)}>\n {result.map(itemMapper)}\n </div>\n ) : (\n <div className=\"flex-row-2 text-description py-2 px-2\">{translation('nothingFound')}</div>\n )}\n </div>\n )\n}","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { MultiSubjectSearchWithMapping } from '../util/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","import { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { range } from '../../util/array'\nimport { SolidButton } from '../user-action/Button'\nimport clsx from 'clsx'\nimport { useEffect, useState } from 'react'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype StepperBarTranslation = FormTranslationType\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 overwriteTranslation,\n state,\n numberOfSteps,\n disabledSteps = new Set(),\n onChange,\n onFinish,\n finishText,\n showDots = true,\n className = '',\n }: PropsForTranslation<StepperBarTranslation, StepperBarProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\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 <SolidButton\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 </SolidButton>\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 <SolidButton\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 </SolidButton>\n </div>\n )}\n {currentStep === numberOfSteps && (\n <div className=\"flex-row-2 flex-[2] justify-end\">\n <SolidButton\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 </SolidButton>\n </div>\n )}\n </div>\n )\n}\n\nexport const StepperBarUncontrolled = ({ state, onChange, ...props }: StepperBarProps) => {\n const [usedState, setUsedState] = useState<StepperState>(state ?? defaultState)\n\n useEffect(() => {\n setUsedState(state ?? defaultState)\n }, [state])\n\n return (\n <StepperBar\n {...props}\n state={usedState}\n onChange={newState => {\n setUsedState(newState)\n onChange(newState)\n }}\n />\n )\n}","import type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype TextImageColor = 'primary' | 'secondary' | 'dark'\n\ntype TextImageTranslation = FormTranslationType\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 overwriteTranslation,\n title,\n description,\n imageUrl,\n onShowMoreClicked,\n color = 'primary',\n badge,\n contentClassName = '',\n className = '',\n }: PropsForTranslation<TextImageTranslation, TextImageProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\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=\"textstyle-title-xl\">{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 onClick={onShowMoreClicked}>{translation('showMore')}</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 { AlertOctagon } from 'lucide-react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\n\ntype ErrorComponentTranslation = {\n errorOccurred: string,\n}\n\nconst defaultErrorComponentTranslation: Translation<ErrorComponentTranslation> = {\n en: {\n errorOccurred: 'An error occurred'\n },\n de: {\n errorOccurred: 'Ein Fehler ist aufgetreten'\n }\n}\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 overwriteTranslation,\n errorText,\n classname\n }: PropsForTranslation<ErrorComponentTranslation, ErrorComponentProps>) => {\n const translation = useTranslation([defaultErrorComponentTranslation], overwriteTranslation)\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 './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,\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-background rounded-md', className)}/>\n )\n}","import type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport { Helpwave } from '../icons-and-geometry/Helpwave'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype LoadingAnimationTranslation = FormTranslationType\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 overwriteTranslation,\n loadingText,\n classname\n }: PropsForTranslation<LoadingAnimationTranslation, LoadingAnimationProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n return (\n <div className={clsx('flex-col-2 items-center justify-center w-full h-24', classname)}>\n <Helpwave animate=\"loading\"/>\n {loadingText ?? `${translation('loading')}...`}\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type { SolidButtonProps } from '../user-action/Button'\nimport { ButtonUtil, SolidButton } from '../user-action/Button'\nimport { noop } from '../../util/noop'\nimport { Helpwave } from '../icons-and-geometry/Helpwave'\n\ntype LoadingButtonProps = {\n isLoading?: boolean,\n} & SolidButtonProps\n\nexport const LoadingButton = ({ isLoading = false, size = 'medium', onClick, ...rest }: LoadingButtonProps) => {\n const paddingClass = ButtonUtil.paddingMapping[size]\n\n return (\n <div className=\"inline-block relative\">\n {\n isLoading && (\n <div className={clsx('flex-row-2 absolute inset-0 items-center justify-center bg-white/40', paddingClass)}>\n <Helpwave animate=\"loading\" className=\"text-white\"/>\n </div>\n )\n }\n <SolidButton {...rest} disabled={rest.disabled} onClick={isLoading ? noop : onClick}/>\n </div>\n )\n}\n","export type ProgressIndicatorProps = {\n /*\n The amount of progress that has been made\n Value form 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 { PropsWithChildren } from 'react'\nimport type { SolidButtonColor } from '../user-action/Button'\nimport { SolidButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { ModalProps } from '../layout-and-navigation/Overlay'\nimport { Modal } from '../layout-and-navigation/Overlay'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype ConfirmModalTranslation = FormTranslationType\n\nexport type ConfirmModalType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n text?: string,\n color?: SolidButtonColor,\n disabled?: boolean,\n}\n\nexport type ConfirmModalProps = Omit<ModalProps, 'onClose'> & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onConfirm: () => void,\n onDecline?: () => void,\n confirmType?: ConfirmModalType,\n /**\n * Order: Cancel, Decline, Confirm\n */\n buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Modal for asking the user for confirmation\n */\nexport const ConfirmModal = ({\n overwriteTranslation,\n children,\n onCancel,\n onConfirm,\n onDecline,\n confirmType = 'positive',\n buttonOverwrites,\n className,\n ...restProps\n }: PropsForTranslation<ConfirmModalTranslation, PropsWithChildren<ConfirmModalProps>>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n\n const mapping: Record<ConfirmModalType, SolidButtonColor> = {\n neutral: 'neutral',\n negative: 'negative',\n positive: 'positive',\n primary: 'primary',\n }\n\n return (\n <Modal {...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 <SolidButton\n color={buttonOverwrites?.[0].color ?? 'neutral'}\n onClick={onCancel}\n disabled={buttonOverwrites?.[0].disabled ?? false}\n >\n {buttonOverwrites?.[0].text ?? translation('cancel')}\n </SolidButton>\n )}\n {onDecline && (\n <SolidButton\n color={buttonOverwrites?.[1].color ?? 'negative'}\n onClick={onDecline}\n\n disabled={buttonOverwrites?.[1].disabled ?? false}\n >\n {buttonOverwrites?.[1].text ?? translation('decline')}\n </SolidButton>\n )}\n <SolidButton\n autoFocus\n color={buttonOverwrites?.[2].color ?? mapping[confirmType]}\n onClick={onConfirm}\n disabled={buttonOverwrites?.[2].disabled ?? false}\n >\n {buttonOverwrites?.[2].text ?? translation('confirm')}\n </SolidButton>\n </div>\n </Modal>\n )\n}\n","import type { PropsWithChildren } from 'react'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { ConfirmModalProps } from './ConfirmModal'\nimport { ConfirmModal } from './ConfirmModal'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\n\ntype DiscardChangesModalTranslation = FormTranslationType\n\ntype DiscardChangesModalProps = Omit<ConfirmModalProps, 'onDecline' | 'onConfirm' | 'buttonOverwrites'> & {\n isShowingDecline?: boolean,\n requireAnswer?: boolean,\n onCancel: () => void,\n onSave: () => void,\n onDontSave: () => void,\n}\n\nexport const DiscardChangesModal = ({\n overwriteTranslation,\n children,\n onCancel,\n onSave,\n onDontSave,\n headerProps,\n ...modalProps\n }: PropsForTranslation<DiscardChangesModalTranslation, PropsWithChildren<DiscardChangesModalProps>>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n return (\n <ConfirmModal\n headerProps={{\n ...headerProps,\n titleText: headerProps?.titleText ?? translation('unsavedChanges'),\n descriptionText: headerProps?.descriptionText ?? translation('unsavedChangesSaveQuestion'),\n }}\n onConfirm={onSave}\n onCancel={onCancel}\n onDecline={onDontSave}\n buttonOverwrites={[{ text: translation('cancel') }, { text: translation('discardChanges') }, { text: translation('save') }]}\n {...modalProps}\n >\n {children}\n </ConfirmModal>\n )\n}\n","import type { InputProps } from '../user-action/Input'\nimport { Input } from '../user-action/Input'\nimport type { ConfirmModalProps } from './ConfirmModal'\nimport { ConfirmModal } from './ConfirmModal'\n\nexport type InputModalProps = ConfirmModalProps & {\n inputs: InputProps[],\n}\n\n/**\n * A modal for receiving multiple inputs\n */\nexport const InputModal = ({\n inputs,\n buttonOverwrites,\n ...restProps\n }: InputModalProps) => {\n return (\n <ConfirmModal\n buttonOverwrites={buttonOverwrites}\n {...restProps}\n >\n {inputs.map((inputProps, index) => <Input key={`input ${index}`} {...inputProps}/>)}\n </ConfirmModal>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useCallback } from 'react'\nimport { useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\nimport type { TileProps } from '../layout-and-navigation/Tile'\nimport { Tile } from '../layout-and-navigation/Tile'\nimport { ExpansionIcon } from '../layout-and-navigation/Expandable'\nimport type { MenuBag, MenuProps } from './Menu'\nimport { Menu } from './Menu'\nimport { SearchBar } from './SearchBar'\nimport type { UseSearchProps } from '../../hooks/useSearch'\nimport { useSearch } from '../../hooks/useSearch'\n\nexport type SelectTileProps = TileProps\n\nexport const SelectTile = ({\n className,\n disabledClassName,\n title,\n ...restProps\n }: SelectTileProps) => {\n return (\n <Tile\n {...restProps}\n className={clsx('px-2 py-1 rounded-md', className)}\n disabledClassName={disabledClassName ?? 'text-disabled-text cursor-not-allowed'}\n title={{ ...title, className: title.className ?? 'font-semibold' }}\n />\n )\n}\n\nexport type SelectOption<T> = {\n label: ReactNode,\n value: T,\n searchTags?: string[],\n disabled?: boolean,\n className?: string,\n}\n\nexport type SelectBag<T> = MenuBag & {\n selected?: T,\n search: string,\n}\n\nexport type SelectProps<T> = Omit<MenuProps<HTMLButtonElement>, 'trigger' | 'children'> & {\n value?: T,\n label?: LabelProps,\n options: SelectOption<T>[],\n onChange: (value: T) => void,\n hintText?: string,\n selectedDisplayOverwrite?: ReactNode,\n searchOptions?: Omit<UseSearchProps<SelectOption<T>>, 'list' | 'searchMapping'>,\n additionalItems?: (bag: SelectBag<T>) => ReactNode,\n className?: string,\n triggerClassName?: string,\n hintTextClassName?: string,\n};\n\n/**\n * A Select Component for selecting form a list of options\n *\n * The State is managed by the parent\n */\nexport const Select = <T, >({\n value,\n label,\n options,\n onChange,\n hintText = '',\n selectedDisplayOverwrite,\n searchOptions,\n additionalItems,\n className,\n triggerClassName,\n hintTextClassName,\n ...menuProps\n }: SelectProps<T>) => {\n const selectedOption = options.find(option => option.value === value)\n if (value !== undefined && selectedOption === undefined && selectedDisplayOverwrite === undefined) {\n console.warn('The selected value is not found in the options list. This might be an error on your part or' +\n ' default behavior if it is complex data type on which === does not work. In case of the latter' +\n ' use selectedDisplayOverwrite to set your selected text or component')\n }\n\n const isShowingHint = !selectedDisplayOverwrite && !selectedOption?.label\n\n const { result, search, setSearch } = useSearch<SelectOption<T>>({\n list: options,\n searchMapping: useCallback((item: SelectOption<T>) => item.searchTags, []),\n ...searchOptions\n })\n\n return (\n <div className={clsx(className)}>\n {label && (\n <Label {...label} labelType={label.labelType ?? 'labelBig'} className={clsx('mb-1', label.className)}/>\n )}\n <Menu<HTMLButtonElement>\n {...menuProps}\n trigger={({ toggleOpen, isOpen, disabled }, ref) => (\n <button\n ref={ref}\n className={clsx(\n 'btn-md justify-between w-full border-2',\n {\n 'rounded-b-lg': !open,\n 'bg-menu-background text-menu-text border-menu-border hover:border-primary': !disabled,\n 'bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed': disabled\n },\n triggerClassName\n )}\n onClick={toggleOpen}\n disabled={disabled}\n >\n {!isShowingHint &&\n <span className=\"font-semibold\">{selectedDisplayOverwrite ?? selectedOption?.label}</span>}\n {isShowingHint && (\n <span className={clsx('textstyle-description', hintTextClassName)}>\n {hintText}\n </span>\n )}\n <ExpansionIcon isExpanded={isOpen}/>\n </button>\n )}\n menuClassName={clsx('flex-col-2 p-2 max-h-96 overflow-hidden', menuProps.menuClassName)}\n >\n {(bag) => {\n const { close } = bag\n return (\n <>\n {!searchOptions?.disabled && (\n <SearchBar\n value={search}\n onChangeText={setSearch}\n autoFocus={true}\n />\n )}\n <div className=\"flex-col-2 overflow-y-auto\">\n {result.map((option, index) => (\n <SelectTile\n key={index}\n isSelected={option === selectedOption}\n title={{ value: option.label }}\n onClick={() => {\n onChange(option.value)\n close()\n }}\n disabled={option.disabled}\n />\n ))}\n {additionalItems && additionalItems({ ...bag, search, selected: value })}\n </div>\n </>\n )\n }}\n </Menu>\n </div>\n )\n}\n\nexport const SelectUncontrolled = <T, >({\n options, onChange, value, hintText, ...props\n }: SelectProps<T>) => {\n const [selected, setSelected] = useState(value)\n\n useEffect(() => {\n if (options.find(options => options.value === value)) {\n setSelected(value)\n }\n }, [options, value])\n\n return (\n <Select\n value={selected}\n options={options}\n onChange={value => {\n setSelected(value)\n onChange(value)\n }}\n hintText={hintText}\n {...props}\n />\n )\n}","import {\n type PropsWithChildren,\n type ReactNode,\n type RefObject,\n useEffect,\n useRef, useState\n} from 'react'\nimport clsx from 'clsx'\nimport { useOutsideClick } from '../../hooks/useOutsideClick'\nimport { useHoverState } from '../../hooks/useHoverState'\nimport type { PropsWithBagFunctionOrChildren } from '../../util/PropsWithFunctionChildren'\nimport { BagFunctionUtil } from '../../util/PropsWithFunctionChildren'\nimport type { PopoverHorizontalAlignment, PopoverVerticalAlignment } from '../../hooks/usePopoverPosition'\nimport { usePopoverPosition } from '../../hooks/usePopoverPosition'\nimport { createPortal } from 'react-dom'\n\nexport type MenuItemProps = {\n onClick?: () => void,\n alignment?: 'left' | 'right',\n isDisabled?: boolean,\n className?: string,\n}\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', {\n 'text-right': alignment === 'right',\n 'text-left': alignment === 'left',\n 'text-disabled-text 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<T> = PropsWithBagFunctionOrChildren<MenuBag> & {\n trigger: (bag: MenuBag, ref: RefObject<T>) => 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 = <T extends HTMLElement>({\n trigger,\n children,\n alignmentHorizontal = 'leftInside',\n alignmentVertical = 'bottomOutside',\n showOnHover = false,\n disabled = false,\n menuClassName = '',\n }: MenuProps<T>) => {\n const { isHovered: isOpen, setIsHovered: setIsOpen } = useHoverState({ isDisabled: !showOnHover || disabled })\n const triggerRef = useRef<T>(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 return (\n <>\n {trigger(bag, triggerRef)}\n {createPortal((<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 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 }}\n >\n {BagFunctionUtil.resolve<MenuBag>(children, bag)}\n </div>), document.body)}\n </>\n )\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 type { ReactNode } from 'react'\n\nexport type BagFunction<T> = (bag: T) => ReactNode\n\nexport type PropsWithBagFunction<T, P = unknown> = P & { children?: BagFunction<T> }\n\nexport type PropsWithBagFunctionOrChildren<T, P = unknown> = P & { children?: BagFunction<T> | ReactNode }\n\nconst resolve = <T>(children: BagFunction<T> | ReactNode, bag: T): ReactNode => {\n if (typeof children === 'function') {\n return (children as BagFunction<T>)(bag)\n }\n\n return children ?? undefined\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 { InputProps } from './Input'\nimport { Input } from './Input'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { IconButton } from './Button'\nimport { Search } from 'lucide-react'\nimport { clsx } from 'clsx'\n\ntype TranslationType = FormTranslationType\n\nexport type SearchBarProps = InputProps & {\n onSearch?: () => void,\n disableOnSearch?: boolean,\n containerClassName?: string,\n}\n\nexport const SearchBar = ({\n placeholder,\n onSearch,\n disableOnSearch,\n containerClassName,\n ...inputProps\n }: SearchBarProps) => {\n const translation = useTranslation<TranslationType>([formTranslation])\n\n return (\n <div className={clsx('flex-row-2 justify-between items-center', containerClassName)}>\n <Input\n {...inputProps}\n placeholder={placeholder ?? translation('search')}\n />\n {onSearch && (\n <IconButton color=\"neutral\" disabled={disableOnSearch} onClick={onSearch}>\n <Search className=\"w-full h-full\"/>\n </IconButton>\n )}\n </div>\n )\n}","import { type PropsWithChildren } from 'react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Select } from '../user-action/Select'\nimport type { Language } from '../../localization/util'\nimport { LanguageUtil } from '../../localization/util'\nimport { useLanguage } from '../../localization/LanguageProvider'\nimport { SolidButton } from '../user-action/Button'\nimport { Modal, type ModalProps } from '../layout-and-navigation/Overlay'\n\ntype LanguageModalTranslation = {\n language: string,\n chooseLanguage: string,\n done: string,\n} & Record<Language, string>\n\nconst defaultLanguageModalTranslation: Translation<LanguageModalTranslation> = {\n en: {\n language: 'Language',\n chooseLanguage: 'Choose your language',\n done: 'Done',\n ...LanguageUtil.languagesLocalNames\n },\n de: {\n language: 'Sprache',\n chooseLanguage: 'Wähle deine bevorzugte Sprache',\n done: 'Fertig',\n ...LanguageUtil.languagesLocalNames\n }\n}\n\ntype LanguageModalProps = ModalProps\n\n/**\n * A Modal for selecting the Language\n *\n * The State of open needs to be managed by the parent\n */\nexport const LanguageModal = ({\n overwriteTranslation,\n headerProps,\n onClose,\n ...modalProps\n }: PropsForTranslation<LanguageModalTranslation, PropsWithChildren<LanguageModalProps>>) => {\n const { language, setLanguage } = useLanguage()\n const translation = useTranslation([defaultLanguageModalTranslation], overwriteTranslation)\n\n return (\n <Modal\n headerProps={{\n ...headerProps,\n titleText: headerProps?.titleText ?? translation('language'),\n descriptionText: headerProps?.descriptionText ?? translation('chooseLanguage'),\n }}\n onClose={onClose}\n {...modalProps}\n >\n <div className=\"w-64\">\n <Select\n className=\"mt-2\"\n value={language}\n options={LanguageUtil.languages.map((language) => ({ label: translation(language), value: language }))}\n onChange={(language: string) => setLanguage(language as Language)}\n searchOptions={{ disabled: true }}\n />\n <div className=\"flex-row-4 mt-3 justify-end\">\n <SolidButton autoFocus color=\"positive\" onClick={onClose}>\n {translation('done')}\n </SolidButton>\n </div>\n </div>\n </Modal>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport type { Translation, TranslationPlural } from '../localization/useTranslation'\nimport { noop } from '../util/noop'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\n\nconst themes = ['light', 'dark'] as const\n\nexport type ThemeType = typeof themes[number]\n\nexport type ThemeTypeTranslation = Record<ThemeType, string> & {\n theme: TranslationPlural,\n}\n\nconst defaultThemeTypeTranslation: Translation<ThemeTypeTranslation> = {\n en: {\n dark: 'Dark',\n light: 'Light',\n theme: {\n one: 'Theme',\n other: 'Themes'\n }\n },\n de: {\n dark: 'Dunkel',\n light: 'Hell',\n theme: {\n one: 'Farbschema',\n other: 'Farbschemas'\n }\n }\n}\n\nexport const ThemeUtil = {\n themes,\n translation: defaultThemeTypeTranslation,\n}\n\ntype ThemeContextType = {\n theme: ThemeType,\n setTheme: Dispatch<SetStateAction<ThemeType>>,\n}\n\nexport const ThemeContext = createContext<ThemeContextType>({\n theme: 'light',\n setTheme: noop\n})\n\ntype ThemeProviderProps = {\n initialTheme?: ThemeType,\n}\n\nexport const ThemeProvider = ({ children, initialTheme = 'light' }: PropsWithChildren<ThemeProviderProps>) => {\n const [theme, setTheme] = useState<ThemeType>(initialTheme)\n const [storedTheme, setStoredTheme] = useLocalStorage<ThemeType>('theme', initialTheme)\n\n useEffect(() => {\n if (theme !== initialTheme) {\n console.warn('ThemeProvider initial state changed: Prefer using useTheme\\'s setTheme instead')\n setTheme(initialTheme)\n }\n }, [initialTheme]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', theme)\n setStoredTheme(theme)\n }, [theme]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (storedTheme !== null) {\n setTheme(storedTheme)\n return\n }\n\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches\n setTheme(prefersDark ? 'dark' : 'light')\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\n\nexport const useTheme = () => useContext(ThemeContext)\n","import { type PropsWithChildren } from 'react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Select } from '../user-action/Select'\nimport { SolidButton } from '../user-action/Button'\nimport { Modal, type ModalProps } from '../layout-and-navigation/Overlay'\nimport type { ThemeType, ThemeTypeTranslation } from '../../theming/useTheme'\nimport { useTheme } from '../../theming/useTheme'\nimport { ThemeUtil } from '../../theming/useTheme'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype ThemeModalTranslationAddon = {\n chooseTheme: string,\n}\n\ntype ThemeModalTranslation = ThemeModalTranslationAddon & ThemeTypeTranslation & FormTranslationType\n\nconst defaultConfirmDialogTranslation: Translation<ThemeModalTranslationAddon> = {\n en: {\n chooseTheme: 'Choose your preferred theme',\n },\n de: {\n chooseTheme: 'Wähle dein bevorzugtes Farbschema',\n }\n}\n\ntype ThemeModalProps = ModalProps\n\n/**\n * A Modal for selecting the Theme\n *\n * The State of open needs to be managed by the parent\n */\nexport const ThemeModal = ({\n overwriteTranslation,\n headerProps,\n onClose,\n ...modalProps\n }: PropsForTranslation<ThemeModalTranslation, PropsWithChildren<ThemeModalProps>>) => {\n const { theme, setTheme } = useTheme()\n const translation = useTranslation([defaultConfirmDialogTranslation, formTranslation, ThemeUtil.translation], overwriteTranslation)\n\n return (\n <Modal\n headerProps={{\n ...headerProps,\n titleText: headerProps?.titleText ?? translation('theme'),\n descriptionText: headerProps?.descriptionText ?? translation('chooseTheme'),\n }}\n onClose={onClose}\n {...modalProps}\n >\n <div className=\"w-64\">\n <Select\n className=\"mt-2\"\n value={theme}\n options={ThemeUtil.themes.map((theme) => ({ label: translation(theme), value: theme }))}\n onChange={(theme: string) => setTheme(theme as ThemeType)}\n searchOptions={{ disabled: true }}\n />\n <div className=\"flex-row-4 mt-3 justify-end\">\n <SolidButton autoFocus color=\"positive\" onClick={onClose}>\n {translation('done')}\n </SolidButton>\n </div>\n </div>\n </Modal>\n )\n}\n","import { Check } from 'lucide-react'\nimport { noop } from '../../util/noop'\nimport { Checkbox } from '../user-action/Checkbox'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype CheckboxPropertyTranslation = FormTranslationType\n\nexport type CheckboxPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue' | 'onRemove'> & {\n value?: boolean,\n onChange?: (value: boolean) => void,\n}\n\n/**\n * An Input component for a boolean values\n */\nexport const CheckboxProperty = ({\n overwriteTranslation,\n value,\n onChange = noop,\n readOnly,\n ...baseProps\n }: PropsForTranslation<CheckboxPropertyTranslation, CheckboxPropertyProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n\n return (\n <PropertyBase\n {...baseProps}\n hasValue={true}\n readOnly={readOnly}\n icon={<Check size={24}/>}\n input={() => (\n <Checkbox\n checked={value ?? true}\n disabled={readOnly}\n onChange={onChange}\n label={{ name: `${translation('yes')}/${translation('no')}`, labelType: 'labelMedium' }}\n containerClassName=\"w-full\"\n />\n )}\n />\n )\n}\n","import { useState } from 'react'\nimport type { CheckedState } from '@radix-ui/react-checkbox'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check, Minus } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\ntype CheckBoxSize = 'small' | 'medium' | 'large'\n\nconst checkboxSizeMapping: Record<CheckBoxSize, string> = {\n small: 'size-5',\n medium: 'size-6',\n large: 'size-8',\n}\n\nconst checkboxIconSizeMapping: Record<CheckBoxSize, string> = {\n small: 'size-4',\n medium: 'size-5',\n large: 'size-7',\n}\n\ntype CheckboxProps = {\n /** used for the label's `for` attribute */\n id?: string,\n label?: Omit<LabelProps, 'id'>,\n /**\n * @default false\n */\n checked: CheckedState,\n disabled?: boolean,\n onChange?: (checked: boolean) => void,\n onChangeTristate?: (checked: CheckedState) => void,\n size?: CheckBoxSize,\n className?: string,\n containerClassName?: string,\n}\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by the parent\n */\nconst Checkbox = ({\n id,\n label,\n checked,\n disabled,\n onChange,\n onChangeTristate,\n size = 'medium',\n className = '',\n containerClassName\n }: CheckboxProps) => {\n const usedSizeClass = checkboxSizeMapping[size]\n const innerIconSize = checkboxIconSizeMapping[size]\n\n const propagateChange = (checked: CheckedState) => {\n if (onChangeTristate) {\n onChangeTristate(checked)\n }\n if (onChange) {\n onChange(checked === 'indeterminate' ? false : checked)\n }\n }\n\n const changeValue = () => {\n const newValue = checked === 'indeterminate' ? false : !checked\n propagateChange(newValue)\n }\n\n return (\n <div className={clsx('group flex-row-2 items-center cursor-pointer', containerClassName)} onClick={changeValue}>\n <CheckboxPrimitive.Root\n onCheckedChange={propagateChange}\n checked={checked}\n disabled={disabled}\n id={id}\n className={clsx(usedSizeClass, `items-center border-2 rounded outline-none `, {\n 'text-disabled-text border-disabled-outline bg-disabled-background cursor-not-allowed': disabled,\n 'focus:border-primary group-hover:border-primary ': !disabled,\n 'bg-surface': !disabled && !checked,\n 'bg-primary/30 border-primary text-primary': !disabled && checked === true || checked === 'indeterminate',\n }, className)}\n >\n <CheckboxPrimitive.Indicator>\n {checked === true && <Check className={innerIconSize}/>}\n {checked === 'indeterminate' && <Minus className={innerIconSize}/>}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <Label {...label} className={clsx(label.className)} htmlFor={id}/>\n )}\n </div>\n )\n}\n\ntype CheckboxUncontrolledProps = Omit<CheckboxProps, 'value' | 'checked'> & {\n /**\n * @default false\n */\n defaultValue?: CheckedState,\n}\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by this component\n */\nconst CheckboxUncontrolled = ({\n onChange,\n onChangeTristate,\n defaultValue = false,\n ...props\n }: CheckboxUncontrolledProps) => {\n const [checked, setChecked] = useState(defaultValue)\n\n const handleChange = (checked: CheckedState) => {\n if (onChangeTristate) {\n onChangeTristate(checked)\n }\n if (onChange) {\n onChange(checked === 'indeterminate' ? false : checked)\n }\n setChecked(checked)\n }\n\n return (\n <Checkbox\n {...props}\n checked={checked}\n onChangeTristate={handleChange}\n />\n )\n}\n\nexport {\n CheckboxProps,\n CheckboxUncontrolled,\n Checkbox,\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport clsx from 'clsx'\nimport { TextButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype PropertyBaseTranslation = FormTranslationType\n\nexport type PropertyBaseProps = {\n name: string,\n input: (props: { softRequired: boolean, hasValue: boolean }) => ReactNode,\n onRemove?: () => void,\n hasValue: boolean,\n softRequired?: boolean,\n readOnly?: boolean,\n icon?: ReactNode,\n className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n overwriteTranslation,\n name,\n input,\n softRequired = false,\n hasValue,\n icon,\n readOnly,\n onRemove,\n className = '',\n }: PropsForTranslation<PropertyBaseTranslation, PropertyBaseProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n const requiredAndNoValue = softRequired && !hasValue\n return (\n <div className={clsx('flex-row-0 group', className)}>\n <div\n className={clsx(\n 'flex-row-2 max-w-48 min-w-48 px-3 py-2 items-center rounded-l-xl border-2 border-r-0', {\n 'bg-property-title-background text-property-title-text group-hover:border-primary': !requiredAndNoValue,\n 'bg-warning text-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className\n )}\n >\n <div className=\"max-w-6 min-w-6 text-text-default\">{icon}</div>\n <span className=\"font-semibold\">{name}</span>\n </div>\n <div\n className={clsx(\n 'flex-row-2 grow px-3 py-2 justify-between items-center rounded-r-xl border-2 border-l-0 min-h-15', {\n 'bg-surface group-hover:border-primary': !requiredAndNoValue,\n 'bg-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className\n )}\n >\n {input({ softRequired, hasValue })}\n {requiredAndNoValue && (\n <div className=\"text-warning\"><AlertTriangle size={24}/></div>\n )}\n {onRemove && hasValue && (\n <TextButton\n onClick={onRemove}\n color=\"negative\"\n className={clsx('items-center', { '!text-transparent': !hasValue || readOnly })}\n disabled={!hasValue || readOnly}\n >\n {translation('remove')}\n </TextButton>\n )}\n </div>\n </div>\n )\n}\n","import { CalendarDays } from 'lucide-react'\nimport clsx from 'clsx'\nimport { formatDate, formatDateTime } from '../../util/date'\nimport { noop } from '../../util/noop'\nimport { Input } from '../user-action/Input'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\nexport type DatePropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: Date,\n onChange?: (date: Date) => void,\n onEditComplete?: (value: Date) => void,\n type?: 'dateTime' | 'date',\n}\n\n/**\n * An Input for date properties\n */\nexport const DateProperty = ({\n value,\n onChange = noop,\n onEditComplete = noop,\n readOnly,\n type = 'dateTime',\n ...baseProps\n }: DatePropertyProps) => {\n const hasValue = !!value\n\n const dateText = value ? (type === 'dateTime' ? formatDateTime(value) : formatDate(value)) : ''\n return (\n <PropertyBase\n {...baseProps}\n hasValue={hasValue}\n icon={<CalendarDays size={24}/>}\n input={({ softRequired }) => (\n <Input\n className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !shadow-none !w-fit !rounded-none', { 'bg-surface-warning': softRequired && !hasValue })}\n value={dateText}\n type={type === 'dateTime' ? 'datetime-local' : 'date'}\n readOnly={readOnly}\n onChange={(event) => {\n const value = event.target.value\n if (!value) {\n event.preventDefault()\n return\n }\n const dueDate = new Date(value)\n onChange(dueDate)\n }}\n onEditCompleted={(value) => onEditComplete(new Date(value))}\n />\n )}\n />\n )\n}\n","import { List, Plus } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { MultiSelectProps } from '../user-action/MultiSelect'\nimport { MultiSelect } from '../user-action/MultiSelect'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { SelectTile } from '../user-action/Select'\n\ntype TranslationType = FormTranslationType\n\nexport type MultiSelectPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue' | 'className'> &\n Omit<MultiSelectProps<string>, 'className' | 'disabled' | 'label'> & {\n onAddNew?: (value: string) => void,\n}\n\n/**\n * An Input for MultiSelect properties\n */\nexport const MultiSelectProperty = ({\n overwriteTranslation,\n options,\n name,\n readOnly = false,\n softRequired,\n onRemove,\n onAddNew,\n ...multiSelectProps\n }: PropsForTranslation<TranslationType, MultiSelectPropertyProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n const hasValue = options.some(value => value.selected)\n\n return (\n <PropertyBase\n name={name}\n onRemove={onRemove}\n readOnly={readOnly}\n softRequired={softRequired}\n hasValue={hasValue}\n icon={<List size={24}/>}\n input={({ softRequired }) => (\n <MultiSelect\n {...multiSelectProps}\n className={clsx('w-full', { 'bg-surface-warning': softRequired && !hasValue })}\n options={options}\n disabled={readOnly}\n useChipDisplay={true}\n hintText={`${translation('select')}...`}\n searchOptions={{\n sortingFunction: (a, b) => a.value.localeCompare(b.value),\n ...multiSelectProps?.searchOptions\n }}\n additionalItems={({ close, search }) => {\n if (!onAddNew && !search.trim()) {\n return undefined\n }\n return (\n <SelectTile\n prefix={(<Plus/>)}\n title={{ value: `${translation('add')} ${search.trim()}` }}\n onClick={() => {\n onAddNew(search)\n close()\n }}\n disabled={options.some(value => value.value === search.trim())}\n />\n )\n }}\n triggerClassName={clsx(\n '!border-none !p-0 !min-h-10',\n {\n '!bg-warning !text-surface-warning': softRequired && !hasValue,\n '': !softRequired || hasValue,\n }\n )}\n />\n )}\n />\n )\n}\n","import type { ReactNode } from 'react'\nimport { useCallback } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport clsx from 'clsx'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\nimport type { SelectOption } from './Select'\nimport { SelectTile } from './Select'\nimport { IconButton, SolidButton } from './Button'\nimport { ChipList } from '../layout-and-navigation/Chip'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport type { MenuBag, MenuProps } from './Menu'\nimport { Menu } from './Menu'\nimport { ExpansionIcon } from '../layout-and-navigation/Expandable'\nimport { SearchBar } from './SearchBar'\nimport type { UseSearchProps } from '../../hooks/useSearch'\nimport { useSearch } from '../../hooks/useSearch'\nimport { Checkbox } from './Checkbox'\nimport { Plus } from 'lucide-react'\n\ntype MultiSelectAddonTranslation = {\n selected: string,\n}\n\ntype MultiSelectTranslation = MultiSelectAddonTranslation & FormTranslationType\n\nconst defaultMultiSelectTranslation: Translation<MultiSelectAddonTranslation> = {\n en: {\n selected: `{{amount}} selected`\n },\n de: {\n selected: `{{amount}} ausgewählt`\n }\n}\n\nexport type MultiSelectOption<T> = SelectOption<T> & {\n selected: boolean,\n}\n\nexport type MultiSelectBag = MenuBag & {\n search: string,\n}\n\n\nexport type MultiSelectProps<T> = Omit<MenuProps<HTMLButtonElement>, 'trigger' | 'children'> & {\n options: MultiSelectOption<T>[],\n label?: LabelProps,\n onChange: (options: MultiSelectOption<T>[]) => void,\n hintText?: string,\n selectedDisplayOverwrite?: ReactNode,\n searchOptions?: Omit<UseSearchProps<SelectOption<T>>, 'list' | 'searchMapping'>,\n additionalItems?: (bag: MultiSelectBag) => ReactNode,\n useChipDisplay?: boolean,\n className?: string,\n triggerClassName?: string,\n hintTextClassName?: string,\n}\n\n/**\n * A Component for multi selection\n */\nexport const MultiSelect = <T, >({\n overwriteTranslation,\n label,\n options,\n onChange,\n hintText,\n selectedDisplayOverwrite,\n searchOptions,\n additionalItems,\n useChipDisplay = false,\n className,\n triggerClassName,\n hintTextClassName,\n ...menuProps\n }:\n PropsForTranslation<MultiSelectTranslation, MultiSelectProps<T>>\n) => {\n const translation = useTranslation([formTranslation, defaultMultiSelectTranslation], overwriteTranslation)\n const { result, search, setSearch } = useSearch<MultiSelectOption<T>>({\n list: options,\n searchMapping: useCallback((item: MultiSelectOption<T>) => item.searchTags, []),\n ...searchOptions,\n })\n\n const selectedItems = options.filter(value => value.selected)\n\n const isShowingHint = !selectedDisplayOverwrite && selectedItems.length === 0\n\n return (\n <div className={clsx(className)}>\n {label && (\n <Label\n {...label}\n htmlFor={label.name}\n className={clsx(' mb-1', label.className)}\n labelType={label.labelType ?? 'labelBig'}\n />\n )}\n <Menu<HTMLButtonElement>\n {...menuProps}\n trigger={({ toggleOpen, isOpen, disabled }, ref) => (\n <button\n ref={ref}\n className={clsx(\n 'btn-md justify-between w-full border-2 h-auto',\n {\n 'min-h-14': useChipDisplay,\n 'bg-menu-background text-menu-text border-menu-border hover:border-primary': !disabled,\n 'bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed': disabled\n },\n triggerClassName\n )}\n onClick={toggleOpen}\n disabled={disabled}\n >\n {useChipDisplay ? (\n <>\n {isShowingHint ? (\n <IconButton disabled={disabled} size=\"small\" color=\"neutral\">\n <Plus/>\n </IconButton>\n ) : (\n <ChipList list={selectedItems.map(value => ({ children: value.label }))}/>\n )}\n </>\n ) : (\n <>\n {!isShowingHint && (\n <span className=\"font-semibold\">\n {selectedDisplayOverwrite ?? translation('selected', { replacements: { amount: selectedItems.length.toString() } })}\n </span>\n )}\n {isShowingHint && (\n <span className={clsx('textstyle-description', hintTextClassName)}>\n {hintText ?? translation('select')}\n </span>\n )}\n <ExpansionIcon isExpanded={isOpen}/>\n </>\n )}\n </button>\n )}\n menuClassName={clsx('flex-col-2 p-2 max-h-96 overflow-hidden', menuProps.menuClassName)}\n >\n {(bag) => {\n const { close } = bag\n return (\n <>\n {!searchOptions?.disabled && (\n <SearchBar\n value={search}\n onChangeText={setSearch}\n autoFocus={true}\n />\n )}\n <div className=\"flex-col-2 overflow-y-auto\">\n {result.map((option, index) => {\n const update = () => {\n onChange(options.map(value => value.value === option.value ? ({\n ...option,\n selected: !value.selected\n }) : value))\n }\n return (\n <SelectTile\n key={index}\n prefix={(\n <Checkbox checked={option.selected} onChange={update} size=\"small\"\n disabled={option.disabled}/>\n )}\n title={{ value: option.label }}\n onClick={update}\n disabled={option.disabled}\n />\n )\n })}\n {additionalItems && additionalItems({ ...bag, search })}\n </div>\n <div className=\"flex-row-2 justify-between\">\n <div className=\"flex-row-2\">\n <SolidButton\n color=\"neutral\"\n size=\"small\"\n onClick={() => {\n onChange(options.map(option => ({\n ...option,\n selected: !option.disabled\n })))\n }}\n disabled={options.every(value => value.selected || value.disabled)}\n >\n {translation('all')}\n </SolidButton>\n <SolidButton\n color=\"neutral\"\n size=\"small\"\n onClick={() => {\n onChange(options.map(option => ({\n ...option,\n selected: false\n })))\n }}\n >\n {translation('none')}\n </SolidButton>\n </div>\n <SolidButton size=\"small\" onClick={close}>Done</SolidButton>\n </div>\n </>\n )\n }}\n </Menu>\n </div>\n )\n}\n\nexport const MultiSelectUncontrolled = <T, >({\n options,\n onChange,\n ...props\n }:\n PropsForTranslation<MultiSelectTranslation, MultiSelectProps<T>>) => {\n const [usedOptions, setUsedOptions] = useState<MultiSelectOption<T>[]>(options)\n\n useEffect(() => {\n setUsedOptions(options)\n }, [options])\n\n return (\n <MultiSelect\n {...props}\n options={usedOptions}\n onChange={options => {\n setUsedOptions(options)\n onChange(options)\n }}\n />\n )\n}","import { Binary } from 'lucide-react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\nimport { Input } from '../user-action/Input'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype NumberPropertyTranslation = {\n value: string,\n}\n\nconst defaultNumberPropertyTranslation: Translation<NumberPropertyTranslation> = {\n en: {\n value: 'Value'\n },\n de: {\n value: 'Wert'\n }\n}\n\nexport type NumberPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: number,\n suffix?: string,\n onChange?: (value: number) => void,\n onEditComplete?: (value: number) => void,\n}\n\n/**\n * An Input for number properties\n */\nexport const NumberProperty = ({\n overwriteTranslation,\n value,\n onChange = noop,\n onRemove = noop,\n onEditComplete = noop,\n readOnly,\n suffix,\n ...baseProps\n }: PropsForTranslation<NumberPropertyTranslation, NumberPropertyProps>) => {\n const translation = useTranslation([defaultNumberPropertyTranslation], overwriteTranslation)\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Binary size={24}/>}\n input={({ softRequired }) => (\n <div\n className={clsx('flex-row-2 grow', { 'text-warning': softRequired && !hasValue })}\n >\n <Input\n expanded={false}\n className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !w-fit !shadow-none !rounded-none', { 'bg-surface-warning placeholder-warning': softRequired && !hasValue })}\n value={value?.toString() ?? ''}\n type=\"number\"\n readOnly={readOnly}\n placeholder={`${translation('value')}...`}\n onChangeText={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onChange(numberValue)\n }\n }}\n onEditCompleted={(value) => {\n const numberValue = parseFloat(value)\n if (isNaN(numberValue)) {\n onRemove()\n } else {\n onEditComplete(numberValue)\n }\n }}\n />\n {suffix && <span className={clsx('ml-1', { 'bg-surface-warning': softRequired && !hasValue })}>{suffix}</span>}\n </div>\n )}\n />\n )\n}\n","import { List, Plus } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport type { SelectProps } from '../user-action/Select'\nimport { SelectTile } from '../user-action/Select'\nimport { Select } from '../user-action/Select'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\n\ntype SingleSelectPropertyTranslation = FormTranslationType\n\nexport type SingleSelectPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue' | 'className'> &\n Omit<SelectProps<string>, 'className' | 'disabled' | 'label'> & {\n onAddNew?: (value: string) => void,\n}\n\n/**\n * An Input for SingleSelect properties\n */\nexport const SingleSelectProperty = ({\n overwriteTranslation,\n value,\n options,\n name,\n readOnly = false,\n softRequired,\n onRemove,\n onAddNew,\n ...selectProps\n }: PropsForTranslation<SingleSelectPropertyTranslation, SingleSelectPropertyProps>) => {\n const translation = useTranslation([formTranslation], overwriteTranslation)\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n name={name}\n onRemove={onRemove}\n readOnly={readOnly}\n softRequired={softRequired}\n hasValue={hasValue}\n icon={<List size={24}/>}\n input={({ softRequired }) => (\n <Select\n {...selectProps}\n value={value}\n options={options}\n disabled={readOnly}\n className={clsx('w-full')}\n hintText={`${translation('select')}...`}\n searchOptions={{\n sortingFunction: (a, b) => a.value.localeCompare(b.value),\n ...selectProps?.searchOptions\n }}\n additionalItems={({ close, search }) => {\n if (!onAddNew && !search.trim()) {\n return undefined\n }\n return (\n <SelectTile\n prefix={(<Plus/>)}\n title={{ value: `${translation('add')} ${search.trim()}` }}\n onClick={() => {\n onAddNew(search)\n close()\n }}\n disabled={options.some(value => value.value === search.trim())}\n />\n )\n }}\n triggerClassName={clsx(\n '!border-none',\n {\n '!bg-warning !text-surface-warning': softRequired && !hasValue,\n '!bg-property-title-background': !softRequired || hasValue,\n }\n )}\n hintTextClassName={(softRequired && !hasValue) ? 'text-surface-warning' : undefined}\n />\n )}\n />\n )\n}\n","import { Text } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation, Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { Textarea } from '../user-action/Textarea'\nimport { noop } from '../../util/noop'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\ntype TextPropertyTranslation = {\n text: string,\n}\n\nconst defaultTextPropertyTranslation: Translation<TextPropertyTranslation> = {\n en: {\n text: 'Text'\n },\n de: {\n text: 'Text'\n }\n}\n\nexport type TextPropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: string,\n onChange?: (value: string) => void,\n onEditComplete?: (value: string) => void,\n}\n\n/**\n * An Input for Text properties\n */\nexport const TextProperty = ({\n overwriteTranslation,\n value,\n readOnly,\n onChange = noop,\n onRemove = noop,\n onEditComplete = noop,\n ...baseProps\n }: PropsForTranslation<TextPropertyTranslation, TextPropertyProps>) => {\n const translation = useTranslation([defaultTextPropertyTranslation], overwriteTranslation)\n const hasValue = value !== undefined\n\n return (\n <PropertyBase\n {...baseProps}\n onRemove={onRemove}\n hasValue={hasValue}\n icon={<Text size={24}/>}\n input={({ softRequired }) => (\n <Textarea\n className={clsx('ring-0 border-0 outline-0 !px-0 p-0 m-0 shadow-none rounded-none', { 'bg-surface-warning placeholder-warning': softRequired && !hasValue })}\n rows={5}\n defaultStyle={false}\n value={value ?? ''}\n readOnly={readOnly}\n placeholder={`${translation('text')}...`}\n onChangeText={(value) => {\n if (!value) {\n onRemove()\n } else {\n onChange(value)\n }\n }}\n onEditCompleted={(value) => {\n if (!value) {\n onRemove()\n } else {\n onEditComplete(value)\n }\n }}\n />\n )}\n />\n )\n}\n","import type { TextareaHTMLAttributes } from 'react'\nimport { useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { useDelay, type UseDelayOptions } from '../../hooks/useDelay'\nimport { noop } from '../../util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type TextareaProps = {\n /** Outside the area */\n label?: Omit<LabelProps, 'id'>,\n /** Inside the area */\n headline?: string,\n value?: string,\n resizable?: boolean,\n onChangeText?: (text: string) => void,\n disclaimer?: string,\n onEditCompleted?: (text: string) => void,\n saveDelayOptions?: UseDelayOptions,\n defaultStyle?: boolean,\n} & Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>\n\n/**\n * A Textarea component for inputting longer texts\n *\n * The State is managed by the parent\n */\nexport const Textarea = ({\n label,\n headline,\n id,\n resizable = false,\n onChange = noop,\n onChangeText = noop,\n disclaimer,\n onBlur = noop,\n onEditCompleted = noop,\n saveDelayOptions,\n defaultStyle = true,\n disabled = false,\n className,\n ...props\n }: TextareaProps) => {\n const [hasFocus, setHasFocus] = useState(false)\n const { restartTimer, clearTimer } = useDelay(saveDelayOptions)\n\n const onEditCompletedWrapper = (text: string) => {\n onEditCompleted(text)\n clearTimer()\n }\n\n return (\n <div className=\"w-full\">\n {label && (\n <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)}\n labelType={label.labelType ?? 'labelSmall'}/>\n )}\n <div\n className={clsx('bg-surface text-on-surface relative',\n {\n 'shadow border-2 rounded-lg': defaultStyle,\n 'hover:border-primary focus-within:border-primary': defaultStyle && !disabled,\n 'border-disabled-border cursor-not-allowed': defaultStyle && !disabled,\n })}\n >\n {headline && (\n <span className=\"mx-3 mt-3 block textstyle-label-md\">\n {headline}\n </span>\n )}\n <textarea\n id={id}\n className={clsx('pt-0 px-3 border-transparent appearance-none w-full leading-tight focus:ring-0 focus:outline-none', {\n 'resize-none': !resizable,\n 'h-32': defaultStyle,\n 'mt-3': !headline,\n 'text-disabled-text': disabled,\n }, className)}\n onChange={(event) => {\n const value = event.target.value\n restartTimer(() => {\n onEditCompletedWrapper(value)\n })\n onChange(event)\n onChangeText(value)\n }}\n onFocus={() => {\n setHasFocus(true)\n }}\n onBlur={(event) => {\n onBlur(event)\n onEditCompletedWrapper(event.target.value)\n setHasFocus(false)\n }}\n disabled={disabled}\n {...props}\n >\n </textarea>\n </div>\n {(hasFocus && disclaimer) && (\n <label className=\"text-negative\">\n {disclaimer}\n </label>\n )}\n </div>\n )\n}\n\n/**\n * A Textarea component that is not controlled by its parent\n */\nexport const TextareaUncontrolled = ({\n value = '',\n onChangeText = noop,\n ...props\n }: TextareaProps) => {\n const [text, setText] = useState<string>(value)\n\n useEffect(() => {\n setText(value)\n }, [value])\n\n return (\n <Textarea\n {...props}\n value={text}\n onChangeText={text => {\n setText(text)\n onChangeText(text)\n }}\n />\n )\n}","import { clsx } from 'clsx'\n\nexport type FillerRowElementProps = {\n className?: string,\n}\nexport const FillerRowElement = ({\n className\n }: FillerRowElementProps) => {\n return (\n <div className={clsx('flex flex-row items-center w-1/2 h-4 text-disabled-text font-bold', className)}>\n -\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 { Pagination } from '../layout-and-navigation/Pagination'\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 '../../util/array'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { Checkbox } from '../user-action/Checkbox'\nimport { clamp } from '../../util/math'\nimport { noop } from '../../util/noop'\nimport type { TableFilterType } from './TableFilterButton'\nimport { TableFilterButton } from './TableFilterButton'\nimport { TableSortButton } from './TableSortButton'\nimport { FillerRowElement } from './FillerRowElement'\nimport { TableFilters } from './Filter'\nimport { useResizeCallbackWrapper } from '../../hooks/useResizeCallbackWrapper'\nimport { TableCell } from './TableCell'\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\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface TableMeta<TData> {\n headerRowClassName?: TableFilterType,\n bodyRowClassName?: 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 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 = noop,\n className,\n tableClassName,\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`] = Math.floor(header.getSize())\n colSizes[`--col-${header.column.id}-size`] = Math.floor(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} className={clsx('flex-col-4', className)}>\n <Scrollbars\n autoHeight={true}\n autoHeightMax={tableRef.current?.offsetHeight + 2}\n autoHide={true}\n >\n <table\n ref={tableRef}\n className={clsx(tableClassName)}\n style={{\n ...columnSizeVars,\n width: Math.floor(Math.max(table.getTotalSize() - columns.length, ref.current?.offsetWidth ?? table.getTotalSize())),\n }}\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} className={table.options.meta?.headerRowClassName}>\n {headerGroup.headers.map(header => {\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n className={clsx('relative group', header.column.columnDef.meta?.className)}\n >\n <div className=\"flex-row-2 w-full\">\n {header.isPlaceholder ? null : (\n <div className=\"flex-row-1 items-center\">\n {header.column.getCanSort() && (\n <TableSortButton\n sortDirection={header.column.getIsSorted()}\n onClick={() => header.column.toggleSorting()}\n />\n )}\n {header.column.getCanFilter() && header.column.columnDef.meta?.filterType ? (\n <TableFilterButton\n column={header.column}\n filterType={header.column.columnDef.meta.filterType}\n />\n ) : null}\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </div>\n )}\n </div>\n {header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => {\n header.column.resetSize()\n }}\n className=\"table-resize-indicator w-2 rounded bg-primary cursor-col-resize select-none touch-none opacity-0 group-hover:opacity-100 transition-opacity\"\n style={{\n opacity: !columnSizingInfo?.columnSizingStart ?\n undefined : (columnSizingInfo?.columnSizingStart?.findIndex(([id, _]) => id === header.column.id) !== -1 ?\n 1 : (columnSizingInfo?.columnSizingStart?.length !== 0 ?\n 0 : undefined)),\n }}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr key={row.id} onClick={() => onRowClick(row, table)} className={table.options.meta?.bodyRowClassName}>\n {row.getVisibleCells().map(cell => {\n return (\n <td key={cell.id}>\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) : (<FillerRowElement/>)}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </Scrollbars>\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, setUsedData] = useState<T[]>(data)\n\n useEffect(() => {\n setUsedData(data)\n }, [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 = noop,\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 checked={table.getIsSomeRowsSelected() ? 'indeterminate' : table.getIsAllRowsSelected()}\n onChangeTristate={value => {\n const newValue = !!value\n table.toggleAllRowsSelected(newValue)\n }}\n containerClassName=\"max-w-6\"\n />\n )\n },\n cell: ({ row }) => {\n return (\n <Checkbox\n disabled={!row.getCanSelect()}\n checked={row.getIsSelected()}\n onChange={row.getToggleSelectedHandler()}\n containerClassName=\"max-w-6\"\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 checked={false} disabled={true} containerClassName=\"max-w-6\"/>)\n }\n return fillerRow ? fillerRow(columnId, table) : (<FillerRowElement/>)\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 { IconButton, SolidButton } from '../user-action/Button'\nimport { Input } from '../user-action/Input'\nimport { FilterIcon } from 'lucide-react'\nimport { Menu } from '../user-action/Menu'\nimport type { Translation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { useEffect, useState } from 'react'\nimport type { Column } from '@tanstack/react-table'\n\nexport type TableFilterType = 'text' | 'range' | 'dateRange'\n\ntype TableFilterTranslationType = {\n filter: string,\n min: string,\n max: string,\n startDate: string,\n endDate: string,\n text: string,\n}\n\nconst defaultTableFilterTranslation: Translation<TableFilterTranslationType> = {\n en: {\n filter: 'Filter',\n min: 'Min',\n max: 'Max',\n startDate: 'Start',\n endDate: 'End',\n text: 'Text...',\n },\n de: {\n filter: 'Filter',\n min: 'Min',\n max: 'Max',\n startDate: 'Start',\n endDate: 'Ende',\n text: 'Text...',\n }\n}\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 = useTranslation([formTranslation, defaultTableFilterTranslation])\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<HTMLDivElement>\n trigger={({ toggleOpen }, ref) => (\n <div ref={ref} className=\"relative\">\n <IconButton color=\"neutral\" size=\"tiny\" onClick={toggleOpen}>\n <FilterIcon/>\n </IconButton>\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=\"textstyle-title-sm\">{translation('filter')}</h4>\n {filterType === 'text' && (\n <Input\n value={(filterValue ?? '') as string}\n autoFocus={true}\n placeholder={translation('text')}\n onChangeText={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] ?? ''}\n type=\"number\"\n placeholder={translation('min')}\n onChangeText={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] ?? ''}\n type=\"number\"\n placeholder={translation('max')}\n onChangeText={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 onChangeText={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 onChangeText={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 <SolidButton color=\"negative\" size=\"small\" onClick={() => {\n column.setFilterValue(undefined)\n close()\n }}>\n {translation('remove')}\n </SolidButton>\n )}\n <SolidButton size=\"small\" onClick={() => {\n column.setFilterValue(filterValue)\n close()\n }}>\n {translation('apply')}\n </SolidButton>\n </div>\n </div>\n )}\n </Menu>\n )\n}","import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react'\nimport type { IconButtonProps } from '../user-action/Button'\nimport { IconButton } from '../user-action/Button'\nimport clsx from 'clsx'\nimport type { SortDirection } from '@tanstack/react-table'\n\nexport type TableSortButtonProps = IconButtonProps & {\n sortDirection: SortDirection | false,\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 className,\n ...buttonProps\n }: TableSortButtonProps) => {\n let icon = <ChevronsUpDown className=\"w-full h-full\"/>\n if (sortDirection) {\n let usedSortDirection = sortDirection\n if (invert) {\n usedSortDirection = usedSortDirection === 'desc' ? 'asc' : 'desc'\n }\n icon = usedSortDirection === 'asc' ? (<ChevronUp className=\"w-full h-full\"/>) : (\n <ChevronDown className=\"w-full h-full\"/>)\n }\n\n return (\n <IconButton\n size=\"tiny\"\n color={color}\n className={clsx(className)}\n {...buttonProps}\n >\n {icon}\n </IconButton>\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 { 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 type { CSSProperties, PropsWithChildren } from 'react'\nimport { useState } from 'react'\nimport { clsx } from 'clsx'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { writeToClipboard } from '../../util/writeToClipboard'\nimport { CheckIcon, Copy } from 'lucide-react'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\ntype CopyToClipboardWrapperTranslationType = FormTranslationType\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 = useTranslation<CopyToClipboardWrapperTranslationType>([formTranslation])\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","export const writeToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text)\n}","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport { noop } from '../../util/noop'\nimport { addDuration, subtractDuration } from '../../util/date'\nimport { SolidButton } from './Button'\nimport type { TimePickerProps } from '../date/TimePicker'\nimport { TimePicker } from '../date/TimePicker'\nimport type { DatePickerProps } from '../date/DatePicker'\nimport { DatePicker } from '../date/DatePicker'\nimport type { FormTranslationType } from '../../localization/defaults/form'\nimport { formTranslation } from '../../localization/defaults/form'\nimport type { TimeTranslationType } from '../../localization/defaults/time'\nimport { timeTranslation } from '../../localization/defaults/time'\n\ntype DateAndTimePickerTranslationType = FormTranslationType & TimeTranslationType\n\nexport type DateTimePickerMode = 'date' | 'time' | 'dateTime'\n\nexport type DateTimePickerProps = {\n mode?: DateTimePickerMode,\n value?: Date,\n start?: Date,\n end?: Date,\n onChange?: (date: Date) => void,\n onFinish?: (date: Date) => void,\n onRemove?: () => void,\n datePickerProps?: Omit<DatePickerProps, 'onChange' | 'value' | 'start' | 'end'>,\n timePickerProps?: Omit<TimePickerProps, 'onChange' | 'time' | 'maxHeight'>,\n}\n\n/**\n * A Component for picking a Date and Time\n */\nexport const DateTimePicker = ({\n overwriteTranslation,\n value = new Date(),\n start = subtractDuration(new Date(), { years: 50 }),\n end = addDuration(new Date(), { years: 50 }),\n mode = 'dateTime',\n onFinish = noop,\n onChange = noop,\n onRemove = noop,\n timePickerProps,\n datePickerProps,\n }: PropsForTranslation<DateAndTimePickerTranslationType, DateTimePickerProps>) => {\n const translation = useTranslation([formTranslation, timeTranslation], overwriteTranslation)\n\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-[320px] min-h-[250px]\"\n yearMonthPickerProps={{ maxHeight: 218 }}\n value={value}\n start={start}\n end={end}\n onChange={onChange}\n />\n )\n }\n if (useTime) {\n timeDisplay = (\n <TimePicker\n {...timePickerProps}\n className={clsx('h-full', { 'justify-between w-full': mode === 'time' })}\n maxHeight={250}\n time={value}\n onChange={onChange}\n />\n )\n }\n\n return (\n <div className=\"flex-col-2 w-fit\">\n <div className=\"flex-row-4\">\n {dateDisplay}\n {timeDisplay}\n </div>\n <div className=\"flex-row-2 justify-end\">\n <div className=\"flex-row-2 mt-1\">\n <SolidButton size=\"medium\" color=\"negative\" onClick={onRemove}>{translation('clear')}</SolidButton>\n <SolidButton\n size=\"medium\"\n onClick={() => onFinish(value)}\n >\n {translation('change')}\n </SolidButton>\n </div>\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { noop } from '../../util/noop'\nimport { getNeighbours, range } from '../../util/array'\nimport { clamp } from '../../util/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 = noop,\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 === 0 && (!lastScrollTimeStamp || timestamp - lastScrollTimeStamp > 300)\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 // TODO slower increase\n setAnimation(({ velocity, ...animationData }) =>\n ({ ...animationData, velocity: velocity + event.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/30 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 { HTMLInputTypeAttribute, InputHTMLAttributes } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { Pencil } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { UseDelayOptions } from '../../hooks/useDelay'\nimport { useDelay } from '../../hooks/useDelay'\nimport { noop } from '../../util/noop'\n\ntype InputProps = {\n /**\n * The value\n */\n value: string,\n /**\n * @default 'text'\n */\n type?: HTMLInputTypeAttribute,\n /**\n * Callback for when the input's value changes\n * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n * That could be enforced through a union type but that seems a bit overkill\n * @default noop\n */\n onChangeText?: (text: string) => void,\n onEditCompleted?: (text: string) => void,\n labelClassName?: string,\n initialState?: 'editing' | 'display',\n size?: number,\n disclaimer?: string,\n saveDelayOptions?: UseDelayOptions,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'label' | 'type' | 'crossOrigin'>\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 = ({\n type = 'text',\n value,\n onChange = noop,\n onChangeText = noop,\n onEditCompleted = noop,\n labelClassName = '',\n initialState = 'display',\n size = 16,\n disclaimer,\n onBlur,\n saveDelayOptions,\n ...restProps\n }: InputProps) => {\n const [isEditing, setIsEditing] = useState(initialState !== 'display')\n const { restartTimer, clearTimer } = useDelay(saveDelayOptions)\n const ref = useRef<HTMLInputElement>(null)\n\n const onEditCompletedWrapper = (text: string) => {\n onEditCompleted(text)\n clearTimer()\n }\n\n useEffect(() => {\n if (isEditing) {\n ref.current?.focus()\n }\n }, [isEditing])\n\n return (\n <div>\n <div\n className={clsx('flex-row-2 items-center w-full overflow-hidden', { 'cursor-pointer': !isEditing })}\n onClick={() => !isEditing ? setIsEditing(!isEditing) : undefined}\n >\n <div className={clsx('flex-row-2 overflow-hidden', { 'flex-1': isEditing })}>\n {isEditing ? (\n <input\n ref={ref}\n {...restProps}\n value={value}\n type={type}\n onChange={event => {\n const value = event.target.value\n restartTimer(() => {\n onEditCompletedWrapper(value)\n })\n onChangeText(value)\n onChange(event)\n }}\n onBlur={(event) => {\n if (onBlur) {\n onBlur(event)\n }\n onEditCompletedWrapper(value)\n setIsEditing(false)\n }}\n onKeyDown={event => {\n if (event.key === 'Enter') {\n setIsEditing(false)\n onEditCompletedWrapper(value)\n }\n }}\n className={clsx(`w-full border-none rounded-none ring-0 outline-0 text-inherit bg-inherit shadow-transparent decoration-primary p-0 underline-offset-4`, {\n underline: isEditing\n }, labelClassName)}\n onFocus={event => event.target.select()}\n />\n ) : (\n <span className={clsx('max-w-xs break-words overflow-hidden', labelClassName)}>\n {value}\n </span>\n )}\n </div>\n <Pencil\n className={clsx(`cursor-pointer`, { 'text-transparent': isEditing })}\n size={size}\n style={{ minWidth: `${size}px` }}\n />\n </div>\n {(isEditing && disclaimer) && (\n <label className=\"text-negative\">\n {disclaimer}\n </label>\n )}\n </div>\n )\n}\n\nexport const ToggleableInputUncontrolled = ({\n value: initialValue,\n onChangeText = noop,\n ...restProps\n }: InputProps) => {\n const [value, setValue] = useState(initialValue)\n\n useEffect(() => {\n setValue(initialValue)\n }, [initialValue])\n\n return (\n <ToggleableInput\n value={value}\n onChangeText={text => {\n setValue(text)\n onChangeText(text)\n }}\n {...restProps}\n />\n )\n}\n","import { useReducer } from 'react'\n\nexport const useRerender = () => {\n return useReducer(() => ({}), {})[1]\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 const validateEmail = (email: string): boolean => {\n return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(email)\n}\n","import { z } from 'zod'\nimport type { Language } from '../localization/util'\nimport { LanguageUtil } from '../localization/util'\n\nexport type News = {\n title: string,\n date: Date,\n description: (string | URL)[],\n externalResource?: URL,\n keys: string[],\n}\n\nexport type LocalizedNews = Record<Language, News[]>\n\nexport const newsSchema = z.object({\n title: z.string(),\n description: z.string(),\n date: z.string(),\n image: z.string().url().optional(),\n externalResource: z.string().url().optional(),\n keys: z.array(z.string())\n}).transform<News>((obj) => {\n let description: (string | URL)[] = [obj.description]\n if (obj.image) {\n description = [new URL(obj.image), ...description]\n }\n\n return {\n title: obj.title,\n date: new Date(obj.date),\n description,\n externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,\n keys: obj.keys\n }\n})\n\nexport const newsListSchema = z.array(newsSchema)\n\nexport const localizedNewsSchema = z.record(z.enum(LanguageUtil.languages), newsListSchema)\n\nexport const filterNews = (localizedNews: News[], requiredKeys: string[]) => {\n return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))\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}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAEA,aAAS,yBAAyB,aAAa;AAC3C,UAAI,OAAO,YAAY,WAAY,QAAO;AAE1C,UAAI,oBAAoB,oBAAI,QAAQ;AACpC,UAAI,mBAAmB,oBAAI,QAAQ;AAEnC,cAAQ,2BAA2B,SAASA,cAAa;AACrD,eAAOA,eAAc,mBAAmB;AAAA,MAC5C,GAAG,WAAW;AAAA,IAClB;AACA,aAAS,0BAA0B,KAAK,aAAa;AACjD,UAAI,CAAC,eAAe,OAAO,IAAI,WAAY,QAAO;AAClD,UAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,OAAO,QAAQ,WAAY,QAAO,EAAE,SAAS,IAAI;AAEhG,UAAI,QAAQ,yBAAyB,WAAW;AAEhD,UAAI,SAAS,MAAM,IAAI,GAAG,EAAG,QAAO,MAAM,IAAI,GAAG;AAEjD,UAAI,SAAS,EAAE,WAAW,KAAK;AAC/B,UAAI,wBAAwB,OAAO,kBAAkB,OAAO;AAE5D,eAAS,OAAO,KAAK;AACjB,YAAI,QAAQ,aAAa,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG,GAAG;AACrE,cAAI,OAAO,wBAAwB,OAAO,yBAAyB,KAAK,GAAG,IAAI;AAC/E,cAAI,SAAS,KAAK,OAAO,KAAK,KAAM,QAAO,eAAe,QAAQ,KAAK,IAAI;AAAA,cACtE,QAAO,GAAG,IAAI,IAAI,GAAG;AAAA,QAC9B;AAAA,MACJ;AAEA,aAAO,UAAU;AAEjB,UAAI,MAAO,OAAM,IAAI,KAAK,MAAM;AAEhC,aAAO;AAAA,IACX;AACA,YAAQ,IAAI;AAAA;AAAA;;;;;;;;;;;;;;;;MCWIC,QAAM,WAAA;eAANA;;MA9CAC,wBAAsB,WAAA;eAAtBA;;MAgCAC,wBAAsB,WAAA;eAAtBA;;;AAhCT,aAASD,uBACdE,cAA6B;AAE7B,YAAMC,QAAwB,CAAC;AAC/B,iBAAW,CAACC,KAAKC,KAAAA,KAAUH,aAAaI,QAAO,GAAI;AACjD,cAAMC,WAAWJ,MAAMC,GAAAA;AACvB,YAAI,OAAOG,aAAa,aAAa;AACnCJ,gBAAMC,GAAAA,IAAOC;QACf,WAAWG,MAAMC,QAAQF,QAAAA,GAAW;AAClCA,mBAASG,KAAKL,KAAAA;QAChB,OAAO;AACLF,gBAAMC,GAAAA,IAAO;YAACG;YAAUF;;QAC1B;MACF;AACA,aAAOF;IACT;AAEA,aAASQ,uBAAuBC,OAAc;AAC5C,UAAI,OAAOA,UAAU,UAAU;AAC7B,eAAOA;MACT;AAEA,UACG,OAAOA,UAAU,YAAY,CAACC,MAAMD,KAAAA,KACrC,OAAOA,UAAU,WACjB;AACA,eAAOE,OAAOF,KAAAA;MAChB,OAAO;AACL,eAAO;MACT;IACF;AAEO,aAASX,uBAAuBE,OAAqB;AAC1D,YAAMD,eAAe,IAAIa,gBAAAA;AACzB,iBAAW,CAACX,KAAKC,KAAAA,KAAUW,OAAOV,QAAQH,KAAAA,GAAQ;AAChD,YAAIK,MAAMC,QAAQJ,KAAAA,GAAQ;AACxB,qBAAWY,QAAQZ,OAAO;AACxBH,yBAAagB,OAAOd,KAAKO,uBAAuBM,IAAAA,CAAAA;UAClD;QACF,OAAO;AACLf,uBAAaiB,IAAIf,KAAKO,uBAAuBN,KAAAA,CAAAA;QAC/C;MACF;AACA,aAAOH;IACT;AAEO,aAASH,OACdqB,QAAuB;AACvB,eAAA,OAAA,UAAA,QAAGC,mBAAH,IAAA,MAAA,OAAA,IAAA,OAAA,IAAA,CAAA,GAAA,OAAA,GAAA,OAAA,MAAA,QAAA;AAAGA,yBAAH,OAAA,CAAA,IAAA,UAAA,IAAA;;AAEA,iBAAWnB,gBAAgBmB,kBAAkB;AAC3C,mBAAWjB,OAAOF,aAAaoB,KAAI,GAAI;AACrCF,iBAAOG,OAAOnB,GAAAA;QAChB;AAEA,mBAAW,CAACA,KAAKC,KAAAA,KAAUH,aAAaI,QAAO,GAAI;AACjDc,iBAAOF,OAAOd,KAAKC,KAAAA;QACrB;MACF;AAEA,aAAOe;IACT;;;;;AC/DA;;;;;;;;;;;;;MA4BgBI,WAAS,WAAA;eAATA;;MA6DAC,sBAAoB,WAAA;eAApBA;;MAfHC,eAAa,WAAA;eAAbA;;;;wFAlDgB;AAE7B,QAAMC,mBAAmB;AAElB,aAASH,UAAUI,QAAiB;AACzC,UAAI,EAAEC,MAAMC,SAAQ,IAAKF;AACzB,UAAIG,WAAWH,OAAOG,YAAY;AAClC,UAAIC,WAAWJ,OAAOI,YAAY;AAClC,UAAIC,OAAOL,OAAOK,QAAQ;AAC1B,UAAIC,QAAQN,OAAOM,SAAS;AAC5B,UAAIC,OAAuB;AAE3BN,aAAOA,OAAOO,mBAAmBP,IAAAA,EAAMQ,QAAQ,QAAQ,GAAA,IAAO,MAAM;AAEpE,UAAIT,OAAOO,MAAM;AACfA,eAAON,OAAOD,OAAOO;MACvB,WAAWL,UAAU;AACnBK,eAAON,QAAQ,CAACC,SAASQ,QAAQ,GAAA,IAAQ,MAAGR,WAAS,MAAKA;AAC1D,YAAIF,OAAOW,MAAM;AACfJ,kBAAQ,MAAMP,OAAOW;QACvB;MACF;AAEA,UAAIL,SAAS,OAAOA,UAAU,UAAU;AACtCA,gBAAQM,OAAOC,aAAYC,uBAAuBR,KAAAA,CAAAA;MACpD;AAEA,UAAIS,SAASf,OAAOe,UAAWT,SAAU,MAAGA,SAAY;AAExD,UAAIH,YAAY,CAACA,SAASa,SAAS,GAAA,EAAMb,aAAY;AAErD,UACEH,OAAOiB,YACL,CAACd,YAAYJ,iBAAiBmB,KAAKf,QAAAA,MAAcI,SAAS,OAC5D;AACAA,eAAO,QAAQA,QAAQ;AACvB,YAAIH,YAAYA,SAAS,CAAA,MAAO,IAAKA,YAAW,MAAMA;MACxD,WAAW,CAACG,MAAM;AAChBA,eAAO;MACT;AAEA,UAAIF,QAAQA,KAAK,CAAA,MAAO,IAAKA,QAAO,MAAMA;AAC1C,UAAIU,UAAUA,OAAO,CAAA,MAAO,IAAKA,UAAS,MAAMA;AAEhDX,iBAAWA,SAASK,QAAQ,SAASD,kBAAAA;AACrCO,eAASA,OAAON,QAAQ,KAAK,KAAA;AAE7B,aAAQ,KAAEN,WAAWI,OAAOH,WAAWW,SAASV;IAClD;AAEO,QAAMP,gBAAgB;MAC3B;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;AAGK,aAASD,qBAAqBsB,KAAc;AACjD,UAAIC,QAAQC,IAAIC,aAAa,eAAe;AAC1C,YAAIH,QAAQ,QAAQ,OAAOA,QAAQ,UAAU;AAC3CI,iBAAOC,KAAKL,GAAAA,EAAKM,QAAQ,CAACC,QAAAA;AACxB,gBAAI,CAAC5B,cAAc6B,SAASD,GAAAA,GAAM;AAChCE,sBAAQC,KACL,uDAAoDH,GAAAA;YAEzD;UACF,CAAA;QACF;MACF;AAEA,aAAO9B,UAAUuB,GAAAA;IACnB;;;;;;;;;;;mCCvGgBW,QAAAA;;;eAAAA;;;AAAT,aAASA,KACdC,QACAC,MAAS;AAET,YAAMC,UAAsC,CAAC;AAC7CC,aAAOF,KAAKD,MAAAA,EAAQI,QAAQ,CAACC,QAAAA;AAC3B,YAAI,CAACJ,KAAKK,SAASD,GAAAA,GAAW;AAC5BH,kBAAQG,GAAAA,IAAOL,OAAOK,GAAAA;QACxB;MACF,CAAA;AACA,aAAOH;IACT;;;;;;;;;;;;;;;;;;MCyZaK,aAAW,WAAA;eAAXA;;MAoBAC,yBAAuB,WAAA;eAAvBA;;MAPAC,mBAAiB,WAAA;eAAjBA;;MAZAC,gBAAc,WAAA;eAAdA;;MACAC,mBAAiB,WAAA;eAAjBA;;MATAC,IAAE,WAAA;eAAFA;;MACAC,IAAE,WAAA;eAAFA;;MAlXAC,YAAU,WAAA;eAAVA;;MAsQGC,UAAQ,WAAA;eAARA;;MA+BAC,gBAAc,WAAA;eAAdA;;MAXAC,mBAAiB,WAAA;eAAjBA;;MAKAC,QAAM,WAAA;eAANA;;MAPHC,eAAa,WAAA;eAAbA;;MAmBGC,WAAS,WAAA;eAATA;;MAkBMC,qBAAmB,WAAA;eAAnBA;;MAdNC,0BAAwB,WAAA;eAAxBA;;MA+GAC,gBAAc,WAAA;eAAdA;;;AA9ZT,QAAMT,aAAa;MAAC;MAAO;MAAO;MAAO;MAAO;MAAO;;AAsQvD,aAASC,SACdS,IAAK;AAEL,UAAIC,OAAO;AACX,UAAIC;AAEJ,aAAQ,WAAA;0CAAIC,OAAAA,IAAAA,MAAAA,IAAAA,GAAAA,OAAAA,GAAAA,OAAAA,MAAAA,QAAAA;AAAAA,eAAAA,IAAAA,IAAAA,UAAAA,IAAAA;;AACV,YAAI,CAACF,MAAM;AACTA,iBAAO;AACPC,mBAASF,GAAAA,GAAMG,IAAAA;QACjB;AACA,eAAOD;MACT;IACF;AAIA,QAAME,qBAAqB;AACpB,QAAMT,gBAAgB,CAACU,QAAgBD,mBAAmBE,KAAKD,GAAAA;AAE/D,aAASZ,oBAAAA;AACd,YAAM,EAAEc,UAAUC,UAAUC,KAAI,IAAKC,OAAOC;AAC5C,aAAUJ,WAAS,OAAIC,YAAWC,OAAO,MAAMA,OAAO;IACxD;AAEO,aAASf,SAAAA;AACd,YAAM,EAAEkB,KAAI,IAAKF,OAAOC;AACxB,YAAME,SAASpB,kBAAAA;AACf,aAAOmB,KAAKE,UAAUD,OAAOE,MAAM;IACrC;AAEO,aAASvB,eAAkBwB,WAA2B;AAC3D,aAAO,OAAOA,cAAc,WACxBA,YACAA,UAAUC,eAAeD,UAAUE,QAAQ;IACjD;AAEO,aAAStB,UAAUuB,KAAmB;AAC3C,aAAOA,IAAIC,YAAYD,IAAIE;IAC7B;AAEO,aAASvB,yBAAyBO,KAAW;AAClD,YAAMiB,WAAWjB,IAAIkB,MAAM,GAAA;AAC3B,YAAMC,aAAaF,SAAS,CAAA;AAE5B,aACEE,WAGGC,QAAQ,OAAO,GAAA,EACfA,QAAQ,UAAU,GAAA,KACpBH,SAAS,CAAA,IAAM,MAAGA,SAASI,MAAM,CAAA,EAAGC,KAAK,GAAA,IAAS;IAEvD;AAEO,mBAAe9B,oBAIpB+B,KAAkCC,KAAM;AACxC,UAAIC,QAAQC,IAAIC,aAAa,cAAc;YACrCJ;AAAJ,aAAIA,iBAAAA,IAAIK,cAAS,OAAA,SAAbL,eAAeM,iBAAiB;AAClC,gBAAMC,UAAW,MAAG3C,eAClBoC,GAAAA,IACA;AACF,gBAAM,OAAA,eAAA,IAAIQ,MAAMD,OAAAA,GAAV,qBAAA;mBAAA;wBAAA;0BAAA;UAAiB,CAAA;QACzB;MACF;AAEA,YAAMhB,MAAMU,IAAIV,OAAQU,IAAIA,OAAOA,IAAIA,IAAIV;AAE3C,UAAI,CAACS,IAAIM,iBAAiB;AACxB,YAAIL,IAAIA,OAAOA,IAAIb,WAAW;AAE5B,iBAAO;YACLqB,WAAW,MAAMxC,oBAAoBgC,IAAIb,WAAWa,IAAIA,GAAG;UAC7D;QACF;AACA,eAAO,CAAC;MACV;AAEA,YAAMS,QAAQ,MAAMV,IAAIM,gBAAgBL,GAAAA;AAExC,UAAIV,OAAOvB,UAAUuB,GAAAA,GAAM;AACzB,eAAOmB;MACT;AAEA,UAAI,CAACA,OAAO;AACV,cAAMH,UAAW,MAAG3C,eAClBoC,GAAAA,IACA,iEAA8DU,QAAM;AACtE,cAAM,OAAA,eAAA,IAAIF,MAAMD,OAAAA,GAAV,qBAAA;iBAAA;sBAAA;wBAAA;QAAiB,CAAA;MACzB;AAEA,UAAIL,QAAQC,IAAIC,aAAa,cAAc;AACzC,YAAIO,OAAOC,KAAKF,KAAAA,EAAOvB,WAAW,KAAK,CAACc,IAAIA,KAAK;AAC/CY,kBAAQC,KACL,KAAElD,eACDoC,GAAAA,IACA,+KAAA;QAEN;MACF;AAEA,aAAOU;IACT;AAEO,QAAMlD,KAAK,OAAOuD,gBAAgB;AAClC,QAAMtD,KACXD,MACC;MAAC;MAAQ;MAAW;MAA8BwD,MACjD,CAACC,WAAW,OAAOF,YAAYE,MAAAA,MAAY,UAAA;AAGxC,QAAM9D,cAAN,cAA0BqD,MAAAA;IAAO;AACjC,QAAMlD,iBAAN,cAA6BkD,MAAAA;IAAO;AACpC,QAAMjD,oBAAN,cAAgCiD,MAAAA;MAGrCU,YAAYC,MAAc;AACxB,cAAK;AACL,aAAKC,OAAO;AACZ,aAAK9B,OAAO;AACZ,aAAKiB,UAAW,kCAA+BY;MACjD;IACF;AAEO,QAAM9D,oBAAN,cAAgCmD,MAAAA;MACrCU,YAAYC,MAAcZ,SAAiB;AACzC,cAAK;AACL,aAAKA,UAAW,0CAAuCY,OAAK,MAAGZ;MACjE;IACF;AAEO,QAAMnD,0BAAN,cAAsCoD,MAAAA;MAE3CU,cAAc;AACZ,cAAK;AACL,aAAKE,OAAO;AACZ,aAAKb,UAAW;MAClB;IACF;AAWO,aAASpC,eAAekD,OAAY;AACzC,aAAOC,KAAKC,UAAU;QAAEhB,SAASc,MAAMd;QAASiB,OAAOH,MAAMG;MAAM,CAAA;IACrE;;;;;AC5cA;;;;;;mCAOgBC,uBAAAA;;;eAAAA;;;AAAT,aAASA,oBAAoBC,OAAa;AAC/C,aAAOA,MAAMC,QAAQ,OAAO,EAAA,KAAO;IACrC;;;;;ACTA;;;;;;mCAKgBC,aAAAA;;;eAAAA;;;AAAT,aAASA,UAAUC,MAAY;AACpC,YAAMC,YAAYD,KAAKE,QAAQ,GAAA;AAC/B,YAAMC,aAAaH,KAAKE,QAAQ,GAAA;AAChC,YAAME,WAAWD,aAAa,OAAOF,YAAY,KAAKE,aAAaF;AAEnE,UAAIG,YAAYH,YAAY,IAAI;AAC9B,eAAO;UACLI,UAAUL,KAAKM,UAAU,GAAGF,WAAWD,aAAaF,SAAAA;UACpDM,OAAOH,WACHJ,KAAKM,UAAUH,YAAYF,YAAY,KAAKA,YAAYO,MAAAA,IACxD;UACJC,MAAMR,YAAY,KAAKD,KAAKU,MAAMT,SAAAA,IAAa;QACjD;MACF;AAEA,aAAO;QAAEI,UAAUL;QAAMO,OAAO;QAAIE,MAAM;MAAG;IAC/C;;;;;;;;;;;mCCdaE,8BAAAA;;;eAAAA;;;;;AAAN,QAAMA,6BAA6B,CAACC,SAAAA;AACzC,UAAI,CAACA,KAAKC,WAAW,GAAA,KAAQC,QAAQC,IAAIC,8BAA8B;AACrE,eAAOJ;MACT;AAEA,YAAM,EAAEK,UAAUC,OAAOC,KAAI,KAAKC,GAAAA,WAAAA,WAAUR,IAAAA;AAC5C,UAAIE,QAAQC,IAAIM,uBAAuB;AACrC,YAAI,cAAcC,KAAKL,QAAAA,GAAW;AAChC,iBAAQ,MAAEM,GAAAA,qBAAAA,qBAAoBN,QAAAA,IAAYC,QAAQC;QACpD,WAAWF,SAASO,SAAS,GAAA,GAAM;AACjC,iBAAQ,KAAEP,WAAWC,QAAQC;QAC/B,OAAO;AACL,iBAAUF,WAAS,MAAGC,QAAQC;QAChC;MACF;AAEA,aAAQ,MAAEI,GAAAA,qBAAAA,qBAAoBN,QAAAA,IAAYC,QAAQC;IACpD;;;;;;;;;;;;;;;;mCCfgBM,iBAAAA;;;eAAAA;;;;AAAT,aAASA,cAAcC,MAAcC,QAAc;AACxD,UAAI,OAAOD,SAAS,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,EAAEE,SAAQ,KAAKC,GAAAA,WAAAA,WAAUH,IAAAA;AAC/B,aAAOE,aAAaD,UAAUC,SAASE,WAAWH,SAAS,GAAA;IAC7D;;;;;;;;;;;mCCZgBI,eAAAA;;;eAAAA;;;;AAFhB,QAAMC,WAAYC,QAAQC,IAAIC,0BAAqC;AAE5D,aAASJ,YAAYK,MAAY;AACtC,cAAOC,GAAAA,eAAAA,eAAcD,MAAMJ,QAAAA;IAC7B;;;;;;;;;;;;;;;;mCCAgBM,cAAAA;;;eAAAA;;;;;AAAT,aAASA,WAAWC,KAAW;AAEpC,UAAI,EAACC,GAAAA,OAAAA,eAAcD,GAAAA,EAAM,QAAO;AAChC,UAAI;AAEF,cAAME,kBAAiBC,GAAAA,OAAAA,mBAAiB;AACxC,cAAMC,WAAW,IAAIC,IAAIL,KAAKE,cAAAA;AAC9B,eAAOE,SAASE,WAAWJ,mBAAkBK,GAAAA,aAAAA,aAAYH,SAASI,QAAQ;MAC5E,SAASC,GAAG;AACV,eAAO;MACT;IACF;;;;;;;;;;;;;;;;;;MCgNgBC,uBAAqB,WAAA;eAArBA;;MAtBAC,iBAAe,WAAA;eAAfA;;;AA3MhB,QAAMC,UAAN,MAAMA,SAAAA;MAOJC,OAAOC,SAAuB;AAC5B,aAAKC,QAAQD,QAAQE,MAAM,GAAA,EAAKC,OAAOC,OAAAA,GAAU,CAAA,GAAI,KAAA;MACvD;MAEAC,SAAmB;AACjB,eAAO,KAAKC,QAAO;MACrB;MAEQA,QAAQC,QAAgC;AAAhCA,YAAAA,WAAAA,OAAAA,UAAiB;AAC/B,cAAMC,gBAAgB;aAAI,KAAKC,SAASC,KAAI;UAAIC,KAAI;AACpD,YAAI,KAAKC,aAAa,MAAM;AAC1BJ,wBAAcK,OAAOL,cAAcM,QAAQ,IAAA,GAAO,CAAA;QACpD;AACA,YAAI,KAAKC,iBAAiB,MAAM;AAC9BP,wBAAcK,OAAOL,cAAcM,QAAQ,OAAA,GAAU,CAAA;QACvD;AACA,YAAI,KAAKE,yBAAyB,MAAM;AACtCR,wBAAcK,OAAOL,cAAcM,QAAQ,SAAA,GAAY,CAAA;QACzD;AAEA,cAAMG,SAAST,cACZU,IAAI,CAACC,MAAM,KAAKV,SAASW,IAAID,CAAAA,EAAIb,QAAS,KAAEC,SAASY,IAAE,GAAA,CAAA,EACvDE,OAAO,CAACC,MAAMC,SAAS;aAAID;aAASC;WAAO,CAAA,CAAE;AAEhD,YAAI,KAAKX,aAAa,MAAM;AAC1BK,iBAAOO,KAAI,GACN,KAAKf,SAASW,IAAI,IAAA,EAAOd,QAAWC,SAAO,MAAG,KAAKK,WAAS,IAAA,CAAA;QAEnE;AAEA,YAAI,CAAC,KAAKa,aAAa;AACrB,gBAAMC,IAAInB,WAAW,MAAM,MAAMA,OAAOoB,MAAM,GAAG,EAAC;AAClD,cAAI,KAAKX,wBAAwB,MAAM;AACrC,kBAAM,OAAA,eAAA,IAAIY,MACP,yFAAsFF,IAAE,YAASA,IAAE,UAAO,KAAKV,uBAAqB,OAAA,GADjI,qBAAA;qBAAA;0BAAA;4BAAA;YAEN,CAAA;UACF;AAEAC,iBAAOY,QAAQH,CAAAA;QACjB;AAEA,YAAI,KAAKX,iBAAiB,MAAM;AAC9BE,iBAAOO,KAAI,GACN,KAAKf,SACLW,IAAI,OAAA,EACJd,QAAWC,SAAO,SAAM,KAAKQ,eAAa,IAAA,CAAA;QAEjD;AAEA,YAAI,KAAKC,yBAAyB,MAAM;AACtCC,iBAAOO,KAAI,GACN,KAAKf,SACLW,IAAI,SAAA,EACJd,QAAWC,SAAO,UAAO,KAAKS,uBAAqB,KAAA,CAAA;QAE1D;AAEA,eAAOC;MACT;MAEQhB,QACN6B,UACAC,WACAC,YACM;AACN,YAAIF,SAASG,WAAW,GAAG;AACzB,eAAKR,cAAc;AACnB;QACF;AAEA,YAAIO,YAAY;AACd,gBAAM,OAAA,eAAA,IAAIJ,MAAO,6CAAA,GAAX,qBAAA;mBAAA;wBAAA;0BAAA;UAAuD,CAAA;QAC/D;AAGA,YAAIM,cAAcJ,SAAS,CAAA;AAG3B,YAAII,YAAYC,WAAW,GAAA,KAAQD,YAAYE,SAAS,GAAA,GAAM;AAmC5D,cAASC,aAAT,SAAoBC,cAA6BC,UAAgB;AAC/D,gBAAID,iBAAiB,MAAM;AAMzB,kBAAIA,iBAAiBC,UAAU;AAE7B,sBAAM,OAAA,eAAA,IAAIX,MACP,qEAAkEU,eAAa,YAASC,WAAS,KAAA,GAD9F,qBAAA;yBAAA;8BAAA;gCAAA;gBAEN,CAAA;cACF;YACF;AAEAR,sBAAUS,QAAQ,CAACC,SAAAA;AACjB,kBAAIA,SAASF,UAAU;AACrB,sBAAM,OAAA,eAAA,IAAIX,MACP,yCAAsCW,WAAS,uCAAA,GAD5C,qBAAA;yBAAA;8BAAA;gCAAA;gBAEN,CAAA;cACF;AAEA,kBAAIE,KAAKC,QAAQ,OAAO,EAAA,MAAQR,YAAYQ,QAAQ,OAAO,EAAA,GAAK;AAC9D,sBAAM,OAAA,eAAA,IAAId,MACP,qCAAkCa,OAAK,YAASF,WAAS,gEAAA,GADtD,qBAAA;yBAAA;8BAAA;gCAAA;gBAEN,CAAA;cACF;YACF,CAAA;AAEAR,sBAAUP,KAAKe,QAAAA;UACjB;AA/DA,cAAII,cAAcT,YAAYP,MAAM,GAAG,EAAC;AAExC,cAAIiB,aAAa;AACjB,cAAID,YAAYR,WAAW,GAAA,KAAQQ,YAAYP,SAAS,GAAA,GAAM;AAE5DO,0BAAcA,YAAYhB,MAAM,GAAG,EAAC;AACpCiB,yBAAa;UACf;AAEA,cAAID,YAAYR,WAAW,QAAA,GAAM;AAC/B,kBAAM,OAAA,eAAA,IAAIP,MACP,oDAA4Ce,cAAY,2BAAA,GADrD,qBAAA;qBAAA;0BAAA;4BAAA;YAEN,CAAA;UACF;AAEA,cAAIA,YAAYR,WAAW,KAAA,GAAQ;AAEjCQ,0BAAcA,YAAYE,UAAU,CAAA;AACpCb,yBAAa;UACf;AAEA,cAAIW,YAAYR,WAAW,GAAA,KAAQQ,YAAYP,SAAS,GAAA,GAAM;AAC5D,kBAAM,OAAA,eAAA,IAAIR,MACP,8DAA2De,cAAY,KAAA,GADpE,qBAAA;qBAAA;0BAAA;4BAAA;YAEN,CAAA;UACF;AAEA,cAAIA,YAAYR,WAAW,GAAA,GAAM;AAC/B,kBAAM,OAAA,eAAA,IAAIP,MACP,0DAAuDe,cAAY,KAAA,GADhE,qBAAA;qBAAA;0BAAA;4BAAA;YAEN,CAAA;UACF;AAkCA,cAAIX,YAAY;AACd,gBAAIY,YAAY;AACd,kBAAI,KAAK7B,gBAAgB,MAAM;AAC7B,sBAAM,OAAA,eAAA,IAAIa,MACP,0FAAuF,KAAKb,eAAa,aAAUe,SAAS,CAAA,IAAG,MAAA,GAD5H,qBAAA;yBAAA;8BAAA;gCAAA;gBAEN,CAAA;cACF;AAEAO,yBAAW,KAAKrB,sBAAsB2B,WAAAA;AAEtC,mBAAK3B,uBAAuB2B;AAE5BT,4BAAc;YAChB,OAAO;AACL,kBAAI,KAAKlB,wBAAwB,MAAM;AACrC,sBAAM,OAAA,eAAA,IAAIY,MACP,2FAAwF,KAAKZ,uBAAqB,cAAWc,SAAS,CAAA,IAAG,KAAA,GADtI,qBAAA;yBAAA;8BAAA;gCAAA;gBAEN,CAAA;cACF;AAEAO,yBAAW,KAAKtB,cAAc4B,WAAAA;AAE9B,mBAAK5B,eAAe4B;AAEpBT,4BAAc;YAChB;UACF,OAAO;AACL,gBAAIU,YAAY;AACd,oBAAM,OAAA,eAAA,IAAIhB,MACP,uDAAoDE,SAAS,CAAA,IAAG,KAAA,GAD7D,qBAAA;uBAAA;4BAAA;8BAAA;cAEN,CAAA;YACF;AACAO,uBAAW,KAAKzB,UAAU+B,WAAAA;AAE1B,iBAAK/B,WAAW+B;AAEhBT,0BAAc;UAChB;QACF;AAGA,YAAI,CAAC,KAAKzB,SAASqC,IAAIZ,WAAAA,GAAc;AACnC,eAAKzB,SAASsC,IAAIb,aAAa,IAAIpC,SAAAA,CAAAA;QACrC;AAEA,aAAKW,SACFW,IAAIc,WAAAA,EACJjC,QAAQ6B,SAASH,MAAM,CAAA,GAAII,WAAWC,UAAAA;MAC3C;;aAvMAP,cAAuB;aACvBhB,WAAiC,oBAAIuC,IAAAA;aACrCpC,WAA0B;aAC1BG,eAA8B;aAC9BC,uBAAsC;;IAoMxC;AAEO,aAASnB,gBACdoD,iBAAsC;AAatC,YAAMC,OAAO,IAAIpD,QAAAA;AAGjBmD,sBAAgBT,QAAQ,CAACW,aAAaD,KAAKnD,OAAOoD,QAAAA,CAAAA;AAElD,aAAOD,KAAK7C,OAAM;IACpB;AAEO,aAAST,sBACdwD,SACAC,QAA0B;AAI1B,YAAMC,UAAkC,CAAC;AACzC,YAAMC,YAAsB,CAAA;AAC5B,eAASC,IAAI,GAAGA,IAAIJ,QAAQnB,QAAQuB,KAAK;AACvC,cAAMC,WAAWJ,OAAOD,QAAQI,CAAAA,CAAE;AAClCF,gBAAQG,QAAAA,IAAYD;AACpBD,kBAAUC,CAAAA,IAAKC;MACjB;AAGA,YAAMC,SAAS7D,gBAAgB0D,SAAAA;AAI/B,aAAOG,OAAOxC,IAAI,CAACuC,aAAaL,QAAQE,QAAQG,QAAAA,CAAS,CAAC;IAC5D;;;;;ACrPA;;;;;;mCAIgBE,sBAAAA;;;eAAAA;;;AAAT,aAASA,mBAAmBC,MAAY;AAC7C,aAAOA,KAAKC,WAAW,GAAA,IAAOD,OAAQ,MAAGA;IAC3C;;;;;;;;;;;;;;;;;;MCsBaE,qBAAmB,WAAA;eAAnBA;;MADAC,kBAAgB,WAAA;eAAhBA;;MAhBGC,8BAA4B,WAAA;eAA5BA;;MATAC,gBAAc,WAAA;eAAdA;;MAKAC,wBAAsB,WAAA;eAAtBA;;;AALT,aAASD,eAAeE,SAAe;AAE5C,aAAOA,QAAQ,CAAA,MAAO,OAAOA,QAAQC,SAAS,GAAA;IAChD;AAEO,aAASF,uBAAuBC,SAAe;AACpD,aAAOA,QAAQE,WAAW,GAAA,KAAQF,YAAY;IAChD;AAEO,aAASH,6BACdG,SACAG,cAA2D;AAE3D,YAAMC,gBAAgBJ,QAAQK,SAAST,gBAAAA;AAEvC,UAAIQ,eAAe;AACjB,cAAME,mBAAmBC,KAAKC,UAAUL,YAAAA;AACxC,eAAOG,qBAAqB,OACxBV,mBAAmB,MAAMU,mBACzBV;MACN;AAEA,aAAOI;IACT;AAEO,QAAMJ,mBAAmB;AACzB,QAAMD,sBAAsB;;;;;;;;;;;;;;;;;;MCNnBc,kBAAgB,WAAA;eAAhBA;;MAmCAC,iBAAe,WAAA;eAAfA;;;;;AAnCT,aAASD,iBAAiBE,OAAa;AAC5C,cAAOC,GAAAA,oBAAAA,oBACLD,MAAME,MAAM,GAAA,EAAKC,OAAO,CAACC,UAAUC,SAASC,OAAOC,aAAAA;AAEjD,YAAI,CAACF,SAAS;AACZ,iBAAOD;QACT;AAGA,aAAII,GAAAA,SAAAA,gBAAeH,OAAAA,GAAU;AAC3B,iBAAOD;QACT;AAGA,YAAIC,QAAQ,CAAA,MAAO,KAAK;AACtB,iBAAOD;QACT;AAGA,aACGC,YAAY,UAAUA,YAAY,YACnCC,UAAUC,SAASE,SAAS,GAC5B;AACA,iBAAOL;QACT;AAEA,eAAUA,WAAS,MAAGC;MACxB,GAAG,EAAA,CAAA;IAEP;AAMO,aAASN,gBAAgBW,KAAW;AACzC,aAAOA,IAAIC;QACT;;QAEA;MAAA;IAEJ;;;;;;;;;;;;;;;;;;MC5DaC,4BAA0B,WAAA;eAA1BA;;MAkBGC,qCAAmC,WAAA;eAAnCA;;MAXAC,4BAA0B,WAAA;eAA1BA;;;;AAPT,QAAMF,6BAA6B;MACxC;MACA;MACA;MACA;;AAGK,aAASE,2BAA2BC,MAAY;AAErD,aACEA,KACGC,MAAM,GAAA,EACNC,KAAK,CAACC,YACLN,2BAA2BK,KAAK,CAACE,MAAMD,QAAQE,WAAWD,CAAAA,CAAAA,CAAAA,MACtDE;IAEZ;AAEO,aAASR,oCAAoCE,MAAY;AAC9D,UAAIO,mBACFC,QACAC;AAEF,iBAAWN,WAAWH,KAAKC,MAAM,GAAA,GAAM;AACrCO,iBAASX,2BAA2BK,KAAK,CAACE,MAAMD,QAAQE,WAAWD,CAAAA,CAAAA;AACnE,YAAII,QAAQ;;AACT,WAACD,mBAAmBE,gBAAAA,IAAoBT,KAAKC,MAAMO,QAAQ,CAAA;AAC5D;QACF;MACF;AAEA,UAAI,CAACD,qBAAqB,CAACC,UAAU,CAACC,kBAAkB;AACtD,cAAM,OAAA,eAAA,IAAIC,MACP,iCAA8BV,OAAK,mFAAA,GADhC,qBAAA;iBAAA;sBAAA;wBAAA;QAEN,CAAA;MACF;AAEAO,2BAAoBI,GAAAA,UAAAA,kBAAiBJ,iBAAAA;AAErC,cAAQC,QAAAA;QACN,KAAK;AAEH,cAAID,sBAAsB,KAAK;AAC7BE,+BAAoB,MAAGA;UACzB,OAAO;AACLA,+BAAmBF,oBAAoB,MAAME;UAC/C;AACA;QACF,KAAK;AAEH,cAAIF,sBAAsB,KAAK;AAC7B,kBAAM,OAAA,eAAA,IAAIG,MACP,iCAA8BV,OAAK,8DAAA,GADhC,qBAAA;qBAAA;0BAAA;4BAAA;YAEN,CAAA;UACF;AACAS,6BAAmBF,kBAChBN,MAAM,GAAA,EACNW,MAAM,GAAG,EAAC,EACVC,OAAOJ,gBAAAA,EACPK,KAAK,GAAA;AACR;QACF,KAAK;AAEHL,6BAAmB,MAAMA;AACzB;QACF,KAAK;AAGH,gBAAMM,yBAAyBR,kBAAkBN,MAAM,GAAA;AACvD,cAAIc,uBAAuBC,UAAU,GAAG;AACtC,kBAAM,OAAA,eAAA,IAAIN,MACP,iCAA8BV,OAAK,iEAAA,GADhC,qBAAA;qBAAA;0BAAA;4BAAA;YAEN,CAAA;UACF;AAEAS,6BAAmBM,uBAChBH,MAAM,GAAG,EAAC,EACVC,OAAOJ,gBAAAA,EACPK,KAAK,GAAA;AACR;QACF;AACE,gBAAM,OAAA,eAAA,IAAIJ,MAAM,8BAAA,GAAV,qBAAA;mBAAA;wBAAA;0BAAA;UAAwC,CAAA;MAClD;AAEA,aAAO;QAAEH;QAAmBE;MAAiB;IAC/C;;;;;;;;;;;mCCtEgBQ,kBAAAA;;;eAAAA;;;;AAZhB,QAAMC,aAAa;AAGnB,QAAMC,oBAAoB;AASnB,aAASF,eAAeG,OAAeC,QAAsB;AAAtBA,UAAAA,WAAAA,OAAAA,UAAkB;AAC9D,WAAIC,GAAAA,oBAAAA,4BAA2BF,KAAAA,GAAQ;AACrCA,iBAAQG,GAAAA,oBAAAA,qCAAoCH,KAAAA,EAAOI;MACrD;AAEA,UAAIH,QAAQ;AACV,eAAOF,kBAAkBM,KAAKL,KAAAA;MAChC;AAEA,aAAOF,WAAWO,KAAKL,KAAAA;IACzB;;;;;;;;;;;;;;;;;;MC5B0BM,uBAAqB,WAAA;eAArBA,cAAAA;;MAAjBC,iBAAe,WAAA;eAAfA,cAAAA;;MACAC,gBAAc,WAAA;eAAdA,WAAAA;;;;;;;;;;;;;;;mCCcOC,mBAAAA;;;eAAAA;;;;AAAT,aAASA,gBAAgB,OAGV;AAHU,UAAA,EAC9BC,IACAC,OAAM,IAFwB;AAI9B,aAAO,CAACC,aAAAA;AACN,cAAMC,aAAaH,GAAGI,KAAKF,QAAAA;AAC3B,YAAI,CAACC,WAAY,QAAO;AAExB,cAAME,SAAS,CAACC,WAAAA;AACd,cAAI;AACF,mBAAOC,mBAAmBD,MAAAA;UAC5B,SAAE,GAAM;AACN,kBAAM,OAAA,eAAA,IAAIE,OAAAA,YAAY,wBAAA,GAAhB,qBAAA;qBAAA;0BAAA;4BAAA;YAAwC,CAAA;UAChD;QACF;AAEA,cAAMC,SAAiB,CAAC;AACxB,mBAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQZ,MAAAA,GAAS;AACjD,gBAAMa,QAAQX,WAAWQ,MAAMI,GAAG;AAClC,cAAID,UAAUE,QAAW;AACvB,gBAAIL,MAAMM,QAAQ;AAChBR,qBAAOC,GAAAA,IAAOI,MAAMI,MAAM,GAAA,EAAKC,IAAI,CAACC,UAAUf,OAAOe,KAAAA,CAAAA;YACvD,OAAO;AACLX,qBAAOC,GAAAA,IAAOL,OAAOS,KAAAA;YACvB;UACF;QACF;AAEA,eAAOL;MACT;IACF;;;;;;;;;;;;;;;;;;MC/BaY,eAAa,WAAA;eAAbA;;MAuCAC,eAAa,WAAA;eAAbA;;MAnBAC,gBAAc,WAAA;eAAdA;;MAiBAC,gBAAc,WAAA;eAAdA;;MAsCAC,qBAAmB,WAAA;eAAnBA;;MAfAC,uBAAqB,WAAA;eAArBA;;MASAC,6BAA2B,WAAA;eAA3BA;;MAPAC,wBAAsB,WAAA;eAAtBA;;MArCAC,gBAAc,WAAA;eAAdA;;MAOAC,+BAA6B,WAAA;eAA7BA;;MAzCAC,qBAAmB,WAAA;eAAnBA;;MAqCAC,qBAAmB,WAAA;eAAnBA;;MACAC,4BAA0B,WAAA;eAA1BA;;MA1BAC,kBAAgB,WAAA;eAAhBA;;MAcAC,4BAA0B,WAAA;eAA1BA;;MAXAC,oCAAkC,WAAA;eAAlCA;;MACAC,wCAAsC,WAAA;eAAtCA;;MASAC,gCAA8B,WAAA;eAA9BA;;MAXAC,wBAAsB,WAAA;eAAtBA;;MASAC,0BAAwB,WAAA;eAAxBA;;MACAC,2BAAyB,WAAA;eAAzBA;;MAdAC,kBAAgB,WAAA;eAAhBA;;MAZAC,iCAA+B,WAAA;eAA/BA;;MAaAC,kBAAgB,WAAA;eAAhBA;;MAdAC,yBAAuB,WAAA;eAAvBA;;MAsBAC,oBAAkB,WAAA;eAAlBA;;MA6DAC,uBAAqB,WAAA;eAArBA;;MAnCAC,iBAAe,WAAA;eAAfA;;MA5CAC,6BAA2B,WAAA;eAA3BA;;MACAC,4CAA0C,WAAA;eAA1CA;;MAuDAC,gCAA8B,WAAA;eAA9BA;;MAVAC,gBAAc,WAAA;eAAdA;;MAOAC,iCAA+B,WAAA;eAA/BA;;MADAC,6BAA2B,WAAA;eAA3BA;;MAFAC,wBAAsB,WAAA;eAAtBA;;MADAC,2BAAyB,WAAA;eAAzBA;;MAEAC,yBAAuB,WAAA;eAAvBA;;MAHAC,yBAAuB,WAAA;eAAvBA;;MA5CAC,qBAAmB,WAAA;eAAnBA;;MACAC,yBAAuB,WAAA;eAAvBA;;MACAC,oBAAkB,WAAA;eAAlBA;;MACAC,YAAU,WAAA;eAAVA;;MA2DAC,2BAAyB,WAAA;eAAzBA;;MANAC,sCAAoC,WAAA;eAApCA;;MAEAC,2BAAyB,WAAA;eAAzBA;;MAuBAC,gBAAc,WAAA;eAAdA;;MAJAC,2BAAyB,WAAA;eAAzBA;;MAvBAC,gCAA8B,WAAA;eAA9BA;;MAMAC,4CAA0C,WAAA;eAA1CA;;MASAC,kCAAgC,WAAA;eAAhCA;;MAiIJC,gBAAc,WAAA;eAAdA;;MAAgBC,0BAAwB,WAAA;eAAxBA;;;AA9MlB,QAAM3B,0BAA0B;AAChC,QAAMF,kCAAkC;AAExC,QAAMZ,sBAAsB;AAC5B,QAAMkB,8BAA8B;AACpC,QAAMC,6CACX;AAEK,QAAMS,sBAAsB;AAC5B,QAAMC,0BAA0B;AAChC,QAAMC,qBAAqB;AAC3B,QAAMC,aAAa;AACnB,QAAMzC,gBAAgB;AACtB,QAAMqB,mBAAmB;AACzB,QAAME,mBAAmB;AACzB,QAAMV,mBAAmB;AAEzB,QAAMK,yBAAyB;AAC/B,QAAMH,qCAAqC;AAC3C,QAAMC,yCACX;AAEK,QAAMS,qBAAqB;AAI3B,QAAMN,2BAA2B;AACjC,QAAMC,4BAA4B;AAClC,QAAMH,iCAAiC;AACvC,QAAMH,6BAA6B;AAGnC,QAAMZ,iBAAiB;AAKvB,QAAMM,iBAAiB;AAGvB,QAAMG,sBAAsB;AAC5B,QAAMC,6BAA6B,YAAYD,mBAAAA;AAG/C,QAAMF,gCAAgC;AAItC,QAAMkB,kBAAkB;AACxB,QAAMxB,iBAAiB;AACvB,QAAM4B,iBAAiB;AACvB,QAAM9B,gBAAgB;AACtB,QAAMoC,0BAA0B;AAChC,QAAMF,4BAA4B;AAClC,QAAMD,yBAAyB;AAC/B,QAAME,0BAA0B;AAChC,QAAMH,8BAA8B;AACpC,QAAMD,kCACX;AAEK,QAAMF,iCAAiC;AAEvC,QAAMiB,iCAAiC;AAEvC,QAAMJ,uCAAuC;AAE7C,QAAMC,4BAA4B;AAElC,QAAMI,6CAA6C;AAEnD,QAAMN,4BAA4B;AAElC,QAAMrC,wBACX;AACK,QAAME,yBACX;AAEK,QAAM0C,mCACX;AAGK,QAAM3C,8BAA8B;AAEpC,QAAMoB,wBAAwB;AAE9B,QAAMoB,4BAA4B;AAElC,QAAM1C,sBAAsB;MAAC;MAAO;MAAS;MAAc;MAAO;;AAElE,QAAMyC,iBAAgD;MAC3DO,MAAM;MACNC,kBAAkB;MAClBC,QAAQ;IACV;AAMA,QAAMC,uBAAuB;;;;MAI3BC,QAAQ;;;;;MAKRC,uBAAuB;;;;MAIvBC,qBAAqB;;;;MAIrBC,eAAe;;;;MAIfC,SAAS;;;;MAITC,SAAS;;;;MAITC,YAAY;;;;MAIZC,YAAY;;;;MAIZC,WAAW;;;;MAIXC,iBAAiB;;;;MAIjBC,iBAAiB;;;;MAIjBC,cAAc;;;;MAIdC,cAAc;IAChB;AAKA,QAAMlB,iBAAiB;MACrB,GAAGK;MACHc,OAAO;QACLC,cAAc;UACZf,qBAAqBE;UACrBF,qBAAqBI;;QAEvBY,YAAY;UACVhB,qBAAqBE;UACrBF,qBAAqBI;UACrBJ,qBAAqBQ;UACrBR,qBAAqBO;;QAEvBU,eAAe;;UAEbjB,qBAAqBK;UACrBL,qBAAqBM;;QAEvBY,YAAY;UACVlB,qBAAqBG;UACrBH,qBAAqBU;;QAEvBS,SAAS;UACPnB,qBAAqBE;UACrBF,qBAAqBI;UACrBJ,qBAAqBG;UACrBH,qBAAqBU;UACrBV,qBAAqBC;UACrBD,qBAAqBQ;UACrBR,qBAAqBO;;QAEvBa,UAAU;;UAERpB,qBAAqBE;UACrBF,qBAAqBG;UACrBH,qBAAqBU;UACrBV,qBAAqBI;;MAEzB;IACF;AAEA,QAAMR,2BAA2B;MAC/ByB,cAAc;MACdC,UAAU;MACVC,eAAe;MACfC,mBAAmB;IACrB;;;;;AC9MA;;;;;;mCAIgBC,sBAAAA;;;eAAAA;;;AAHhB,QAAMC,cAAc;AACpB,QAAMC,kBAAkB;AAEjB,aAASF,mBAAmBG,KAAW;AAE5C,UAAIF,YAAYG,KAAKD,GAAAA,GAAM;AACzB,eAAOA,IAAIE,QAAQH,iBAAiB,MAAA;MACtC;AACA,aAAOC;IACT;;;;;;;;;;;;;;;;;;MC8YgBG,yBAAuB,WAAA;eAAvBA;;MA5BAC,oBAAkB,WAAA;eAAlBA;;MA7LAC,eAAa,WAAA;eAAbA;;MAzFAC,gBAAc,WAAA;eAAdA;;;;;;;AAdhB,QAAMC,oBAAoB;AAcnB,aAASD,eAAeE,OAAa;AAC1C,YAAMC,QAAQD,MAAMC,MAAMF,iBAAAA;AAE1B,UAAI,CAACE,OAAO;AACV,eAAOC,sBAAsBF,KAAAA;MAC/B;AAEA,aAAOE,sBAAsBD,MAAM,CAAA,CAAE;IACvC;AAaA,aAASC,sBAAsBF,OAAa;AAC1C,YAAMG,WAAWH,MAAMI,WAAW,GAAA,KAAQJ,MAAMK,SAAS,GAAA;AACzD,UAAIF,UAAU;AACZH,gBAAQA,MAAMM,MAAM,GAAG,EAAC;MAC1B;AACA,YAAMC,SAASP,MAAMI,WAAW,KAAA;AAChC,UAAIG,QAAQ;AACVP,gBAAQA,MAAMM,MAAM,CAAA;MACtB;AACA,aAAO;QAAEE,KAAKR;QAAOO;QAAQJ;MAAS;IACxC;AAEA,aAASM,qBACPC,OACAC,eACAC,eAAsB;AAEtB,YAAMC,SAAyC,CAAC;AAChD,UAAIC,aAAa;AAEjB,YAAMC,WAAqB,CAAA;AAC3B,iBAAWC,YAAWC,GAAAA,qBAAAA,qBAAoBP,KAAAA,EAAOJ,MAAM,CAAA,EAAGY,MAAM,GAAA,GAAM;AACpE,cAAMC,cAAcC,oBAAAA,2BAA2BC,KAAK,CAACC,MACnDN,QAAQZ,WAAWkB,CAAAA,CAAAA;AAErB,cAAMC,eAAeP,QAAQf,MAAMF,iBAAAA;AAEnC,YAAIoB,eAAeI,gBAAgBA,aAAa,CAAA,GAAI;AAClD,gBAAM,EAAEf,KAAKL,UAAUI,OAAM,IAAKL,sBAAsBqB,aAAa,CAAA,CAAE;AACvEV,iBAAOL,GAAAA,IAAO;YAAEgB,KAAKV;YAAcP;YAAQJ;UAAS;AACpDY,mBAASU,KAAM,OAAGC,GAAAA,cAAAA,oBAAmBP,WAAAA,IAAa,UAAA;QACpD,WAAWI,gBAAgBA,aAAa,CAAA,GAAI;AAC1C,gBAAM,EAAEf,KAAKD,QAAQJ,SAAQ,IAAKD,sBAAsBqB,aAAa,CAAA,CAAE;AACvEV,iBAAOL,GAAAA,IAAO;YAAEgB,KAAKV;YAAcP;YAAQJ;UAAS;AAEpD,cAAIS,iBAAiBW,aAAa,CAAA,GAAI;AACpCR,qBAASU,KAAM,OAAGC,GAAAA,cAAAA,oBAAmBH,aAAa,CAAA,CAAE,CAAA;UACtD;AAEA,cAAII,IAAIpB,SAAUJ,WAAW,gBAAgB,WAAY;AAGzD,cAAIS,iBAAiBW,aAAa,CAAA,GAAI;AACpCI,gBAAIA,EAAEC,UAAU,CAAA;UAClB;AAEAb,mBAASU,KAAKE,CAAAA;QAChB,OAAO;AACLZ,mBAASU,KAAM,OAAGC,GAAAA,cAAAA,oBAAmBV,OAAAA,CAAAA;QACvC;AAGA,YAAIL,iBAAiBY,gBAAgBA,aAAa,CAAA,GAAI;AACpDR,mBAASU,MAAKC,GAAAA,cAAAA,oBAAmBH,aAAa,CAAA,CAAE,CAAA;QAClD;MACF;AAEA,aAAO;QACLM,oBAAoBd,SAASe,KAAK,EAAA;QAClCjB;MACF;IACF;AAOO,aAAShB,cACdkC,iBACA,OAAA;AAAA,UAAA,EACEpB,gBAAgB,OAChBC,gBAAgB,OAChBoB,+BAA+B,MAAK,IAHtC,UAAA,SAI0B,CAAC,IAJ3B;AAMA,YAAM,EAAEH,oBAAoBhB,OAAM,IAAKJ,qBACrCsB,iBACApB,eACAC,aAAAA;AAGF,UAAIqB,KAAKJ;AACT,UAAI,CAACG,8BAA8B;AACjCC,cAAM;MACR;AAEA,aAAO;QACLA,IAAI,IAAIC,OAAQ,MAAGD,KAAG,GAAA;QACtBpB;MACF;IACF;AAMA,aAASsB,uBAAAA;AACP,UAAIC,IAAI;AAER,aAAO,MAAA;AACL,YAAIC,WAAW;AACf,YAAIC,IAAI,EAAEF;AACV,eAAOE,IAAI,GAAG;AACZD,sBAAYE,OAAOC,aAAa,MAAOF,IAAI,KAAK,EAAA;AAChDA,cAAIG,KAAKC,OAAOJ,IAAI,KAAK,EAAA;QAC3B;AACA,eAAOD;MACT;IACF;AAEA,aAASM,sBAAsB,OAc9B;AAd8B,UAAA,EAC7BC,oBACAC,iBACA7B,SACA8B,WACAC,WACAC,2BAA0B,IANG;AAe7B,YAAM,EAAExC,KAAKL,UAAUI,OAAM,IAAKL,sBAAsBc,OAAAA;AAIxD,UAAIiC,aAAazC,IAAI0C,QAAQ,OAAO,EAAA;AAEpC,UAAIH,WAAW;AACbE,qBAAc,KAAEF,YAAYE;MAC9B;AACA,UAAIE,aAAa;AAIjB,UAAIF,WAAWG,WAAW,KAAKH,WAAWG,SAAS,IAAI;AACrDD,qBAAa;MACf;AACA,UAAI,CAACE,MAAMC,SAASL,WAAW3C,MAAM,GAAG,CAAA,CAAA,CAAA,GAAM;AAC5C6C,qBAAa;MACf;AAEA,UAAIA,YAAY;AACdF,qBAAaJ,gBAAAA;MACf;AAEA,YAAMU,eAAeN,cAAcH;AAEnC,UAAIC,WAAW;AACbD,kBAAUG,UAAAA,IAAe,KAAEF,YAAYvC;MACzC,OAAO;AACLsC,kBAAUG,UAAAA,IAAczC;MAC1B;AAKA,YAAMgD,qBAAqBZ,sBACvBlB,GAAAA,cAAAA,oBAAmBkB,kBAAAA,IACnB;AAEJ,UAAIa;AACJ,UAAIF,gBAAgBP,4BAA4B;AAG9CS,kBAAW,SAAMR,aAAW;MAC9B,WAAW1C,QAAQ;AACjBkD,kBAAW,QAAKR,aAAW;MAC7B,OAAO;AACLQ,kBAAW,QAAKR,aAAW;MAC7B;AAEA,aAAO9C,WACF,SAAMqD,qBAAqBC,UAAQ,OACnC,MAAGD,qBAAqBC;IAC/B;AAEA,aAASC,0BACPhD,OACAiD,iBACAhD,eACAC,eACAoC,4BAAmC;AAEnC,YAAMH,kBAAkBV,qBAAAA;AACxB,YAAMW,YAAyC,CAAC;AAEhD,YAAM/B,WAAqB,CAAA;AAC3B,iBAAWC,YAAWC,GAAAA,qBAAAA,qBAAoBP,KAAAA,EAAOJ,MAAM,CAAA,EAAGY,MAAM,GAAA,GAAM;AACpE,cAAM0C,wBAAwBxC,oBAAAA,2BAA2ByC,KAAK,CAACvC,MAC7DN,QAAQZ,WAAWkB,CAAAA,CAAAA;AAGrB,cAAMC,eAAeP,QAAQf,MAAMF,iBAAAA;AAEnC,YAAI6D,yBAAyBrC,gBAAgBA,aAAa,CAAA,GAAI;AAE5DR,mBAASU,KACPkB,sBAAsB;YACpBE;YACAD,oBAAoBrB,aAAa,CAAA;YACjCP,SAASO,aAAa,CAAA;YACtBuB;YACAC,WAAWY,kBACPG,WAAAA,kCACAC;YACJf;UACF,CAAA,CAAA;QAEJ,WAAWzB,gBAAgBA,aAAa,CAAA,GAAI;AAE1C,cAAIX,iBAAiBW,aAAa,CAAA,GAAI;AACpCR,qBAASU,KAAM,OAAGC,GAAAA,cAAAA,oBAAmBH,aAAa,CAAA,CAAE,CAAA;UACtD;AAEA,cAAII,IAAIgB,sBAAsB;YAC5BE;YACA7B,SAASO,aAAa,CAAA;YACtBuB;YACAC,WAAWY,kBAAkBK,WAAAA,0BAA0BD;YACvDf;UACF,CAAA;AAGA,cAAIpC,iBAAiBW,aAAa,CAAA,GAAI;AACpCI,gBAAIA,EAAEC,UAAU,CAAA;UAClB;AAEAb,mBAASU,KAAKE,CAAAA;QAChB,OAAO;AACLZ,mBAASU,KAAM,OAAGC,GAAAA,cAAAA,oBAAmBV,OAAAA,CAAAA;QACvC;AAGA,YAAIL,iBAAiBY,gBAAgBA,aAAa,CAAA,GAAI;AACpDR,mBAASU,MAAKC,GAAAA,cAAAA,oBAAmBH,aAAa,CAAA,CAAE,CAAA;QAClD;MACF;AAEA,aAAO;QACL0C,yBAAyBlD,SAASe,KAAK,EAAA;QACvCgB;MACF;IACF;AAUO,aAASlD,mBACdmC,iBACAmC,SAAkC;UAKhCA,wBACAA,wBACAA;AALF,YAAMC,SAAST,0BACb3B,iBACAmC,QAAQP,kBACRO,yBAAAA,QAAQvD,kBAAa,OAArBuD,yBAAyB,QACzBA,yBAAAA,QAAQtD,kBAAa,OAArBsD,yBAAyB,QACzBA,sCAAAA,QAAQlB,+BAA0B,OAAlCkB,sCAAsC,KAAA;AAGxC,UAAIE,aAAaD,OAAOF;AACxB,UAAI,CAACC,QAAQlC,8BAA8B;AACzCoC,sBAAc;MAChB;AAEA,aAAO;QACL,GAAGvE,cAAckC,iBAAiBmC,OAAAA;QAClCE,YAAa,MAAGA,aAAW;QAC3BtB,WAAWqB,OAAOrB;MACpB;IACF;AAMO,aAASnD,wBACdoC,iBACAmC,SAEC;AAED,YAAM,EAAErC,mBAAkB,IAAKpB,qBAC7BsB,iBACA,OACA,KAAA;AAEF,YAAM,EAAEsC,WAAW,KAAI,IAAKH;AAC5B,UAAIrC,uBAAuB,KAAK;AAC9B,YAAIyC,gBAAgBD,WAAW,OAAO;AACtC,eAAO;UACLD,YAAa,OAAIE,gBAAc;QACjC;MACF;AAEA,YAAM,EAAEL,wBAAuB,IAAKP,0BAClC3B,iBACA,OACA,OACA,OACA,KAAA;AAEF,UAAIwC,uBAAuBF,WAAW,eAAe;AACrD,aAAO;QACLD,YAAa,MAAGH,0BAA0BM,uBAAqB;MACjE;IACF;;;;;;;;;;;mCCjbgBC,iBAAAA;;;eAAAA;;;;;AAAT,aAASA,cACdC,OACAC,YACAC,OAAqB;AAErB,UAAIC,oBAAoB;AAExB,YAAMC,gBAAeC,GAAAA,YAAAA,eAAcL,KAAAA;AACnC,YAAMM,gBAAgBF,aAAaG;AACnC,YAAMC;;SAEHP,eAAeD,SAAQS,GAAAA,cAAAA,iBAAgBL,YAAAA,EAAcH,UAAAA,IAAc;;QAGpEC;;AAEFC,0BAAoBH;AACpB,YAAMU,SAASC,OAAOC,KAAKN,aAAAA;AAE3B,UACE,CAACI,OAAOG,MAAM,CAACC,UAAAA;AACb,YAAIC,QAAQP,eAAeM,KAAAA,KAAU;AACrC,cAAM,EAAEE,QAAQC,SAAQ,IAAKX,cAAcQ,KAAAA;AAI3C,YAAII,WAAY,OAAGF,SAAS,QAAQ,MAAKF,QAAM;AAC/C,YAAIG,UAAU;AACZC,sBAAc,CAACH,QAAQ,MAAM,MAAG,MAAGG,WAAS;QAC9C;AACA,YAAIF,UAAU,CAACG,MAAMC,QAAQL,KAAAA,EAAQA,SAAQ;UAACA;;AAE9C,gBACGE,YAAYH,SAASN;SAErBL,oBACCA,kBAAmBkB,QACjBH,UACAF,SACKD,MACEO;;;;;UAKC,CAACC,YAAYC,mBAAmBD,OAAAA;QAAAA,EAEjCE,KAAK,GAAA,IACRD,mBAAmBT,KAAAA,CAAAA,KACpB;MAEX,CAAA,GACA;AACAZ,4BAAoB;MAItB;AACA,aAAO;QACLO;QACAgB,QAAQvB;MACV;IACF;;;;;;;;;;;mCC1CgBwB,eAAAA;;;eAAAA;;;;;;;;;;;AAAT,aAASA,YACdC,QACAC,MACAC,WAAmB;AAGnB,UAAIC;AACJ,UAAIC,cAAc,OAAOH,SAAS,WAAWA,QAAOI,GAAAA,WAAAA,sBAAqBJ,IAAAA;AAIzE,YAAMK,gBAAgBF,YAAYG,MAAM,oBAAA;AACxC,YAAMC,qBAAqBF,gBACvBF,YAAYK,MAAMH,cAAc,CAAA,EAAGI,MAAM,IACzCN;AAEJ,YAAMO,WAAWH,mBAAmBI,MAAM,KAAK,CAAA;AAE/C,WAAKD,SAAS,CAAA,KAAM,IAAIJ,MAAM,WAAA,GAAc;AAC1CM,gBAAQC,MACL,mBAAgBV,cAAY,uCAAoCJ,OAAOe,WAAS,+EAAA;AAEnF,cAAMC,iBAAgBC,GAAAA,OAAAA,0BAAyBT,kBAAAA;AAC/CJ,uBAAeE,gBAAgBA,cAAc,CAAA,IAAK,MAAMU;MAC1D;AAGA,UAAI,EAACE,GAAAA,YAAAA,YAAWd,WAAAA,GAAc;AAC5B,eAAQF,YAAY;UAACE;YAAeA;MACtC;AAEA,UAAI;AACFD,eAAO,IAAIgB,IACTf,YAAYgB,WAAW,GAAA,IAAOpB,OAAOqB,SAASrB,OAAOe,UACrD,UAAA;MAEJ,SAASO,GAAG;AAEVnB,eAAO,IAAIgB,IAAI,KAAK,UAAA;MACtB;AAEA,UAAI;AACF,cAAMI,WAAW,IAAIJ,IAAIf,aAAaD,IAAAA;AACtCoB,iBAASR,YAAWS,GAAAA,wBAAAA,4BAA2BD,SAASR,QAAQ;AAChE,YAAIU,iBAAiB;AAErB,aACEC,GAAAA,QAAAA,gBAAeH,SAASR,QAAQ,KAChCQ,SAASI,gBACTzB,WACA;AACA,gBAAM0B,SAAQC,GAAAA,aAAAA,wBAAuBN,SAASI,YAAY;AAE1D,gBAAM,EAAEG,QAAQC,OAAM,KAAKC,GAAAA,eAAAA,eACzBT,SAASR,UACTQ,SAASR,UACTa,KAAAA;AAGF,cAAIE,QAAQ;AACVL,8BAAiBpB,GAAAA,WAAAA,sBAAqB;cACpCU,UAAUe;cACVG,MAAMV,SAASU;cACfL,QAAOM,GAAAA,MAAAA,MAAKN,OAAOG,MAAAA;YACrB,CAAA;UACF;QACF;AAGA,cAAMI,eACJZ,SAASa,WAAWjC,KAAKiC,SACrBb,SAAStB,KAAKQ,MAAMc,SAASa,OAAO1B,MAAM,IAC1Ca,SAAStB;AAEf,eAAOC,YACH;UAACiC;UAAcV,kBAAkBU;YACjCA;MACN,SAASb,GAAG;AACV,eAAOpB,YAAY;UAACE;YAAeA;MACrC;IACF;;;;;;;;;;;;;;;;mCCnGgBiC,iBAAAA;;;eAAAA;;;;AAAT,aAASA,cAAcC,MAAcC,QAAe;AACzD,UAAI,CAACD,KAAKE,WAAW,GAAA,KAAQ,CAACD,QAAQ;AACpC,eAAOD;MACT;AAEA,YAAM,EAAEG,UAAUC,OAAOC,KAAI,KAAKC,GAAAA,WAAAA,WAAUN,IAAAA;AAC5C,aAAQ,KAAEC,SAASE,WAAWC,QAAQC;IACxC;;;;;;;;;;;mCCLgBE,aAAAA;;;eAAAA;;;;;AAAT,aAASA,UACdC,MACAC,QACAC,eACAC,cAAsB;AAItB,UAAI,CAACF,UAAUA,WAAWC,cAAe,QAAOF;AAEhD,YAAMI,QAAQJ,KAAKK,YAAW;AAI9B,UAAI,CAACF,cAAc;AACjB,aAAIG,GAAAA,eAAAA,eAAcF,OAAO,MAAA,EAAS,QAAOJ;AACzC,aAAIM,GAAAA,eAAAA,eAAcF,OAAQ,MAAGH,OAAOI,YAAW,CAAA,EAAO,QAAOL;MAC/D;AAGA,cAAOO,GAAAA,eAAAA,eAAcP,MAAO,MAAGC,MAAAA;IACjC;;;;;;;;;;;mCC1BaO,aAAAA;;;eAAAA;;;;AAAN,QAAMA,YAAuB,SAACC,MAAAA;wCAASC,OAAAA,IAAAA,MAAAA,OAAAA,IAAAA,OAAAA,IAAAA,CAAAA,GAAAA,OAAAA,GAAAA,OAAAA,MAAAA,QAAAA;AAAAA,aAAAA,OAAAA,CAAAA,IAAAA,UAAAA,IAAAA;;AAC5C,UAAIC,QAAQC,IAAIC,qBAAqB;AACnC,gBAAOC,GAAAA,wBAAAA,4BACLC,qBAAiDP,UAAUC,MAAAA,GAASC,IAAAA,CAAAA;MAExE;AACA,aAAOD;IACT;;;;;;;;;;ACVA;AAAA;AAAA;AAEA,aAAS,yBAAyB,KAAK;AACnC,aAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAI;AAAA,IACxD;AACA,YAAQ,IAAI;AAAA;AAAA;;;;;;;;;mCCFCO,iBAAAA;;;eAAAA;;;;sEAHK,OAAA,CAAA;AAGX,QAAMA,gBAAgBC,OAAAA,QAAMC,cAAiC,IAAA;AAEpE,QAAIC,QAAQC,IAAIC,aAAa,cAAc;AACzCL,oBAAcM,cAAc;IAC9B;;;;;;;;;;;;;;;;;;MCSaC,oBAAkB,WAAA;eAAlBA;;MAhBAC,qBAAmB,WAAA;eAAnBA;;;AAAN,QAAMA,sBACV,OAAOC,SAAS,eACfA,KAAKD,uBACLC,KAAKD,oBAAoBE,KAAKC,MAAAA,KAChC,SAAUC,IAAuB;AAC/B,UAAIC,QAAQC,KAAKC,IAAG;AACpB,aAAON,KAAKO,WAAW,WAAA;AACrBJ,WAAG;UACDK,YAAY;UACZC,eAAe,WAAA;AACb,mBAAOC,KAAKC,IAAI,GAAG,MAAMN,KAAKC,IAAG,IAAKF,MAAI;UAC5C;QACF,CAAA;MACF,GAAG,CAAA;IACL;AAEK,QAAMN,qBACV,OAAOE,SAAS,eACfA,KAAKF,sBACLE,KAAKF,mBAAmBG,KAAKC,MAAAA,KAC/B,SAAUU,IAAU;AAClB,aAAOC,aAAaD,EAAAA;IACtB;;;;;;;;;;;;;;;;mCCyEcE,mBAAAA;;;eAAAA;;;2BA/FyC,OAAA;;AAyBzD,QAAMC,0BAA0B,OAAOC,yBAAyB;AAEhE,QAAMC,YAAY,oBAAIC,IAAAA;AACtB,QAAMC,SAAuB,CAAA;AAE7B,aAASC,eAAeC,SAAoC;AAC1D,YAAMC,KAAK;QACTC,MAAMF,QAAQE,QAAQ;QACtBC,QAAQH,QAAQI,cAAc;MAChC;AACA,YAAMC,WAAWP,OAAOQ,KACtB,CAACC,QAAQA,IAAIL,SAASD,GAAGC,QAAQK,IAAIJ,WAAWF,GAAGE,MAAM;AAE3D,UAAIK;AAEJ,UAAIH,UAAU;AACZG,mBAAWZ,UAAUa,IAAIJ,QAAAA;AACzB,YAAIG,UAAU;AACZ,iBAAOA;QACT;MACF;AAEA,YAAME,WAAW,oBAAIb,IAAAA;AACrB,YAAMc,WAAW,IAAIhB,qBAAqB,CAACiB,YAAAA;AACzCA,gBAAQC,QAAQ,CAACC,UAAAA;AACf,gBAAMC,WAAWL,SAASD,IAAIK,MAAME,MAAM;AAC1C,gBAAMC,YAAYH,MAAMI,kBAAkBJ,MAAMK,oBAAoB;AACpE,cAAIJ,YAAYE,WAAW;AACzBF,qBAASE,SAAAA;UACX;QACF,CAAA;MACF,GAAGjB,OAAAA;AACHQ,iBAAW;QACTP;QACAU;QACAD;MACF;AAEAZ,aAAOsB,KAAKnB,EAAAA;AACZL,gBAAUyB,IAAIpB,IAAIO,QAAAA;AAClB,aAAOA;IACT;AAEA,aAASc,QACPC,SACAR,UACAf,SAAoC;AAEpC,YAAM,EAAEC,IAAIU,UAAUD,SAAQ,IAAKX,eAAeC,OAAAA;AAClDU,eAASW,IAAIE,SAASR,QAAAA;AAEtBJ,eAASW,QAAQC,OAAAA;AACjB,aAAO,SAASC,YAAAA;AACdd,iBAASe,OAAOF,OAAAA;AAChBZ,iBAASa,UAAUD,OAAAA;AAGnB,YAAIb,SAASgB,SAAS,GAAG;AACvBf,mBAASgB,WAAU;AACnB/B,oBAAU6B,OAAOxB,EAAAA;AACjB,gBAAM2B,QAAQ9B,OAAO+B,UACnB,CAACtB,QAAQA,IAAIL,SAASD,GAAGC,QAAQK,IAAIJ,WAAWF,GAAGE,MAAM;AAE3D,cAAIyB,QAAQ,IAAI;AACd9B,mBAAOgC,OAAOF,OAAO,CAAA;UACvB;QACF;MACF;IACF;AAEO,aAASnC,gBAAmC,OAIjC;AAJiC,UAAA,EACjDsC,SACA3B,YACA4B,SAAQ,IAHyC;AAKjD,YAAMC,aAAsBD,YAAY,CAACtC;AAEzC,YAAM,CAACwC,SAASC,UAAAA,KAAcC,GAAAA,OAAAA,UAAS,KAAA;AACvC,YAAMC,cAAaC,GAAAA,OAAAA,QAAiB,IAAA;AACpC,YAAMC,cAAaC,GAAAA,OAAAA,aAAY,CAACjB,YAAAA;AAC9Bc,mBAAWI,UAAUlB;MACvB,GAAG,CAAA,CAAE;AAELmB,OAAAA,GAAAA,OAAAA,WAAU,MAAA;AACR,YAAIhD,yBAAyB;AAC3B,cAAIuC,cAAcC,QAAS;AAE3B,gBAAMX,UAAUc,WAAWI;AAC3B,cAAIlB,WAAWA,QAAQoB,SAAS;AAC9B,kBAAMnB,YAAYF,QAChBC,SACA,CAACN,cAAcA,aAAakB,WAAWlB,SAAAA,GACvC;cAAEf,MAAM6B,WAAAA,OAAAA,SAAAA,QAASU;cAASrC;YAAW,CAAA;AAGvC,mBAAOoB;UACT;QACF,OAAO;AACL,cAAI,CAACU,SAAS;AACZ,kBAAMU,gBAAeC,GAAAA,qBAAAA,qBAAoB,MAAMV,WAAW,IAAA,CAAA;AAC1D,mBAAO,OAAMW,GAAAA,qBAAAA,oBAAmBF,YAAAA;UAClC;QACF;MAEF,GAAG;QAACX;QAAY7B;QAAY2B;QAASG;QAASG,WAAWI;OAAQ;AAEjE,YAAMM,gBAAeP,GAAAA,OAAAA,aAAY,MAAA;AAC/BL,mBAAW,KAAA;MACb,GAAG,CAAA,CAAE;AAEL,aAAO;QAACI;QAAYL;QAASa;;IAC/B;;;;;;;;;;;;;;;;mCCnHgBC,uBAAAA;;;eAAAA;;;AAXhB,QAAMC,QAAQ,oBAAIC,QAAAA;AAWX,aAASF,oBACdG,UACAC,SAA2B;AAG3B,UAAI,CAACA,QAAS,QAAO;QAAED;MAAS;AAGhC,UAAIE,oBAAoBJ,MAAMK,IAAIF,OAAAA;AAClC,UAAI,CAACC,mBAAmB;AACtBA,4BAAoBD,QAAQG,IAAI,CAACC,WAAWA,OAAOC,YAAW,CAAA;AAC9DR,cAAMS,IAAIN,SAASC,iBAAAA;MACrB;AAEA,UAAIM;AAIJ,YAAMC,WAAWT,SAASU,MAAM,KAAK,CAAA;AAIrC,UAAI,CAACD,SAAS,CAAA,EAAI,QAAO;QAAET;MAAS;AAGpC,YAAMW,UAAUF,SAAS,CAAA,EAAGH,YAAW;AAIvC,YAAMM,QAAQV,kBAAkBW,QAAQF,OAAAA;AACxC,UAAIC,QAAQ,EAAG,QAAO;QAAEZ;MAAS;AAGjCQ,uBAAiBP,QAAQW,KAAAA;AAGzBZ,iBAAWA,SAASc,MAAMN,eAAeO,SAAS,CAAA,KAAM;AAExD,aAAO;QAAEf;QAAUQ;MAAe;IACpC;;;;;;;;;;;mCC1DaQ,uBAAAA;;;eAAAA;;;AAAN,QAAMA,sBAAiC,CAACC,UAAUC,YAAAA;AACvD,UAAIC,QAAQC,IAAIC,qBAAqB;AACnC,eAAOC,gCAAoDN,oBACzDC,UACAC,OAAAA;MAEJ;AACA,aAAO;QAAED;QAAUM,gBAAgBC;MAAU;IAC/C;;;;;;;;;;;;;;;;mCCRgBC,sBAAAA;;;eAAAA;;;AAAT,aAASA,mBACdC,aACAC,UACAC,gBAAuB;AAEvB,UAAI,CAACF,YAAa;AAElB,UAAIE,gBAAgB;AAClBA,yBAAiBA,eAAeC,YAAW;MAC7C;AAEA,iBAAWC,QAAQJ,aAAa;YAEPI,cAIrBA;AAJF,cAAMC,kBAAiBD,eAAAA,KAAKE,WAAM,OAAA,SAAXF,aAAaG,MAAM,KAAK,CAAA,EAAG,CAAA,EAAGJ,YAAW;AAChE,YACEF,aAAaI,kBACbH,mBAAmBE,KAAKI,cAAcL,YAAW,OACjDC,gBAAAA,KAAKK,YAAO,OAAA,SAAZL,cAAcM,KAAK,CAACC,WAAWA,OAAOR,YAAW,MAAOD,cAAAA,IACxD;AACA,iBAAOE;QACT;MACF;IACF;;;;;;;;;;;mCCtBaQ,sBAAAA;;;eAAAA;;;AAAN,QAAMA,qBAAgC,WAAA;wCAAIC,OAAAA,IAAAA,MAAAA,IAAAA,GAAAA,OAAAA,GAAAA,OAAAA,MAAAA,QAAAA;AAAAA,aAAAA,IAAAA,IAAAA,UAAAA,IAAAA;;AAC/C,UAAIC,QAAQC,IAAIC,qBAAqB;AACnC,eAAOC,+BAAmDL,mBAAkB,GACvEC,IAAAA;MAEP;IACF;;;;;;;;;;;;;;;;mCCDgBK,mBAAAA;;;eAAAA;;;;AAFhB,QAAMC,WAAYC,QAAQC,IAAIC,0BAAqC;AAE5D,aAASJ,gBACdK,MACAC,QACAC,SACAC,eAAuC;AAEvC,UAAIN,QAAQC,IAAIM,qBAAqB;AACnC,cAAMC,sBACJC,iCAAmCD;AACrC,cAAME,qBACJD,gCAAkCC;AAEpC,cAAMC,SAASP,UAAUI,oBAAoBL,MAAME,OAAAA,EAASO;AAC5D,cAAMC,SAASH,mBAAmBJ,eAAeQ,QAAWH,MAAAA;AAC5D,YAAIE,QAAQ;AACV,gBAAME,QAAS,UAAMF,OAAOG,OAAO,KAAK,OAAI;AAC5C,gBAAMC,cAAcN,WAAWE,OAAOK,gBAAgB,KAAM,MAAGP;AAC/D,iBAAQ,KAAEI,QAAQF,OAAOA,UAASM,GAAAA,wBAAAA,4BAC/B,KAAEpB,WAAWkB,cAAcd,IAAAA;QAEhC;AACA,eAAO;MACT,OAAO;AACL,eAAO;MACT;IACF;;;;;;;;;;;;;;;;mCC3BgBiB,eAAAA;;;eAAAA;;;;;AAFhB,QAAMC,WAAYC,QAAQC,IAAIC,0BAAqC;AAE5D,aAASJ,YAAYK,MAAcC,UAAkB;AAC1D,cAAOC,GAAAA,wBAAAA,4BACLL,QAAQC,IAAIK,kCAAkC,CAACF,WAC3CD,QACAI,GAAAA,eAAAA,eAAcJ,MAAMJ,QAAAA,CAAAA;IAE5B;;;;;;;;;;;;;;;;mCCFgBS,gBAAAA;;;eAAAA;;;2BAT8B,OAAA;AASvC,aAASA,aACdC,MACAC,MAAmB;AAEnB,YAAMC,YAAWC,GAAAA,OAAAA,QAA4B,IAAA;AAC7C,YAAMC,YAAWD,GAAAA,OAAAA,QAA4B,IAAA;AAS7C,cAAOE,GAAAA,OAAAA,aACL,CAACC,YAAAA;AACC,YAAIA,YAAY,MAAM;AACpB,gBAAMC,aAAaL,SAASI;AAC5B,cAAIC,YAAY;AACdL,qBAASI,UAAU;AACnBC,uBAAAA;UACF;AACA,gBAAMC,aAAaJ,SAASE;AAC5B,cAAIE,YAAY;AACdJ,qBAASE,UAAU;AACnBE,uBAAAA;UACF;QACF,OAAO;AACL,cAAIR,MAAM;AACRE,qBAASI,UAAUG,SAAST,MAAMM,OAAAA;UACpC;AACA,cAAIL,MAAM;AACRG,qBAASE,UAAUG,SAASR,MAAMK,OAAAA;UACpC;QACF;MACF,GACA;QAACN;QAAMC;OAAK;IAEhB;AAEA,aAASQ,SACPT,MACAM,SAAiB;AAEjB,UAAI,OAAON,SAAS,YAAY;AAC9B,cAAMU,UAAUV,KAAKM,OAAAA;AACrB,YAAI,OAAOI,YAAY,YAAY;AACjC,iBAAOA;QACT,OAAO;AACL,iBAAO,MAAMV,KAAK,IAAA;QACpB;MACF,OAAO;AACLA,aAAKM,UAAUA;AACf,eAAO,MAAA;AACLN,eAAKM,UAAU;QACjB;MACF;IACF;;;;;;;;;;;;;;;;mCCvDSK,aAAAA;;;eAAAA;;;AAXT,QAAIA,YAAY,CAACC,MAAAA;IAAe;AAChC,QAAIC,QAAQC,IAAIC,aAAa,cAAc;AACzC,YAAMC,SAAS,oBAAIC,IAAAA;AACnBN,kBAAY,CAACO,QAAAA;AACX,YAAI,CAACF,OAAOG,IAAID,GAAAA,GAAM;AACpBE,kBAAQC,MAAMH,GAAAA;QAChB;AACAF,eAAOM,IAAIJ,GAAAA;MACb;IACF;;;;;ACTA;;;;;;;;;;;;;;MA8rBA,SAAmB,WAAA;eAAnB;;MANaK,eAAa,WAAA;eAAbA;;;;;uEAjrBoC,OAAA,CAAA;;;;;;;;;;;;AAuHjD,QAAMC,aAAa,oBAAIC,IAAAA;AAUvB,aAASC,SACPC,QACAC,MACAC,IACAC,SAAwB;AAExB,UAAI,OAAOC,WAAW,aAAa;AACjC;MACF;AAEA,UAAI,EAACC,GAAAA,YAAAA,YAAWJ,IAAAA,GAAO;AACrB;MACF;AAIA,UAAI,CAACE,QAAQG,uBAAuB;AAClC,cAAMC;;UAEJ,OAAOJ,QAAQI,WAAW,cACtBJ,QAAQI,SAER,YAAYP,SACVA,OAAOO,SACPC;;AAER,cAAMC,gBAAgBR,OAAO,MAAMC,KAAK,MAAMK;AAG9C,YAAIV,WAAWa,IAAID,aAAAA,GAAgB;AACjC;QACF;AAGAZ,mBAAWc,IAAIF,aAAAA;MACjB;AAMAT,aAAOD,SAASE,MAAMC,IAAIC,OAAAA,EAASS,MAAM,CAACC,QAAAA;AACxC,YAAIC,QAAQC,IAAIC,aAAa,cAAc;AAEzC,gBAAMH;QACR;MACF,CAAA;IACF;AAEA,aAASI,gBAAgBC,OAAuB;AAC9C,YAAMC,cAAcD,MAAME;AAC1B,YAAMC,SAASF,YAAYG,aAAa,QAAA;AACxC,aACGD,UAAUA,WAAW,WACtBH,MAAMK,WACNL,MAAMM,WACNN,MAAMO,YACNP,MAAMQ;MACLR,MAAMS,eAAeT,MAAMS,YAAYC,UAAU;IAEtD;AAEA,aAASC,YACPC,GACA9B,QACAC,MACAC,IACA6B,SACAC,SACAC,QACA1B,QACA2B,YAAmC;AAEnC,YAAM,EAAEC,SAAQ,IAAKL,EAAEV;AAGvB,YAAMgB,mBAAmBD,SAASE,YAAW,MAAO;AAEpD,UACGD,oBAAoBnB,gBAAgBa,CAAAA,KACrCA,EAAEV,cAAckB,aAAa,UAAA,GAC7B;AAEA;MACF;AAEA,UAAI,EAACjC,GAAAA,YAAAA,YAAWJ,IAAAA,GAAO;AACrB,YAAI8B,SAAS;AAGXD,YAAES,eAAc;AAChBC,mBAAST,QAAQ9B,IAAAA;QACnB;AAGA;MACF;AAEA6B,QAAES,eAAc;AAEhB,YAAME,WAAW,MAAA;AACf,YAAIP,YAAY;AACd,cAAIQ,qBAAqB;AAEzBR,qBAAW;YACTK,gBAAgB,MAAA;AACdG,mCAAqB;YACvB;UACF,CAAA;AAEA,cAAIA,oBAAoB;AACtB;UACF;QACF;AAGA,cAAMC,eAAeV,UAAAA,OAAAA,SAAU;AAC/B,YAAI,oBAAoBjC,QAAQ;AAC9BA,iBAAO+B,UAAU,YAAY,MAAA,EAAQ9B,MAAMC,IAAI;YAC7C8B;YACAzB;YACA0B,QAAQU;UACV,CAAA;QACF,OAAO;AACL3C,iBAAO+B,UAAU,YAAY,MAAA,EAAQ7B,MAAMD,MAAM;YAC/CgC,QAAQU;UACV,CAAA;QACF;MACF;AAEAF,eAAAA;IACF;AAOA,aAASG,kBAAkBC,gBAAkC;AAC3D,UAAI,OAAOA,mBAAmB,UAAU;AACtC,eAAOA;MACT;AAEA,cAAOC,GAAAA,WAAAA,WAAUD,cAAAA;IACnB;AAUA,QAAME,QAAOC,uBAAAA,QAAMC,WACjB,SAASC,cAAcC,OAAOC,cAAY;AACxC,UAAIC;AAEJ,YAAM,EACJpD,MAAMqD,UACNpD,IAAIqD,QACJF,UAAUG,cACVzD,UAAU0D,eAAe,MACzBC,UACA3B,SACAC,SACAC,QACA1B,QACAoD,SACAzB,YACA0B,cAAcC,kBACdC,cAAcC,kBACdC,iBAAiB,OACjB,GAAGC,UAAAA,IACDd;AAEJE,iBAAWG;AAEX,UACEQ,mBACC,OAAOX,aAAa,YAAY,OAAOA,aAAa,WACrD;AACAA,mBAAW,oBAAA,YAAA,KAACa,KAAAA;;;MACd;AAEA,YAAMlE,SAASgD,OAAAA,QAAMmB,WAAWC,4BAAAA,aAAa;AAE7C,YAAMC,kBAAkBZ,iBAAiB;AAEzC,UAAI3C,QAAQC,IAAIC,aAAa,cAAc;AACzC,YAASsD,kBAAT,SAAyBC,MAIxB;AACC,iBAAO,OAAA,eAAA,IAAIC,MACR,iCAA+BD,KAAKE,MAAI,iBAAeF,KAAKG,WAAS,4BAA4BH,KAAKI,SAAO,gBAC3G,OAAOvE,WAAW,cAEf,qEACA,GAAC,GALF,qBAAA;mBAAA;wBAAA;0BAAA;UAMP,CAAA;QACF;AAGA,cAAMwE,qBAAsD;UAC1D3E,MAAM;QACR;AACA,cAAM4E,gBAAqCC,OAAOC,KAChDH,kBAAAA;AAEFC,sBAAcG,QAAQ,CAACP,QAAAA;AACrB,cAAIA,QAAQ,QAAQ;AAClB,gBACEtB,MAAMsB,GAAAA,KAAQ,QACb,OAAOtB,MAAMsB,GAAAA,MAAS,YAAY,OAAOtB,MAAMsB,GAAAA,MAAS,UACzD;AACA,oBAAMH,gBAAgB;gBACpBG;gBACAC,UAAU;gBACVC,QAAQxB,MAAMsB,GAAAA,MAAS,OAAO,SAAS,OAAOtB,MAAMsB,GAAAA;cACtD,CAAA;YACF;UACF,OAAO;AAGL,kBAAMQ,IAAWR;UACnB;QACF,CAAA;AAGA,cAAMS,qBAAsD;UAC1DhF,IAAI;UACJ6B,SAAS;UACTE,QAAQ;UACRD,SAAS;UACT0B,UAAU;UACV3D,UAAU;UACVQ,QAAQ;UACRoD,SAAS;UACTC,cAAc;UACdE,cAAc;UACdE,gBAAgB;UAChB9B,YAAY;QACd;AACA,cAAMiD,gBAAqCL,OAAOC,KAChDG,kBAAAA;AAEFC,sBAAcH,QAAQ,CAACP,QAAAA;AACrB,gBAAMW,UAAU,OAAOjC,MAAMsB,GAAAA;AAE7B,cAAIA,QAAQ,MAAM;AAChB,gBAAItB,MAAMsB,GAAAA,KAAQW,YAAY,YAAYA,YAAY,UAAU;AAC9D,oBAAMd,gBAAgB;gBACpBG;gBACAC,UAAU;gBACVC,QAAQS;cACV,CAAA;YACF;UACF,WAAWX,QAAQ,UAAU;AAC3B,gBAAItB,MAAMsB,GAAAA,KAAQW,YAAY,UAAU;AACtC,oBAAMd,gBAAgB;gBACpBG;gBACAC,UAAU;gBACVC,QAAQS;cACV,CAAA;YACF;UACF,WACEX,QAAQ,aACRA,QAAQ,kBACRA,QAAQ,kBACRA,QAAQ,cACR;AACA,gBAAItB,MAAMsB,GAAAA,KAAQW,YAAY,YAAY;AACxC,oBAAMd,gBAAgB;gBACpBG;gBACAC,UAAU;gBACVC,QAAQS;cACV,CAAA;YACF;UACF,WACEX,QAAQ,aACRA,QAAQ,YACRA,QAAQ,aACRA,QAAQ,cACRA,QAAQ,cACRA,QAAQ,kBACR;AACA,gBAAItB,MAAMsB,GAAAA,KAAQ,QAAQW,YAAY,WAAW;AAC/C,oBAAMd,gBAAgB;gBACpBG;gBACAC,UAAU;gBACVC,QAAQS;cACV,CAAA;YACF;UACF,OAAO;AAGL,kBAAMH,IAAWR;UACnB;QACF,CAAA;MACF;AAEA,YAAM,EAAExE,MAAMC,GAAE,IAAK8C,OAAAA,QAAMqC,QAAQ,MAAA;AACjC,YAAI,CAACrF,QAAQ;AACX,gBAAMsF,gBAAe1C,kBAAkBU,QAAAA;AACvC,iBAAO;YACLrD,MAAMqF;YACNpF,IAAIqD,SAASX,kBAAkBW,MAAAA,IAAU+B;UAC3C;QACF;AAEA,cAAM,CAACA,cAAcC,UAAAA,KAAcC,GAAAA,aAAAA,aAAYxF,QAAQsD,UAAU,IAAA;AAEjE,eAAO;UACLrD,MAAMqF;UACNpF,IAAIqD,UAASiC,GAAAA,aAAAA,aAAYxF,QAAQuD,MAAAA,IAAUgC,cAAcD;QAC3D;MACF,GAAG;QAACtF;QAAQsD;QAAUC;OAAO;AAE7B,YAAMkC,eAAezC,OAAAA,QAAM0C,OAAezF,IAAAA;AAC1C,YAAM0F,aAAa3C,OAAAA,QAAM0C,OAAexF,EAAAA;AAGxC,UAAI0F;AACJ,UAAI5B,gBAAgB;AAClB,YAAIlD,QAAQC,IAAIC,aAAa,eAAe;AAC1C,cAAI2C,SAAS;AACXkC,oBAAQC,KACL,oDAAoDxC,WAAS,uGAAA;UAElE;AACA,cAAIO,kBAAkB;AACpBgC,oBAAQC,KACL,yDAAyDxC,WAAS,4GAAA;UAEvE;AACA,cAAI;AACFsC,oBAAQ5C,OAAAA,QAAM+C,SAASC,KAAK3C,QAAAA;UAC9B,SAASxC,KAAK;AACZ,gBAAI,CAACwC,UAAU;AACb,oBAAM,OAAA,eAAA,IAAImB,MACP,uDAAuDlB,WAAS,+EAAA,GAD7D,qBAAA;uBAAA;4BAAA;8BAAA;cAEN,CAAA;YACF;AACA,kBAAM,OAAA,eAAA,IAAIkB,MACP,6DAA6DlB,WAAS,+FACpE,OAAOlD,WAAW,cACf,sEACA,GAAC,GAJH,qBAAA;qBAAA;0BAAA;4BAAA;YAKN,CAAA;UACF;QACF,OAAO;AACLwF,kBAAQ5C,OAAAA,QAAM+C,SAASC,KAAK3C,QAAAA;QAC9B;MACF,OAAO;AACL,YAAIvC,QAAQC,IAAIC,aAAa,eAAe;AAC1C,eAAKqC,YAAAA,OAAAA,SAAAA,SAAkB4C,UAAS,KAAK;AACnC,kBAAM,OAAA,eAAA,IAAIzB,MACR,iKAAA,GADI,qBAAA;qBAAA;0BAAA;4BAAA;YAEN,CAAA;UACF;QACF;MACF;AAEA,YAAM0B,WAAgBlC,iBAClB4B,SAAS,OAAOA,UAAU,YAAYA,MAAMO,MAC5C/C;AAEJ,YAAM,CAACgD,oBAAoBC,WAAWC,YAAAA,KAAgBC,GAAAA,iBAAAA,iBAAgB;QACpEC,YAAY;MACd,CAAA;AAEA,YAAMC,8BAA8BzD,OAAAA,QAAM0D,YACxC,CAACC,OAAAA;AAEC,YAAIhB,WAAWiB,YAAY1G,MAAMuF,aAAamB,YAAY3G,MAAM;AAC9DqG,uBAAAA;AACAX,qBAAWiB,UAAU1G;AACrBuF,uBAAamB,UAAU3G;QACzB;AAEAmG,2BAAmBO,EAAAA;MACrB,GACA;QAACzG;QAAID;QAAMqG;QAAcF;OAAmB;AAG9C,YAAMS,UAASC,GAAAA,cAAAA,cAAaL,6BAA6BP,QAAAA;AAGzDlD,aAAAA,QAAM+D,UAAU,MAAA;AAEd,YAAIjG,QAAQC,IAAIC,aAAa,cAAc;AACzC;QACF;AAEA,YAAI,CAAChB,QAAQ;AACX;QACF;AAGA,YAAI,CAACqG,aAAa,CAAChC,iBAAiB;AAClC;QACF;AAGAtE,iBAASC,QAAQC,MAAMC,IAAI;UAAEK;QAAO,CAAA;MACtC,GAAG;QAACL;QAAID;QAAMoG;QAAW9F;QAAQ8D;QAAiBrE,UAAAA,OAAAA,SAAAA,OAAQO;QAAQP;OAAO;AAEzE,YAAMgH,aAMF;QACFb,KAAKU;QACLlD,QAAQ7B,GAAC;AACP,cAAIhB,QAAQC,IAAIC,aAAa,cAAc;AACzC,gBAAI,CAACc,GAAG;AACN,oBAAM,OAAA,eAAA,IAAI0C,MACP,gFAAA,GADG,qBAAA;uBAAA;4BAAA;8BAAA;cAEN,CAAA;YACF;UACF;AAEA,cAAI,CAACR,kBAAkB,OAAOL,YAAY,YAAY;AACpDA,oBAAQ7B,CAAAA;UACV;AAEA,cACEkC,kBACA4B,MAAMzC,SACN,OAAOyC,MAAMzC,MAAMQ,YAAY,YAC/B;AACAiC,kBAAMzC,MAAMQ,QAAQ7B,CAAAA;UACtB;AAEA,cAAI,CAAC9B,QAAQ;AACX;UACF;AAEA,cAAI8B,EAAEmF,kBAAkB;AACtB;UACF;AAEApF,sBACEC,GACA9B,QACAC,MACAC,IACA6B,SACAC,SACAC,QACA1B,QACA2B,UAAAA;QAEJ;QACA0B,aAAa9B,GAAC;AACZ,cAAI,CAACkC,kBAAkB,OAAOH,qBAAqB,YAAY;AAC7DA,6BAAiB/B,CAAAA;UACnB;AAEA,cACEkC,kBACA4B,MAAMzC,SACN,OAAOyC,MAAMzC,MAAMS,iBAAiB,YACpC;AACAgC,kBAAMzC,MAAMS,aAAa9B,CAAAA;UAC3B;AAEA,cAAI,CAAC9B,QAAQ;AACX;UACF;AAEAD,mBAASC,QAAQC,MAAMC,IAAI;YACzBK;YACA2G,UAAU;;YAEV5G,uBAAuB;UACzB,CAAA;QACF;QACAwD,cAAchD,QAAQC,IAAIoG,6BACtB3G,SACA,SAASsD,aAAahC,GAAC;AACrB,cAAI,CAACkC,kBAAkB,OAAOD,qBAAqB,YAAY;AAC7DA,6BAAiBjC,CAAAA;UACnB;AAEA,cACEkC,kBACA4B,MAAMzC,SACN,OAAOyC,MAAMzC,MAAMW,iBAAiB,YACpC;AACA8B,kBAAMzC,MAAMW,aAAahC,CAAAA;UAC3B;AAEA,cAAI,CAAC9B,QAAQ;AACX;UACF;AAEAD,mBAASC,QAAQC,MAAMC,IAAI;YACzBK;YACA2G,UAAU;;YAEV5G,uBAAuB;UACzB,CAAA;QACF;MACN;AAKA,WAAI8G,GAAAA,OAAAA,eAAclH,EAAAA,GAAK;AACrB8G,mBAAW/G,OAAOC;MACpB,WACE,CAAC8D,kBACDN,YACCkC,MAAMK,SAAS,OAAO,EAAE,UAAUL,MAAMzC,QACzC;AACA,cAAMkE,YAAY,OAAO9G,WAAW,cAAcA,SAASP,UAAAA,OAAAA,SAAAA,OAAQO;AAInE,cAAM+G,gBACJtH,UAAAA,OAAAA,SAAAA,OAAQuH,oBACRC,GAAAA,iBAAAA,iBAAgBtH,IAAImH,WAAWrH,UAAAA,OAAAA,SAAAA,OAAQyH,SAASzH,UAAAA,OAAAA,SAAAA,OAAQ0H,aAAa;AAEvEV,mBAAW/G,OACTqH,iBACAK,GAAAA,aAAAA,cAAYC,GAAAA,WAAAA,WAAU1H,IAAImH,WAAWrH,UAAAA,OAAAA,SAAAA,OAAQ6H,aAAa,CAAA;MAC9D;AAEA,UAAI7D,gBAAgB;AAClB,YAAIlD,QAAQC,IAAIC,aAAa,eAAe;AAC1C8G,WAAAA,GAAAA,WAAAA,WACE,8RAGE;QAEN;AACA,eAAO9E,uBAAAA,QAAM+E,aAAanC,OAAOoB,UAAAA;MACnC;AAEA,aACE,oBAAA,YAAA,KAAC9C,KAAAA;QAAG,GAAGD;QAAY,GAAG+C;;;IAI1B,CAAA;AAGF,QAAMgB,oBAAoBC,oBAAAA,OAAAA,eAEvB;;MAEDC,SAAS;IACX,CAAA;AAEO,QAAMtI,gBAAgB,MAAA;AAG3B,cAAOuE,GAAAA,OAAAA,YAAW6D,iBAAAA;IACpB;QAEA,WAAejF;;;;;;;;;;AC9rBf,IAAAoF,gBAAA;AAAA;AAAA,WAAO,UAAU;AAAA;AAAA;;;ACAjB,OAAO,eAAe;;;ACAf,IAAM,qBAAqB,CAAC,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAI;;;ADKjI,IAAM,wBAAwB,CAAC,mBAA4E;AAChH,QAAM,UAAwB;AAAA,IAC5B,GAAG;AAAA,IACH,KAAM;AAAA,EACR;AAEA,MAAI,QAAQ;AACZ,SAAO,QAAQ,mBAAmB,SAAS,GAAG;AAC5C,UAAM,WAAW,mBAAmB,QAAQ,CAAC;AAC7C,UAAM,UAAU,mBAAmB,KAAK;AAExC,QAAI,eAAe,OAAO,MAAM,QAAW;AACzC,cAAQ,OAAO,IAAI,eAAe,OAAO;AACzC;AACA;AAAA,IACF;AAEA,QAAI,IAAY,QAAQ;AACxB,WAAO,IAAI,mBAAmB,QAAQ;AACpC,UAAI,eAAe,mBAAmB,CAAC,CAAE,MAAM,QAAW;AACxD;AAAA,MACF;AACA;AAAA,IACF;AACA,QAAI,MAAM,mBAAmB,QAAQ;AACnC,UAAI,mBAAmB,SAAS;AAAA,IAClC;AAEA,UAAM,YAAY,mBAAmB,CAAC;AACtC,UAAM,WAAW,YAAY;AAC7B,aAAS,IAAI,OAAO,IAAI,GAAG,KAAK;AAC9B,YAAMC,WAAU,mBAAmB,CAAC;AACpC,YAAM,gBAAgB,eAAe,QAAQ,KAAK,QAAQ,QAAQ;AAClE,YAAM,YAAY,eAAe,SAAS,KAAK,QAAQ,SAAS;AAChE,cAAQA,QAAO,IAAI,UAAU,IAAI,UAAU,aAAa,GAAG,UAAU,SAAS,IAAIA,WAAU,YAAY,WAAW,GAAG,EAAE,YAAY;AAAA,IACtI;AACA,YAAQ;AAAA,EACV;AAEA,SAAO;AACT;;;AE7CA,OAAOC,WAAU;;;ACCjB,OAAO,UAAU;AACjB,SAAS,aAAa;AA8ChB,SACE,KADF;AA3BC,IAAM,OAAO,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB;AACF,MAAiB;AACpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,UACE,CAAC,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC;AAAA,UACjC,CAAC,iBAAiB,GAAG,cAAc,CAAC;AAAA,UACpC,CAAC,iBAAiB,GAAG;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,WAAW,SAAY;AAAA,MAE/B;AAAA;AAAA,QACD,qBAAC,SAAI,WAAU,qBACb;AAAA,8BAAC,QAAG,WAAW,KAAK,MAAM,aAAa,wBAAwB,GAAI,gBAAM,OAAM;AAAA,UAC9E,CAAC,CAAC,eACD,oBAAC,UAAK,WAAW,KAAK,YAAY,aAAa,uBAAuB,GAAI,sBAAY,OAAM;AAAA,WAChG;AAAA,QACC,WAAW,aAAc,oBAAC,SAAM,MAAM,IAAG,IAAM;AAAA;AAAA;AAAA,EAClD;AAEJ;;;ACvDA,SAAS,QAAAC,aAAY;AAyCf,SACE,OAAAC,MADF,QAAAC,aAAA;AA9BC,IAAM,WAAW,CAAC;AAAA,EACE,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,GAAG;AACL,MAAqB;AAC5C,QAAM,qBAAqB,YAAY;AACvC,MAAI,kBAAkB;AAEtB,MAAI,YAAY,SAAS;AACvB,sBAAkB;AAAA,EACpB,WAAW,YAAY,UAAU;AAC/B,sBAAkB;AAAA,EACpB;AAEA,MAAI,OAAO,GAAG;AACZ,YAAQ,MAAM,4BAA4B;AAC1C,WAAO;AAAA,EACT;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAc;AAAA,MACd,aAAa;AAAA,MACZ,GAAG;AAAA,MAEJ,0BAAAC,MAAC,OAAE,WAAWF,MAAK,eAAe,GAChC;AAAA,wBAAAC;AAAA,UAAC;AAAA;AAAA,YAAK,WAAWD,MAAK,EAAE,4BAA4B,mBAAmB,CAAC;AAAA,YAClE,GAAE;AAAA,YAAkD,QAAQ;AAAA,YAAO,iBAAgB;AAAA;AAAA,QAAM;AAAA,QAC/F,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAAK,WAAWD,MAAK,EAAE,+BAA+B,mBAAmB,CAAC;AAAA,YACrE,GAAE;AAAA,YAAgE,QAAQ;AAAA,YAAO,iBAAgB;AAAA;AAAA,QAAM;AAAA,QAC7G,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAAK,WAAWD,MAAK,EAAE,8BAA8B,mBAAmB,CAAC;AAAA,YACpE,GAAE;AAAA,YAAmE,QAAQ;AAAA,YAC7E,iBAAgB;AAAA;AAAA,QAAM;AAAA,QAC5B,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAAK,WAAWD,MAAK,EAAE,iCAAiC,mBAAmB,CAAC;AAAA,YACvE,GAAE;AAAA,YAAmE,QAAQ;AAAA,YAC7E,iBAAgB;AAAA;AAAA,QAAM;AAAA,SAC9B;AAAA;AAAA,EACF;AAEJ;;;AFhCe,gBAAAG,YAAA;AATR,IAAM,gBAAgB,CAAC;AAAA,EACE,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AACd,MAA0B;AACtD,QAAM,WAAmB,SAAS,UAAU,KAAK;AAEjD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,QAAS,gBAAAA,KAAC,YAAS,MAAM,UAAS;AAAA,MAClC,OAAO,EAAE,OAAO,OAAO,WAAW,SAAS,UAAU,iCAAiC,qBAAqB;AAAA,MAC3G,WAAWC;AAAA,QACT;AAAA,UACE,wBAAwB,SAAS;AAAA,UACjC,wBAAwB,SAAS;AAAA,QACnC;AAAA,QAAG;AAAA,MACL;AAAA;AAAA,EACF;AAEJ;;;AGlCA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AACpC,SAAS,WAAW,SAAS,eAAAC,oBAAmB;;;ACAhD,SAAS,eAAe,YAAY,aAAAC,YAAW,YAAAC,iBAAgB;;;ACA/D,SAAS,aAAa,WAAW,gBAAgB;;;ACDjD,IAAM,iBAAN,MAAqB;AAAA;AAAA,EAGnB,YAAoB,SAAkB;AAAlB;AAAA,EACpB;AAAA,EAEO,IAAO,KAAuB;AACnC,UAAM,QAAQ,KAAK,QAAQ,QAAQ,GAAG;AACtC,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AAAA,EAEO,IAAO,KAAa,OAAU;AACnC,SAAK,QAAQ,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACjD;AAAA,EAEO,OAAO,KAAa;AACzB,SAAK,QAAQ,WAAW,GAAG;AAAA,EAC7B;AAAA,EAEO,YAAY;AACjB,SAAK,QAAQ,MAAM;AAAA,EACrB;AACF;AAEO,IAAM,sBAAN,cAAkC,eAAe;AAAA,EACtD,cAAc;AACZ,UAAM,OAAO,YAAY;AAAA,EAC3B;AACF;AAEO,IAAM,wBAAN,cAAoC,eAAe;AAAA,EACxD,cAAc;AACZ,UAAM,OAAO,cAAc;AAAA,EAC7B;AACF;;;ADhCO,IAAM,kBAAkB,CAAI,KAAa,cAAmC;AACjF,QAAM,MAAM,YAAY,MAAS;AAC/B,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AACA,UAAM,iBAAiB,IAAI,oBAAoB;AAC/C,UAAM,QAAQ,eAAe,IAAO,GAAG;AACvC,WAAO,SAAS;AAAA,EAClB,GAAG,CAAC,WAAW,GAAG,CAAC;AAEnB,QAAM,CAAC,aAAa,cAAc,IAAI,SAAY,GAAG;AAErD,QAAM,WAAwB,YAAY,WAAS;AACjD,UAAM,WAAW,iBAAiB,WAAW,MAAM,WAAW,IAAI;AAClE,UAAM,iBAAiB,IAAI,oBAAoB;AAC/C,mBAAe,IAAI,KAAK,KAAK;AAE7B,mBAAe,QAAQ;AAAA,EACzB,GAAG,CAAC,aAAa,gBAAgB,GAAG,CAAC;AAErC,YAAU,MAAM;AACd,mBAAe,IAAI,CAAC;AAAA,EACtB,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,aAAa,QAAQ;AAC/B;;;AE3BA,IAAM,YAAY,CAAC,MAAM,IAAI;AAU7B,IAAM,sBAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AACN;AAKA,IAAM,mBAA6B;AAK5B,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;;;AHoCI,gBAAAC,YAAA;AAvDG,IAAM,kBAAkB,cAAoC;AAAA,EACjE,UAAU,aAAa;AAAA,EACvB,aAAa,CAAC,MAAM;AACtB,CAAC;AAEM,IAAM,cAAc,MAAM,WAAW,eAAe;AAEpD,IAAM,YAAY,CAAC,sBAAiC;AACzD,QAAM,EAAE,SAAS,IAAI,YAAY;AACjC,QAAM,UAAoC;AAAA,IACxC,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACA,SAAO,QAAQ,qBAAqB,QAAQ;AAC9C;AAMO,IAAM,mBAAmB,CAAC,EAAE,iBAAiB,SAAS,MAAgD;AAC3G,QAAM,CAAC,UAAU,WAAW,IAAIC,UAAmB,mBAAmB,aAAa,gBAAgB;AACnG,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,gBAA0B,YAAY,mBAAmB,aAAa,gBAAgB;AAElI,EAAAC,WAAU,MAAM;AACd,QAAI,aAAa,mBAAmB,iBAAiB;AACnD,cAAQ,KAAK,6FAA8F;AAC3G,kBAAY,eAAe;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,eAAe,CAAC;AAEpB,EAAAA,WAAU,MAAM;AACd,aAAS,gBAAgB,aAAa,QAAQ,QAAQ;AACtD,sBAAkB,QAAQ;AAAA,EAC5B,GAAG,CAAC,QAAQ,CAAC;AAEb,EAAAA,WAAU,MAAM;AACd,QAAI,mBAAmB,MAAM;AAC3B,kBAAY,cAAc;AAC1B;AAAA,IACF;AAEA,UAAM,wBAAwB,OAAO,OAAO,aAAa,SAAS;AAElE,UAAM,0BAA0B,OAAO,UAAU,UAC9C,IAAI,CAAAC,cAAY,sBAAsB,KAAK,CAAC,SAASA,cAAa,QAAQA,UAAS,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,EAC1G,OAAO,WAAS,UAAU,MAAS;AAEtC,QAAI,wBAAwB,WAAW,EAAG;AAE1C,UAAM,aAAa,wBAAwB,CAAC;AAC5C,gBAAY,UAAU;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAH,KAAC,gBAAgB,UAAhB,EAAyB,OAAO;AAAA,IAC/B;AAAA,IACA;AAAA,EACF,GACG,UACH;AAEJ;;;AIfO,IAAM,yBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AACT;AAGO,IAAM,iBAAiB,CAC5B,cACA,uBAAoD,CAAC,MAC1B;AAC3B,QAAM,EAAE,UAAU,cAAc,aAAa,UAAU,IAAI;AAC3D,QAAM,EAAE,UAAU,iBAAiB,IAAI,YAAY;AACnD,QAAM,eAAe,gBAAgB;AACrC,QAAM,mBAAmB,CAAC,GAAG,YAAY;AACzC,MAAI,WAAW;AACb,qBAAiB,KAAK,SAAS;AAAA,EACjC;AAEA,SAAO,CAAC,KAAoB,YAAiD;AAC3E,UAAM,EAAE,OAAO,aAAa,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,cAAc,CAAC,EAAE,GAAG,GAAG,QAAQ;AAEhF,QAAI;AACF,eAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,cAAM,cAAc,aAAa,CAAC;AAClC,cAAM,uBAAuB,YAAY,YAAY;AACrD,YAAI,CAAC,sBAAsB;AACzB;AAAA,QACF;AACA,cAAM,QAAQ,qBAAqB,GAAG;AACtC,YAAG,CAAC,OAAO;AACT;AAAA,QACF;AAEA,YAAI;AACJ,YAAI,OAAO,UAAU,UAAU;AAC7B,cAAI,UAAU,uBAAuB,QAAQ,OAAO,MAAM;AACxD,4BAAgB,MAAM;AAAA,UACxB,WAAW,UAAU,uBAAuB,OAAO,OAAO,KAAK;AAC7D,4BAAgB,MAAM;AAAA,UACxB,WAAW,UAAU,uBAAuB,OAAO,OAAO,KAAK;AAC7D,4BAAgB,MAAM;AAAA,UACxB,WAAW,uBAAuB,OAAO,SAAS,QAAQ,uBAAuB,QAAQ,OAAO,KAAK;AACnG,4BAAgB,MAAM;AAAA,UACxB,WAAW,QAAQ,uBAAuB,QAAQ,OAAO,MAAM;AAC7D,4BAAgB,MAAM;AAAA,UACxB,OAAO;AACL,4BAAgB,MAAM;AAAA,UACxB;AAAA,QACF,OAAO;AACL,0BAAgB;AAAA,QAClB;AACA,wBAAgB,cAAc,QAAQ,gBAAgB,CAAC,GAAG,gBAAgB;AACxE,iBAAO,aAAa,WAAW,KAAK,SAAS,WAAW;AAAA,QAC1D,CAAC;AACD,eAAO;AAAA,MACT;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,MAAM,CAAC;AAAA,IACjB;AACA,WAAO,KAAK,YAAY,IAAI,GAAG;AAAA,EACjC;AACF;;;AC3HO,IAAM,OAAO,MAAM;;;ACAnB,IAAM,kBAAkB,CAAI,OAAY,cAA6B;AAC1E,MAAI,aAAa,GAAG;AAClB,YAAQ,KAAK,oDAAoD,SAAS,EAAE;AAC5E,WAAO,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,EACpB;AAEA,QAAM,SAAS,CAAC;AAChB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,WAAW;AAChD,WAAO,KAAK,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,WAAW,MAAM,MAAM,CAAC,CAAC;AAAA,EACnE;AACA,SAAO;AACT;AAUA,IAAM,sBAAoC;AAAA,EACxC,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,cAAc;AAChB;AAMO,IAAM,QAAQ,CAAC,YAAuC,YAA8C;AACzG,QAAM,EAAE,iBAAiB,UAAU,gBAAgB,aAAa,IAAI,EAAE,GAAG,qBAAqB,GAAG,QAAQ;AACzG,MAAI,QAAQ;AACZ,MAAI;AACJ,MAAI,OAAO,eAAe,UAAU;AAClC,UAAM;AAAA,EACR,OAAO;AACL,YAAQ,WAAW,CAAC;AACpB,UAAM,WAAW,CAAC;AAAA,EACpB;AACA,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB;AAClB,aAAS;AAAA,EACX;AAEA,MAAI,MAAM,IAAI,OAAO;AACnB,QAAI,CAAC,iBAAiB;AACpB,cAAQ,KAAK,eAAe,GAAG,cAAc,KAAK,qEAAqE;AAAA,IACzH;AACA,WAAO,CAAC;AAAA,EACV;AACA,SAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,QAAQ,WAAW,KAAK;AACnF;AAMO,IAAM,eAAe,CAAI,MAAW,gBAAiD;AAC1F,SAAO,KAAK,OAAO,CAAC,OAAO,UAAU;AACnC,WAAO,YAAY,OAAO,KAAK,IAAI,QAAQ;AAAA,EAC7C,CAAC;AACH;AAMO,IAAM,gBAAgB,CAAI,MAAW,MAAS,oBAA4B,MAAM;AACrF,QAAM,QAAQ,KAAK,QAAQ,IAAI;AAC/B,QAAM,aAAa,oBAAoB,IAAI;AAC3C,MAAI,KAAK,SAAS,YAAY;AAC5B,YAAQ,KAAK,kBAAkB;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,IAAI;AAChB,YAAQ,MAAM,wBAAwB;AACtC,WAAO,KAAK,OAAO,GAAG,UAAU;AAAA,EAClC;AAEA,MAAI,QAAQ,QAAQ;AACpB,MAAI,QAAQ,GAAG;AACb,aAAS,KAAK;AAAA,EAChB;AACA,QAAM,OAAO,QAAQ,oBAAoB,KAAK,KAAK;AAEnD,QAAM,SAAc,CAAC;AACrB,MAAI,aAAa,KAAK,WAAW;AACjC,WAAS,IAAI,OAAO,MAAM,OAAO,YAAY,KAAK,IAAI,KAAK,KAAK,QAAQ;AACtE,WAAO,KAAK,KAAK,CAAC,CAAE;AACpB,QAAI,QAAQ,KAAK,YAAY;AAC3B,mBAAa;AAAA,IACf;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,6BAA6B,CAAI,MAAW,aAAqB,GAAG,SAAiB,GAAG,WAAoB,SAAS;AAChI,MAAI,SAAS,GAAG;AACd,YAAQ,KAAK,iDAAiD,MAAM,EAAE;AAAA,EACxE,WAAW,WAAW,GAAG;AACvB,aAAS,KAAK;AAAA,EAChB;AAEA,QAAM,aAA4B,CAAC;AAEnC,MAAI,UAAU;AACZ,aAAS,IAAI,YAAY,WAAW,SAAS,QAAQ,KAAK,IAAI,KAAK,KAAK,QAAQ;AAC9E,iBAAW,KAAK,CAAC,GAAG,KAAK,CAAC,CAAE,CAAC;AAAA,IAC/B;AAAA,EACF,OAAO;AACL,aAAS,IAAI,YAAY,WAAW,SAAS,QAAQ,IAAI,MAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG;AAC9F,iBAAW,KAAK,CAAC,GAAG,KAAK,CAAC,CAAE,CAAC;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,oBAAoB,CAAI,MAAW,aAAqB,GAAG,SAAiB,GAAG,WAAoB,SAAS;AACvH,SAAO,2BAA2B,MAAM,YAAY,QAAQ,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AAC/F;AAEO,IAAM,YAAY;AAAA,EACvB,QAAQ,CAAI,SAAmB;AAC7B,UAAM,OAAO,oBAAI,IAAO;AACxB,WAAO,KAAK,OAAO,CAAC,SAAS;AAC3B,UAAI,KAAK,IAAI,IAAI,GAAG;AAClB,eAAO;AAAA,MACT;AACA,WAAK,IAAI,IAAI;AACb,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,CAAI,MAAW,eAAyB;AAClD,UAAM,SAAS,IAAI,IAAO,UAAU;AACpC,WAAO,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC;AAAA,EAChD;AACF;;;AC9IO,IAAM,aAAa,CAAC,WAAW,YAAY,SAAS,SAAS,OAAO,QAAQ,QAAQ,UAAU,aAAa,WAAW,YAAY,UAAU;AAG5I,IAAM,cAAc,CAAC,UAAU,UAAU,WAAW,aAAa,YAAY,UAAU,UAAU;AAGjG,IAAM,aAAa,CAAC,SAAe;AACxC,QAAM,OAAO,KAAK,YAAY,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAC1D,QAAM,SAAS,KAAK,SAAS,IAAI,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG;AAC9D,QAAM,MAAO,KAAK,QAAQ,EAAG,SAAS,EAAE,SAAS,GAAG,GAAG;AACvD,SAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG;AAChC;AAEO,IAAM,iBAAiB,CAAC,SAAe;AAC5C,QAAM,aAAa,WAAW,IAAI;AAClC,QAAM,QAAQ,KAAK,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,UAAU,KAAK,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAC5D,SAAO,GAAG,UAAU,IAAI,KAAK,IAAI,OAAO;AAC1C;AAEO,IAAM,iBAAiB,CAAC,MAAc,UAA0B;AACrE,QAAM,iBAAiB,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AAClD,SAAO,eAAe,QAAQ;AAChC;AAYO,IAAM,iBAAiB,CAAC,MAAY,UAAoB,aAA6B;AAC1F,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,EACjB,IAAI;AAGJ,MAAI,QAAQ,GAAG;AACb,YAAQ,MAAM,sDAAsD,KAAK,EAAE;AAC3E,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACA,MAAI,SAAS,KAAK,SAAS,IAAI;AAC7B,YAAQ,MAAM,wDAAwD,MAAM,EAAE;AAC9E,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACA,MAAI,OAAO,GAAG;AACZ,YAAQ,MAAM,qDAAqD,IAAI,EAAE;AACzE,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACA,MAAI,QAAQ,KAAK,QAAQ,IAAI;AAC3B,YAAQ,MAAM,wDAAwD,KAAK,EAAE;AAC7E,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACA,MAAI,UAAU,KAAK,UAAU,IAAI;AAC/B,YAAQ,MAAM,4DAA4D,OAAO,EAAE;AACnF,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACA,MAAI,UAAU,KAAK,UAAU,IAAI;AAC/B,YAAQ,MAAM,4DAA4D,OAAO,EAAE;AACnF,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACA,MAAI,eAAe,GAAG;AACpB,YAAQ,MAAM,wDAAwD,YAAY,EAAE;AACpF,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AAEA,QAAM,aAAa,WAAW,IAAI;AAElC,QAAM,UAAU,IAAI,KAAK,IAAI;AAE7B,UAAQ,YAAY,QAAQ,YAAY,IAAI,aAAa,KAAK;AAE9D,UAAQ,SAAS,QAAQ,SAAS,IAAI,aAAa,MAAM;AAEzD,UAAQ,QAAQ,QAAQ,QAAQ,IAAI,aAAa,IAAI;AAErD,UAAQ,SAAS,QAAQ,SAAS,IAAI,aAAa,KAAK;AAExD,UAAQ,WAAW,QAAQ,WAAW,IAAI,aAAa,OAAO;AAE9D,UAAQ,WAAW,QAAQ,WAAW,IAAI,aAAa,OAAO;AAE9D,UAAQ,gBAAgB,QAAQ,gBAAgB,IAAI,aAAa,YAAY;AAE7E,SAAO;AACT;AAEO,IAAM,cAAc,CAAC,MAAY,aAA6B;AACnE,SAAO,eAAe,MAAM,UAAU,IAAI;AAC5C;AAEO,IAAM,mBAAmB,CAAC,MAAY,aAA6B;AACxE,SAAO,eAAe,MAAM,UAAU,KAAK;AAC7C;AAEO,IAAM,qBAAqB,CAAC,WAAiB,YAA4B;AAC9E,QAAM,yBAAyB,QAAQ,QAAQ,IAAI,UAAU,QAAQ;AAErE,QAAM,uBAAuB;AAC7B,QAAM,uBAAuB,KAAK;AAClC,QAAM,qBAAqB,KAAK;AAChC,QAAM,oBAAoB,KAAK;AAC/B,QAAM,sBAAsB,KAAK;AAEjC,QAAM,QAAQ,KAAK,MAAM,0BAA0B,SAAS,kBAAkB;AAC9E,QAAM,SAAS,KAAK,MAAM,yBAAyB,mBAAmB;AACtE,QAAM,OAAO,KAAK,MAAM,yBAAyB,iBAAiB;AAClE,QAAM,QAAQ,KAAK,MAAO,yBAAyB,oBAAqB,kBAAkB;AAC1F,QAAM,UAAU,KAAK,MAAO,yBAAyB,qBAAsB,oBAAoB;AAC/F,QAAM,eAAe,yBAAyB;AAE9C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAMO,IAAM,eAAe,CAAC,OAAa,WAAkB,YAA4B;AACtF,MAAI,aAAa,SAAS;AACxB,YAAQ,OAAO,aAAa,OAAO;AACnC,WAAO,aAAa,SAAS,SAAS;AAAA,EACxC,WAAW,WAAW;AACpB,WAAO,aAAa;AAAA,EACtB,WAAW,SAAS;AAClB,WAAO,WAAW;AAAA,EACpB,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAGO,IAAM,YAAY,CAAC,OAAa,UAAgB;AACrD,SAAO,MAAM,YAAY,MAAM,MAAM,YAAY,KAC5C,MAAM,SAAS,MAAM,MAAM,SAAS,KACpC,MAAM,QAAQ,MAAM,MAAM,QAAQ;AACzC;AAEO,IAAM,2BAA2B,CAAC,MAAY,WAAoB,QAAgB,MAAM;AAC7F,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,OAAO,KAAK,YAAY;AAE9B,QAAM,UAAkB,CAAC;AACzB,MAAI,cAAc,IAAI,KAAK,MAAM,OAAO,CAAC;AACzC,QAAM,iBAAiB,YAAY,QAAQ,SAAS;AAGpD,SAAO,YAAY,OAAO,MAAM,gBAAgB;AAC9C,kBAAc,iBAAiB,aAAa,EAAE,MAAM,EAAE,CAAC;AAAA,EACzD;AAEA,SAAO,QAAQ,SAAS,IAAI,OAAO;AACjC,UAAMI,QAAO,IAAI,KAAK,WAAW;AACjC,IAAAA,MAAK,SAASA,MAAK,SAAS,GAAGA,MAAK,WAAW,CAAC;AAChD,YAAQ,KAAKA,KAAI;AACjB,kBAAc,YAAY,aAAa,EAAE,MAAM,EAAE,CAAC;AAAA,EACpD;AAGA,SAAO,gBAAgB,SAAS,CAAC;AACnC;;;AR5KA,OAAOC,WAAU;;;ASNjB,SAAS,kBAAkB;AAC3B,OAAOC,WAAU;AAkIb,SAeI,OAAAC,MAfJ,QAAAC,aAAA;AA/HG,IAAM,kBAAkB;AAAA,EAC7B,OAAO,CAAC,WAAW,aAAa,YAAY,YAAY,WAAW,YAAY,SAAS;AAAA,EACxF,MAAM,CAAC,WAAW,YAAY,SAAS;AAAA,EACvC,SAAS,CAAC,SAAS;AACrB;AAEO,IAAM,iBAAiB;AAAA,EAC5B,MAAM,CAAC,GAAG,gBAAgB,OAAO,aAAa;AAChD;AAsCA,IAAM,iBAA8C;AAAA,EAClD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,qBAAqD;AAAA,EACzD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AACF;AAiCA,IAAM,cAAc,WAAgD,SAASC,aAAY;AAAA,EAClE;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG,KAAK;AAC3B,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,EACX,EAAE,KAAK;AAEP,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,EACX,EAAE,KAAK;AAEP,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAWF;AAAA,QACT;AAAA,UACE,gEAAgE;AAAA,UAChE,CAACA,MAAK,cAAc,qBAAqB,CAAC,GAAG,CAAC;AAAA,QAChD;AAAA,QACA,WAAW,eAAe,IAAI;AAAA,QAC9B;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,qBACC,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,MAAK;AAAA,cACd,CAAC,gBAAgB,GAAG,CAAC;AAAA,cACrB,CAAC,oBAAoB,GAAG;AAAA,YAC1B,CAAC;AAAA,YAEF;AAAA;AAAA,QACH;AAAA,QAEC;AAAA,QACA,WACC,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,MAAK;AAAA,cACd,CAAC,gBAAgB,GAAG,CAAC;AAAA,cACrB,CAAC,oBAAoB,GAAG;AAAA,YAC1B,CAAC;AAAA,YAEF;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEF;AAEJ,CAAC;AAKD,IAAM,gBAAgB,CAAC;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA0B;AAC/C,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,EACX,EAAE,KAAK;AAEP,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,EACX,EAAE,KAAK;AACP,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAWF;AAAA,QACT;AAAA,UACE,iEAAiE;AAAA,UACjE,CAACA,MAAK,cAAc,qBAAqB,CAAC,GAAG,CAAC;AAAA,QAChD;AAAA,QACA,WAAW,eAAe,IAAI;AAAA,QAC9B;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,qBACC,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,MAAK;AAAA,cACd,CAAC,gBAAgB,GAAG,CAAC;AAAA,cACrB,CAAC,oBAAoB,GAAG;AAAA,YAC1B,CAAC;AAAA,YAEF;AAAA;AAAA,QACH;AAAA,QAEC;AAAA,QACA,WACC,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,MAAK;AAAA,cACd,CAAC,gBAAgB,GAAG,CAAC;AAAA,cACrB,CAAC,oBAAoB,GAAG;AAAA,YAC1B,CAAC;AAAA,YAEF;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEF;AAEJ;AAKA,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AACzC,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,EACX,EAAE,KAAK;AAEP,QAAM,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,EACX,EAAE,KAAK;AACP,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAWF;AAAA,QACT;AAAA,UACE,yCAAyC;AAAA,UACzC,CAACA,MAAK,cAAc,uCAAuC,CAAC,GAAG,CAAC;AAAA,QAClE;AAAA,QACA,WAAW,eAAe,IAAI;AAAA,QAC9B;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,qBACC,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,MAAK;AAAA,cACd,CAAC,gBAAgB,GAAG,CAAC;AAAA,cACrB,CAAC,oBAAoB,GAAG;AAAA,YAC1B,CAAC;AAAA,YAEF;AAAA;AAAA,QACH;AAAA,QAEC;AAAA,QACA,WACC,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,MAAK;AAAA,cACd,CAAC,gBAAgB,GAAG,CAAC;AAAA,cACrB,CAAC,oBAAoB,GAAG;AAAA,YAC1B,CAAC;AAAA,YAEF;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEF;AAEJ;AAMA,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,MAAuB;AACzC,QAAM,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,EACf,EAAE,KAAK;AAEP,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAWD;AAAA,QACT;AAAA,UACE,gEAAgE,YAAY,UAAU;AAAA,UACtF,oDAAoD,YAAY,UAAU;AAAA,UAC1E,yCAAyC,CAAC,YAAY,UAAU;AAAA,UAChE,CAACA,MAAK,cAAc,qBAAqB,CAAC,GAAG,CAAC;AAAA,QAChD;AAAA,QACA,WAAW,mBAAmB,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;AChVA,SAAS,aAAAI,YAAW,QAAQ,YAAAC,iBAAgB;AAC5C,SAAS,kBAAkB;AAG3B,OAAOC,WAAU;;;ACHjB,SAAS,cAAAC,aAAY,eAAAC,cAAa,aAAAC,YAAW,YAAAC,iBAAgB;AAC7D,SAAS,mBAAmB;AAC5B,OAAOC,WAAU;AA6Bb,gBAAAC,MAoCE,QAAAC,aApCF;AAFG,IAAM,gBAAgB,CAAC,EAAE,YAAY,UAAU,MAA0B;AAC9E,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAWE;AAAA,QACT;AAAA,QACA,EAAE,cAAc,WAAW;AAAA,QAC3B;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAMO,IAAM,aAAaC,YAA4C,SAASC,YAAW;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG,KAAK;AAChG,QAAM,cAAcC,aAAY,CAAC,aAAsB,gBAAAL,KAAC,iBAAc,YAAY,UAAS,GAAI,CAAC,CAAC;AACjG,WAAS;AAET,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAWC,MAAK,oEAAoE,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,SAAS,GAAG,SAAS;AAAA,MACpJ,SAAS,MAAM,CAAC,qBAAqB,CAAC,YAAY,SAAS,CAAC,UAAU;AAAA,MAEtE;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,cACA;AAAA,gBACE,6BAA6B,CAAC;AAAA,gBAC9B,uBAAuB,cAAc,CAAC;AAAA,gBACtC,kBAAkB,qBAAqB,CAAC;AAAA,cAC1C;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS,MAAM,qBAAqB,CAAC,YAAY,SAAS,CAAC,UAAU;AAAA,YAEpE;AAAA;AAAA,cACA,KAAK,UAAU;AAAA;AAAA;AAAA,QAClB;AAAA,QACA,gBAAAF;AAAA,UAAC;AAAA;AAAA,YACC,WAAWE;AAAA,cACT;AAAA,cACA;AAAA,gBACE,CAACA,MAAK,6CAA6C,wBAAwB,CAAC,GAAG;AAAA,gBAC/E,qCAAqC,CAAC;AAAA,cACxC;AAAA,cACA;AAAA,YACF;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ,CAAC;AAEM,IAAM,yBAAyBC,YAA4C,SAASG,wBAAuB;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,GAAG;AACL,GACA,KAAK;AACrH,QAAM,CAAC,gBAAgB,iBAAiB,IAAIC,UAAS,UAAU;AAE/D,EAAAC,WAAU,MAAM;AACd,sBAAkB,UAAU;AAAA,EAC9B,GAAG,CAAC,UAAU,CAAC;AAEf,SACE,gBAAAR;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ,UAAU,WAAS;AACjB,iBAAS,KAAK;AACd,0BAAkB,KAAK;AAAA,MACzB;AAAA;AAAA,EACF;AAEJ,CAAC;;;AD3DsB,gBAAAS,YAAA;AA1ChB,IAAM,kBAAkB,CAAC;AAAA,EACE,qBAAqB,oBAAI,KAAK;AAAA,EAC9B,QAAQ,iBAAiB,oBAAI,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAAA,EAClD,MAAM,YAAY,oBAAI,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAAA,EAC3C,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB;AAClB,MAA4B;AAC1D,QAAM,SAAS,UAAU;AACzB,QAAM,MAAM,OAAuB,IAAI;AAEvC,EAAAC,WAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,UAAI,IAAI,SAAS;AACf,YAAI,QAAQ,eAAe;AAAA,UACzB,UAAU;AAAA,UACV,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAEA,iBAAa;AAAA,EACf,GAAG,CAAC,GAAG,CAAC;AAER,MAAI,MAAM,OAAO;AACf,YAAQ,MAAM,eAAe,KAAK,yBAAyB,GAAG,GAAG;AACjE,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,cAAc,MAAM,CAAC;AAErF,SACE,gBAAAD,KAAC,SAAI,WAAWE,MAAK,0BAA0B,SAAS,GACtD,0BAAAF,KAAC,cAAW,YAAU,MAAC,eAAe,WAAW,OAAO,EAAE,QAAQ,OAAO,GACvE,0BAAAA,KAAC,SAAI,WAAU,mBACZ,gBAAM,IAAI,UAAQ;AACjB,UAAM,eAAe,mBAAmB,YAAY,MAAM;AAC1D,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM,mBAAmB,YAAY,MAAK,oBAAI,KAAK,GAAE,YAAY,OAAO,OAAO,MAAM;AAAA,QACrF,OAAO,gBAAAA,KAAC,UAAK,WAAWE,MAAK,EAAE,0BAA0B,aAAa,CAAC,GAAI,gBAAK;AAAA,QAChF,YAAY,iBAAiB;AAAA,QAC7B,kBAAiB;AAAA,QAEhB,0BAAgB,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,UACnD,gBAAAF,KAAC,SAAgB,WAAU,cACxB,oBAAU,IAAI,WAAS;AACtB,gBAAM,aAAa,WAAW,QAAQ,KAAK;AAC3C,gBAAM,UAAU,IAAI,KAAK,MAAM,UAAU;AAEzC,gBAAM,gBAAgB,gBAAgB,eAAe,mBAAmB,SAAS;AACjF,gBAAM,eAAe,IAAI,KAAK,MAAM,YAAY,CAAC;AACjD,gBAAM,cAAc,IAAI,KAAK,MAAM,YAAY,CAAC;AAChD,gBAAM,eAAe,UAAU,UAAa,SAAS,YAAY,iBAAiB,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC1H,gBAAM,cAAc,QAAQ,UAAa,gBAAgB;AACzD,gBAAM,UAAU,gBAAgB;AAChC,iBACE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEC,UAAU,CAAC;AAAA,cACX,OAAO,iBAAiB,UAAU,YAAY;AAAA,cAC9C,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS,MAAM;AACb,yBAAS,OAAO;AAAA,cAClB;AAAA,cAEC,cAAI,KAAK,eAAe,QAAQ,EAAE,OAAO,QAAQ,CAAC,EAAE,OAAO,OAAO;AAAA;AAAA,YAT9D;AAAA,UAUP;AAAA,QAEJ,CAAC,KAzBO,KA0BV,CACD;AAAA;AAAA,MAlCI;AAAA,IAmCP;AAAA,EAEJ,CAAC,GACH,GACF,GACF;AAEJ;AAEO,IAAM,8BAA8B,CAAC;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,GAAG;AACL,MAA4B;AACtE,QAAM,CAAC,WAAW,YAAY,IAAIG,UAAe,sBAAsB,oBAAI,KAAK,CAAC;AAEjF,EAAAF,WAAU,MAAM,aAAa,kBAAkB,GAAG,CAAC,kBAAkB,CAAC;AAEtE,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,oBAAoB;AAAA,MACpB,UAAU,UAAQ;AAChB,qBAAa,IAAI;AACjB,iBAAS,IAAI;AAAA,MACf;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AEzHA,OAAOI,WAAU;AAEjB,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AA+BhC,SAGM,OAAAC,MAHN,QAAAC,aAAA;AAfG,IAAM,YAAY,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AACd,MAAsB;AAC9C,QAAM,SAAS,UAAU;AACzB,QAAM,QAAQ,eAAe,SAAS;AACtC,QAAM,QAAQ,yBAAyB,gBAAgB,SAAS;AAEhE,SACE,gBAAAA,MAAC,SAAI,WAAWC,MAAK,wCAAwC,SAAS,GACpE;AAAA,oBAAAF,KAAC,SAAI,WAAU,0BACZ,gBAAM,CAAC,EAAG,IAAI,CAAC,SAAS,UACvB,gBAAAA,KAAC,SAAgB,WAAU,wBACxB,cAAI,KAAK,eAAe,QAAQ,EAAE,SAAS,OAAO,CAAC,EAAE,OAAO,OAAO,EAAE,UAAU,GAAG,CAAC,KAD5E,KAEV,CACD,GACH;AAAA,IACC,MAAM,IAAI,CAAC,MAAM,UAChB,gBAAAA,KAAC,SAAgB,WAAU,0BACxB,eAAK,IAAI,CAAC,SAAS;AAClB,YAAM,aAAa,CAAC,CAAC,YAAY,UAAU,UAAU,IAAI;AACzD,YAAM,UAAU,UAAU,oBAAI,KAAK,GAAG,IAAI;AAC1C,YAAM,cAAc,KAAK,SAAS,MAAM;AACxC,YAAM,aAAa,aAAa,MAAM,OAAO,GAAG;AAChD,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,CAAC;AAAA,UAEX,WAAWE;AAAA,YACT;AAAA,YACA;AAAA,cACE,oBAAoB,CAAC,eAAe,CAAC,cAAc;AAAA,cACnD,qEAAqE,CAAC,cAAc,eAAe;AAAA,cACnG,qEAAqE,cAAc;AAAA,cACnF,qGAAqG;AAAA,cACrG,gEAAgE,CAAC;AAAA,cACjE,oBAAoB,WAAW;AAAA,cAC/B,sBAAsB,CAAC,WAAW,CAAC;AAAA,YACrC;AAAA,UACF;AAAA,UACA,SAAS,MAAM,SAAS,IAAI;AAAA,UAE3B,eAAK,QAAQ;AAAA;AAAA,QAfT,KAAK,QAAQ;AAAA,MAgBpB;AAAA,IAEJ,CAAC,KA3BO,KA4BV,CACD;AAAA,KACH;AAEJ;AAEO,IAAM,wBAAwB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,GAAG;AACL,MAAsB;AAC1D,QAAM,CAAC,MAAM,OAAO,IAAIH,UAAS,QAAQ;AACzC,QAAM,CAAC,oBAAoB,sBAAsB,IAAIA,UAAS,cAAc;AAE5E,EAAAD,WAAU,MAAM;AACd,YAAQ,QAAQ;AAChB,2BAAuB,QAAQ;AAAA,EACjC,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,gBAAAE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,UAAU,aAAW;AACnB,gBAAQ,OAAO;AACf,+BAAuB,OAAO;AAC9B,iBAAS,OAAO;AAAA,MAClB;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ACxFO,IAAM,mBAAsD;AAAA,EACjE,IAAI;AAAA,IACF,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AACF;AAqBO,IAAM,kBAAoD;AAAA,EAC/D,IAAI;AAAA,IACF,GAAG,iBAAiB;AAAA,IACpB,SAAS,EAAE,KAAK,WAAW,OAAO,YAAY;AAAA,IAC9C,QAAQ,EAAE,KAAK,UAAU,OAAO,UAAU;AAAA,IAC1C,MAAM,EAAE,KAAK,QAAQ,OAAO,QAAQ;AAAA,IACpC,OAAO,EAAE,KAAK,SAAS,OAAO,SAAS;AAAA,IACvC,KAAK,EAAE,KAAK,OAAO,OAAO,OAAO;AAAA,IACjC,MAAM,EAAE,KAAK,QAAQ,OAAO,QAAQ;AAAA,IACpC,QAAQ,EAAE,KAAK,UAAU,OAAO,UAAU;AAAA,IAC1C,QAAQ,EAAE,KAAK,UAAU,OAAO,UAAU;AAAA,IAC1C,aAAa,EAAE,KAAK,eAAe,OAAO,eAAe;AAAA,IACzD,aAAa,EAAE,KAAK,eAAe,OAAO,eAAe;AAAA,IACzD,YAAY,EAAE,KAAK,cAAc,OAAO,cAAc;AAAA,IACtD,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,KAAK;AAAA,EACP;AAAA,EACA,IAAI;AAAA,IACF,GAAG,iBAAiB;AAAA,IACpB,SAAS,EAAE,KAAK,eAAe,OAAO,eAAe;AAAA,IACrD,QAAQ,EAAE,KAAK,aAAa,OAAO,aAAa;AAAA,IAChD,MAAM,EAAE,KAAK,QAAQ,OAAO,QAAQ;AAAA,IACpC,OAAO,EAAE,KAAK,SAAS,OAAO,SAAS;AAAA,IACvC,KAAK,EAAE,KAAK,OAAO,OAAO,OAAO;AAAA,IACjC,MAAM,EAAE,KAAK,UAAU,OAAO,UAAU;AAAA,IACxC,QAAQ,EAAE,KAAK,UAAU,OAAO,UAAU;AAAA,IAC1C,QAAQ,EAAE,KAAK,WAAW,OAAO,WAAW;AAAA,IAC5C,aAAa,EAAE,KAAK,gBAAgB,OAAO,gBAAgB;AAAA,IAC3D,aAAa,EAAE,KAAK,gBAAgB,OAAO,gBAAgB;AAAA,IAC3D,YAAY,EAAE,KAAK,eAAe,OAAO,eAAe;AAAA,IACxD,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,KAAK;AAAA,EACP;AACF;;;AbjDQ,SAOE,OAAAG,MAPF,QAAAC,aAAA;AAvBD,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA,QAAQ,oBAAI,KAAK;AAAA,EACjB,QAAQ,iBAAiB,oBAAI,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAAA,EAClD,MAAM,YAAY,oBAAI,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAAA,EAC3C,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAuE;AAChG,QAAM,SAAS,UAAU;AACzB,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,QAAM,CAAC,gBAAgB,iBAAiB,IAAIC,UAAe,KAAK;AAChE,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAsB,cAAc;AAE1E,EAAAC,WAAU,MAAM;AACd,sBAAkB,KAAK;AAAA,EACzB,GAAG,CAAC,KAAK,CAAC;AAEV,SACE,gBAAAF,MAAC,SAAI,WAAWG,MAAK,cAAc,SAAS,GAC1C;AAAA,oBAAAH,MAAC,SAAI,WAAU,+CACb;AAAA,sBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAWG,MAAK,sDAAsD;AAAA,YACpE,sBAAsB,gBAAgB;AAAA,UACxC,CAAC;AAAA,UACD,SAAS,MAAM,eAAe,gBAAgB,QAAQ,cAAc,KAAK;AAAA,UAExE;AAAA,eAAG,IAAI,KAAK,eAAe,QAAQ,EAAE,OAAO,OAAO,CAAC,EAAE,OAAO,cAAc,CAAC,IAAI,eAAe,YAAY,CAAC;AAAA,YAC7G,gBAAAJ,KAACK,cAAA,EAAY,MAAM,IAAG;AAAA;AAAA;AAAA,MACxB;AAAA,MACC,gBAAgB,SACf,gBAAAJ,MAAC,SAAI,WAAU,0BACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAM;AAAA,YACN,UAAU,CAAC,aAAa,iBAAiB,gBAAgB,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,GAAG;AAAA,YACnF,SAAS,MAAM;AACb,gCAAkB,iBAAiB,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;AAAA,YACnE;AAAA,YAEA,0BAAAA,KAAC,WAAQ,MAAM,IAAG;AAAA;AAAA,QACpB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAM;AAAA,YACN,UAAU,CAAC,aAAa,YAAY,gBAAgB,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,GAAG;AAAA,YAC9E,SAAS,MAAM;AACb,gCAAkB,YAAY,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;AAAA,YAC9D;AAAA,YAEA,0BAAAA,KAAC,aAAU,MAAM,IAAG;AAAA;AAAA,QACtB;AAAA,SACF;AAAA,OAEJ;AAAA,IACC,gBAAgB,cACf,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,oBAAoB;AAAA,QACpB;AAAA,QACA;AAAA,QACA,UAAU,aAAW;AACnB,4BAAkB,OAAO;AACzB,yBAAe,KAAK;AAAA,QACtB;AAAA;AAAA,IACF,IAEA,gBAAAC,MAAC,SACC;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,UAAU,UAAQ;AAChB,qBAAS,IAAI;AAAA,UACf;AAAA;AAAA,MACF;AAAA,MACA,gBAAAA,KAAC,SAAI,WAAU,QACb,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,SAAS,MAAM;AACb,kBAAM,UAAU,oBAAI,KAAK;AACzB,oBAAQ,SAAS,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC;AACrD,qBAAS,OAAO;AAAA,UAClB;AAAA,UAEC,sBAAY,OAAO;AAAA;AAAA,MACtB,GACF;AAAA,OACF;AAAA,KAEJ;AAEJ;AAKO,IAAM,yBAAyB,CAAC;AAAA,EACA,QAAQ,oBAAI,KAAK;AAAA,EACjB,WAAW;AAAA,EACX,GAAG;AACL,MAAuB;AAC1D,QAAM,CAAC,MAAM,OAAO,IAAIE,UAAe,KAAK;AAE5C,EAAAC,WAAU,MAAM,QAAQ,KAAK,GAAG,CAAC,KAAK,CAAC;AAEvC,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,UAAU,WAAS;AACjB,gBAAQ,KAAK;AACb,iBAAS,KAAK;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ;;;AchFI,gBAAAM,aAAA;AAhEJ,IAAM,iCAA0E;AAAA,EAC9E,IAAI;AAAA,IACF,GAAG,gBAAgB;AAAA,IACnB,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,GAAG,gBAAgB;AAAA,IACnB,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AACF;AAYO,IAAM,cAAc,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,OAAO;AACT,MAAyE;AACnG,QAAM,cAAc,eAAe,CAAC,8BAA8B,GAAG,oBAAoB;AACzF,QAAM,cAAa,oBAAI,KAAK,GAAE,SAAS,GAAG,GAAG,GAAG,CAAC,EAAE,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,SAAS,GAAG,GAAG,GAAG,CAAC,EAAE,QAAQ;AAC3G,QAAM,WAAW,aAAa;AAC9B,QAAM,mBAAmB,KAAK,MAAM,KAAK,IAAI,UAAU,KAAK,MAAO,OAAO,GAAG;AAE7E,MAAI;AACJ,MAAI,qBAAqB,GAAG;AAC1B,oBAAgB,YAAY,OAAO;AAAA,EACrC,WAAW,qBAAqB,GAAG;AACjC,oBAAgB,WAAW,YAAY,WAAW,IAAI,YAAY,UAAU;AAAA,EAC9E,OAAO;AACL,oBAAgB,WAAW,YAAY,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,SAAS,EAAE,EAAE,CAAC,IAAI,YAAY,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,SAAS,EAAE,EAAE,CAAC;AAAA,EAC5L;AACA,QAAM,qBAAgD;AAAA,IACpD,GAAG,YAAY,SAAS;AAAA,IACxB,GAAG,YAAY,UAAU;AAAA,IACzB,GAAG,YAAY,OAAO;AAAA,IACtB,GAAG,YAAY,OAAO;AAAA,IACtB,GAAG,YAAY,KAAK;AAAA,IACpB,GAAG,YAAY,MAAM;AAAA,IACrB,GAAG,YAAY,MAAM;AAAA,IACrB,GAAG,YAAY,QAAQ;AAAA,IACvB,GAAG,YAAY,WAAW;AAAA,IAC1B,GAAG,YAAY,SAAS;AAAA,IACxB,IAAI,YAAY,UAAU;AAAA,IAC1B,IAAI,YAAY,UAAU;AAAA,EAC5B;AAEA,MAAI;AACJ,MAAI,SAAS,iBAAiB;AAC5B,iBAAa,GAAG,KAAK,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,aAAa;AAAA,EACjI,OAAO;AACL,iBAAa,GAAG,KAAK,QAAQ,CAAC,KAAK,mBAAmB,KAAK,SAAS,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;AAAA,EAC9F;AAEA,SACE,gBAAAA,MAAC,UACE,sBACH;AAEJ;;;AC9EA,SAAS,aAAAC,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AAC5C,SAAS,cAAAC,mBAAkB;AAG3B,OAAOC,WAAU;AA+FH,gBAAAC,OA8BN,QAAAC,aA9BM;AAlFP,IAAM,aAAa,CAAC;AAAA,EACE,OAAO,oBAAI,KAAK;AAAA,EAChB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,YAAY;AACd,MAAuB;AAChD,QAAM,YAAYC,QAA0B,IAAI;AAChD,QAAM,UAAUA,QAA0B,IAAI;AAE9C,QAAM,OAAO,KAAK,SAAS,KAAK;AAChC,QAAM,QAAQ,iBAAiB,MAAM,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,MAAM,CAAC;AACjF,MAAI,UAAU,MAAM,EAAE;AAEtB,EAAAC,WAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,UAAI,UAAU,SAAS;AACrB,cAAM,YAAY,UAAU,QAAQ;AAEpC,cAAM,cAAc,UAAU,eAAe;AAC7C,YAAI,aAAa;AACf,oBAAU,QAAQ,eAAe;AAAA,YAC/B,UAAU;AAAA,YACV,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,iBAAa;AAAA,EACf,GAAG,CAAC,WAAW,UAAU,OAAO,CAAC;AAEjC,EAAAA,WAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,UAAI,QAAQ,SAAS;AACnB,cAAM,YAAY,QAAQ,QAAQ;AAElC,cAAM,cAAc,UAAU,eAAe;AAC7C,YAAI,aAAa;AACf,kBAAQ,QAAQ,eAAe;AAAA,YAC7B,UAAU;AAAA,YACV,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,iBAAa;AAAA,EACf,GAAG,CAAC,SAAS,QAAQ,OAAO,CAAC;AAE7B,UAAQ,iBAAiB;AAAA,IACvB,KAAK;AACH,gBAAU,QAAQ,OAAO,WAAS,QAAQ,MAAM,CAAC;AACjD;AAAA,IACF,KAAK;AACH,gBAAU,QAAQ,OAAO,WAAS,QAAQ,OAAO,CAAC;AAClD;AAAA,IACF,KAAK;AACH,gBAAU,QAAQ,OAAO,WAAS,QAAQ,OAAO,CAAC;AAClD;AAAA,IACF,KAAK;AACH,gBAAU,QAAQ,OAAO,WAAS,QAAQ,OAAO,CAAC;AAClD;AAAA,EACJ;AAEA,QAAM,gBAAgB,aAAa,SAAS,CAAC,OAAO,UAAU,KAAK,IAAI,QAAQ,KAAK,WAAW,CAAC,IAAI,KAAK,IAAI,QAAQ,KAAK,WAAW,CAAC,CAAC;AAEvI,QAAM,QAAQ,CAAC,aAAsBJ;AAAA,IAAK;AAAA,IACxC,EAAE,8BAA8B,UAAU,uBAAuB,CAAC,SAAS;AAAA,EAAC;AAE9E,QAAM,kBAAkB,CAAC,gBAAyC;AAChE,UAAM,UAAU,IAAI,KAAK,IAAI;AAC7B,gBAAY,OAAO;AACnB,aAAS,OAAO;AAAA,EAClB;AAEA,SACE,gBAAAE,MAAC,SAAI,WAAWF,MAAK,8CAA8C,SAAS,GAC1E;AAAA,oBAAAC,MAACI,aAAA,EAAW,YAAU,MAAC,eAAe,WAAW,OAAO,EAAE,QAAQ,OAAO,GACvE,0BAAAJ,MAAC,SAAI,WAAU,qBACZ,gBAAM,IAAI,UAAQ;AACjB,YAAM,cAAc,SAAS,KAAK,SAAS,KAAK,CAAC,kBAAkB,OAAO,KAAK;AAC/E,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,KAAK,cAAc,UAAU;AAAA,UAC7B,WAAW,MAAM,WAAW;AAAA,UAC5B,SAAS,MAAM,gBAAgB,aAAW,QAAQ,SAAS,QAAQ,CAAC,kBAAkB,OAAO,KAAK,EAAE,CAAC;AAAA,UAEpG,eAAK,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,QAL3B;AAAA,MAMP;AAAA,IAEJ,CAAC,GACH,GACF;AAAA,IACA,gBAAAA,MAACI,aAAA,EAAW,YAAU,MAAC,eAAe,WAAW,OAAO,EAAE,QAAQ,OAAO,GACvE,0BAAAJ,MAAC,SAAI,WAAU,qBACZ,kBAAQ,IAAI,YAAU;AACrB,YAAM,gBAAgB,WAAW;AACjC,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,KAAK,gBAAgB,YAAY;AAAA,UACjC,WAAW,MAAM,aAAa;AAAA,UAC9B,SAAS,MAAM,gBAAgB,aAAW,QAAQ,WAAW,MAAM,CAAC;AAAA,UAEnE,iBAAO,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA;AAAA,QAL7B,SAAS;AAAA,MAMhB;AAAA,IAEJ,CAAC,GACH,GACF;AAAA,IACC,CAAC,kBACA,gBAAAC,MAAC,SAAI,WAAU,cACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,MAAM,CAAC,IAAI;AAAA,UACtB,SAAS,MAAM,gBAAgB,aAAW,QAAQ,QAAQ,SAAS,QAAQ,SAAS,IAAI,EAAE,CAAC;AAAA,UAC5F;AAAA;AAAA,MAED;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,MAAM,IAAI;AAAA,UACrB,SAAS,MAAM,gBAAgB,aAAW,CAAC,QAAQ,QAAQ,SAAS,QAAQ,SAAS,IAAI,EAAE,CAAC;AAAA,UAC7F;AAAA;AAAA,MAED;AAAA,OACF;AAAA,KAEJ;AAEJ;AAEO,IAAM,yBAAyB,CAAC;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,GAAG;AACL,MAAuB;AAC1D,QAAM,CAAC,OAAO,QAAQ,IAAIK,UAAS,IAAI;AACvC,EAAAF,WAAU,MAAM,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC;AAEtC,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAM;AAAA,MACN,UAAU,WAAS;AACjB,iBAAS,KAAK;AACd,iBAAS,KAAK;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ;;;ACjKA,OAAOM,YAAU;;;ACJjB,SAAS,aAAAC,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AAC5C,OAAO,cAAc;AACrB,OAAOC,YAAU;;;ACFjB,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAmCpC,IAAM,4BAAgD;AAAA,EACpD,cAAc;AAAA,EACd,YAAY;AACd;AAQO,IAAM,gBAAgB,CAAC,QAAiD,WAAuC;AACpH,QAAM,EAAE,cAAc,WAAW,IAAI,EAAE,GAAG,2BAA2B,GAAG,MAAM;AAE9E,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAyB;AAEnD,QAAM,eAAe,MAAM;AACzB,QAAI,YAAY;AACd;AAAA,IACF;AACA,iBAAa,KAAK;AAClB,iBAAa,IAAI;AAAA,EACnB;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,YAAY;AACd;AAAA,IACF;AACA,aAAS,WAAW,MAAM;AACxB,mBAAa,KAAK;AAAA,IACpB,GAAG,YAAY,CAAC;AAAA,EAClB;AAEA,EAAAD,WAAU,MAAM;AACd,QAAI,OAAO;AACT,aAAO,MAAM;AACX,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AAED,EAAAA,WAAU,MAAM;AACd,QAAI,OAAO;AACT,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,UAAU,CAAC;AAEf,SAAO;AAAA,IACL;AAAA,IAAW;AAAA,IAAc,UAAU,EAAE,cAAc,aAAa;AAAA,EAClE;AACF;;;ACrFA,SAAS,QAAAE,cAAY;AA2Eb,SASE,OAAAC,OATF,QAAAC,aAAA;AAxCD,IAAM,UAAU,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,WAAW;AAAA,EACX,SAAS;AACX,MAAoB;AAC1C,QAAM,EAAE,WAAW,SAAS,IAAI,cAAc;AAE9C,QAAM,kBAAkB;AAAA,IACtB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAEA,QAAM,eAAe;AACrB,QAAM,kBAAkB;AAAA,IACtB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAEA,QAAM,gBAAiD;AAAA,IACrD,KAAK,EAAE,aAAa,GAAG,YAAY,MAAM,YAAY,QAAQ,YAAY,KAAK;AAAA,IAC9E,QAAQ,EAAE,aAAa,KAAK,YAAY,MAAM,YAAY,MAAM,YAAY,KAAK;AAAA,IACjF,MAAM,EAAE,aAAa,GAAG,YAAY,QAAQ,YAAY,MAAM,YAAY,KAAK;AAAA,IAC/E,OAAO,EAAE,aAAa,GAAG,YAAY,MAAM,YAAY,MAAM,YAAY,OAAO;AAAA,EAClF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWF,OAAK,yBAAyB,kBAAkB;AAAA,MAC1D,GAAG;AAAA,MAEH;AAAA;AAAA,QACA,aACC,gBAAAE;AAAA,UAAC;AAAA;AAAA,YACC,WAAWF;AAAA,cACT;AAAA;AAAA,cAEA,gBAAgB,QAAQ;AAAA,cAAG;AAAA,YAC7B;AAAA,YACA,OAAO,EAAE,QAAQ,gBAAgB,iBAAiB,KAAK;AAAA,YAEtD;AAAA;AAAA,cACD,gBAAAC;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAWD,OAAK,oBAAoB,gBAAgB,QAAQ,CAAC;AAAA,kBAC7D,OAAO,EAAE,GAAG,cAAc,QAAQ,GAAG,QAAQ,SAAS,EAAE;AAAA;AAAA,cAC1D;AAAA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AFzFA,SAAS,SAAS;;;AGsDX,IAAM,kBAAoD;AAAA,EAC/D,IAAI;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,MAAM;AAAA,IACN,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,4BAA4B;AAAA,IAC5B,KAAK;AAAA,EACP;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,MAAM;AAAA,IACN,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,4BAA4B;AAAA,IAC5B,KAAK;AAAA,EACP;AACF;;;AH5HI,SACE,OAAAG,OADF,QAAAC,aAAA;AAhBG,IAAM,UAAU,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuC;AAE7D,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAsB;AAE9C,EAAAC,WAAU,MAAM;AACd,YAAQ,SAAS,IAAI;AAAA,EACvB,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC,QAAQ,CAAC,OAAQ,QAAO;AAE7B,SAAO,SAAS;AAAA,IACd,gBAAAF,MAAC,SAAI,WAAWG,OAAK,uBAAuB,GAC1C;AAAA,sBAAAJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAWI,OAAK,qDAAqD,mBAAmB;AAAA,UACxF,SAAS;AAAA;AAAA,MACX;AAAA,MACC;AAAA,OACH;AAAA,IACA;AAAA,EACF;AACF;AAGA,IAAI,eAAiC,CAAC;AAOtC,IAAM,gCAAkE;AAAA,EACtE,IAAI;AAAA,IACF,GAAG,gBAAgB;AAAA,EACrB;AAAA,EACA,IAAI;AAAA,IACF,GAAG,gBAAgB;AAAA,EACrB;AACF;AAoBO,IAAM,gBAAgB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,kBAAkB;AACpB,MAAuE;AACnG,QAAM,cAAc,eAAe,CAAC,6BAA6B,GAAG,oBAAoB;AACxF,QAAM,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAChD,QAAM,WACJ,gBAAAH,MAAC,SAAI,WAAU,0CACZ;AAAA,aACC,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAWI,OAAK,sBAAsB;AAAA,UACpC,QAAQ,eAAe;AAAA,QACzB,CAAC;AAAA,QAEA;AAAA;AAAA,IACH;AAAA,IAED,CAAC,CAAC,WACD,gBAAAJ,MAAC,WAAQ,SAAS,YAAY,OAAO,GACnC,0BAAAA,MAAC,cAAW,OAAM,WAAU,MAAK,SAAQ,SAAS,SAChD,0BAAAA,MAAC,KAAE,WAAU,iBAAe,GAC9B,GACF;AAAA,KAEJ;AAGF,SACE,gBAAAC,MAAC,SAAI,WAAU,cACZ;AAAA,mBAAgB;AAAA,IAChB,gBAAgB,mBAAoB,gBAAAD,MAAC,UAAK,WAAU,yBAAyB,2BAAgB;AAAA,KAChG;AAEJ;AAaO,IAAM,QAAQ,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAqC;AACzD,QAAM,MAAMK,QAAuB,IAAI;AAEvC,EAAAF,WAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,UAAM,QAAQ,IAAI;AAElB,QAAI,CAAC,OAAO;AACV,cAAQ,MAAM,8BAA8B;AAC5C;AAAA,IACF;AAEA,iBAAa,KAAK,KAAK;AAEvB,UAAM,YAAY,OAAO;AAAA,MACvB;AAAA,IACF;AACA,UAAM,QAAQ,UAAU,CAAC;AACzB,UAAM,OAAO,UAAU,UAAU,SAAS,CAAC;AAE3C,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,YAAM,YAAY,aAAa,aAAa,SAAS,CAAC,MAAM;AAC5D,UAAI,CAAC,UAAW;AAEhB,UAAI,EAAE,QAAQ,UAAU;AACtB,UAAE,gBAAgB;AAClB,gBAAQ;AAAA,MACV,WAAW,EAAE,QAAQ,OAAO;AAC1B,YAAI,UAAU,WAAW,EAAG;AAE5B,YAAI,EAAE,YAAY,SAAS,kBAAkB,OAAO;AAClD,YAAE,eAAe;AACjB,UAAC,KAAqB,MAAM;AAAA,QAC9B,WAAW,CAAC,EAAE,YAAY,SAAS,kBAAkB,MAAM;AACzD,YAAE,eAAe;AACjB,UAAC,MAAsB,MAAM;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM;AACZ,aAAS,iBAAiB,WAAW,aAAa;AAElD,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,aAAa;AACrD,qBAAe,aAAa,OAAO,OAAK,MAAM,KAAK;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MAEA,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,UAAU;AAAA,UACV,WAAWG;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAK;AAAA,UACL,cAAY;AAAA,UAEZ;AAAA,4BAAAJ,MAAC,iBAAe,GAAG,aAAa,SAAiB;AAAA,YAChD;AAAA;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAYO,IAAM,SAAS,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAsC;AAC3D,QAAM,MAAMK,QAAuB,IAAI;AAEvC,EAAAF,WAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,UAAM,SAAS,IAAI;AAEnB,QAAI,CAAC,QAAQ;AACX,cAAQ,MAAM,+BAA+B;AAC7C;AAAA,IACF;AAEA,iBAAa,KAAK,MAAM;AAExB,UAAM,YAAY,QAAQ;AAAA,MACxB;AAAA,IACF;AACA,UAAM,QAAQ,UAAU,CAAC;AACzB,UAAM,OAAO,UAAU,UAAU,SAAS,CAAC;AAE3C,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,YAAM,YAAY,aAAa,aAAa,SAAS,CAAC,MAAM;AAC5D,UAAI,CAAC,UAAW;AAEhB,UAAI,EAAE,QAAQ,UAAU;AACtB,UAAE,gBAAgB;AAAA,MACpB,WAAW,EAAE,QAAQ,OAAO;AAC1B,YAAI,UAAU,WAAW,EAAG;AAE5B,YAAI,EAAE,YAAY,SAAS,kBAAkB,OAAO;AAClD,YAAE,eAAe;AACjB,UAAC,KAAqB,MAAM;AAAA,QAC9B,WAAW,CAAC,EAAE,YAAY,SAAS,kBAAkB,MAAM;AACzD,YAAE,eAAe;AACjB,UAAC,MAAsB,MAAM;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,MAAM;AACb,aAAS,iBAAiB,WAAW,aAAa;AAElD,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,aAAa;AACrD,qBAAe,aAAa,OAAO,OAAK,MAAM,MAAM;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MAEA,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,UAAU;AAAA,UACV,WAAWG;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAK;AAAA,UACL,cAAY;AAAA,UAEX;AAAA,aAAC,CAAC,eAAgB,gBAAAJ,MAAC,iBAAe,GAAG,aAAY;AAAA,YACjD;AAAA;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;;;AD1PM,gBAAAM,OAGA,QAAAC,cAHA;AArBC,IAAM,gBAAgB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA4F;AACxH,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAE1E,QAAM,UAAuD;AAAA,IAC3D,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAEA,SACE,gBAAAA,OAAC,UAAQ,GAAG,WAAW,WAAWC,OAAK,mBAAmB,SAAS,GACjE;AAAA,oBAAAF,MAAC,SAAI,WAAU,mBACZ,UACH;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,+BACZ;AAAA,mBACC,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,mBAAmB,CAAC,EAAE,SAAS;AAAA,UACtC,SAAS;AAAA,UAET,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAAA,UAE3C,6BAAmB,CAAC,EAAE,QAAQ,YAAY,SAAS;AAAA;AAAA,MACtD;AAAA,MAEF,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAS;AAAA,UACT,OAAO,mBAAmB,CAAC,EAAE,SAAS,QAAQ,WAAW;AAAA,UACzD,SAAS;AAAA,UACT,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAAA,UAE3C,6BAAmB,CAAC,EAAE,QAAQ,YAAY,SAAS;AAAA;AAAA,MACtD;AAAA,OACF;AAAA,KACF;AAEJ;;;AKpFA,OAAOG,YAAU;AA4CX,gBAAAC,OAkDM,QAAAC,cAlDN;AA1CC,IAAM,gBAAgB,CAAC,QAAQ,SAAS,UAAU,OAAO;AAEzD,IAAM,oBAAgD;AAAA,EAC3D,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAYO,IAAM,SAAS,CAAC,EAAE,WAAW,KAAK,OAAO,UAAU,YAAY,GAAG,MAAmB;AAE1F,cAAY;AAEZ,QAAM,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,EAAE,IAAI;AAEN,QAAM,QAAQ;AAAA,IACZ,OAAO,YAAY;AAAA,IACnB,QAAQ,YAAY;AAAA,IACpB,UAAU,YAAY;AAAA,IACtB,WAAW,YAAY;AAAA,IACvB,UAAU,YAAY;AAAA,IACtB,WAAW,YAAY;AAAA,EACzB;AAEA;AAAA;AAAA,IAEE,gBAAAD,MAAC,SAAI,WAAWD,OAAK,kCAAkC,SAAS,GAAG,OACjE,0BAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA;AAAA,IACV,GACF;AAAA;AAEJ;AAWO,IAAM,cAAc,CAAC;AAAA,EACE;AAAA,EACA,mBAAmB;AAAA,EACnB,OAAO;AACT,MAAwB;AAClD,QAAM,oBAAoB,QAAQ,SAAS,mBAAmB,UAAU,QAAQ,MAAM,GAAG,gBAAgB;AACzG,QAAM,WAAW,kBAAkB,IAAI;AACvC,QAAM,kBAAkB;AACxB,QAAM,uBAAuB,QAAQ,SAAS;AAC9C,QAAM,mBAAmB,YAAY,mBAAmB,kBAAkB,SAAS,KAAK;AACxF,SACE,gBAAAC,OAAC,SAAI,WAAU,uBAAsB,OAAO,EAAE,QAAQ,WAAW,KAAK,GACpE;AAAA,oBAAAD,MAAC,SAAI,OAAO,EAAE,OAAO,mBAAmB,KAAK,GAC1C,4BAAkB,IAAI,CAAC,QAAQ,UAC9B,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QACV,OAAO,EAAE,MAAO,QAAQ,WAAW,kBAAmB,MAAM,QAAQ,mBAAmB,MAAM;AAAA,QAE7F,0BAAAA,MAAC,UAAO,WAAW,OAAO,WAAW,KAAK,OAAO,KAAK,MAAW;AAAA;AAAA,MAJ5D;AAAA,IAKP,CACD,GACH;AAAA,IAEE,uBAAuB,KACrB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,UAAW,WAAW,IAAK,MAAM,YAAa,IAAI,WAAW,KAAM,KAAK;AAAA,QAEjF,0BAAAC,OAAC,UAAK;AAAA;AAAA,UAAG;AAAA,WAAqB;AAAA;AAAA,IAChC;AAAA,KAGN;AAEJ;;;ACnGA,OAAOC,YAAU;AAeb,gBAAAC,aAAA;AARG,IAAM,SAAS,CAAC;AAAA,EACE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAmB;AACxC,QAAM,OAAO,SAAS;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWD,OAAK,gBAAgB,SAAS;AAAA,MACzC,OAAO;AAAA,QACL,OAAO,GAAG,IAAI;AAAA,QACd,QAAQ,GAAG,IAAI;AAAA,QACf,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ACzBA,SAAS,eAAAE,cAAa,aAAAC,aAAW,YAAAC,kBAAgB;AAGjD,OAAOC,YAAU;AAcb,gBAAAC,OAiKA,QAAAC,cAjKA;AANG,IAAM,OAAO,CAAC;AAAA,EACE,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,YAAY;AACd,MAAiB;AACpC,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAWD,OAAK,uCAAuC,SAAS;AAAA,MAChE,OAAO;AAAA,QACL,OAAO,GAAG,SAAS;AAAA,QACnB,QAAQ,GAAG,SAAS;AAAA,QACpB,cAAc,GAAG,KAAK;AAAA,MACxB;AAAA;AAAA,EACF;AAEJ;AASO,IAAM,eAAe,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,wBAAwB;AAAA,EACxB,YAAY;AAAA,EACZ,sBAAsB;AAAA,EACtB;AACF,MAAyB;AACpD,QAAM,CAAC,cAAc,eAAe,IAAIG,WAAS,CAAC;AAClD,QAAM,eAAe,MAAO;AAE5B,QAAM,UAAUC,aAAY,CAAC,WAAmB,cAAsB;AACpE,UAAM,WAAW,KAAK,KAAK,YAAY,aAAa,cAAc,CAAC;AACnE,UAAM,WAAW,KAAK,IAAI,QAAQ,UAAU,KAAK;AAEjD,oBAAgB,QAAQ;AAExB,QAAI,WAAW,GAAG;AAChB,4BAAsB,CAAC,iBAAiB,QAAQ,cAAc,SAAS,CAAC;AAAA,IAC1E,OAAO;AACL,0BAAoB;AACpB,UAAI,WAAW;AACb,wBAAgB,CAAC;AACjB,8BAAsB,CAAC,iBAAiB,QAAQ,cAAc,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,qBAAqB,WAAW,KAAK,CAAC;AAExD,EAAAC,YAAU,MAAM;AACd,QAAI,eAAe,OAAO;AACxB,4BAAsB,CAAC,cAAc,QAAQ,WAAW,SAAS,CAAC;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO,GAAG,YAAY,IAAI,KAAK;AAAA,QAC/B,QAAQ,GAAG,YAAY,IAAI,KAAK;AAAA,QAChC,GAAG;AAAA,MACL;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAQO,IAAM,WAAW,CAAC;AAAA,EACE,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,wBAAwB;AAAA,EACxB,YAAY;AAAA,EACZ,sBAAsB;AAAA,EACtB;AACF,MAAqB;AAC5C,QAAM,CAAC,kBAAkB,mBAAmB,IAAIE,WAAS,cAAc;AACvE,QAAM,WAAW,eAAe;AAChC,QAAM,eAAe,MAAO;AAE5B,QAAM,UAAUC,aAAY,CAAC,WAAmB,cAAsB;AACpE,UAAM,WAAW,KAAK,KAAK,YAAY,aAAa,cAAc,CAAC;AACnE,UAAM,eAAe,KAAK;AAAA,MACxB,iBAAiB,WAAW;AAAA,MAC5B;AAAA,IACF;AAEA,wBAAoB,YAAY;AAEhC,QAAI,WAAW,GAAG;AAChB,4BAAsB,CAAC,iBAAiB,QAAQ,cAAc,SAAS,CAAC;AAAA,IAC1E,OAAO;AACL,0BAAoB;AACpB,UAAI,WAAW;AACb,4BAAoB,cAAc;AAClC,8BAAsB,CAAC,iBAAiB,QAAQ,cAAc,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,cAAc,cAAc,qBAAqB,WAAW,cAAc,CAAC;AAEzF,EAAAC,YAAU,MAAM;AACd,QAAI,mBAAmB,cAAc;AACnC,4BAAsB,CAAC,cAAc,QAAQ,WAAW,SAAS,CAAC;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO,GAAG,eAAe,IAAI,KAAK;AAAA,QAClC,QAAQ,GAAG,eAAe,IAAI,KAAK;AAAA,QACnC,GAAG;AAAA,MACL;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX;AAAA,UACA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAcO,IAAM,cAAc,CAAC;AAAA,EACE,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAChB,MAAwB;AAClD,QAAM,CAAC,aAAa,cAAc,IAAIE,WAAS,CAAC;AAChD,QAAM,OAAO;AAEb,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO,GAAG,WAAW;AAAA,QACrB,QAAQ,GAAG,WAAW;AAAA,MACxB;AAAA,MAEA;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ,cAAc;AAAA,YACtB,WAAWD,OAAK,kBAAkB,mDAAmD;AAAA,YACrF,OAAO;AAAA,cACL,MAAM,GAAG,OAAO,CAAC;AAAA,cACjB,KAAK,GAAG,OAAO,CAAC;AAAA,YAClB;AAAA;AAAA,QACF;AAAA,QACC,gBAAgB,IACf,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YACX,QAAQ,cAAc,eAAe;AAAA,YACrC,qBAAqB,MACnB,gBAAgB,IAAI,eAAe,CAAC,IAAI;AAAA,YAE1C,WAAW;AAAA,YACX,WAAWD;AAAA,cAAK;AAAA,cACd,EAAE,aAAa,gBAAgB,EAAE;AAAA,YAAC;AAAA,YACpC,OAAO;AAAA,cACL,MAAM,GAAG,OAAO,CAAC;AAAA,cACjB,KAAK,GAAG,OAAO,CAAC;AAAA,cAChB,UAAU;AAAA,cACV,WAAW;AAAA,cACX,QAAQ;AAAA,YACV;AAAA;AAAA,QACF,IACE;AAAA,QACH,gBAAgB,IACf,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAgB,cAAc;AAAA,YAC9B,cAAc;AAAA,YACd,OAAO;AAAA,YACP,WAAW;AAAA,YACX,WAAWD,OAAK,eAAe,WAAW;AAAA,YAC1C,OAAO;AAAA,cACL,MAAM,GAAG,OAAO,CAAC;AAAA,cACjB,KAAK,GAAG,OAAO,CAAC;AAAA,cAChB,UAAU;AAAA,cACV,WAAW;AAAA,cACX,QAAQ;AAAA,YACV;AAAA;AAAA,QACF,IACE;AAAA,QACJ,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ,cAAc;AAAA,YACtB,WAAWD;AAAA,cAAK;AAAA,cACd,EAAE,cAAc,cAAc,EAAE;AAAA,cAChC;AAAA,YAAkD;AAAA,YACpD,OAAO;AAAA,cACL,MAAM,GAAG,OAAO,CAAC;AAAA,cACjB,KAAK,GAAG,OAAO,CAAC;AAAA,YAClB;AAAA;AAAA,QACF;AAAA,QACC,gBAAgB,IACf,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,cAAc;AAAA,YACzB,QAAQ,cAAc,eAAe;AAAA,YACrC,qBAAqB,MACnB,gBAAgB,IAAI,eAAe,CAAC,IAAI;AAAA,YAE1C,WAAW;AAAA,YACX,WAAWD,OAAK,gBAAgB;AAAA,YAChC,OAAO;AAAA,cACL,MAAM,GAAG,OAAO,CAAC;AAAA,cACjB,KAAK,GAAG,OAAO,CAAC;AAAA,cAChB,UAAU;AAAA,cACV,WAAW;AAAA,cACX,QAAQ;AAAA,YACV;AAAA;AAAA,QACF,IACE;AAAA,QACH,gBAAgB,IACf,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAgB;AAAA,YAChB,cAAc,cAAc;AAAA,YAC5B,OAAO;AAAA,YACP,WAAW;AAAA,YACX,WAAWD,OAAK,eAAe,WAAW;AAAA,YAC1C,OAAO;AAAA,cACL,MAAM,GAAG,OAAO,CAAC;AAAA,cACjB,KAAK,GAAG,OAAO,CAAC;AAAA,cAChB,UAAU;AAAA,cACV,WAAW;AAAA,cACX,QAAQ;AAAA,YACV;AAAA;AAAA,QACF,IACE;AAAA,QACJ,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ,cAAc;AAAA,YACtB,WAAWD;AAAA,cAAK;AAAA,cACd,EAAE,cAAc,cAAc,EAAE;AAAA,cAChC;AAAA,YAAkD;AAAA,YACpD,OAAO;AAAA,cACL,MAAM,GAAG,OAAO,CAAC;AAAA,cACjB,KAAK,GAAG,OAAO,CAAC;AAAA,YAClB;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC5QI,gBAAAM,aAAA;AALG,IAAM,UAAU,CAAC;AAAA,EACE;AAAA,EACA,OAAO;AACT,MAAgB;AACtC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,OAAO,GAAG,IAAI,MAAM,QAAQ,GAAG,IAAI,MAAM,UAAU,GAAG,IAAI,MAAM,WAAW,GAAG,IAAI,KAAK;AAAA,MAChG,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,KAAI;AAAA,MACJ,KAAI;AAAA,MACJ;AAAA;AAAA,EACF;AAEJ;;;AC1BA,kBAAiB;AACjB,OAAOC,YAAU;AAwBT,SACE,OAAAC,OADF,QAAAC,cAAA;AAND,IAAM,aAAa,CAAC,EAAE,QAAQ,eAAe,mBAAmB,MAAuB;AAC5F,QAAM,QAAQ;AAEd,SACE,gBAAAD,MAAC,SAAI,WAAWD,OAAK,cAAc,kBAAkB,GAClD,iBAAO,IAAI,CAAC,OAAO,UAClB,gBAAAE,OAAC,SACC;AAAA,oBAAAD;AAAA,MAAC,YAAAE;AAAA,MAAA;AAAA,QAAK,MAAM,MAAM;AAAA,QACZ,WAAWH,OAAK,eAAe,EAAE,CAAC,GAAG,KAAK,sBAAsB,GAAG,UAAU,OAAO,SAAS,EAAE,CAAC;AAAA,QACnG,gBAAM;AAAA;AAAA,IACT;AAAA,IACC,UAAU,OAAO,SAAS,KAAK,gBAAAC,MAAC,UAAK,WAAWD,OAAK,QAAQ,KAAK,GAAG,eAAC;AAAA,OAL/D,KAMV,CACD,GACH;AAEJ;;;AClCA,SAAgB,eAAAI,cAAa,aAAAC,aAAW,SAAS,UAAAC,SAAQ,YAAAC,kBAAgB;AACzE,OAAOC,YAAU;AACjB,SAAS,aAAa,oBAAoB;;;ACHnC,IAAM,QAAQ,CAAC,OAAe,MAAc,GAAG,MAAc,MAAc;AAChF,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;;;ACEO,IAAM,gBAAN,MAAM,eAAc;AAAA,EACzB,OAAO,mBAAmB,IAAY,IAAY,IAAY,IAAkD;AAE9G,UAAM,KAAK,IAAI;AACf,UAAM,KAAK,KAAK,KAAK,MAAM;AAC3B,UAAM,KAAK,IAAI,KAAK;AAEpB,UAAM,KAAK,IAAI;AACf,UAAM,KAAK,KAAK,KAAK,MAAM;AAC3B,UAAM,KAAK,IAAI,KAAK;AAGpB,UAAM,IAAI,CAAC,QAAgB,KAAK,IAAI,MAAM,IAAI,MAAM;AACpD,UAAM,IAAI,CAAC,QAAgB,KAAK,IAAI,MAAM,IAAI,MAAM;AAEpD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,YAAY,IAAY,IAAY,IAAY,IAA0B;AAC/E,UAAM,EAAE,EAAE,IAAI,eAAc,mBAAmB,IAAI,IAAI,IAAI,EAAE;AAC7D,WAAO,CAAC,MAAc;AACpB,UAAI,MAAM,CAAC;AACX,aAAO,EAAE,CAAC;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,GAAmB;AACtC,WAAO,eAAc,YAAY,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAAA,EACtD;AACF;;;AC7BO,IAAM,yBAAN,MAAM,wBAAuB;AAAA,EAKlC,YAAY,QAAgB,YAAqB,MAAM,oBAA4B,KAAK;AACtF,QAAI,oBAAoB,KAAK,SAAS,GAAG;AACvC,YAAM,IAAI,MAAM,yEAAyE;AAAA,IAC3F;AAEA,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEA,qBAAqB,UAA0B;AAC7C,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO,KAAK,IAAI,CAAC,KAAK,mBAAmB,KAAK,IAAI,KAAK,oBAAoB,KAAK,SAAS,GAAG,QAAQ,CAAC;AAAA,IACvG;AACA,QAAI,YAAY,KAAK,QAAQ;AAC3B,aAAO,WAAW,KAAK;AAAA,IACzB;AACA,QAAI,WAAW,GAAG;AAChB,aAAO,KAAK,SAAU,KAAK,IAAI,QAAQ,IAAI,KAAK;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,cAAc,UAA0B;AAC7C,WAAO,WAAW,wBAAuB,UAAU,QAAQ;AAAA,EAC7D;AAAA,EAEA,OAAO,UAAU,UAA0B;AACzC,WAAO,KAAK,MAAM,QAAQ,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,UAAkB,QAAgB,WAA8B;AACrF,QAAI,CAAC,KAAK,cAAc,WAAW,CAAC,KAAK,qBAAqB,WAAW,KAAK,oBAAoB,KAAK,SAAS,IAAI;AAClH,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AAEA,UAAM,mBAAoB,cAAc,KAAK,WAAW;AACxD,UAAM,oBAAqB,cAAc,MAAM,SAAS;AAExD,QAAI,CAAC,KAAK,cAAc,oBAAoB,oBAAoB;AAC9D,aAAO;AAAA,IACT;AAEA,QAAI,cAAc,IAAI;AACpB,aAAO,KAAK,uBAAuB,QAAQ,UAAU,CAAC;AAAA,IACxD;AAEA,eAAW,KAAK,qBAAqB,QAAQ;AAC7C,aAAS,KAAK,qBAAqB,MAAM;AAEzC,QAAI,YAAY,SAAS,YAAY;AACrC,QAAI,WAAW,GAAG;AAChB,iBAAW,KAAK,SAAU,KAAK,IAAI,QAAQ,IAAI,KAAK,SAAU;AAAA,IAChE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,UAAkB,QAAwB;AAC3D,WAAO,KAAK,uBAAuB,UAAU,QAAQ,CAAC;AAAA,EACxD;AAAA,EAEA,oBAAoB,UAAkB,QAAwB;AAC5D,WAAO,KAAK,uBAAuB,UAAU,QAAQ,EAAE;AAAA,EACzD;AAAA,EAEA,YAAY,UAAkB,QAAwB;AACpD,UAAM,kBAAkB,KAAK,mBAAmB,UAAU,MAAM;AAChE,UAAM,mBAAmB,KAAK,oBAAoB,UAAU,MAAM;AAElE,WAAO,KAAK,IAAI,iBAAiB,gBAAgB;AAAA,EACnD;AAAA,EAEA,iBAAiB,UAAkB,QAA2B;AAC5D,UAAM,kBAAkB,KAAK,mBAAmB,UAAU,MAAM;AAChE,UAAM,mBAAmB,KAAK,oBAAoB,UAAU,MAAM;AAClE,WAAO,kBAAkB,mBAAmB,IAAI;AAAA,EAClD;AACF;;;AH+OU,mBAOI,OAAAC,OAPJ,QAAAC,cAAA;AA9QH,IAAM,WAAW,CAAC;AAAA,EACE;AAAA,EACA,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,OAAO;AAAA,EACP,sBAAsB;AAAA,EACtB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,iBAAiB;AACnB,MAAqB;AAC5C,MAAI,iBAAiB,CAAC,WAAW;AAC/B,YAAQ,MAAM,2DAA2D;AACzE,gBAAY;AAAA,EACd;AAEA,QAAM,CAAC;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAG,sBAAsB,IAAIC,WAA8B;AAAA,IACzD,iBAAiB;AAAA,EACnB,CAAC;AACD,QAAM,cAAcC,QAA2B,MAAS;AACxD,QAAM,UAAUA,QAAmC,MAAS;AAC5D,uBAAqB,KAAK,IAAI,GAAG,kBAAkB;AAEnD,QAAM,SAAS,SAAS;AACxB,QAAM,mBAAmB;AAEzB,QAAM,OAAO,QAAQ,MAAM,IAAI,uBAAuB,QAAQ,WAAW,mBAAmB,GAAG,CAAC,QAAQ,WAAW,mBAAmB,CAAC;AACvI,QAAM,eAAe,KAAK,qBAAqB,uBAAuB,cAAc,eAAe,CAAC;AACpG,kBAAgB,KAAK,IAAI,KAAK,aAAa;AAC3C,0BAAwB,KAAK,IAAI,KAAK,qBAAqB;AAE3D,QAAM,iBAAiB,CAAC,UAAkB;AACxC,UAAM,aAAa,OAAO,QAAQ,mBAAmB;AACrD,WAAO,GAAG,UAAU;AAAA,EACtB;AAEA,QAAM,YAAYC,aAAY,CAAC,SAAiB;AAC9C,QAAI,gBAAyB;AAG7B,2BAAuB,CAAC,UAAU;AAChC,YAAM;AAAA,QACJ,gBAAAC;AAAA,QACA,WAAAC;AAAA,MACF,IAAI;AACJ,UAAID,oBAAmB,UAAaC,eAAc,QAAW;AAC3D,wBAAgB;AAChB,eAAO;AAAA,MACT;AACA,UAAI,CAACD,gBAAe,aAAa,CAACA,gBAAe,gBAAgB;AAC/D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,gBAAgB;AAAA,YACd,GAAGA;AAAA,YACH,WAAW;AAAA,YACX,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AACA,YAAM,mBAAmBA,gBAAe,gBAAgB,wBAAwB;AAChF,YAAM,WAAW,OAAO,OAAOA,gBAAe,aAAa,gBAAgB;AAC3E,YAAM,gBAAgB,cAAc,cAAc,QAAQ;AAC1D,YAAM,WAAW,KAAK,uBAAuBA,gBAAe,eAAeA,gBAAe,gBAAgBA,gBAAe,SAAS;AAClI,YAAM,cAAc,KAAK,qBAAqB,gBAAgB,WAAWA,gBAAe,YAAYA,gBAAe,aAAa;AAEhI,UAAIA,gBAAe,mBAAmB,eAAe,aAAa,GAAG;AACnE,wBAAgB;AAChB,eAAQ;AAAA,UACN,iBAAiB,uBAAuB,cAAc,WAAW;AAAA,UACjE,gBAAgB;AAAA,QAClB;AAAA,MACF;AACA,aAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,UACd,GAAGA;AAAA,UACH,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,eAAe;AACjB,kBAAY,UAAU,sBAAsB,WAAS,UAAU,KAAK,CAAC;AAAA,IACvE;AAAA,EACF,GAAG,CAAC,eAAe,uBAAuB,IAAI,CAAC;AAE/C,EAAAE,YAAU,MAAM;AACd,QAAI,gBAAgB;AAClB,kBAAY,UAAU,sBAAsB,SAAS;AAAA,IACvD;AACA,WAAO,MAAM;AACX,UAAI,YAAY,SAAS;AACvB,6BAAqB,YAAY,OAAO;AACxC,oBAAY,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,gBAAgB,MAAM,uBAAuB,gBAAc;AAAA,IAC/D,GAAG;AAAA,IACH,WAAW,UAAU;AAAA,IACrB,gBAAgB,UAAU,kBAAkB,UAAU,YAAY,UAAU,iBAAiB;AAAA,MAC3F,eAAe;AAAA,MACf,iBAAiB,kBAAkB,KAAK;AAAA,MACxC,WAAW;AAAA;AAAA,MACX,eAAe;AAAA,IACjB;AAAA,EACF,EAAE;AAEF,EAAAA,YAAU,MAAM;AACd,QAAI,CAAC,YAAY,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,SAAS;AAC7E,UAAI,qBAAqB,GAAG;AAC1B,gBAAQ,UAAU,WAAW,MAAM;AACjC,wBAAc;AACd,kBAAQ,UAAU;AAAA,QACpB,GAAG,kBAAkB;AAAA,MACvB,OAAO;AACL,sBAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,gBAAgB,WAAW,YAAY,SAAS,QAAQ,OAAO,CAAC;AAEpE,QAAM,iBAAiB,CAAC,mBAA4B;AAClD,QAAI,mBAAmB,QAAW;AAChC,uBAAiB,uBAAuB,cAAc,eAAe;AAAA,IACvE;AACA,QAAI,mBAAmB,iBAAiB;AACtC;AAAA,IACF;AAGA,UAAM,YAAY,KAAK,iBAAiB,iBAAiB,cAAc;AACvE,iBAAa,QAAQ,OAAO;AAC5B,YAAQ,UAAU;AAClB,QAAI,YAAY,SAAS;AACvB,2BAAqB,YAAY,OAAO;AACxC,kBAAY,UAAU;AAAA,IACxB;AAEA,2BAAuB,gBAAc;AAAA,MACnC,GAAG;AAAA,MACH,WAAW;AAAA,MACX,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf,eAAe;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,IACX,EAAE;AAAA,EACJ;AAEA,QAAM,YAAY,MAAM;AACtB,WAAO,aAAa,oBAAoB;AAAA,EAC1C;AAEA,QAAM,aAAa,MAAM;AACvB,WAAO,aAAa,oBAAoB,SAAS;AAAA,EACnD;AAEA,QAAM,OAAO,MAAM;AACjB,QAAI,UAAU,GAAG;AACf,qBAAe,oBAAoB,IAAI,SAAS,IAAI,uBAAuB,cAAc,kBAAkB,CAAC,CAAC;AAAA,IAC/G;AAAA,EACF;AAEA,QAAM,QAAQ,MAAM;AAClB,QAAI,WAAW,GAAG;AAChB,qBAAe,uBAAuB,eAAe,kBAAkB,KAAK,MAAM,CAAC;AAAA,IACrF;AAAA,EACF;AAEA,MAAI,QAAoB,SAAS,IAAI,CAAC,MAAM,WAAW;AAAA,IACrD;AAAA,IACA;AAAA,EACF,EAAE;AAEF,MAAI,WAAW;AACb,UAAM,SAAS,2BAA2B,UAAU,SAAS,GAAG,kBAAkB,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO;AAAA,MACzH;AAAA,MACA;AAAA,IACF,EAAE;AACF,UAAM,QAAQ,2BAA2B,UAAU,GAAG,gBAAgB,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO;AAAA,MAC9F;AAAA,MACA;AAAA,IACF,EAAE;AACF,YAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF;AAEA,QAAM,cAAc,CAAC,MAAc,uBAAuB,gBAAc;AAAA,IACtE,GAAG;AAAA,IACH,WAAW;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,MACpB,YAAY;AAAA,IACd;AAAA,IACA,gBAAgB;AAAA;AAAA,EAClB,EAAE;AAEF,QAAM,SAAS,CAAC,GAAW,UAAkB;AAE3C,QAAI,CAAC,aAAa,MAAM,GAAG;AACzB;AAAA,IACF;AACA,UAAM,gBAAgB,UAAU,QAAQ,KAAK;AAC7C,UAAM,cAAc,KAAK,qBAAqB,kBAAkB,YAAY;AAE5E,2BAAuB,gBAAc;AAAA,MACnC,GAAG;AAAA,MACH,iBAAiB;AAAA,MACjB,WAAW;AAAA,QACT,GAAG;AAAA,QACH,OAAO;AAAA,MACT;AAAA,IACF,EAAE;AAAA,EACJ;AAEA,QAAM,YAAY,CAAC,GAAW,UAAkB;AAC9C,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AACA,UAAM,WAAW,UAAU,SAAS;AACpC,UAAM,mBAAmB,WAAW;AACpC,UAAM,WAAY,KAAK,IAAI,IAAI,UAAU;AACzC,UAAM,WAAW,YAAY,KAAK,IAAI,IAAI,UAAU;AAEpD,UAAM,UAAU,KAAK,IAAI,QAAQ,IAAI,KAAM,WAAW,QAAQ,KAAK,IAAI,gBAAgB,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI;AACvH,QAAI,SAAS;AACX,UAAI,WAAW,KAAK,WAAW,GAAG;AAChC,cAAM;AACN;AAAA,MACF,WAAW,WAAW,KAAK,UAAU,GAAG;AACtC,aAAK;AACL;AAAA,MACF;AAAA,IACF;AACA,mBAAe;AAAA,EACjB;AAEA,QAAM,eAAe;AAAA,IACnB,WAAW;AAAA,IACX,aAAa,CAAC,UAA2C;AACvD,kBAAY,MAAM,OAAO;AACzB,YAAM,aAAa,aAAa,SAAS,cAAc,KAAK,GAAG,GAAG,CAAC;AAAA,IACrE;AAAA,IACA,QAAQ,CAAC,UAA2C,OAAO,MAAM,SAAU,MAAM,OAA0B,sBAAsB,EAAE,KAAK;AAAA,IACxI,WAAW,CAAC,UAA2C,UAAU,MAAM,SAAU,MAAM,OAA0B,sBAAsB,EAAE,KAAK;AAAA,IAC9I,cAAc,CAAC,UAA4C,YAAY,MAAM,QAAQ,CAAC,EAAG,OAAO;AAAA,IAChG,aAAa,CAAC,UAA4C,OAAO,MAAM,QAAQ,CAAC,EAAG,SAAU,MAAM,OAA0B,sBAAsB,EAAE,KAAK;AAAA,IAC1J,YAAY,CAAC,UAA4C,UAAU,MAAM,eAAe,CAAC,EAAG,SAAU,MAAM,OAA0B,sBAAsB,EAAE,KAAK;AAAA,IACnK,eAAe,CAAC,UAA4C,UAAU,MAAM,eAAe,CAAC,EAAG,SAAU,MAAM,OAA0B,sBAAsB,EAAE,KAAK;AAAA,EACxK;AAEA,SACE,gBAAAN,OAAC,SAAI,WAAU,kCACb;AAAA,oBAAAA,OAAC,SAAI,WAAWO,OAAK,mCAAmC,iBAAiB,SAAS,GAC/E;AAAA,gBACC,gBAAAP,OAAA,YACE;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,WAAWQ,OAAK,2DAA2D,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;AAAA,YACnG,UAAU,CAAC,UAAU;AAAA,YACrB,SAAS,MAAM,KAAK;AAAA,YAEpB,0BAAAR,MAAC,eAAY,MAAM,IAAG;AAAA;AAAA,QACxB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,WAAWQ,OAAK,4DAA4D,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;AAAA,YACrG,UAAU,CAAC,WAAW;AAAA,YACtB,SAAS,MAAM,MAAM;AAAA,YAErB,0BAAAR,MAAC,gBAAa,MAAM,IAAG;AAAA;AAAA,QACzB;AAAA,SACF;AAAA,MAED,WACC,gBAAAC,OAAC,SAAI,WAAWO,OAAK,8BAA8B,eAAe,GAChE;AAAA,wBAAAR,MAAC,SAAI,WAAU,0DACZ,gBAAM,IAAI,CAAC;AAAA,UACE;AAAA,UACA;AAAA,QACF,GAAG,cACb,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,WAAWQ,OAAK,8CAA8C,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,UAAU,CAAC;AAAA,YACjH,OAAO,EAAE,WAAW,eAAe,aAAa,YAAY,mBAAmB,EAAE,EAAE;AAAA,YAClF,GAAG;AAAA,YACJ,SAAS,MAAM,eAAe,KAAK;AAAA,YAElC;AAAA;AAAA,UANI;AAAA,QAOP,CACD,GACH;AAAA,QACA,gBAAAR;AAAA,UAAC;AAAA;AAAA,YACC,WAAWQ,OAAK,2GAA2G,SAAS;AAAA;AAAA,QACtI;AAAA,QACA,gBAAAR;AAAA,UAAC;AAAA;AAAA,YACC,WAAWQ,OAAK,4GAA4G,SAAS;AAAA;AAAA,QACvI;AAAA,SACF,IAEA,gBAAAR,MAAC,SAAI,WAAWQ,OAAK,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,UAAU,CAAC,GAAI,GAAG,cAC5E,mBAAS,YAAY,GACxB;AAAA,OAEJ;AAAA,IACC,QACC,gBAAAR;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACT,gBAAM,MAAM,EAAE,IAAI,WACjB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,WAAWQ,OAAK,gEAAgE;AAAA,cAC9E,yDAAyD,iBAAiB;AAAA,cAC1E,8CAA8C,iBAAiB;AAAA,YACjE,CAAC;AAAA,YACD,SAAS,MAAM,eAAe,KAAK;AAAA;AAAA,UAL9B;AAAA,QAMP,CACD;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ;;;AI9YA,OAAOC,YAAU;AA2Cb,SAaoB,OAAAC,OAbpB,QAAAC,cAAA;AA7BG,IAAM,OAAO,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,GAAG;AACL,MAAiB;AACpC,QAAM,eAAuB;AAAA,IAC3B,SAAS;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR,EAAE,KAAK;AAEP,QAAM,mBAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR,EAAE,KAAK;AAEP,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAWF;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,UACE,cAAc,YAAY;AAAA,UAC1B,gBAAgB,YAAY;AAAA,QAC9B;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,QACA,gBAAiB,gBAAAC,MAAC,UAAK,WAAW,kBAAmB,wBAAa;AAAA;AAAA;AAAA,EACrE;AAEJ;AAUO,IAAM,WAAW,CAAC;AAAA,EACE;AAAA,EACA,YAAY;AACd,MAAqB;AAC5C,SACE,gBAAAA,MAAC,SAAI,WAAWD,OAAK,kCAAkC,SAAS,GAC7D,eAAK,IAAI,CAAC,OAAO,UAChB,gBAAAC;AAAA,IAAC;AAAA;AAAA,MAEE,GAAG;AAAA,MACJ,OAAO,MAAM,SAAS;AAAA,MACtB,SAAS,MAAM,WAAW;AAAA,MAEzB,gBAAM;AAAA;AAAA,IALF;AAAA,EAMP,CACD,GACH;AAEJ;;;ACvFA,OAAOE,YAAU;AA+Bb,gBAAAC,aAAA;AAnBG,IAAM,kBAAkB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA4B;AAC1D,QAAM,QAAqB,CAAC;AAE5B,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;AACpD,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,YAAY,QAAW;AACzB,YAAM,KAAK,OAAO;AAClB,UAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,cAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,SACE,gBAAAA,MAAC,SAAI,WAAWD,OAAK,SAAS,GAAI,GAAG,WAClC,iBACH;AAEJ;;;ACnCA,OAAOE,YAAU;;;ACqCJ,SAYL,YAAAC,WAZK,OAAAC,aAAA;AA1Bb,IAAM,sBAAsB,CAAC,YAAY,SAAS;AAmB3C,IAAM,qBAAqB,CAAC;AAAA,EACE;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AACd,MAA+B;AAChE,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,gBAAAA,MAAC,QAAE;AAAA,IACZ,KAAK;AACH,aAAO,SAAS,gBAAAA,MAAC,UAAK,WAAuB,eAAK,MAAK,IAAU,KAAK;AAAA,IACxE,KAAK;AACH,aAAQ,gBAAAA,MAAC,UAAK,WAAU,qCAAoC,sBAAQ;AAAA,IACtE,KAAK;AACH,aAAO,SACH,gBAAAA,MAAC,UAAK,WAAuB,eAAK,SAAS,IAAI,CAAC,OAAO,UACrD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACmB,MAAM;AAAA;AAAA,QADD;AAAA,MACO,CACjC,GAAE,IAEL,gBAAAA,MAAAD,WAAA,EAAG,eAAK,SAAS,IAAI,CAAC,OAAO,UAAU,gBAAAC,MAAC,sBAA+B,MAAM,SAAb,KAAmB,CAAE,GAAE;AAAA,IAC3F,KAAK;AACH,aAAO,gBAAAA,MAAC,OAAG,eAAK,SAAS,IAAI,CAAC,OAAO,UAAU,gBAAAA,MAAC,sBAA+B,MAAM,SAAb,KAAmB,CAAE,GAAE;AAAA,IACjG,KAAK;AACH,aAAO,gBAAAA,MAAC,OAAG,eAAK,SAAS,IAAI,CAAC,OAAO,UAAU,gBAAAA,MAAC,sBAA+B,MAAM,SAAb,KAAmB,CAAE,GAAE;AAAA,IACjG,KAAK;AACH,aAAQ,gBAAAA,MAAC,OAAG,eAAK,SAAS,IAAI,CAAC,OAAO,UAAW,gBAAAA,MAAC,sBAA+B,MAAM,SAAb,KAAmB,CAAG,GAAE;AAAA,IACpG,KAAK;AACH,aACE,gBAAAA,MAAC,UAAK,WAAU,cAAc,eAAK,SAAS,IAAI,CAAC,OAAO,UACtD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACmB,MAAM;AAAA;AAAA,QADD;AAAA,MACO,CACjC,GAAE;AAAA,IAEP,KAAK;AACH,aACE,gBAAAA,MAAC,UAAK,WAAU,gBAAgB,eAAK,SAAS,IAAI,CAAC,OAAO,UACxD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACa,MAAM;AAAA;AAAA,QAAb;AAAA,MAAmB,CAC3B,GAAE;AAAA,IAEP,KAAK;AACH,aACE,gBAAAA,MAAC,UAAK,WAAU,kBAAkB,eAAK,SAAS,IAAI,CAAC,OAAO,UAC1D,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACa,MAAM;AAAA;AAAA,QAAb;AAAA,MAAmB,CAC3B,GAAE;AAAA,IAEP,KAAK;AACH,aACE,gBAAAA,MAAC,UAAK,WAAU,gBAAgB,eAAK,SAAS,IAAI,CAAC,OAAO,UACxD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACa,MAAM;AAAA;AAAA,QAAb;AAAA,MAAmB,CAC3B,GAAE;AAAA,IAEP,KAAK;AACH,aACE,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,eAAK,SAAS,IAAI,CAAC,OAAO,UACzD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACa,MAAM;AAAA;AAAA,QAAb;AAAA,MAAmB,CAC3B,GAAE;AAAA,IAEP,KAAK;AACH,aACE,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,eAAK,SAAS,IAAI,CAAC,OAAO,UACzD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACa,MAAM;AAAA;AAAA,QAAb;AAAA,MAAmB,CAC3B,GAAE;AAAA,IAEP;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,4BAA4B;AAAA,EAChC,EAAE,IAAI,KAAK,MAAM,SAAS;AAAA,EAC1B,EAAE,IAAI,KAAK,MAAM,OAAO;AAAA,EACxB,EAAE,IAAI,KAAK,MAAM,YAAY;AAAA,EAC7B,EAAE,IAAI,SAAS,MAAM,aAAa;AAAA,EAClC,EAAE,IAAI,WAAW,MAAM,UAAU;AAAA,EACjC,EAAE,IAAI,aAAa,MAAM,YAAY;AAAA,EACrC,EAAE,IAAI,QAAQ,MAAM,OAAO;AAAA,EAC3B,EAAE,IAAI,YAAY,MAAM,WAAW;AAAA,EACnC,EAAE,IAAI,YAAY,MAAM,WAAW;AACrC;AAEA,IAAM,4BAA4B;AAAA,EAChC,EAAE,IAAI,YAAY,MAAM,WAAW;AAAA,EACnC,EAAE,IAAI,WAAW,MAAM,UAAU;AACnC;AACA,IAAM,gBAAgB,CACpB,MACA,eAAuB,MACvBC,QAAe,KACf,QAAgB,QACJ;AACZ,MAAI,QAAQ,KAAK,QAAQ,YAAY;AACrC,QAAM,WAAsB,CAAC;AAG7B,SAAO,SAAS,IAAI;AAClB,QAAI,UAAU,IAAI;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,aAAS,KAAK,cAAc,KAAK,UAAU,GAAG,KAAK,CAAC,CAAC;AACrD,WAAO,KAAK,UAAU,KAAK;AAC3B,QAAI,KAAK,UAAU,GAAG;AACpB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,aAAO;AACP;AAAA,IACF;AACA,UAAM,gBAAgB,CAAC,cAAcA,OAAM,KAAK;AAChD,QAAI,cAAc,KAAK,WAAS,KAAK,CAAC,MAAM,KAAK,GAAG;AAClD,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,MAAM,cAAc,KAAK,WAAS,KAAK,CAAC,MAAM,KAAK;AAAA,MACrD,CAAC;AACD,aAAO,KAAK,UAAU,CAAC;AACvB,cAAQ,KAAK,QAAQ,YAAY;AACjC;AAAA,IACF;AACA,UAAM,WAAW,0BAA0B,KAAK,WAAS,KAAK,UAAU,CAAC,EAAE,WAAW,MAAM,EAAE,CAAC;AAC/F,QAAI,UAAU;AACZ,eAAS,KAAK;AAAA,QACZ,MAAM,SAAS;AAAA,MACjB,CAAC;AACD,aAAO,KAAK,UAAU,SAAS,GAAG,SAAS,CAAC;AAC5C,cAAQ,KAAK,QAAQ,YAAY;AACjC;AAAA,IACF;AACA,UAAM,WAAW,0BAA0B,KAAK,WAAS,KAAK,UAAU,CAAC,EAAE,WAAW,MAAM,EAAE,CAAC;AAC/F,QAAI,UAAU;AAEZ,UAAI,KAAK,SAAS,GAAG,SAAS,CAAC,MAAMA,OAAM;AACzC,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAAA,QAChD,CAAC;AACD,eAAO,KAAK,UAAU,SAAS,GAAG,SAAS,CAAC;AAC5C,gBAAQ,KAAK,QAAQ,YAAY;AACjC;AAAA,MACF;AACA,UAAI,UAAU;AACd,UAAI,QAAQ,SAAS,GAAG,SAAS;AACjC,UAAI,UAAU;AACd,UAAI,WAAW;AACf,aAAO,QAAQ,KAAK,QAAQ;AAC1B,YAAI,KAAK,KAAK,MAAMA,SAAQ,CAAC,UAAU;AACrC;AAAA,QACF;AACA,YAAI,KAAK,KAAK,MAAM,SAAS,CAAC,UAAU;AACtC;AACA,cAAI,YAAY,GAAG;AACjB,sBAAU;AACV;AAAA,UACF;AAAA,QACF;AACA,mBAAW,KAAK,KAAK,MAAM;AAC3B;AAAA,MACF;AAEA,UAAI,YAAY,IAAI;AAClB,iBAAS,KAAK;AAAA,UACZ,MAAM,SAAS;AAAA,UACf,UAAU,CAAC,cAAc,KAAK,UAAU,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC;AAAA,QAC3E,CAAC;AACD,eAAO,KAAK,UAAU,UAAU,CAAC;AACjC,gBAAQ,KAAK,QAAQ,YAAY;AACjC;AAAA,MACF;AAAA,IACF;AAEA,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,MAAM,KAAK,CAAC;AAAA,IACd,CAAC;AACD,WAAO,KAAK,UAAU,CAAC;AACvB,YAAQ,KAAK,QAAQ,YAAY;AAAA,EACnC;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAEA,IAAM,eAAe,CAAC,SAAkB;AACtC,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,CAAC,KAAK,OAAO,SAAY;AAAA,EAClC;AACA,MAAI,oBAAoB,KAAK,WAAS,UAAU,KAAK,IAAI,GAAG;AAC1D,WAAO;AAAA,EACT;AAEA,QAAM,cAAc;AAGpB,MAAI,YAAY,SAAS,WAAW,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,WAAsB,CAAC;AAC3B,WAAS,IAAI,GAAG,IAAI,YAAY,SAAS,QAAQ,KAAK;AACpD,UAAM,QAAQ,aAAa,YAAY,SAAS,CAAC,CAAE;AACnD,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AACA,QAAI,MAAM,SAAS,QAAQ;AACzB,eAAS,KAAK,GAAG,MAAM,QAAQ;AAAA,IACjC,OAAO;AACL,eAAS,KAAK,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,cAAY,WAAW;AACvB,aAAW,CAAC;AAEZ,WAAS,IAAI,GAAG,IAAI,YAAY,SAAS,QAAQ,KAAK;AACpD,UAAM,QAAQ,YAAY,SAAS,CAAC;AACpC,QAAI,OAAO;AACT,UAAI,MAAM,SAAS,UAAU,SAAS,SAAS,SAAS,CAAC,GAAG,SAAS,QAAQ;AAC3E,QAAC,SAAS,SAAS,SAAS,CAAC,EAAkD,QAAQ,MAAM;AAAA,MAC/F,OAAO;AACL,iBAAS,KAAK,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACA,cAAY,WAAW;AACvB,SAAO;AACT;AAOO,IAAM,sBAAsB,CAAC,EAAE,MAAM,UAAU,MAAgC;AACpF,QAAM,OAAO,cAAc,IAAI;AAC/B,QAAM,gBAAgB,aAAa,IAAI;AACvC,SAAO,gBAAAD,MAAC,sBAAmB,MAAM,eAAe,QAAQ,MAAM,WAAqB;AACrF;;;AD9OkB,gBAAAE,aAAA;AAVX,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA;AACF,MAAuB;AAChD,SACE,gBAAAA,MAAC,SAAI,WAAU,cACZ,kBAAQ,IAAI,CAAC,EAAE,IAAI,OAAO,SAAS,GAAG,UAAU,MAC/C,gBAAAA;AAAA,IAAC;AAAA;AAAA,MAEE,GAAG;AAAA,MACJ,OAAQ,gBAAAA,MAAC,QAAG,IAAQ,WAAU,sBAAsB,iBAAM;AAAA,MAC1D,mBAAmB;AAAA,MACnB,MAAM,CAAC,aAAc,gBAAAA,MAAC,iBAAc,YAAY,UAAU,WAAU,gBAAc;AAAA,MAClF,WAAWC,OAAK,cAAc,mBAAmB;AAAA,MAEjD,0BAAAD,MAAC,SAAI,WAAU,QACZ,kBAAQ,SAAS,aAAc,gBAAAA,MAAC,uBAAoB,MAAM,QAAQ,OAAM,IAAM,QAAQ,OACzF;AAAA;AAAA,IATK;AAAA,EAUP,CACD,GACH;AAEJ;;;AEnDA,SAAS,cAAc,aAAa,eAAAE,cAAa,gBAAAC,qBAAoB;AACrE,OAAOC,YAAU;;;ACDjB,SAAgB,cAAAC,aAAsC,aAAAC,aAAW,qBAAqB,UAAAC,SAAQ,YAAAC,kBAAgB;AAC9G,OAAOC,YAAU;;;ACDjB,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AASpC,IAAM,iBAA0C;AAAA,EAC9C,OAAO;AAAA,EACP,UAAU;AACZ;AAEO,SAAS,SAAS,SAA2B;AAClD,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAqC,MAAS;AACxE,QAAM,EAAE,OAAO,SAAS,IAA6B;AAAA,IACnD,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,QAAM,aAAa,MAAM;AACvB,iBAAa,KAAK;AAClB,aAAS,MAAS;AAAA,EACpB;AAEA,QAAM,eAAe,CAAC,kBAA8B;AAClD,QAAG,UAAU;AACX;AAAA,IACF;AACA,iBAAa,KAAK;AAClB,aAAS,WAAW,MAAM;AACxB,oBAAc;AACd,eAAS,MAAS;AAAA,IACpB,GAAG,KAAK,CAAC;AAAA,EACX;AAEA,EAAAD,YAAU,MAAM;AACd,WAAO,MAAM;AACX,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,EAAAA,YAAU,MAAM;AACd,QAAG,UAAS;AACV,mBAAa,KAAK;AAClB,eAAS,MAAS;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,UAAU,KAAK,CAAC;AAEpB,SAAO,EAAE,cAAc,YAAY,gBAAgB,CAAC,CAAC,MAAM;AAC7D;;;AClDA,OAAOE,YAAU;AA4Bb,gBAAAC,aAAA;AAxBJ,IAAM,eAA0C;AAAA,EAC9C,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,UAAU;AACZ;AAYO,IAAM,QAAQ,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAkB;AACtC,SACE,gBAAAA,MAAC,WAAO,GAAG,OAAO,WAAWD,OAAK,aAAa,SAAS,GAAG,SAAS,GACjE,qBAAW,WAAW,MACzB;AAEJ;;;ACjCA,SAAS,eAAAE,oBAAmB;AAErB,SAAS,qBAAqB;AACnC,QAAM,uBAAuBA,aAAY,MAAqB;AAC5D,WAAO,MAAM;AAAA,MACX,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF,EAAE;AAAA,MACA,CAAC,OACC,cAAc,eACd,CAAC,GAAG,aAAa,UAAU,KAC3B,CAAC,GAAG,aAAa,QAAQ,KACzB,GAAG,aAAa;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,sBAAsBA,aAAY,MAA+B;AACrE,UAAM,WAAW,qBAAqB;AACtC,QAAG,SAAS,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,QAAI,cAAc,SAAS,CAAC;AAC5B,QAAG,SAAS,yBAAyB,aAAa;AAChD,YAAM,eAAe,SAAS,QAAQ,SAAS,aAAa;AAC5D,oBAAc,UAAU,eAAe,KAAK,SAAS,MAAM;AAAA,IAC7D;AACA,WAAO;AAAA,EACT,GAAG,CAAC,oBAAoB,CAAC;AAEzB,QAAM,YAAYA,aAAY,MAAM;AAClC,UAAM,cAAc,oBAAoB;AACxC,iBAAa,MAAM;AAAA,EACrB,GAAG,CAAC,mBAAmB,CAAC;AAExB,QAAM,0BAA0BA,aAAY,MAA+B;AACzE,UAAM,WAAW,qBAAqB;AACtC,QAAG,SAAS,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,QAAI,kBAAkB,SAAS,CAAC;AAChC,QAAG,SAAS,yBAAyB,aAAa;AAChD,YAAM,eAAe,SAAS,QAAQ,SAAS,aAAa;AAC5D,UAAG,iBAAiB,GAAG;AACrB,0BAAkB,SAAS,SAAS,SAAS,CAAC;AAAA,MAChD,OAAO;AACL,0BAAkB,SAAS,eAAe,CAAC;AAAA,MAC7C;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,oBAAoB,CAAC;AAEzB,QAAM,gBAAgBA,aAAY,MAAM;AACtC,UAAM,kBAAkB,wBAAwB;AAChD,QAAI,gBAAiB,iBAAgB,MAAM;AAAA,EAC7C,GAAG,CAAC,uBAAuB,CAAC;AAE5B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC/DA,OAAOC,UAAS,aAAAC,mBAAiB;AAE1B,IAAM,sBAAsB,CACjC,KACA,UAAmB,UAChB;AACH,QAAM,CAAC,cAAc,eAAe,IAAID,OAAM,SAAS,KAAK;AAE5D,EAAAC,YAAU,MAAM;AACd,QAAI,WAAW,cAAc;AAC3B;AAAA,IACF;AACA,UAAM,WAAW,IAAI,qBAAqB,CAAC,CAAC,KAAK,MAAM;AACrD,UAAI,MAAM,kBAAkB,CAAC,cAAc;AACzC,YAAI,SAAS,MAAM;AACnB,wBAAgB,YAAY;AAAA,MAC9B;AAAA,IACF,GAAG;AAAA,MACD,WAAW;AAAA,IACb,CAAC;AAED,QAAI,IAAI,SAAS;AACf,eAAS,QAAQ,IAAI,OAAO;AAAA,IAC9B;AAEA,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,SAAS,cAAc,GAAG,CAAC;AACjC;;;AJ2EI,SACY,OAAAC,OADZ,QAAAC,cAAA;AAzFJ,IAAM,oBAAoB,CAAC,EAAE,WAAW,OAAO,WAAW,MAAM,MAA8B;AAC5F,SAAOC;AAAA,IACL;AAAA,IACA;AAAA,MACE,wEAAwE,CAAC,YAAY,CAAC;AAAA,MACtF,0FAA0F,CAAC,YAAY;AAAA,MACvG,oEAAoE;AAAA,IACtE;AAAA,EACF;AACF;AASA,IAAM,6BAA0D;AAAA,EAC9D,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,OAAO;AACT;AA2BA,IAAM,QAAQC,YAAyC,SAASC,OAAM;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,eAAe;AAAA,EACf;AAAA,EACA,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG,cAAc;AACvE,QAAM,EAAE,QAAQ,yBAAyB,YAAY,MAAM,IAAI,EAAE,GAAG,4BAA4B,GAAG,oBAAoB;AAEvH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,SAAS,EAAE,OAAO,UAAU,CAAC,WAAW,CAAC;AAE7C,QAAM,WAAWC,QAAyB,IAAI;AAC9C,QAAM,EAAE,UAAU,IAAI,mBAAmB;AAEzC,sBAAoB,UAAU,CAAC,SAAS;AACxC,sBAAoB,cAAc,MAAM,SAAS,OAAO;AAExD,QAAM,gBAAgB,CAAC,MAA6C;AAClE,QAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,UAAU;AACpC,QAAE,eAAe;AACjB,eAAS,SAAS,KAAK;AACvB,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,SACE,gBAAAJ,OAAC,SAAI,WAAWC,OAAK,EAAE,UAAU,SAAS,GAAG,kBAAkB,GAC5D;AAAA,aAAS,gBAAAF,MAAC,SAAO,GAAG,OAAO,SAAS,IAAI,WAAWE,OAAK,QAAQ,MAAM,SAAS,GAAG;AAAA,IACnF,gBAAAF;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAWE,OAAK,kBAAkB,EAAE,SAAS,CAAC,GAAG,SAAS;AAAA,QAC1D,WAAW,qBAAqB,gBAAgB;AAAA,QAChD,QAAQ,WAAS;AACf,mBAAS,KAAK;AACd,cAAI,mBAAmB,yBAAyB;AAC9C,4BAAgB,MAAM,OAAO,KAAK;AAClC,uBAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA,UAAU,OAAK;AACb,gBAAMI,SAAQ,EAAE,OAAO;AACvB,cAAI,iBAAiB;AACnB,yBAAa,MAAM;AACjB,kBAAG,SAAS,SAAQ;AAClB,yBAAS,QAAQ,KAAK;AACtB,oBAAG,CAAC,yBAAyB;AAC3B,kCAAgBA,MAAK;AAAA,gBACvB;AAAA,cACF,OAAO;AACL,gCAAgBA,MAAK;AAAA,cACvB;AAAA,YACF,CAAC;AAAA,UACH;AACA,mBAAS,CAAC;AACV,uBAAaA,MAAK;AAAA,QACpB;AAAA;AAAA,IACF;AAAA,KACF;AAEJ,CAAC;AAQD,IAAM,oBAAoB,CAAC;AAAA,EACE,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,GAAG;AACL,MAAkB;AAC3C,QAAM,CAAC,WAAW,YAAY,IAAIC,WAAS,KAAK;AAEhD,EAAAC,YAAU,MAAM;AACd,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,KAAK,CAAC;AAEV,SACE,gBAAAR;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,cAAc,UAAQ;AACpB,qBAAa,IAAI;AACjB,qBAAa,IAAI;AAAA,MACnB;AAAA;AAAA,EACF;AAEJ;AAWA,IAAM,YAAYG,YAA6C,SAASM,WAAU;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG,KAAK;AACxF,QAAM,QACJ,gBAAAT;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAWE;AAAA,QACT,kBAAkB,EAAE,UAAU,UAAU,CAAC,CAAC,UAAU,CAAC;AAAA,QACrD;AAAA,MACF;AAAA;AAAA,EACF;AAGF,SACE,gBAAAD,OAAC,SAAI,WAAWC,OAAK,yBAAyB,kBAAkB,GAC7D;AAAA,iBACC,gBAAAD,OAAC,WAAM,SAAS,IAAI,WAAWC,OAAK,sBAAsB,cAAc,GACrE;AAAA;AAAA,MACA,YAAY,gBAAAF,MAAC,UAAK,WAAU,0BAAyB,eAAC;AAAA,OACzD;AAAA,IAED;AAAA,IACA,aAAa,gBAAAA,MAAC,WAAM,SAAS,IAAI,WAAWE,OAAK,iBAAiB,cAAc,GAAI,qBAAU;AAAA,KACjG;AAEJ,CAAC;;;ADjND,SAAS,aAAAQ,aAAW,YAAAC,kBAAgB;AA8C5B,gBAAAC,OAKF,QAAAC,cALE;AA9BD,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAmE;AAC5F,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,QAAM,CAAC,OAAO,QAAQ,IAAIC,YAAkB,YAAY,GAAG,SAAS,CAAC;AAErE,QAAM,UAAU,cAAc;AAC9B,QAAM,cAAc,cAAc,KAAK,CAAC;AACxC,QAAM,aAAa,cAAc,YAAY;AAE7C,EAAAC,YAAU,MAAM;AACd,QAAI,SAAS;AACX,eAAS,GAAG;AAAA,IACd,OAAO;AACL,gBAAU,YAAY,GAAG,SAAS,CAAC;AAAA,IACrC;AAAA,EACF,GAAG,CAAC,WAAW,OAAO,CAAC;AAEvB,QAAM,aAAa,CAAC,SAAiB;AACnC,kBAAc,IAAI;AAAA,EACpB;AAEA,SACE,gBAAAF,OAAC,SAAI,WAAWG,OAAK,cAAc,SAAS,GAAG,OAC7C;AAAA,oBAAAJ,MAAC,cAAW,OAAM,eAAc,SAAS,MAAM,WAAW,CAAC,GAAG,UAAU,eAAe,SACrF,0BAAAA,MAAC,gBAAY,GACf;AAAA,IACA,gBAAAA,MAAC,cAAW,OAAM,eAAc,SAAS,MAAM,WAAW,YAAY,CAAC,GAAG,UAAU,eAAe,SACjG,0BAAAA,MAACK,cAAA,EAAW,GACd;AAAA,IACA,gBAAAJ,OAAC,SAAI,WAAU,oEACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,oBAAmB;AAAA,UACnB,WAAWI;AAAA,YACT;AAAA,UACF;AAAA,UACA,MAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,UAAU;AAAA,UACV,cAAc,CAAAE,WAAS;AACrB,gBAAIA,QAAO;AACT,uBAAS,MAAM,OAAOA,MAAK,GAAG,GAAG,SAAS,EAAE,SAAS,CAAC;AAAA,YACxD,OAAO;AACL,uBAASA,MAAK;AAAA,YAChB;AAAA,UACF;AAAA,UACA,iBAAiB,CAAAA,WAAS;AACxB,uBAAW,MAAM,OAAOA,MAAK,IAAI,GAAG,GAAG,YAAY,CAAC,CAAC;AAAA,UACvD;AAAA,UACA,qBAAqB,EAAE,OAAO,IAAI;AAAA;AAAA,MACpC;AAAA,MACA,gBAAAN,MAAC,UAAK,WAAU,oBAAoB,sBAAY,IAAI,GAAE;AAAA,MACtD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UAAkH;AAAA;AAAA,MAAU;AAAA,OAC1I;AAAA,IACA,gBAAAA,MAAC,cAAW,OAAM,eAAc,SAAS,MAAM,WAAW,YAAY,CAAC,GAAG,UAAU,cAAc,SAChG,0BAAAA,MAACO,eAAA,EAAY,GACf;AAAA,IACA,gBAAAP,MAAC,cAAW,OAAM,eAAc,SAAS,MAAM,WAAW,YAAY,CAAC,GAAG,UAAU,cAAc,SAChG,0BAAAA,MAAC,eAAW,GACd;AAAA,KACF;AAEJ;;;AM9FA,SAAS,cAAc;AACvB,OAAOQ,YAAU;;;ACFjB,SAAS,eAAAC,cAAa,aAAAC,aAAW,WAAAC,UAAS,YAAAC,kBAAgB;;;ACYnD,IAAM,gCAAgC,CAAI,QAAkB,SAAc,YAAkD;AACjI,SAAO,QAAQ,OAAO,YAAU;AAC9B,UAAM,uBAAuB,QAAQ,MAAM,GAAG,IAAI,WAAS,MAAM,YAAY,EAAE,KAAK,CAAC;AACrF,QAAG,CAAC,sBAAsB;AACxB,aAAO;AAAA,IACT;AACA,WAAO,OAAO,MAAM,iBAAe,CAAC,CAAC,qBAAqB,KAAK,WAAS,CAAC,CAAC,SAAS,MAAM,SAAS,YAAY,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAAA,EACtI,CAAC;AACH;AAcO,IAAM,yBAAyB,CAAI,QAAgB,SAAc,YAAkD;AACxH,SAAO,QAAQ,OAAO,YAAU;AAC9B,UAAM,uBAAuB,QAAQ,MAAM,GAAG,IAAI,WAAS,MAAM,YAAY,EAAE,KAAK,CAAC;AACrF,QAAG,CAAC,sBAAsB;AACxB,aAAO;AAAA,IACT;AACA,WAAO,CAAC,CAAC,qBAAqB,KAAK,WAAS,MAAM,SAAS,OAAO,YAAY,EAAE,KAAK,CAAC,CAAC;AAAA,EACzF,CAAC;AACH;AAaO,IAAM,0BAA0B,CAAI,QAAgB,SAAc,YAAkC;AACzG,SAAO,uBAAuB,QAAQ,SAAS,WAAS,CAAC,QAAQ,KAAK,CAAC,CAAC;AAC1E;AAWO,IAAM,eAAe,CAAC,QAAgB,YAAsB;AACjE,SAAO,wBAAwB,QAAQ,SAAS,WAAS,KAAK;AAChE;;;ADxDO,IAAM,YAAY,CAAI;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,WAAW;AACb,MAAyB;AACpD,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAAiB,iBAAiB,EAAE;AAChE,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAAc,IAAI;AAC9C,QAAM,aAAaC,SAAQ,MAAM,wBAAwB,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAEnF,QAAM,eAAeC,aAAY,CAAC,cAAuB;AACvD,UAAM,aAAa,aAAa;AAChC,QAAI,WAAW;AACb,gBAAU,MAAM;AAAA,IAClB;AACA,cAAU,8BAA8B,CAAC,YAAY,GAAG,UAAU,GAAG,MAAM,aAAa,CAAC;AAAA,EAC3F,GAAG,CAAC,YAAY,MAAM,QAAQ,aAAa,CAAC;AAE5C,EAAAC,YAAU,MAAM;AACd,QAAI,iBAAiB;AACnB,gBAAU,8BAA8B,CAAC,QAAQ,GAAG,UAAU,GAAG,MAAM,aAAa,CAAC;AAAA,IACvF;AAAA,EACF,GAAG,CAAC,YAAY,iBAAiB,MAAM,QAAQ,eAAe,oBAAoB,CAAC;AAEnF,QAAM,iBAAsBF,SAAQ,MAAM;AACxC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AACA,WAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,GAAG,CAAC,QAAQ,MAAM,CAAC;AAEnB,QAAM,0BAA+BA,SAAQ,MAAM;AACjD,QAAI,CAAC,iBAAiB;AACpB,aAAO;AAAA,IACT;AACA,WAAO,eAAe,KAAK,eAAe;AAAA,EAC5C,GAAG,CAAC,gBAAgB,eAAe,CAAC;AAEpC,QAAM,aAAaA,SAAQ,MAAM;AAC/B,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,MAAM,uBAAuB,CAAC;AAE5C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,WAAW,WAAW,SAAS;AAAA,IAC/B,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADhBQ,SACE,OAAAG,OADF,QAAAC,cAAA;AArCR,IAAM,mCAAgF;AAAA,EACpF,IAAI;AAAA,IACF,cAAc;AAAA,EAChB;AAAA,EACA,IAAI;AAAA,IACF,cAAc;AAAA,EAChB;AACF;AAaO,IAAM,iBAAiB,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,wBAAwB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,MAA8E;AAChH,QAAM,cAAc,eAAe,CAAC,kCAAkC,eAAe,GAAG,oBAAoB;AAC5G,QAAM,EAAE,QAAQ,WAAW,QAAQ,WAAW,aAAa,IAAI,UAAa,EAAE,MAAM,eAAe,cAAc,CAAC;AAElH,SACE,gBAAAA,OAAC,SAAI,WAAWC,OAAK,cAAc,SAAS,GACzC;AAAA,SAAK,SAAS,yBACb,gBAAAD,OAAC,SAAI,WAAU,2CACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,cAAc;AAAA,UACd,aAAa,YAAY,QAAQ;AAAA,UACjC;AAAA,UACA,WAAU;AAAA;AAAA,MACZ;AAAA,MACA,gBAAAA,MAAC,cAAW,OAAM,WAAU,SAAS,MAAM,aAAa,GACtD,0BAAAA,MAAC,UAAO,WAAU,iBAAe,GACnC;AAAA,OACF;AAAA,IAED,YACC,gBAAAA,MAAC,SAAI,WAAWE,OAAK,8BAA8B,mBAAmB,GACnE,iBAAO,IAAI,UAAU,GACxB,IAEA,gBAAAF,MAAC,SAAI,WAAU,yCAAyC,sBAAY,cAAc,GAAE;AAAA,KAExF;AAEJ;;;AG7EA,SAAS,SAAAG,QAAO,eAAAC,cAAa,gBAAAC,qBAAoB;AAKjD,OAAOC,YAAU;AACjB,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAuD5B,SAOE,OAAAC,OAPF,QAAAC,cAAA;AAjCR,IAAM,eAA6B;AAAA,EACjC,aAAa;AAAA,EACb,WAAW,oBAAI,IAAI,CAAC,CAAC,CAAC;AACxB;AAKO,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,oBAAI,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AACd,MAAmE;AAC5F,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,QAAM,OAAO,MAAM,gBAAgB,CAAC;AACpC,QAAM,EAAE,aAAa,UAAU,IAAI,SAAS;AAE5C,QAAM,SAAS,CAAC,YAAoB;AAClC,cAAU,IAAI,OAAO;AACrB,aAAS,EAAE,aAAa,SAAS,UAAU,CAAC;AAAA,EAC9C;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWC,OAAK,8BAA6B,SAAS;AAAA,MAEtD;AAAA,wBAAAF,MAAC,SAAI,WAAU,qCACb,0BAAAC;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,gBAAgB,KAAK,cAAc,IAAI,WAAW;AAAA,YAC5D,SAAS,MAAM;AACb,qBAAO,cAAc,CAAC;AAAA,YACxB;AAAA,YACA,WAAU;AAAA,YAEV;AAAA,8BAAAD,MAACG,cAAA,EAAY,MAAM,IAAG;AAAA,cACrB,YAAY,MAAM;AAAA;AAAA;AAAA,QACrB,GACF;AAAA,QACA,gBAAAH,MAAC,SAAI,WAAU,mDACZ,sBAAY,KAAK,IAAI,CAAC,OAAO,UAAU;AACtC,gBAAM,OAAO,UAAU,IAAI,KAAK;AAChC,iBACE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEC,SAAS,MAAM,QAAQ,OAAO,KAAK;AAAA,cACnC,WAAWE;AAAA,gBAAK;AAAA,gBAAwB;AAAA,kBACpC,gDAAgD,UAAU,eAAe,QAAQ,CAAC,cAAc,IAAI,WAAW;AAAA,kBAC/G,2DAA2D,UAAU,eAAe,QAAQ,CAAC,cAAc,IAAI,WAAW;AAAA,kBAC1H,8BAA8B,CAAC,QAAQ,cAAc,IAAI,WAAW;AAAA,gBACtE;AAAA,gBACA;AAAA,kBACE,kBAAkB;AAAA,kBAClB,sBAAsB,CAAC,QAAQ,cAAc,IAAI,WAAW;AAAA,gBAC9D;AAAA,cAAC;AAAA;AAAA,YAVE;AAAA,UAWP;AAAA,QAEJ,CAAC,GACH;AAAA,QACC,gBAAgB,iBACf,gBAAAF,MAAC,SAAI,WAAU,mCACb,0BAAAC;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,OAAO,cAAc,CAAC;AAAA,YACrC,WAAU;AAAA,YACV,UAAU,cAAc,IAAI,WAAW;AAAA,YAEtC;AAAA,0BAAY,MAAM;AAAA,cACnB,gBAAAD,MAACI,eAAA,EAAa,MAAM,IAAG;AAAA;AAAA;AAAA,QACzB,GACF;AAAA,QAED,gBAAgB,iBACf,gBAAAJ,MAAC,SAAI,WAAU,mCACb,0BAAAC;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,cAAc,IAAI,WAAW;AAAA,YACvC,SAAS;AAAA,YACT,WAAU;AAAA,YAEV;AAAA,8BAAAD,MAACK,QAAA,EAAM,MAAM,IAAG;AAAA,cACf,cAAc,YAAY,SAAS;AAAA;AAAA;AAAA,QACtC,GACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEO,IAAM,yBAAyB,CAAC,EAAE,OAAO,UAAU,GAAG,MAAM,MAAuB;AACxF,QAAM,CAAC,WAAW,YAAY,IAAIC,WAAuB,SAAS,YAAY;AAE9E,EAAAC,YAAU,MAAM;AACd,iBAAa,SAAS,YAAY;AAAA,EACpC,GAAG,CAAC,KAAK,CAAC;AAEV,SACE,gBAAAP;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,UAAU,cAAY;AACpB,qBAAa,QAAQ;AACrB,iBAAS,QAAQ;AAAA,MACnB;AAAA;AAAA,EACF;AAEJ;;;ACvIA,OAAOQ,YAAU;AA2DL,gBAAAC,OAGJ,QAAAC,cAHI;AArCL,IAAM,YAAY,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB;AAAA,EACnB,YAAY;AACd,MAAiE;AACzF,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAE1E,QAAM,mBAAmD;AAAA,IACvD,SAAS;AAAA,IACT,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAEA,QAAM,eAA+C;AAAA,IACnD,SAAS;AAAA,IACT,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAWE,OAAK,sBAAsB,SAAS;AAAA,MAC/C,OAAO;AAAA,QACL,iBAAiB,OAAO,QAAQ;AAAA,QAChC,gBAAgB;AAAA,MAClB;AAAA,MACA,0BAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAWC,OAAK,4CAA4C,aAAa,KAAK,GAAG,gBAAgB;AAAA,UAEhG;AAAA,qBACC,gBAAAF,MAAC,SAAI,WAAWE,OAAK,kCAAkC,iBAAiB,KAAK,CAAC,GAC5E,0BAAAF,MAAC,UAAK,WAAU,qBAAqB,iBAAM,GAC7C;AAAA,YAEF,gBAAAC,OAAC,SAAI,WAAU,8BACb;AAAA,8BAAAD,MAAC,UAAK,WAAU,sBAAsB,iBAAM;AAAA,cAC5C,gBAAAA,MAAC,UAAK,WAAU,iCAAiC,uBAAY;AAAA,eAC/D;AAAA,YACC,qBACC,gBAAAA,MAAC,SAAI,WAAU,6BACb,0BAAAA,MAAC,YAAO,SAAS,mBAAoB,sBAAY,UAAU,GAAE,GAC/D;AAAA;AAAA;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;;;ACtDQ,gBAAAG,OAYE,QAAAC,cAZF;AAXD,IAAM,kBAAkB,CAAC;AAAA,EACE,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,cAAc;AAAA,EACd,UAAU;AAAA,EACV,aAAa;AACf,MAA4B;AAC1D,SACE,gBAAAD,MAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,MAAM,QAAQ,SAAS,KAAK,GACvD,0BAAAC;AAAA,IAAC;AAAA;AAAA,MAAI;AAAA,MAAc;AAAA,MAAgB,SAAS,OAAO,KAAK,IAAI,MAAM;AAAA,MAAI,MAAK;AAAA,MACtE,OAAM;AAAA,MACT;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,IAAI,QAAQ;AAAA,YACZ,IAAI;AAAA,YACJ,IAAI,QAAQ;AAAA,YACZ,IAAG;AAAA,YACH,QAAO;AAAA,YACP;AAAA,YACA,iBAAiB,GAAG,UAAU,IAAI,aAAa,OAAO;AAAA,YACtD,eAAc;AAAA;AAAA,QAChB;AAAA,QACA,gBAAAA,MAAC,UACC,0BAAAC;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAI,QAAQ;AAAA,YACZ,IAAG;AAAA,YACH,IAAI,QAAQ;AAAA,YACZ,IAAI;AAAA,YACJ,eAAc;AAAA,YAEd;AAAA,8BAAAD,MAAC,UAAK,aAAY,KAAI,WAAU,gBAAc;AAAA,cAC9C,gBAAAA,MAAC,UAAK,QAAO,OAAM,WAAU,gBAAc;AAAA,cAC3C,gBAAAA,MAAC,UAAK,QAAO,KAAI,WAAU,gBAAe,aAAY,KAAG;AAAA;AAAA;AAAA,QAC3D,GACF;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;;;AClDA,SAAS,oBAAoB;AAG7B,OAAOE,YAAU;AA8Bb,SACE,OAAAC,OADF,QAAAC,cAAA;AAxBJ,IAAM,mCAA2E;AAAA,EAC/E,IAAI;AAAA,IACF,eAAe;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,eAAe;AAAA,EACjB;AACF;AAUO,IAAM,iBAAiB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AACF,MAA2E;AACxG,QAAM,cAAc,eAAe,CAAC,gCAAgC,GAAG,oBAAoB;AAC3F,SACE,gBAAAA,OAAC,SAAI,WAAWF,OAAK,sDAAsD,SAAS,GAClF;AAAA,oBAAAC,MAAC,gBAAa,MAAM,IAAI,WAAU,gBAAc;AAAA,IAC/C,aAAa,GAAG,YAAY,eAAe,CAAC;AAAA,KAC/C;AAEJ;;;ACrCA,SAAS,YAAAE,kBAAgB;;;ACDzB,SAAS,QAAAC,cAAY;AAQjB,gBAAAC,aAAA;AAFG,IAAM,mBAAmB,CAAC,EAAE,UAAU,MAA6B;AACxE,SACE,gBAAAA,MAAC,SAAI,WAAWD,OAAK,sEAAsE,SAAS,GAAE;AAE1G;;;ADPA,SAAS,QAAAE,cAAY;AAqCW,gBAAAC,aAAA;AApBzB,IAAM,2BAA2B,CAAC;AAAA,EACE;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAqC;AAC5E,QAAM,CAAC,oBAAoB,qBAAqB,IAAIC,WAAS,KAAK;AAClE,QAAM,CAAC,uBAAuB,wBAAwB,IAAIA,WAAS,KAAK;AACxE,MAAI,0BAA0B,CAAC,sBAAsB,CAAC,uBAAuB;AAC3E,0BAAsB,IAAI;AAC1B,eAAW,MAAM;AACf,4BAAsB,KAAK;AAC3B,+BAAyB,IAAI;AAAA,IAC/B,GAAG,sBAAsB;AAAA,EAC3B;AAEA,MAAI,aAAc,0BAA0B,oBAAqB;AAC/D,WAAQ,oBAAoB,gBAAAD,MAAC,oBAAiB,WAAWD,OAAK,SAAS,GAAE;AAAA,EAC3E;AACA,MAAI,UAAU;AACZ,WAAQ,kBAAkB,gBAAAC,MAAC,oBAAiB,WAAWD,OAAK,eAAe,SAAS,GAAE;AAAA,EACxF;AACA,SAAO;AACT;;;AE5CA,OAAOG,YAAU;AAsBb,SACE,OAAAC,OADF,QAAAC,cAAA;AAPG,IAAM,mBAAmB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AACF,MAA+E;AAC9G,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,SACE,gBAAAA,OAAC,SAAI,WAAWC,OAAK,sDAAsD,SAAS,GAClF;AAAA,oBAAAF,MAAC,YAAS,SAAQ,WAAS;AAAA,IAC1B,eAAe,GAAG,YAAY,SAAS,CAAC;AAAA,KAC3C;AAEJ;;;AC7BA,OAAOG,YAAU;AAcb,SAIQ,OAAAC,OAJR,QAAAC,cAAA;AAJG,IAAM,gBAAgB,CAAC,EAAE,YAAY,OAAO,OAAO,UAAU,SAAS,GAAG,KAAK,MAA0B;AAC7G,QAAM,eAAe,WAAW,eAAe,IAAI;AAEnD,SACE,gBAAAA,OAAC,SAAI,WAAU,yBAEX;AAAA,iBACE,gBAAAD,MAAC,SAAI,WAAWE,OAAK,uEAAuE,YAAY,GACtG,0BAAAF,MAAC,YAAS,SAAQ,WAAU,WAAU,cAAY,GACpD;AAAA,IAGJ,gBAAAA,MAAC,eAAa,GAAG,MAAM,UAAU,KAAK,UAAU,SAAS,YAAY,OAAO,SAAQ;AAAA,KACtF;AAEJ;;;ACiBI,SAOE,OAAAG,OAPF,QAAAC,cAAA;AAzBJ,IAAM,cAAc,EAAE,OAAO,IAAI,QAAQ,IAAI,KAAK,GAAG;AAS9C,IAAM,oBAAoB,CAAC;AAAA,EACE;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,WAAW;AACb,MAA8B;AAC9D,QAAM,cAAc,YAAY,IAAI;AACpC,QAAM,SAAS,cAAc;AAC7B,QAAM,SAAS,SAAS,cAAc;AACtC,QAAM,YAAY,IAAI,KAAK,KAAK;AAChC,QAAM,YAAY,YAAY;AAC9B,MAAI,cAAc,aAAa;AAC7B,gBAAY,MAAM;AAAA,EACpB;AACA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ,GAAG,WAAW;AAAA,QACtB,OAAO,GAAG,WAAW;AAAA,QACrB,WAAW,UAAU,QAAQ;AAAA,MAC/B;AAAA,MAEA;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YAAO,IAAI;AAAA,YAAQ,IAAI;AAAA,YAAQ,GAAG;AAAA,YAAQ,MAAK;AAAA,YAAc;AAAA,YACtD,WAAU;AAAA;AAAA,QAClB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAAO,IAAI;AAAA,YAAQ,IAAI;AAAA,YAAQ,GAAG;AAAA,YAAQ,MAAK;AAAA,YAAc;AAAA,YACtD,iBAAiB;AAAA,YAAW,kBAAkB;AAAA,YAAW,WAAU;AAAA;AAAA,QAC3E;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACpDA,OAAOE,YAAU;AAsDX,gBAAAC,OAGA,QAAAC,cAHA;AAtBC,IAAM,eAAe,CAAC;AAAA,EACG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA0F;AACtH,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAE1E,QAAM,UAAsD;AAAA,IAC1D,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAEA,SACE,gBAAAA,OAAC,SAAO,GAAG,WAAW,SAAS,UAAU,WAAWC,OAAK,mBAAmB,SAAS,GACnF;AAAA,oBAAAF,MAAC,SAAI,WAAU,mBACZ,UACH;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,+BACZ;AAAA,kBACC,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,mBAAmB,CAAC,EAAE,SAAS;AAAA,UACtC,SAAS;AAAA,UACT,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAAA,UAE3C,6BAAmB,CAAC,EAAE,QAAQ,YAAY,QAAQ;AAAA;AAAA,MACrD;AAAA,MAED,aACC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,mBAAmB,CAAC,EAAE,SAAS;AAAA,UACtC,SAAS;AAAA,UAET,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAAA,UAE3C,6BAAmB,CAAC,EAAE,QAAQ,YAAY,SAAS;AAAA;AAAA,MACtD;AAAA,MAEF,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAS;AAAA,UACT,OAAO,mBAAmB,CAAC,EAAE,SAAS,QAAQ,WAAW;AAAA,UACzD,SAAS;AAAA,UACT,UAAU,mBAAmB,CAAC,EAAE,YAAY;AAAA,UAE3C,6BAAmB,CAAC,EAAE,QAAQ,YAAY,SAAS;AAAA;AAAA,MACtD;AAAA,OACF;AAAA,KACF;AAEJ;;;AC/DI,gBAAAG,aAAA;AAXG,IAAM,sBAAsB,CAAC;AAAA,EACG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAwG;AAC3I,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAa;AAAA,QACX,GAAG;AAAA,QACH,WAAW,aAAa,aAAa,YAAY,gBAAgB;AAAA,QACjE,iBAAiB,aAAa,mBAAmB,YAAY,4BAA4B;AAAA,MAC3F;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,WAAW;AAAA,MACX,kBAAkB,CAAC,EAAE,MAAM,YAAY,QAAQ,EAAE,GAAG,EAAE,MAAM,YAAY,gBAAgB,EAAE,GAAG,EAAE,MAAM,YAAY,MAAM,EAAE,CAAC;AAAA,MACzH,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACvByC,gBAAAC,aAAA;AAVlC,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AAChD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACC,GAAG;AAAA,MAEH,iBAAO,IAAI,CAAC,YAAY,UAAU,gBAAAA,MAAC,SAA8B,GAAG,cAAtB,SAAS,KAAK,EAAmB,CAAE;AAAA;AAAA,EACpF;AAEJ;;;ACxBA,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AACpC,OAAOC,YAAU;;;ACHjB;AAAA,EAIE,aAAAC;AAAA,EACA,UAAAC;AAAA,EAAQ,YAAAC;AAAA,OACH;AACP,OAAOC,YAAU;;;ACNjB,SAAS,aAAAC,mBAAiB;AAEnB,IAAM,kBAAkB,CAAsC,MAAU,YAAwB;AACrG,EAAAA,YAAU,MAAM;AACd,UAAM,WAAW,CAAC,UAAmC;AAInD,UAAI,MAAM,WAAW,KAAM;AAE3B,UAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,IAAI,QAAQ,SAAS,MAAM,MAAc,CAAC,GAAG;AAClF;AAAA,MACF;AAEA,cAAQ;AAAA,IACV;AACA,aAAS,iBAAiB,aAAa,QAAQ;AAC/C,aAAS,iBAAiB,cAAc,QAAQ;AAChD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,QAAQ;AAClD,eAAS,oBAAoB,cAAc,QAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,CAAC;AACpB;;;AChBA,IAAM,UAAU,CAAI,UAAsC,QAAsB;AAC9E,MAAI,OAAO,aAAa,YAAY;AAClC,WAAQ,SAA4B,GAAG;AAAA,EACzC;AAEA,SAAO,YAAY;AACrB;AAEO,IAAM,kBAAkB;AAAA,EAC7B;AACF;;;ACHA,IAAM,gCAAgE;AAAA,EACpE,aAAa;AAAA,EACb,UAAU;AAAA,EACV,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,UAAU;AACZ;AAEO,IAAM,qBAAqB,CAAC,SAAmB,YAAoD;AACxG,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAoC,EAAE,GAAG,+BAA+B,GAAG,QAAQ;AAEnF,MAAI,YAAY,CAAC,SAAS;AACxB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,OAAe;AAAA,IACnB,aAAa,QAAQ,OAAO;AAAA,IAC5B,YAAY,QAAQ;AAAA,IACpB,cAAc,QAAQ,QAAQ;AAAA,IAC9B,aAAa,QAAQ;AAAA,IACrB,QAAQ,QAAQ,OAAO,QAAQ,QAAQ;AAAA,EACzC,EAAE,mBAAmB;AAErB,QAAM,MAAc;AAAA,IAClB,YAAY,QAAQ,MAAM;AAAA,IAC1B,WAAW,QAAQ;AAAA,IACnB,eAAe,QAAQ,SAAS;AAAA,IAChC,cAAc,QAAQ;AAAA,IACtB,QAAQ,QAAQ,MAAM,QAAQ,SAAS;AAAA,EACzC,EAAE,iBAAiB;AAEnB,QAAM,aAAiC;AAAA,IACrC,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,aAAa;AAAA,IACb,QAAQ;AAAA,EACV,EAAE,mBAAmB;AAErB,QAAM,aAAiC;AAAA,IACrC,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,cAAc;AAAA,IACd,QAAQ;AAAA,EACV,EAAE,iBAAiB;AAEnB,SAAO;AAAA,IACL,MAAM,KAAK,IAAI,MAAM,WAAW;AAAA,IAChC,KAAK,KAAK,IAAI,KAAK,WAAW;AAAA,IAC9B,WAAW,CAAC,cAAc,KAAK,cAAc,GAAG,EAAE,KAAK,GAAG;AAAA,EAC5D;AACF;;;AH3DA,SAAS,oBAAoB;AAe3B,SAsGE,YAAAC,WAtGF,OAAAC,OAsGE,QAAAC,cAtGF;AAPK,IAAM,WAAW,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb;AACF,MACvB,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACC,WAAWE,OAAK,gFAAgF;AAAA,MAC9F,cAAc,cAAc;AAAA,MAC5B,aAAa,cAAc;AAAA,MAC3B,yCAAyC;AAAA,MACzC,sCAAsC,CAAC;AAAA,MACvC,kBAAkB,CAAC,CAAC;AAAA,IACtB,GAAG,SAAS;AAAA,IACZ;AAAA,IAEC;AAAA;AACH;AAGF,SAAS,qBAAqB,SAAS;AACrC,QAAM,cAAc,CAAC;AACrB,MAAI,SAAS,QAAQ;AACrB,SAAO,QAAQ;AACb,gBAAY,KAAK,MAAM;AACvB,aAAS,OAAO;AAAA,EAClB;AACA,SAAO;AACT;AAwBO,IAAM,OAAO,CAAwB;AAAA,EACE;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,gBAAgB;AAClB,MAAoB;AAC9D,QAAM,EAAE,WAAW,QAAQ,cAAc,UAAU,IAAI,cAAc,EAAE,YAAY,CAAC,eAAe,SAAS,CAAC;AAC7G,QAAM,aAAaC,QAAU,IAAI;AACjC,QAAM,UAAUA,QAAuB,IAAI;AAC3C,kBAAgB,CAAC,YAAY,OAAO,GAAG,MAAM,UAAU,KAAK,CAAC;AAE7D,QAAM,CAAC,UAAU,WAAW,IAAIC,WAAkB,IAAI;AACtD,QAAM,MAAe;AAAA,IACnB;AAAA,IACA,OAAO,MAAM,UAAU,KAAK;AAAA,IAC5B,YAAY,MAAM,UAAU,eAAa,CAAC,SAAS;AAAA,IACnD;AAAA,EACF;AAEA,QAAM,eAAe;AAAA,IACnB,WAAW,SAAS,sBAAsB;AAAA,IAC1C,EAAE,mBAAmB,mBAAmB,qBAAqB,qBAAqB,SAAS;AAAA,EAC7F;AAEA,EAAAC,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,UAAM,YAAY,WAAW;AAC7B,QAAI,CAAC,UAAW;AAEhB,UAAM,oBAAoB,qBAAqB,SAAS;AAExD,UAAM,QAAQ,MAAM,UAAU,KAAK;AACnC,sBAAkB,QAAQ,CAAC,WAAW;AACpC,aAAO,iBAAiB,UAAU,KAAK;AAAA,IACzC,CAAC;AACD,WAAO,iBAAiB,UAAU,KAAK;AAEvC,WAAO,MAAM;AACX,wBAAkB,QAAQ,CAAC,WAAW;AACpC,eAAO,oBAAoB,UAAU,KAAK;AAAA,MAC5C,CAAC;AACD,aAAO,oBAAoB,UAAU,KAAK;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,EAAAA,YAAU,MAAM;AACd,QAAI,QAAQ;AACV,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,gBAAAJ,OAAAF,WAAA,EACG;AAAA,YAAQ,KAAK,UAAU;AAAA,IACvB,aAAc,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACd,KAAK;AAAA,QACL,SAAS,OAAK,EAAE,gBAAgB;AAAA,QAChC,WAAWE;AAAA,UACT;AAAA,UACA;AAAA,YACE,kBAAkB;AAAA,YAClB,mBAAmB,CAAC;AAAA,YACpB,UAAU;AAAA,UACZ;AAAA,UACA;AAAA,QACF;AAAA,QACA,gBAAgB,MAAM;AACpB,cAAI,CAAC,QAAQ;AACX,wBAAY,IAAI;AAAA,UAClB;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,GAAG;AAAA,QACL;AAAA,QAEC,0BAAgB,QAAiB,UAAU,GAAG;AAAA;AAAA,IACjD,GAAS,SAAS,IAAI;AAAA,KACxB;AAEJ;;;AIxJA,SAAS,UAAAI,eAAc;AACvB,SAAS,QAAAC,cAAY;AAoBjB,SACE,OAAAC,OADF,QAAAC,cAAA;AAVG,IAAM,YAAY,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsB;AAC9C,QAAM,cAAc,eAAgC,CAAC,eAAe,CAAC;AAErE,SACE,gBAAAA,OAAC,SAAI,WAAWF,OAAK,2CAA2C,kBAAkB,GAChF;AAAA,oBAAAC;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,aAAa,eAAe,YAAY,QAAQ;AAAA;AAAA,IAClD;AAAA,IACC,YACC,gBAAAA,MAAC,cAAW,OAAM,WAAU,UAAU,iBAAiB,SAAS,UAC9D,0BAAAA,MAACF,SAAA,EAAO,WAAU,iBAAe,GACnC;AAAA,KAEJ;AAEJ;;;ALfI,SA2GQ,YAAAI,WA3GR,OAAAC,OA8EM,QAAAC,cA9EN;AAPG,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuB;AAChD,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAWE,OAAK,wBAAwB,SAAS;AAAA,MACjD,mBAAmB,qBAAqB;AAAA,MACxC,OAAO,EAAE,GAAG,OAAO,WAAW,MAAM,aAAa,gBAAgB;AAAA;AAAA,EACnE;AAEJ;AAkCO,IAAM,SAAS,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsB;AAChD,QAAM,iBAAiB,QAAQ,KAAK,YAAU,OAAO,UAAU,KAAK;AACpE,MAAI,UAAU,UAAa,mBAAmB,UAAa,6BAA6B,QAAW;AACjG,YAAQ,KAAK,+PAE2D;AAAA,EAC1E;AAEA,QAAM,gBAAgB,CAAC,4BAA4B,CAAC,gBAAgB;AAEpE,QAAM,EAAE,QAAQ,QAAQ,UAAU,IAAI,UAA2B;AAAA,IAC/D,MAAM;AAAA,IACN,eAAeC,aAAY,CAAC,SAA0B,KAAK,YAAY,CAAC,CAAC;AAAA,IACzE,GAAG;AAAA,EACL,CAAC;AAED,SACE,gBAAAF,OAAC,SAAI,WAAWC,OAAK,SAAS,GAC3B;AAAA,aACC,gBAAAF,MAAC,SAAO,GAAG,OAAO,WAAW,MAAM,aAAa,YAAY,WAAWE,OAAK,QAAQ,MAAM,SAAS,GAAE;AAAA,IAEvG,gBAAAF;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,SAAS,CAAC,EAAE,YAAY,QAAQ,SAAS,GAAG,QAC1C,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAWC;AAAA,cACT;AAAA,cACA;AAAA,gBACE,gBAAgB,CAAC;AAAA,gBACjB,6EAA6E,CAAC;AAAA,gBAC9E,2FAA2F;AAAA,cAC7F;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,YACT;AAAA,YAEC;AAAA,eAAC,iBACA,gBAAAF,MAAC,UAAK,WAAU,iBAAiB,sCAA4B,gBAAgB,OAAM;AAAA,cACpF,iBACC,gBAAAA,MAAC,UAAK,WAAWE,OAAK,yBAAyB,iBAAiB,GAC7D,oBACH;AAAA,cAEF,gBAAAF,MAAC,iBAAc,YAAY,QAAO;AAAA;AAAA;AAAA,QACpC;AAAA,QAEF,eAAeE,OAAK,2CAA2C,UAAU,aAAa;AAAA,QAErF,WAAC,QAAQ;AACR,gBAAM,EAAE,MAAM,IAAI;AAClB,iBACE,gBAAAD,OAAAF,WAAA,EACG;AAAA,aAAC,eAAe,YACf,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP,cAAc;AAAA,gBACd,WAAW;AAAA;AAAA,YACb;AAAA,YAEF,gBAAAC,OAAC,SAAI,WAAU,8BACZ;AAAA,qBAAO,IAAI,CAAC,QAAQ,UACnB,gBAAAD;AAAA,gBAAC;AAAA;AAAA,kBAEC,YAAY,WAAW;AAAA,kBACvB,OAAO,EAAE,OAAO,OAAO,MAAM;AAAA,kBAC7B,SAAS,MAAM;AACb,6BAAS,OAAO,KAAK;AACrB,0BAAM;AAAA,kBACR;AAAA,kBACA,UAAU,OAAO;AAAA;AAAA,gBAPZ;AAAA,cAQP,CACD;AAAA,cACA,mBAAmB,gBAAgB,EAAE,GAAG,KAAK,QAAQ,UAAU,MAAM,CAAC;AAAA,eACzE;AAAA,aACF;AAAA,QAEJ;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEO,IAAM,qBAAqB,CAAM;AAAA,EACE;AAAA,EAAS;AAAA,EAAU;AAAA,EAAO;AAAA,EAAU,GAAG;AACzC,MAAsB;AAC5D,QAAM,CAAC,UAAU,WAAW,IAAII,WAAS,KAAK;AAE9C,EAAAC,YAAU,MAAM;AACd,QAAI,QAAQ,KAAK,CAAAC,aAAWA,SAAQ,UAAU,KAAK,GAAG;AACpD,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,SAAS,KAAK,CAAC;AAEnB,SACE,gBAAAN;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA,UAAU,CAAAO,WAAS;AACjB,oBAAYA,MAAK;AACjB,iBAASA,MAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AMhIM,SACE,OAAAC,OADF,QAAAC,cAAA;AAzCN,IAAM,kCAAyE;AAAA,EAC7E,IAAI;AAAA,IACF,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,GAAG,aAAa;AAAA,EAClB;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,GAAG,aAAa;AAAA,EAClB;AACF;AASO,IAAM,gBAAgB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA4F;AACxH,QAAM,EAAE,UAAU,YAAY,IAAI,YAAY;AAC9C,QAAM,cAAc,eAAe,CAAC,+BAA+B,GAAG,oBAAoB;AAE1F,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAa;AAAA,QACX,GAAG;AAAA,QACH,WAAW,aAAa,aAAa,YAAY,UAAU;AAAA,QAC3D,iBAAiB,aAAa,mBAAmB,YAAY,gBAAgB;AAAA,MAC/E;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEJ,0BAAAC,OAAC,SAAI,WAAU,QACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,SAAS,aAAa,UAAU,IAAI,CAACE,eAAc,EAAE,OAAO,YAAYA,SAAQ,GAAG,OAAOA,UAAS,EAAE;AAAA,YACrG,UAAU,CAACA,cAAqB,YAAYA,SAAoB;AAAA,YAChE,eAAe,EAAE,UAAU,KAAK;AAAA;AAAA,QAClC;AAAA,QACA,gBAAAF,MAAC,SAAI,WAAU,+BACb,0BAAAA,MAAC,eAAY,WAAS,MAAC,OAAM,YAAW,SAAS,SAC9C,sBAAY,MAAM,GACrB,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;ACxEA,SAAS,iBAAAG,gBAAe,cAAAC,aAAY,aAAAC,aAAW,YAAAC,kBAAgB;AA8E3D,gBAAAC,aAAA;AAzEJ,IAAM,SAAS,CAAC,SAAS,MAAM;AAQ/B,IAAM,8BAAiE;AAAA,EACrE,IAAI;AAAA,IACF,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,IAAM,YAAY;AAAA,EACvB;AAAA,EACA,aAAa;AACf;AAOO,IAAM,eAAeC,eAAgC;AAAA,EAC1D,OAAO;AAAA,EACP,UAAU;AACZ,CAAC;AAMM,IAAM,gBAAgB,CAAC,EAAE,UAAU,eAAe,QAAQ,MAA6C;AAC5G,QAAM,CAAC,OAAO,QAAQ,IAAIC,WAAoB,YAAY;AAC1D,QAAM,CAAC,aAAa,cAAc,IAAI,gBAA2B,SAAS,YAAY;AAEtF,EAAAC,YAAU,MAAM;AACd,QAAI,UAAU,cAAc;AAC1B,cAAQ,KAAK,+EAAgF;AAC7F,eAAS,YAAY;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,EAAAA,YAAU,MAAM;AACd,aAAS,gBAAgB,aAAa,cAAc,KAAK;AACzD,mBAAe,KAAK;AAAA,EACtB,GAAG,CAAC,KAAK,CAAC;AAEV,EAAAA,YAAU,MAAM;AACd,QAAI,gBAAgB,MAAM;AACxB,eAAS,WAAW;AACpB;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,WAAW,8BAA8B,EAAE;AACtE,aAAS,cAAc,SAAS,OAAO;AAAA,EACzC,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAH,MAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,OAAO,SAAS,GAC7C,UACH;AAEJ;AAGO,IAAM,WAAW,MAAMI,YAAW,YAAY;;;ACjC/C,SACE,OAAAC,OADF,QAAAC,cAAA;AAnCN,IAAM,kCAA2E;AAAA,EAC/E,IAAI;AAAA,IACF,aAAa;AAAA,EACf;AAAA,EACA,IAAI;AAAA,IACF,aAAa;AAAA,EACf;AACF;AASO,IAAM,aAAa,CAAC;AAAA,EACK;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsF;AAClH,QAAM,EAAE,OAAO,SAAS,IAAI,SAAS;AACrC,QAAM,cAAc,eAAe,CAAC,iCAAiC,iBAAiB,UAAU,WAAW,GAAG,oBAAoB;AAElI,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAa;AAAA,QACX,GAAG;AAAA,QACH,WAAW,aAAa,aAAa,YAAY,OAAO;AAAA,QACxD,iBAAiB,aAAa,mBAAmB,YAAY,aAAa;AAAA,MAC5E;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEJ,0BAAAC,OAAC,SAAI,WAAU,QACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,SAAS,UAAU,OAAO,IAAI,CAACE,YAAW,EAAE,OAAO,YAAYA,MAAK,GAAG,OAAOA,OAAM,EAAE;AAAA,YACtF,UAAU,CAACA,WAAkB,SAASA,MAAkB;AAAA,YACxD,eAAe,EAAE,UAAU,KAAK;AAAA;AAAA,QAClC;AAAA,QACA,gBAAAF,MAAC,SAAI,WAAU,+BACb,0BAAAA,MAAC,eAAY,WAAS,MAAC,OAAM,YAAW,SAAS,SAC9C,sBAAY,MAAM,GACrB,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;ACrEA,SAAS,SAAAG,cAAa;;;ACAtB,SAAS,YAAAC,kBAAgB;AAEzB,YAAY,uBAAuB;AACnC,SAAS,SAAAC,QAAO,aAAa;AAC7B,OAAOC,YAAU;AAiFT,SACuB,OAAAC,OADvB,QAAAC,cAAA;AA3ER,IAAM,sBAAoD;AAAA,EACxD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,0BAAwD;AAAA,EAC5D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAuBA,IAAM,WAAW,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AACF,MAAqB;AACrC,QAAM,gBAAgB,oBAAoB,IAAI;AAC9C,QAAM,gBAAgB,wBAAwB,IAAI;AAElD,QAAM,kBAAkB,CAACC,aAA0B;AACjD,QAAI,kBAAkB;AACpB,uBAAiBA,QAAO;AAAA,IAC1B;AACA,QAAI,UAAU;AACZ,eAASA,aAAY,kBAAkB,QAAQA,QAAO;AAAA,IACxD;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,UAAM,WAAW,YAAY,kBAAkB,QAAQ,CAAC;AACxD,oBAAgB,QAAQ;AAAA,EAC1B;AAEA,SACE,gBAAAD,OAAC,SAAI,WAAWE,OAAK,gDAAgD,kBAAkB,GAAG,SAAS,aACjG;AAAA,oBAAAH;AAAA,MAAmB;AAAA,MAAlB;AAAA,QACC,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAWG,OAAK,eAAe,+CAA+C;AAAA,UAC5E,wFAAwF;AAAA,UACxF,oDAAoD,CAAC;AAAA,UACrD,cAAc,CAAC,YAAY,CAAC;AAAA,UAC5B,6CAA8C,CAAC,YAAY,YAAY,QAAQ,YAAY;AAAA,QAC7F,GAAG,SAAS;AAAA,QAEZ,0BAAAF,OAAmB,6BAAlB,EACE;AAAA,sBAAY,QAAQ,gBAAAD,MAACI,QAAA,EAAM,WAAW,eAAc;AAAA,UACpD,YAAY,mBAAmB,gBAAAJ,MAAC,SAAM,WAAW,eAAc;AAAA,WAClE;AAAA;AAAA,IACF;AAAA,IACC,SACC,gBAAAA,MAAC,SAAO,GAAG,OAAO,WAAWG,OAAK,MAAM,SAAS,GAAG,SAAS,IAAG;AAAA,KAEpE;AAEJ;AAcA,IAAM,uBAAuB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,GAAG;AACL,MAAiC;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAIE,WAAS,YAAY;AAEnD,QAAM,eAAe,CAACH,aAA0B;AAC9C,QAAI,kBAAkB;AACpB,uBAAiBA,QAAO;AAAA,IAC1B;AACA,QAAI,UAAU;AACZ,eAASA,aAAY,kBAAkB,QAAQA,QAAO;AAAA,IACxD;AACA,eAAWA,QAAO;AAAA,EACpB;AAEA,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,kBAAkB;AAAA;AAAA,EACpB;AAEJ;;;ACrIA,SAAS,qBAAqB;AAC9B,OAAOM,YAAU;AAsCX,SAQE,OAAAC,OARF,QAAAC,cAAA;AAfC,IAAM,eAAe,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAuE;AAClG,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,QAAM,qBAAqB,gBAAgB,CAAC;AAC5C,SACE,gBAAAA,OAAC,SAAI,WAAWC,OAAK,oBAAoB,SAAS,GAChD;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAWC;AAAA,UACT;AAAA,UAAwF;AAAA,YACtF,oFAAoF,CAAC;AAAA,YACrF,gFAAgF;AAAA,UAClF;AAAA,UAAG;AAAA,QACL;AAAA,QAEA;AAAA,0BAAAF,MAAC,SAAI,WAAU,qCAAqC,gBAAK;AAAA,UACzD,gBAAAA,MAAC,UAAK,WAAU,iBAAiB,gBAAK;AAAA;AAAA;AAAA,IACxC;AAAA,IACA,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAWC;AAAA,UACT;AAAA,UAAoG;AAAA,YAClG,yCAAyC,CAAC;AAAA,YAC1C,mEAAmE;AAAA,UACrE;AAAA,UAAG;AAAA,QACL;AAAA,QAEC;AAAA,gBAAM,EAAE,cAAc,SAAS,CAAC;AAAA,UAChC,sBACC,gBAAAF,MAAC,SAAI,WAAU,gBAAe,0BAAAA,MAAC,iBAAc,MAAM,IAAG,GAAE;AAAA,UAEzD,YAAY,YACX,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,OAAM;AAAA,cACN,WAAWE,OAAK,gBAAgB,EAAE,qBAAqB,CAAC,YAAY,SAAS,CAAC;AAAA,cAC9E,UAAU,CAAC,YAAY;AAAA,cAEtB,sBAAY,QAAQ;AAAA;AAAA,UACvB;AAAA;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;;;AF1CY,gBAAAC,aAAA;AAdL,IAAM,mBAAmB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,GAAG;AACL,MAA+E;AAC9G,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAE1E,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,UAAU;AAAA,MACV;AAAA,MACA,MAAM,gBAAAA,MAACC,QAAA,EAAM,MAAM,IAAG;AAAA,MACtB,OAAO,MACL,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,SAAS;AAAA,UAClB,UAAU;AAAA,UACV;AAAA,UACA,OAAO,EAAE,MAAM,GAAG,YAAY,KAAK,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,WAAW,cAAc;AAAA,UACtF,oBAAmB;AAAA;AAAA,MACrB;AAAA;AAAA,EAEJ;AAEJ;;;AG9CA,SAAS,oBAAoB;AAC7B,OAAOE,YAAU;AAgCL,gBAAAC,aAAA;AAfL,IAAM,eAAe,CAAC;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,MAAyB;AACpD,QAAM,WAAW,CAAC,CAAC;AAEnB,QAAM,WAAW,QAAS,SAAS,aAAa,eAAe,KAAK,IAAI,WAAW,KAAK,IAAK;AAC7F,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,MAAM,gBAAAA,MAAC,gBAAa,MAAM,IAAG;AAAA,MAC7B,OAAO,CAAC,EAAE,aAAa,MACrB,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAWC,OAAK,4EAA4E,EAAE,sBAAsB,gBAAgB,CAAC,SAAS,CAAC;AAAA,UAC/I,OAAO;AAAA,UACP,MAAM,SAAS,aAAa,mBAAmB;AAAA,UAC/C;AAAA,UACA,UAAU,CAAC,UAAU;AACnB,kBAAMC,SAAQ,MAAM,OAAO;AAC3B,gBAAI,CAACA,QAAO;AACV,oBAAM,eAAe;AACrB;AAAA,YACF;AACA,kBAAM,UAAU,IAAI,KAAKA,MAAK;AAC9B,qBAAS,OAAO;AAAA,UAClB;AAAA,UACA,iBAAiB,CAACA,WAAU,eAAe,IAAI,KAAKA,MAAK,CAAC;AAAA;AAAA,MAC5D;AAAA;AAAA,EAEJ;AAEJ;;;ACtDA,SAAS,MAAM,QAAAC,aAAY;AAC3B,OAAOC,YAAU;;;ACAjB,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAGpC,OAAOC,YAAU;AAgBjB,SAAS,YAAY;AA0Eb,SAyBM,YAAAC,WAzBN,OAAAC,OAmCM,QAAAC,cAnCN;AAlER,IAAM,gCAA0E;AAAA,EAC9E,IAAI;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,EACZ;AACF;AA4BO,IAAM,cAAc,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAE5B;AACH,QAAM,cAAc,eAAe,CAAC,iBAAiB,6BAA6B,GAAG,oBAAoB;AACzG,QAAM,EAAE,QAAQ,QAAQ,UAAU,IAAI,UAAgC;AAAA,IACpE,MAAM;AAAA,IACN,eAAeC,aAAY,CAAC,SAA+B,KAAK,YAAY,CAAC,CAAC;AAAA,IAC9E,GAAG;AAAA,EACL,CAAC;AAED,QAAM,gBAAgB,QAAQ,OAAO,WAAS,MAAM,QAAQ;AAE5D,QAAM,gBAAgB,CAAC,4BAA4B,cAAc,WAAW;AAE5E,SACE,gBAAAD,OAAC,SAAI,WAAWE,OAAK,SAAS,GAC3B;AAAA,aACC,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,SAAS,MAAM;AAAA,QACf,WAAWG,OAAK,SAAS,MAAM,SAAS;AAAA,QACxC,WAAW,MAAM,aAAa;AAAA;AAAA,IAChC;AAAA,IAEF,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,SAAS,CAAC,EAAE,YAAY,QAAQ,SAAS,GAAG,QAC1C,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAWG;AAAA,cACT;AAAA,cACA;AAAA,gBACE,YAAY;AAAA,gBACZ,6EAA6E,CAAC;AAAA,gBAC9E,2FAA2F;AAAA,cAC7F;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,YACT;AAAA,YAEC,2BACC,gBAAAH,MAAAD,WAAA,EACG,0BACC,gBAAAC,MAAC,cAAW,UAAoB,MAAK,SAAQ,OAAM,WACjD,0BAAAA,MAAC,QAAI,GACP,IAEA,gBAAAA,MAAC,YAAS,MAAM,cAAc,IAAI,YAAU,EAAE,UAAU,MAAM,MAAM,EAAE,GAAE,GAE5E,IAEA,gBAAAC,OAAAF,WAAA,EACG;AAAA,eAAC,iBACA,gBAAAC,MAAC,UAAK,WAAU,iBACb,sCAA4B,YAAY,YAAY,EAAE,cAAc,EAAE,QAAQ,cAAc,OAAO,SAAS,EAAE,EAAE,CAAC,GACpH;AAAA,cAED,iBACC,gBAAAA,MAAC,UAAK,WAAWG,OAAK,yBAAyB,iBAAiB,GAC7D,sBAAY,YAAY,QAAQ,GACnC;AAAA,cAEF,gBAAAH,MAAC,iBAAc,YAAY,QAAO;AAAA,eACpC;AAAA;AAAA,QAEJ;AAAA,QAEF,eAAeG,OAAK,2CAA2C,UAAU,aAAa;AAAA,QAErF,WAAC,QAAQ;AACR,gBAAM,EAAE,MAAM,IAAI;AAClB,iBACE,gBAAAF,OAAAF,WAAA,EACG;AAAA,aAAC,eAAe,YACf,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP,cAAc;AAAA,gBACd,WAAW;AAAA;AAAA,YACb;AAAA,YAEF,gBAAAC,OAAC,SAAI,WAAU,8BACZ;AAAA,qBAAO,IAAI,CAAC,QAAQ,UAAU;AAC7B,sBAAM,SAAS,MAAM;AACnB,2BAAS,QAAQ,IAAI,WAAS,MAAM,UAAU,OAAO,QAAS;AAAA,oBAC5D,GAAG;AAAA,oBACH,UAAU,CAAC,MAAM;AAAA,kBACnB,IAAK,KAAK,CAAC;AAAA,gBACb;AACA,uBACE,gBAAAD;AAAA,kBAAC;AAAA;AAAA,oBAEC,QACE,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBAAS,SAAS,OAAO;AAAA,wBAAU,UAAU;AAAA,wBAAQ,MAAK;AAAA,wBACjD,UAAU,OAAO;AAAA;AAAA,oBAAS;AAAA,oBAEtC,OAAO,EAAE,OAAO,OAAO,MAAM;AAAA,oBAC7B,SAAS;AAAA,oBACT,UAAU,OAAO;AAAA;AAAA,kBAPZ;AAAA,gBAQP;AAAA,cAEJ,CAAC;AAAA,cACA,mBAAmB,gBAAgB,EAAE,GAAG,KAAK,OAAO,CAAC;AAAA,eACxD;AAAA,YACA,gBAAAC,OAAC,SAAI,WAAU,8BACb;AAAA,8BAAAA,OAAC,SAAI,WAAU,cACb;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,MAAK;AAAA,oBACL,SAAS,MAAM;AACb,+BAAS,QAAQ,IAAI,aAAW;AAAA,wBAC9B,GAAG;AAAA,wBACH,UAAU,CAAC,OAAO;AAAA,sBACpB,EAAE,CAAC;AAAA,oBACL;AAAA,oBACA,UAAU,QAAQ,MAAM,WAAS,MAAM,YAAY,MAAM,QAAQ;AAAA,oBAEhE,sBAAY,KAAK;AAAA;AAAA,gBACpB;AAAA,gBACA,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,MAAK;AAAA,oBACL,SAAS,MAAM;AACb,+BAAS,QAAQ,IAAI,aAAW;AAAA,wBAC9B,GAAG;AAAA,wBACH,UAAU;AAAA,sBACZ,EAAE,CAAC;AAAA,oBACL;AAAA,oBAEC,sBAAY,MAAM;AAAA;AAAA,gBACrB;AAAA,iBACF;AAAA,cACA,gBAAAA,MAAC,eAAY,MAAK,SAAQ,SAAS,OAAO,kBAAI;AAAA,eAChD;AAAA,aACF;AAAA,QAEJ;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEO,IAAM,0BAA0B,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACqE;AAChH,QAAM,CAAC,aAAa,cAAc,IAAII,WAAiC,OAAO;AAE9E,EAAAC,YAAU,MAAM;AACd,mBAAe,OAAO;AAAA,EACxB,GAAG,CAAC,OAAO,CAAC;AAEZ,SACE,gBAAAL;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAS;AAAA,MACT,UAAU,CAAAM,aAAW;AACnB,uBAAeA,QAAO;AACtB,iBAASA,QAAO;AAAA,MAClB;AAAA;AAAA,EACF;AAEJ;;;ADxMY,gBAAAC,aAAA;AApBL,IAAM,sBAAsB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAsE;AACxG,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,QAAM,WAAW,QAAQ,KAAK,WAAS,MAAM,QAAQ;AAErD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,gBAAAA,MAAC,QAAK,MAAM,IAAG;AAAA,MACrB,OAAO,CAAC,EAAE,cAAAC,cAAa,MACrB,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,WAAWE,OAAK,UAAU,EAAE,sBAAsBD,iBAAgB,CAAC,SAAS,CAAC;AAAA,UAC7E;AAAA,UACA,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,UAAU,GAAG,YAAY,QAAQ,CAAC;AAAA,UAClC,eAAe;AAAA,YACb,iBAAiB,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK;AAAA,YACxD,GAAG,kBAAkB;AAAA,UACvB;AAAA,UACA,iBAAiB,CAAC,EAAE,OAAO,OAAO,MAAM;AACtC,gBAAI,CAAC,YAAY,CAAC,OAAO,KAAK,GAAG;AAC/B,qBAAO;AAAA,YACT;AACA,mBACE,gBAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,QAAS,gBAAAA,MAACG,OAAA,EAAI;AAAA,gBACd,OAAO,EAAE,OAAO,GAAG,YAAY,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,GAAG;AAAA,gBACzD,SAAS,MAAM;AACb,2BAAS,MAAM;AACf,wBAAM;AAAA,gBACR;AAAA,gBACA,UAAU,QAAQ,KAAK,WAAS,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA;AAAA,YAC/D;AAAA,UAEJ;AAAA,UACA,kBAAkBD;AAAA,YAChB;AAAA,YACA;AAAA,cACE,qCAAqCD,iBAAgB,CAAC;AAAA,cACtD,IAAI,CAACA,iBAAgB;AAAA,YACvB;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EAEJ;AAEJ;;;AElFA,SAAS,cAAc;AACvB,OAAOG,YAAU;AAiDL,gBAAAC,OAEJ,QAAAC,cAFI;AArCZ,IAAM,mCAA2E;AAAA,EAC/E,IAAI;AAAA,IACF,OAAO;AAAA,EACT;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,EACT;AACF;AAYO,IAAM,iBAAiB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA2E;AACxG,QAAM,cAAc,eAAe,CAAC,gCAAgC,GAAG,oBAAoB;AAC3F,QAAM,WAAW,UAAU;AAE3B,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,MAAM,gBAAAA,MAAC,UAAO,MAAM,IAAG;AAAA,MACvB,OAAO,CAAC,EAAE,aAAa,MACrB,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAWC,OAAK,mBAAmB,EAAE,gBAAgB,gBAAgB,CAAC,SAAS,CAAC;AAAA,UAEhF;AAAA,4BAAAF;AAAA,cAAC;AAAA;AAAA,gBACC,UAAU;AAAA,gBACV,WAAWE,OAAK,4EAA4E,EAAE,0CAA0C,gBAAgB,CAAC,SAAS,CAAC;AAAA,gBACnK,OAAO,OAAO,SAAS,KAAK;AAAA,gBAC5B,MAAK;AAAA,gBACL;AAAA,gBACA,aAAa,GAAG,YAAY,OAAO,CAAC;AAAA,gBACpC,cAAc,CAACC,WAAU;AACvB,wBAAM,cAAc,WAAWA,MAAK;AACpC,sBAAI,MAAM,WAAW,GAAG;AACtB,6BAAS;AAAA,kBACX,OAAO;AACL,6BAAS,WAAW;AAAA,kBACtB;AAAA,gBACF;AAAA,gBACA,iBAAiB,CAACA,WAAU;AAC1B,wBAAM,cAAc,WAAWA,MAAK;AACpC,sBAAI,MAAM,WAAW,GAAG;AACtB,6BAAS;AAAA,kBACX,OAAO;AACL,mCAAe,WAAW;AAAA,kBAC5B;AAAA,gBACF;AAAA;AAAA,YACF;AAAA,YACC,UAAU,gBAAAH,MAAC,UAAK,WAAWE,OAAK,QAAQ,EAAE,sBAAsB,gBAAgB,CAAC,SAAS,CAAC,GAAI,kBAAO;AAAA;AAAA;AAAA,MACzG;AAAA;AAAA,EAEJ;AAEJ;;;ACpFA,SAAS,QAAAE,OAAM,QAAAC,aAAY;AAC3B,OAAOC,YAAU;AA0CL,gBAAAC,aAAA;AArBL,IAAM,uBAAuB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAuF;AAC1H,QAAM,cAAc,eAAe,CAAC,eAAe,GAAG,oBAAoB;AAC1E,QAAM,WAAW,UAAU;AAE3B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,gBAAAA,MAACC,OAAA,EAAK,MAAM,IAAG;AAAA,MACrB,OAAO,CAAC,EAAE,cAAAC,cAAa,MACrB,gBAAAF;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,WAAWG,OAAK,QAAQ;AAAA,UACxB,UAAU,GAAG,YAAY,QAAQ,CAAC;AAAA,UAClC,eAAe;AAAA,YACb,iBAAiB,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK;AAAA,YACxD,GAAG,aAAa;AAAA,UAClB;AAAA,UACA,iBAAiB,CAAC,EAAE,OAAO,OAAO,MAAM;AACtC,gBAAI,CAAC,YAAY,CAAC,OAAO,KAAK,GAAG;AAC/B,qBAAO;AAAA,YACT;AACA,mBACE,gBAAAH;AAAA,cAAC;AAAA;AAAA,gBACC,QAAS,gBAAAA,MAACI,OAAA,EAAI;AAAA,gBACd,OAAO,EAAE,OAAO,GAAG,YAAY,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,GAAG;AAAA,gBACzD,SAAS,MAAM;AACb,2BAAS,MAAM;AACf,wBAAM;AAAA,gBACR;AAAA,gBACA,UAAU,QAAQ,KAAK,CAAAC,WAASA,OAAM,UAAU,OAAO,KAAK,CAAC;AAAA;AAAA,YAC/D;AAAA,UAEJ;AAAA,UACA,kBAAkBF;AAAA,YAChB;AAAA,YACA;AAAA,cACE,qCAAqCD,iBAAgB,CAAC;AAAA,cACtD,iCAAiC,CAACA,iBAAgB;AAAA,YACpD;AAAA,UACF;AAAA,UACA,mBAAoBA,iBAAgB,CAAC,WAAY,yBAAyB;AAAA;AAAA,MAC5E;AAAA;AAAA,EAEJ;AAEJ;;;ACpFA,SAAS,YAAY;AACrB,OAAOI,YAAU;;;ACAjB,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AACpC,OAAOC,YAAU;AAoDT,gBAAAC,OAGF,QAAAC,cAHE;AA3BD,IAAM,WAAW,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf;AAAA,EACA,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,EACf,WAAW;AAAA,EACX;AAAA,EACA,GAAG;AACL,MAAqB;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAIC,WAAS,KAAK;AAC9C,QAAM,EAAE,cAAc,WAAW,IAAI,SAAS,gBAAgB;AAE9D,QAAM,yBAAyB,CAAC,SAAiB;AAC/C,oBAAgB,IAAI;AACpB,eAAW;AAAA,EACb;AAEA,SACE,gBAAAD,OAAC,SAAI,WAAU,UACZ;AAAA,aACC,gBAAAD;AAAA,MAAC;AAAA;AAAA,QAAO,GAAG;AAAA,QAAO,SAAS;AAAA,QAAI,WAAWG,OAAK,QAAQ,MAAM,SAAS;AAAA,QAC/D,WAAW,MAAM,aAAa;AAAA;AAAA,IAAa;AAAA,IAEpD,gBAAAF;AAAA,MAAC;AAAA;AAAA,QACC,WAAWE;AAAA,UAAK;AAAA,UACd;AAAA,YACE,8BAA8B;AAAA,YAC9B,oDAAoD,gBAAgB,CAAC;AAAA,YACrE,6CAA6C,gBAAgB,CAAC;AAAA,UAChE;AAAA,QAAC;AAAA,QAEF;AAAA,sBACC,gBAAAH,MAAC,UAAK,WAAU,sCACb,oBACH;AAAA,UAEF,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,WAAWG,OAAK,qGAAqG;AAAA,gBACnH,eAAe,CAAC;AAAA,gBAChB,QAAQ;AAAA,gBACR,QAAQ,CAAC;AAAA,gBACT,sBAAsB;AAAA,cACxB,GAAG,SAAS;AAAA,cACZ,UAAU,CAAC,UAAU;AACnB,sBAAM,QAAQ,MAAM,OAAO;AAC3B,6BAAa,MAAM;AACjB,yCAAuB,KAAK;AAAA,gBAC9B,CAAC;AACD,yBAAS,KAAK;AACd,6BAAa,KAAK;AAAA,cACpB;AAAA,cACA,SAAS,MAAM;AACb,4BAAY,IAAI;AAAA,cAClB;AAAA,cACA,QAAQ,CAAC,UAAU;AACjB,uBAAO,KAAK;AACZ,uCAAuB,MAAM,OAAO,KAAK;AACzC,4BAAY,KAAK;AAAA,cACnB;AAAA,cACA;AAAA,cACC,GAAG;AAAA;AAAA,UAER;AAAA;AAAA;AAAA,IACA;AAAA,IACE,YAAY,cACZ,gBAAAH,MAAC,WAAM,WAAU,iBACd,sBACH;AAAA,KAEJ;AAEJ;AAKO,IAAM,uBAAuB,CAAC;AAAA,EACE,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,GAAG;AACL,MAAqB;AACxD,QAAM,CAAC,MAAM,OAAO,IAAIE,WAAiB,KAAK;AAE9C,EAAAE,YAAU,MAAM;AACd,YAAQ,KAAK;AAAA,EACf,GAAG,CAAC,KAAK,CAAC;AAEV,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,cAAc,CAAAK,UAAQ;AACpB,gBAAQA,KAAI;AACZ,qBAAaA,KAAI;AAAA,MACnB;AAAA;AAAA,EACF;AAEJ;;;ADpFY,gBAAAC,aAAA;AAnCZ,IAAM,iCAAuE;AAAA,EAC3E,IAAI;AAAA,IACF,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,EACR;AACF;AAWO,IAAM,eAAe,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,MAAuE;AAClG,QAAM,cAAc,eAAe,CAAC,8BAA8B,GAAG,oBAAoB;AACzF,QAAM,WAAW,UAAU;AAE3B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,MAAM,gBAAAA,MAAC,QAAK,MAAM,IAAG;AAAA,MACrB,OAAO,CAAC,EAAE,aAAa,MACrB,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAWC,OAAK,oEAAoE,EAAE,0CAA0C,gBAAgB,CAAC,SAAS,CAAC;AAAA,UAC3J,MAAM;AAAA,UACN,cAAc;AAAA,UACd,OAAO,SAAS;AAAA,UAChB;AAAA,UACA,aAAa,GAAG,YAAY,MAAM,CAAC;AAAA,UACnC,cAAc,CAACC,WAAU;AACvB,gBAAI,CAACA,QAAO;AACV,uBAAS;AAAA,YACX,OAAO;AACL,uBAASA,MAAK;AAAA,YAChB;AAAA,UACF;AAAA,UACA,iBAAiB,CAACA,WAAU;AAC1B,gBAAI,CAACA,QAAO;AACV,uBAAS;AAAA,YACX,OAAO;AACL,6BAAeA,MAAK;AAAA,YACtB;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EAEJ;AAEJ;;;AE3EA,SAAS,QAAAC,cAAY;AASjB,gBAAAC,aAAA;AAJG,IAAM,mBAAmB,CAAC;AAAA,EACE;AACF,MAA6B;AAC5D,SACE,gBAAAA,MAAC,SAAI,WAAWD,OAAK,qEAAqE,SAAS,GAAG,eAEtG;AAEJ;;;ACbA,IAAM,YAAY,CAAC,KAAK,UAAU,gBAA4C;AAC5E,QAAM,CAAC,KAAK,GAAG,IAAI;AACnB,QAAM,QAAQ,IAAI,SAAS,QAAQ;AAEnC,QAAM,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,KAAK;AAC3D,MAAI,MAAM,KAAK,QAAQ,CAAC,EAAG,QAAO;AAElC,MAAI,OAAO,OAAO,IAAK,QAAO;AAC9B,MAAI,OAAO,OAAO,IAAK,QAAO;AAE9B,SAAO;AACT;AAGO,IAAM,eAAe;AAAA,EAC1B;AACF;;;ACfA,SAAS,eAAAE,cAAa,aAAAC,aAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,kBAAgB;AAElE,OAAOC,YAAU;AAgBjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,cAAAC,mBAAkB;;;AC1B3B,SAAS,kBAAkB;AAK3B,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAsD5B,SAmDI,YAAAC,WAjDA,OAAAC,OAFJ,QAAAC,cAAA;AAxCR,IAAM,gCAAyE;AAAA,EAC7E,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACF;AAOO,IAAM,oBAAoB,CAAM;AAAA,EACE;AAAA,EACA;AACF,MAAiC;AACtE,QAAM,cAAc,eAAe,CAAC,iBAAiB,6BAA6B,CAAC;AACnF,QAAM,oBAAoB,OAAO,eAAe;AAChD,QAAM,CAAC,aAAa,cAAc,IAAIH,WAAkB,iBAAiB;AACzE,QAAM,YAAY,CAAC,CAAC;AAEpB,EAAAD,YAAU,MAAM;AACd,mBAAe,iBAAiB;AAAA,EAClC,GAAG,CAAC,iBAAiB,CAAC;AAEtB,SACE,gBAAAG;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,CAAC,EAAE,WAAW,GAAG,QACxB,gBAAAC,OAAC,SAAI,KAAU,WAAU,YACvB;AAAA,wBAAAD,MAAC,cAAW,OAAM,WAAU,MAAK,QAAO,SAAS,YAC/C,0BAAAA,MAAC,cAAU,GACb;AAAA,QACC,aACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAa;AAAA;AAAA,QACf;AAAA,SAEJ;AAAA,MAGD,WAAC,EAAE,MAAM,MACR,gBAAAC,OAAC,SAAI,WAAU,yDACb;AAAA,wBAAAD,MAAC,QAAG,WAAU,sBAAsB,sBAAY,QAAQ,GAAE;AAAA,QACzD,eAAe,UACd,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAQ,eAAe;AAAA,YACvB,WAAW;AAAA,YACX,aAAa,YAAY,MAAM;AAAA,YAC/B,cAAc;AAAA,YACd,WAAU;AAAA;AAAA,QACZ;AAAA,QAED,eAAe,WACd,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,OAAQ,cAAmC,CAAC,KAAK;AAAA,cACjD,MAAK;AAAA,cACL,aAAa,YAAY,KAAK;AAAA,cAC9B,cAAc,UAAQ;AACpB,sBAAM,MAAM,OAAO,IAAI;AACvB,+BAAe,CAAC,QAA0B,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,cAC3D;AAAA,cACA,WAAU;AAAA;AAAA,UACZ;AAAA,UACA,gBAAAA,MAAC,UAAK,WAAU,aAAY,eAAC;AAAA,UAC7B,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAQ,cAAmC,CAAC,KAAK;AAAA,cACjD,MAAK;AAAA,cACL,aAAa,YAAY,KAAK;AAAA,cAC9B,cAAc,UAAQ;AACpB,sBAAM,MAAM,OAAO,IAAI;AACvB,+BAAe,CAAC,QAA0B,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,cAC3D;AAAA,cACA,WAAU;AAAA;AAAA,UACZ;AAAA,WACF;AAAA,QAED,eAAe,eACd,gBAAAC,OAAAF,WAAA,EACE;AAAA,0BAAAC;AAAA,YAAC;AAAA;AAAA,cACC,OAAQ,cAA+B,CAAC,IAAK,cAA+B,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI;AAAA,cAC5G,MAAK;AAAA,cACL,aAAa,YAAY,WAAW;AAAA,cACpC,cAAc,UAAQ;AACpB,sBAAM,QAAQ,IAAI,KAAK,IAAI;AAC3B,+BAAe,CAAC,QAAsB,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;AAAA,cACzD;AAAA,cACA,WAAU;AAAA;AAAA,UACZ;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAQ,cAA+B,CAAC,IAAK,cAA+B,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI;AAAA,cAC5G,MAAK;AAAA,cACL,aAAa,YAAY,SAAS;AAAA,cAClC,cAAc,UAAQ;AACpB,sBAAM,QAAQ,IAAI,KAAK,IAAI;AAC3B,+BAAe,CAAC,QAAsB,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAAA,cACzD;AAAA,cACA,WAAU;AAAA;AAAA,UACZ;AAAA,WACF;AAAA,QAEF,gBAAAC,OAAC,SAAI,WAAU,iCACZ;AAAA,uBACC,gBAAAD,MAAC,eAAY,OAAM,YAAW,MAAK,SAAQ,SAAS,MAAM;AACxD,mBAAO,eAAe,MAAS;AAC/B,kBAAM;AAAA,UACR,GACG,sBAAY,QAAQ,GACvB;AAAA,UAEF,gBAAAA,MAAC,eAAY,MAAK,SAAQ,SAAS,MAAM;AACvC,mBAAO,eAAe,WAAW;AACjC,kBAAM;AAAA,UACR,GACG,sBAAY,OAAO,GACtB;AAAA,WACF;AAAA,SACF;AAAA;AAAA,EAEJ;AAEJ;;;AC3JA,SAAS,eAAAE,cAAa,gBAAgB,iBAAiB;AAGvD,OAAOC,YAAU;AAkBJ,gBAAAC,aAAA;AAPN,IAAM,kBAAkB,CAAC;AAAA,EACH;AAAA,EACA,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,MAA4B;AACrD,MAAI,OAAO,gBAAAA,MAAC,kBAAe,WAAU,iBAAe;AACpD,MAAI,eAAe;AACjB,QAAI,oBAAoB;AACxB,QAAI,QAAQ;AACV,0BAAoB,sBAAsB,SAAS,QAAQ;AAAA,IAC7D;AACA,WAAO,sBAAsB,QAAS,gBAAAA,MAAC,aAAU,WAAU,iBAAe,IACxE,gBAAAA,MAACC,cAAA,EAAY,WAAU,iBAAe;AAAA,EAC1C;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA,WAAWD,OAAK,SAAS;AAAA,MACxB,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACzCA,SAAS,aAAAG,mBAAiB;AAUnB,IAAM,2BAA2B,CAAC,aAAuC;AAC9E,EAAAA,YAAU,MAAM;AACd,WAAO,iBAAiB,UAAU,QAAQ;AAE1C,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,QAAQ;AAAA,IAC/C;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AACf;;;AClBA,SAAS,QAAAC,cAAY;AAYjB,gBAAAC,aAAA;AALG,IAAM,YAAY,CAAC;AAAA,EACE;AAAA,EACA;AACF,MAAsB;AAC9C,SACE,gBAAAA,MAAC,UAAK,WAAWD,OAAK,+CAA+C,SAAS,GAC3E,UACH;AAEJ;;;AJ8MgB,gBAAAE,OAoIQ,QAAAC,cApIR;AApJT,IAAM,QAAQ,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAqB;AAC9C,QAAM,MAAMC,QAAuB,IAAI;AACvC,QAAM,WAAWA,QAAyB,IAAI;AAE9C,QAAM,CAAC,cAAc,eAAe,IAAIC,WAA4B,QAAQ,OAAO,CAAC,eAAe,iBAAiB;AAClH,WAAO;AAAA,MACL,GAAG;AAAA,MACH,CAAC,aAAa,EAAE,GAAG,aAAa,WAAW,cAAc;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC,CAAC,CAAC;AACN,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,WAAgC;AAChF,QAAM,CAAC,YAAY,aAAa,IAAIA,WAA0B;AAAA,IAC5D,UAAU;AAAA,IACV,WAAW;AAAA,IACX,GAAG,cAAc;AAAA,EACnB,CAAC;AACD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,WAA6B,cAAc,aAAa;AAElG,QAAM,0BAA0BC,SAAQ,MAAM;AAC5C,WAAO,QAAQ,OAAO,CAAC,eAAe,WAAW;AAC/C,aAAO;AAAA,QACL,GAAG;AAAA;AAAA,QAEH,CAAC,OAAO,EAAE,GAAI,OAAO,WAAW,eAAe,WAAW;AAAA,MAC5D;AAAA,IACF,GAAG,CAAC,CAAC;AAAA,EACP,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,QAAM,0BAA0BA,SAAQ,MAAM;AAC5C,WAAO,QAAQ,OAAO,CAAC,eAAe,WAAW;AAC/C,aAAO;AAAA,QACL,GAAG;AAAA,QACH,CAAC,OAAO,EAAE,GAAI,OAAO,WAAW,eAAe;AAAA,MACjD;AAAA,IACF,GAAG,CAAC,CAAC;AAAA,EACP,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,QAAM,gBAAgBA,SAAQ,MAAM;AAClC,WAAO,QAAQ,OAAO,CAAC,KAAK,WAAW;AACrC,aAAO,MAAM,wBAAwB,OAAO,EAAE;AAAA,IAChD,GAAG,CAAC;AAAA,EACN,GAAG,CAAC,SAAS,uBAAuB,CAAC;AAErC,QAAM,oBAAoBA,SAAQ,MAAM;AACtC,WAAO,CAAC,aAAgC;AACtC,YAAM,eAAe;AAAA,QACnB,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAEA,YAAM,iBAAiB,IAAI,QAAQ;AAGnC,cAAQ,QAAQ,CAAC,WAAW;AAC1B,qBAAa,OAAO,EAAE,IAAI,MAAM,aAAa,OAAO,EAAE,GAAG,wBAAwB,OAAO,EAAE,GAAG,wBAAwB,OAAO,EAAE,KAAK,cAAc;AAAA,MACnJ,CAAC;AAGD,YAAM,QAAQ,QACX,OAAO,CAAC,eAAe,iBAAiB,gBAAgB,aAAa,aAAa,EAAE,GAAG,CAAC;AAE3F,UAAI,QAAQ,gBAAgB;AAC1B,YAAI,iBAAiB,gBAAgB;AACnC,iBAAO,QAAQ,OAAO,CAAC,eAAe,kBAAkB;AAAA,YACtD,GAAG;AAAA,YACH,CAAC,aAAa,EAAE,GAAG,wBAAwB,aAAa,EAAE;AAAA,UAC5D,IAAI,CAAC,CAAC;AAAA,QACR;AAEA,YAAI,oBAAoB,QACrB,IAAI,WAAS,MAAM,EAAE,EACrB,OAAO,QAAM,aAAa,EAAE,IAAI,wBAAwB,EAAE,IAAI,CAAC;AAElE,YAAI,gBAAgB,QAAQ;AAE5B,eAAO,gBAAgB,KAAK,kBAAkB,SAAS,GAAG;AACxD,cAAI,kBAAkB,kBAAkB,OAAO,CAAC,eAAe,OAAO,KAAK,IAAI,eAAe,aAAa,EAAE,IAAI,wBAAwB,EAAE,CAAC,GAAG,CAAC;AAChJ,cAAI,kBAAkB,kBAAkB,SAAS,eAAe;AAC9D,8BAAkB,gBAAgB,kBAAkB;AAAA,UACtD;AAEA,4BAAkB,QAAQ,QAAM;AAC9B,yBAAa,EAAE,KAAK;AAAA,UACtB,CAAC;AAED,2BAAiB,kBAAkB,kBAAkB;AACrD,8BAAoB,kBAAkB,OAAO,QAAM,aAAa,EAAE,IAAI,wBAAwB,EAAE,IAAI,CAAC;AAAA,QACvG;AAAA,MACF,WAAW,SAAS,gBAAgB;AAClC,YAAI,qBAAqB,iBAAiB;AAG1C,cAAM,mBAAmB,QAAQ,OAAO,WACtC,wBAAwB,MAAM,EAAE,KAAM,aAAa,MAAM,EAAE,IAAI,wBAAwB,MAAM,EAAE,CAAE;AAEnG,cAAM,yBAAyB,iBAAiB;AAAA,UAC9C,CAAC,eAAe,WAAW,gBAAgB,aAAa,OAAO,EAAE,IAAI,wBAAwB,OAAO,EAAE;AAAA,UAAG;AAAA,QAC3G;AACA,8BAAsB;AAEtB,YAAI,qBAAqB,QACtB,OAAO,SAAO,CAAC,wBAAwB,IAAI,EAAE,KAAK,aAAa,IAAI,EAAE,IAAI,wBAAwB,IAAI,EAAE,CAAC,EACxG,IAAI,WAAS,MAAM,EAAE;AAExB,eAAO,qBAAqB,KAAK,mBAAmB,SAAS,GAAG;AAC9D,cAAI,uBAAuB,mBAAmB,OAAO,CAAC,eAAe,OAAO,KAAK,IAAI,eAAe,wBAAwB,EAAE,IAAI,wBAAwB,EAAE,IAAI,aAAa,EAAE,IAAI,kBAAkB,GAAG,kBAAkB;AAC1N,cAAI,uBAAuB,mBAAmB,SAAS,oBAAoB;AACzE,mCAAuB,qBAAqB,mBAAmB;AAAA,UACjE;AAEA,6BAAmB,QAAQ,QAAM;AAC/B,yBAAa,EAAE,KAAK;AAAA,UACtB,CAAC;AAED,gCAAsB,uBAAuB,mBAAmB;AAChE,+BAAqB,mBAAmB,OAAO,QAAM,CAAC,wBAAwB,EAAE,KAAK,aAAa,EAAE,IAAI,wBAAwB,EAAE,CAAC;AAAA,QACrI;AAEA,YAAI,qBAAqB,GAAG;AAC1B,uBAAa,QAAQ,QAAQ,SAAS,CAAC,EAAE,EAAE,KAAK;AAAA,QAClD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,SAAS,yBAAyB,yBAAyB,aAAa,CAAC;AAE7E,QAAM,QAAQ,cAAc;AAAA,IAC1B;AAAA,IACA,iBAAiB,gBAAgB;AAAA,IACjC,qBAAqB,oBAAoB;AAAA,IACzC,mBAAmB,kBAAkB;AAAA,IACrC,uBAAuB,sBAAsB;AAAA,IAC7C;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,KAAK,MAAM;AAClB,eAAQ,gBAAAJ,MAAC,aAAW,eAAK,SAAS,GAAY;AAAA,MAChD;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA,WAAW;AAAA,MACT,GAAG,cAAc;AAAA,MACjB,WAAW,aAAa;AAAA,IAC1B;AAAA,IACA,0BAA0B,oBAAkB;AAC1C,0BAAoB,cAAc;AAClC,UAAI,aAAa,0BAA0B;AACzC,sBAAc,yBAAyB,cAAc;AAAA,MACvD;AAAA,IACF;AAAA,IACA,sBAAsB,oBAAkB;AACtC,sBAAgB,cAAY;AAC1B,cAAM,YAAY,OAAO,mBAAmB,aAAa,eAAe,QAAQ,IAAI;AACpF,eAAO,kBAAkB,SAAS;AAAA,MACpC,CAAC;AACD,UAAI,aAAa,sBAAsB;AACrC,qBAAa,qBAAqB,cAAc;AAAA,MAClD;AAAA,IACF;AAAA,IACA,oBAAoB,oBAAkB;AACpC,oBAAc,cAAc;AAC5B,UAAI,aAAa,oBAAoB;AACnC,qBAAa,mBAAmB,cAAc;AAAA,MAChD;AAAA,IACF;AAAA,IACA,uBAAuB,oBAAkB;AACvC,uBAAiB,cAAc;AAC/B,YAAM,sBAAsB,KAAK;AACjC,UAAI,aAAa,uBAAuB;AACtC,qBAAa,sBAAsB,cAAc;AAAA,MACnD;AAAA,IACF;AAAA,IACA,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,GAAG;AAAA,EACL,CAAC;AAED,QAAM,CAAC,sBAAsB,uBAAuB,IAAIG,WAAS,KAAK;AACtE,EAAAE,YAAU,MAAM;AACd,QAAI,CAAC,wBAAwB,IAAI,SAAS;AACxC,8BAAwB,IAAI;AAC5B,YAAM,gBAAgB,kBAAkB,YAAY,CAAC;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,cAAc,oBAAoB,CAAC;AAEvC,2BAAyBC,aAAY,MAAM;AACzC,UAAM,gBAAgB,iBAAiB;AAAA,EACzC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAEvB,QAAM,YAAY,MAAM,aAAa;AACrC,EAAAD,YAAU,MAAM;AACd,UAAM,aAAa;AACnB,QAAI,eAAe,GAAG;AACpB,UAAI,WAAW,cAAc,GAAG;AAC9B,cAAM,cAAc,gBAAc;AAAA,UAChC,GAAG;AAAA,UACH,WAAW;AAAA,QACb,EAAE;AAAA,MACJ;AAAA,IACF,WAAW,WAAW,aAAa,YAAY;AAC7C,YAAM,cAAc,CAAC,UAAU;AAAA,QAC7B,GAAG;AAAA,QACH,WAAW,aAAa;AAAA,MAC1B,EAAE;AAAA,IACJ;AAAA,EACF,GAAG,CAAC,MAAM,WAAW,WAAW,UAAU,WAAW,SAAS,CAAC;AAE/D,QAAM,iBAAiBD,SAAQ,MAAM;AACnC,UAAM,UAAU,MAAM,eAAe;AACrC,UAAM,WAAsC,CAAC;AAC7C,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,SAAS,QAAQ,CAAC;AACxB,eAAS,YAAY,OAAO,EAAE,OAAO,IAAI,KAAK,MAAM,OAAO,QAAQ,CAAC;AACpE,eAAS,SAAS,OAAO,OAAO,EAAE,OAAO,IAAI,KAAK,MAAM,OAAO,OAAO,QAAQ,CAAC;AAAA,IACjF;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,SAAS,EAAE,kBAAkB,MAAM,SAAS,EAAE,YAAY,CAAC;AAErE,SACE,gBAAAH,OAAC,SAAI,KAAU,WAAWM,OAAK,cAAc,SAAS,GACpD;AAAA,oBAAAP;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,YAAY;AAAA,QACZ,eAAe,SAAS,SAAS,eAAe;AAAA,QAChD,UAAU;AAAA,QAEV,0BAAAP;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAWM,OAAK,cAAc;AAAA,YAC9B,OAAO;AAAA,cACL,GAAG;AAAA,cACH,OAAO,KAAK,MAAM,KAAK,IAAI,MAAM,aAAa,IAAI,QAAQ,QAAQ,IAAI,SAAS,eAAe,MAAM,aAAa,CAAC,CAAC;AAAA,YACrH;AAAA,YAEC;AAAA,oBAAM,gBAAgB,EAAE,IAAI,CAAC,gBAC5B,gBAAAP,MAAC,cACE,sBAAY,QAAQ,IAAI,YACvB,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBAEC,OAAO;AAAA,oBACL,OAAO,qBAAqB,QAAQ,EAAE;AAAA,oBACtC,UAAU,OAAO,OAAO,UAAU;AAAA,oBAClC,UAAU,OAAO,OAAO,UAAU;AAAA,kBACpC;AAAA;AAAA,gBALK,OAAO;AAAA,cAMd,CACD,KAVY,YAAY,EAW3B,CACD;AAAA,cACD,gBAAAA,MAAC,WACA,gBAAM,gBAAgB,EAAE,IAAI,iBAC3B,gBAAAA,MAAC,QAAwB,WAAW,MAAM,QAAQ,MAAM,oBACrD,sBAAY,QAAQ,IAAI,YAAU;AACjC,uBACE,gBAAAC;AAAA,kBAAC;AAAA;AAAA,oBAEC,SAAS,OAAO;AAAA,oBAChB,WAAWM,OAAK,kBAAkB,OAAO,OAAO,UAAU,MAAM,SAAS;AAAA,oBAEzE;AAAA,sCAAAP,MAAC,SAAI,WAAU,qBACZ,iBAAO,gBAAgB,OACtB,gBAAAC,OAAC,SAAI,WAAU,2BACZ;AAAA,+BAAO,OAAO,WAAW,KACxB,gBAAAD;AAAA,0BAAC;AAAA;AAAA,4BACC,eAAe,OAAO,OAAO,YAAY;AAAA,4BACzC,SAAS,MAAM,OAAO,OAAO,cAAc;AAAA;AAAA,wBAC7C;AAAA,wBAED,OAAO,OAAO,aAAa,KAAK,OAAO,OAAO,UAAU,MAAM,aAC7D,gBAAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,QAAQ,OAAO;AAAA,4BACf,YAAY,OAAO,OAAO,UAAU,KAAK;AAAA;AAAA,wBAC3C,IACE;AAAA,wBACH;AAAA,0BACC,OAAO,OAAO,UAAU;AAAA,0BACxB,OAAO,WAAW;AAAA,wBACpB;AAAA,yBACF,GAEJ;AAAA,sBACC,OAAO,OAAO,aAAa,KAC1B,gBAAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,aAAa,OAAO,iBAAiB;AAAA,0BACrC,cAAc,OAAO,iBAAiB;AAAA,0BACtC,eAAe,MAAM;AACnB,mCAAO,OAAO,UAAU;AAAA,0BAC1B;AAAA,0BACA,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,SAAS,CAAC,kBAAkB,oBAC1B,SAAa,kBAAkB,mBAAmB,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,OAAO,OAAO,EAAE,MAAM,KACpG,IAAK,kBAAkB,mBAAmB,WAAW,IACnD,IAAI;AAAA,0BACZ;AAAA;AAAA,sBACF;AAAA;AAAA;AAAA,kBAxCG,OAAO;AAAA,gBA0Cd;AAAA,cAEJ,CAAC,KAhDM,YAAY,EAiDrB,CACD,GACD;AAAA,cACA,gBAAAC,OAAC,WACA;AAAA,sBAAM,YAAY,EAAE,KAAK,IAAI,SAAO;AACnC,yBACE,gBAAAD,MAAC,QAAgB,SAAS,MAAM,WAAW,KAAK,KAAK,GAAG,WAAW,MAAM,QAAQ,MAAM,kBACpF,cAAI,gBAAgB,EAAE,IAAI,UAAQ;AACjC,2BACE,gBAAAA,MAAC,QACE;AAAA,sBACC,KAAK,OAAO,UAAU;AAAA,sBACtB,KAAK,WAAW;AAAA,oBAClB,KAJO,KAAK,EAKd;AAAA,kBAEJ,CAAC,KAVM,IAAI,EAWb;AAAA,gBAEJ,CAAC;AAAA,gBACA,MAAM,MAAM,SAAS,EAAE,WAAW,WAAW,MAAM,YAAY,EAAE,KAAK,QAAQ,EAAE,iBAAiB,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU;AAC5H,yBACE,gBAAAA,MAAC,QACE,kBAAQ,IAAI,CAAC,WAAW;AACvB,2BACE,gBAAAA,MAAC,QACE,sBAAY,UAAU,OAAO,IAAI,KAAK,IAAK,gBAAAA,MAAC,oBAAgB,KADtD,OAAO,EAEhB;AAAA,kBAEJ,CAAC,KAPM,gBAAgB,KAQzB;AAAA,gBAEJ,CAAC;AAAA,iBACD;AAAA;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA,MAAC,SAAI,WAAU,6BACb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,SAAS,EAAE,WAAW;AAAA,QACvC,WAAW,MAAM,aAAa;AAAA,QAC9B,eAAe,UAAQ,MAAM,aAAa,IAAI;AAAA;AAAA,IAChD,GACF;AAAA,KACF;AAEJ;AAKO,IAAM,oBAAoB,CAAM,EAAE,MAAM,GAAG,MAAM,MAAiC;AACvF,QAAM,CAAC,UAAU,WAAW,IAAIG,WAAc,IAAI;AAElD,EAAAE,YAAU,MAAM;AACd,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,IAAI,CAAC;AAET,SACE,gBAAAL;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAM;AAAA;AAAA,EACR;AAEJ;AASO,IAAM,qBAAqB,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gCAAgC;AAAA,EAChC,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA,GAAG;AACL,MAAkC;AACxE,QAAM,uBAAuBI,SAAwB,MAAM;AACzD,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,QAAQ,CAAC,EAAE,MAAM,MAAM;AACrB,iBACE,gBAAAJ;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,sBAAsB,IAAI,kBAAkB,MAAM,qBAAqB;AAAA,cACtF,kBAAkB,WAAS;AACzB,sBAAM,WAAW,CAAC,CAAC;AACnB,sBAAM,sBAAsB,QAAQ;AAAA,cACtC;AAAA,cACA,oBAAmB;AAAA;AAAA,UACrB;AAAA,QAEJ;AAAA,QACA,MAAM,CAAC,EAAE,IAAI,MAAM;AACjB,iBACE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,CAAC,IAAI,aAAa;AAAA,cAC5B,SAAS,IAAI,cAAc;AAAA,cAC3B,UAAU,IAAI,yBAAyB;AAAA,cACvC,oBAAmB;AAAA;AAAA,UACrB;AAAA,QAEJ;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF,GAAG,CAAC,SAAS,cAAc,CAAC;AAE5B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,WAAW,CAAC,UAAU,UAAU;AAC9B,YAAI,aAAa,gBAAgB;AAC/B,iBAAQ,gBAAAA,MAAC,YAAS,SAAS,OAAO,UAAU,MAAM,oBAAmB,WAAS;AAAA,QAChF;AACA,eAAO,YAAY,UAAU,UAAU,KAAK,IAAK,gBAAAA,MAAC,oBAAgB;AAAA,MACpE;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,GAAG;AAAA,MACL;AAAA,MACA,YAAY,CAAC,KAAK,UAAU;AAC1B,YAAI,CAAC,+BAA+B;AAClC,cAAI,eAAe;AAAA,QACrB;AACA,mBAAW,KAAK,KAAK;AAAA,MACvB;AAAA,MACA,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,kBAAkBO;AAAA,UAChB,EAAE,kBAAkB,CAAC,8BAA8B;AAAA,UACnD,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AK5hBA,SAAS,YAAAE,kBAAgB;AACzB,SAAS,QAAAC,cAAY;;;ACFd,IAAM,mBAAmB,CAAC,SAAiB;AAChD,SAAO,UAAU,UAAU,UAAU,IAAI;AAC3C;;;ADKA,SAAS,WAAW,YAAY;AA+FtB,SACE,OAAAC,OADF,QAAAC,cAAA;AAjEH,IAAM,yBAAyB,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,WAAW;AAAA,EACX,SAAS;AACX,MAAmC;AACxE,QAAM,cAAc,eAAsD,CAAC,eAAe,CAAC;AAC3F,QAAM,CAAC,qBAAqB,sBAAsB,IAAIC,WAAS,KAAK;AACpE,QAAM,CAAC,uBAAuB,wBAAwB,IAAIA,WAAS,KAAK;AAExE,QAAM,kBAAkB;AAAA,IACtB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAEA,QAAM,eAAe;AACrB,QAAM,kBAAkB;AAAA,IACtB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAEA,QAAM,gBAAiD;AAAA,IACrD,KAAK,EAAE,aAAa,GAAG,YAAY,MAAM,YAAY,QAAQ,YAAY,KAAK;AAAA,IAC9E,QAAQ,EAAE,aAAa,KAAK,YAAY,MAAM,YAAY,MAAM,YAAY,KAAK;AAAA,IACjF,MAAM,EAAE,aAAa,GAAG,YAAY,QAAQ,YAAY,MAAM,YAAY,KAAK;AAAA,IAC/E,OAAO,EAAE,aAAa,GAAG,YAAY,MAAM,YAAY,MAAM,YAAY,OAAO;AAAA,EAClF;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAWE,OAAK,qCAAqC,kBAAkB;AAAA,MACvE,cAAc,MAAM;AAClB,+BAAuB,IAAI;AAAA,MAC7B;AAAA,MACA,cAAc,MAAM;AAClB,+BAAuB,KAAK;AAC5B,iCAAyB,KAAK;AAAA,MAChC;AAAA,MACA,SAAS,MAAM;AACb,yBAAiB,UAAU,EAAE,MAAM,QAAQ,KAAK;AAChD,+BAAuB,KAAK;AAC5B,iCAAyB,IAAI;AAAA,MAC/B;AAAA,MAEC;AAAA;AAAA,QACD,gBAAAF;AAAA,UAAC;AAAA;AAAA,YACC,WAAWE;AAAA,cACT;AAAA;AAAA,cAEA;AAAA,cACA,gBAAgB,QAAQ;AAAA,cACxB;AAAA,YACF;AAAA,YACA,OAAO;AAAA,cACL;AAAA,cACA,SAAU,uBAAuB,wBAAyB,IAAI;AAAA,YAChE;AAAA,YAEC;AAAA,uCACC,gBAAAF,OAAC,SAAI,WAAU,cACb;AAAA,gCAAAD,MAAC,aAAU,MAAM,IAAI,WAAU,iBAAe;AAAA,gBAC7C,YAAY,QAAQ;AAAA,iBACvB;AAAA,cAED,uBACC,gBAAAC,OAAC,SAAI,WAAU,+BACb;AAAA,gCAAAD,MAAC,QAAK,MAAM,IAAG;AAAA,gBACd,YAAY,aAAa;AAAA,iBAC5B;AAAA,cAEF,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAWG,OAAK,oBAAoB,gBAAgB,QAAQ,CAAC;AAAA,kBAC7D,OAAO,EAAE,GAAG,cAAc,QAAQ,GAAG,QAAQ,SAAS,EAAE;AAAA;AAAA,cAC1D;AAAA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;AEvHA,OAAOC,YAAU;AAwDX,gBAAAC,OAyBA,QAAAC,cAzBA;AAtBC,IAAM,iBAAiB,CAAC;AAAA,EACE;AAAA,EACA,QAAQ,oBAAI,KAAK;AAAA,EACjB,QAAQ,iBAAiB,oBAAI,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAAA,EAClD,MAAM,YAAY,oBAAI,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAAA,EAC3C,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAkF;AAC/G,QAAM,cAAc,eAAe,CAAC,iBAAiB,eAAe,GAAG,oBAAoB;AAE3F,QAAM,UAAU,SAAS,cAAc,SAAS;AAChD,QAAM,UAAU,SAAS,cAAc,SAAS;AAEhD,MAAI;AACJ,MAAI;AAEJ,MAAI,SAAS;AACX,kBACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,WAAU;AAAA,QACV,sBAAsB,EAAE,WAAW,IAAI;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AACA,MAAI,SAAS;AACX,kBACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,WAAWE,OAAK,UAAU,EAAE,0BAA0B,SAAS,OAAO,CAAC;AAAA,QACvE,WAAW;AAAA,QACX,MAAM;AAAA,QACN;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,gBAAAD,OAAC,SAAI,WAAU,oBACb;AAAA,oBAAAA,OAAC,SAAI,WAAU,cACZ;AAAA;AAAA,MACA;AAAA,OACH;AAAA,IACA,gBAAAD,MAAC,SAAI,WAAU,0BACb,0BAAAC,OAAC,SAAI,WAAU,mBACb;AAAA,sBAAAD,MAAC,eAAY,MAAK,UAAS,OAAM,YAAW,SAAS,UAAW,sBAAY,OAAO,GAAE;AAAA,MACrF,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,SAAS,KAAK;AAAA,UAE5B,sBAAY,QAAQ;AAAA;AAAA,MACvB;AAAA,OACF,GACF;AAAA,KACF;AAEJ;;;ACnGA,SAAS,eAAAG,eAAa,aAAAC,aAAW,YAAAC,kBAAgB;AACjD,OAAOC,YAAU;AAwMX,SACE,OAAAC,OADF,QAAAC,cAAA;AA7KN,IAAM,KAAK;AACX,IAAM,OAAO;AAMN,IAAM,eAAe,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AACb,MAA4B;AAC5D,MAAI,gBAAgB;AACpB,MAAI,YAAY,QAAQ,QAAQ,QAAQ,MAAM,IAAI;AAChD,oBAAgB,QAAQ,QAAQ,QAAQ;AAAA,EAC1C;AACA,QAAM,CAAC;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAG,YAAY,IAAIC,WAA2B;AAAA,IAC5C,aAAa;AAAA,IACb,cAAc,WAAW,gBAAgB;AAAA,IACzC,UAAU;AAAA,IACV,mBAAmB,KAAK,MAAM,QAAQ,SAAS,CAAC;AAAA,IAChD,YAAY;AAAA,IACZ,OAAO;AAAA,EACT,CAAC;AAED,QAAM,kBAAkB;AACxB,QAAM,aAAa,cAAc,MAAM,MAAM,MAAM,GAAG,YAAY,EAAE,IAAI,YAAU;AAAA,IAChF,MAAM,QAAQ,MAAM,KAAK,CAAE;AAAA,IAAG;AAAA,EAChC,EAAE;AAEF,QAAM,aAAa;AACnB,QAAM,WAAW;AAEjB,QAAM,kBAAkB,cAAc,kBAAkB,KAAK,YAAY,kBAAkB,IAAI;AAE/F,QAAM,eAAeC,cAAY,CAAC,aAAqBC,eAAsBC,aAAoB,WAA8B;AAC7H,QAAI,gBAAgBD,eAAc;AAChC,aAAOC,cAAa,IAAI,KAAK;AAAA,IAC/B;AACA,QAAI,kBAAkB,cAAcD;AACpC,QAAI,kBAAkB,GAAG;AACvB,yBAAmB;AAAA,IACrB;AACA,WAAO,mBAAmB,SAAS,IAAI,OAAO;AAAA,EAChD,GAAG,CAAC,CAAC;AAEL,QAAM,UAAUD,cAAY,CAAC,WAAmB,cAAkC;AAChF,iBAAa,CAAC,cAAc;AAC1B,YAAM;AAAA,QACJ;AAAA,QACA,cAAAC;AAAA,QACA,YAAAC;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAAC;AAAA,QACA;AAAA,MACF,IAAI;AACJ,UAAI,UAAU;AACZ,eAAO,EAAE,GAAG,WAAW,cAAc,aAAa,UAAU,GAAG,eAAe,UAAU;AAAA,MAC1F;AACA,UAAK,gBAAgBF,iBAAgB,aAAa,KAAKC,gBAAe,KAAM,CAAC,WAAW;AACtF,eAAO,EAAE,GAAG,WAAW,eAAe,UAAU;AAAA,MAClD;AACA,YAAM,YAAY,YAAY,aAAa;AAC3C,YAAM,YAAY,aAAa,aAAaD,eAAcC,aAAYC,OAAM,MAAM;AAElF,UAAI,cAAc;AAClB,UAAI;AACJ,UAAI,kBAAkBF;AACtB,YAAM,kBAAkB,aAAa,MAAM,CAAC,uBAAuB,YAAY,sBAAsB;AAErG,YAAM,yBAAyB,aAAa,IAAI,YAAY;AAG5D,UAAI,iBAAiB;AACnB,uBAAe,YAAY;AAAA,MAC7B,OAAO;AACL,uBAAe;AACf,sBAAc,WAAW;AACzB,YAAI,KAAK,IAAI,WAAW,KAAK,MAAM;AACjC,wBAAc;AAAA,QAChB;AAAA,MACF;AAEA,UAAI,gBAAgBC,cAAa,eAAe;AAChD,YAAM,kBAAkB;AAExB,aAAO,iBAAiB,iBAAiB;AACvC,YAAI,oBAAoB,eAAe,iBAAiB,mBAAmB,iBAAiB;AAC1F,0BAAgB;AAChB;AAAA,QACF;AACA,2BAAmBD,gBAAe,KAAKE,OAAM;AAC7C,yBAAiB;AAAA,MACnB;AACA,UAAI,iBAAiB,iBAAiB;AACpC,wBAAgB;AAAA,MAClB;AACA,aAAO,iBAAiB,CAAC,iBAAiB;AACxC,YAAI,oBAAoB,eAAe,iBAAiB,CAAC,mBAAmB,iBAAiB;AAC3F,0BAAgB;AAChB;AAAA,QACF;AACA,0BAAkBF,kBAAiB,IAAIE,OAAM,SAAS,IAAIF,gBAAe;AACzE,yBAAiB;AAAA,MACnB;AACA,UAAI,iBAAiB;AACrB,UAAI,CAAC,iBAAiB;AACpB,yBAAiB;AAAA,MACnB;AAEA,WAAKA,kBAAiB,kBAAkB,mBAAmB,gBAAgB,mBAAmB,iBAAiB;AAC7G,iBAASE,OAAM,eAAe,CAAE;AAAA,MAClC;AACA,aAAO;AAAA,QACL,aAAa;AAAA,QACb,cAAc;AAAA,QACd;AAAA,QACA,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAAA;AAAA,QACA,eAAe;AAAA,QACf,qBAAqB;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,cAAc,QAAQ,CAAC;AAErC,EAAAC,YAAU,MAAM;AAEd,0BAAsB,CAAC,cAAc,QAAQ,WAAW,aAAa,CAAC;AAAA,EACxE,CAAC;AAED,QAAM,UAAU,CAACF,aAAoB,OAAe,eAAuB;AACzE,UAAM,MAAM;AACZ,UAAM,MAAM;AACZ,UAAMG,YAAW,MAAM;AAEvB,QAAI,eAAe;AACnB,UAAM,iBAAiB,MAAOH,cAAc,GAAG;AAC/C,QAAI,UAAU,KAAK,UAAU,aAAa,GAAG;AAC3C,UAAI,UAAU,KAAKA,cAAa,GAAG;AACjC,wBAAgB,KAAK,MAAM,iBAAiBG,SAAQ;AAAA,MACtD;AACA,UAAI,UAAU,aAAa,KAAKH,cAAa,GAAG;AAC9C,wBAAgB,KAAK,MAAM,iBAAiBG,SAAQ;AAAA,MACtD;AAAA,IACF,OAAO;AACL,qBAAe;AAAA,IACjB;AAGA,WAAO,MAAM,IAAK,eAAe,GAAI;AAAA,EACvC;AAEA,SACE,gBAAAR;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,QAAQ,gBAAgB;AAAA,MACjC,SAAS,WAAS;AAChB,YAAI,MAAM,WAAW,GAAG;AAEtB,uBAAa,CAAC,EAAE,UAAU,GAAG,cAAc,OACxC,EAAE,GAAG,eAAe,UAAU,WAAW,MAAM,OAAO,EAAE;AAAA,QAC7D;AAAA,MACF;AAAA,MAEA,0BAAAC,OAAC,SAAI,WAAU,+DACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,QAAQ,GAAG,UAAU,KAAK;AAAA;AAAA,QACrC;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,WAAW,cAAc,CAAC,cAAc,WAAW,WAAW;AAAA,cAC9D,WAAW,GAAG,QAAQ;AAAA,YACxB;AAAA,YAEC,qBAAW,IAAI,CAAC,EAAE,MAAM,MAAM,GAAG,eAChC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAWS;AAAA,kBACT;AAAA,kBACA;AAAA,oBACE,0BAA0B,iBAAiB;AAAA,oBAC3C,sBAAsB,iBAAiB;AAAA,oBACvC,kBAAkB,CAAC;AAAA,oBACnB,sBAAsB;AAAA,kBACxB;AAAA,gBACF;AAAA,gBACA,OAAO;AAAA,kBACL,SAAS,iBAAiB,QAAQ,QAAQ,YAAY,YAAY,WAAW,MAAM,IAAI;AAAA,kBACvF,QAAQ,GAAG,UAAU;AAAA,kBACrB,WAAW,GAAG,UAAU;AAAA,gBAC1B;AAAA,gBACA,SAAS,MAAM,CAAC,YAAY,aAAa,gBAAc,EAAE,GAAG,WAAW,aAAa,MAAM,EAAE;AAAA,gBAE3F;AAAA;AAAA,cAjBI;AAAA,YAkBP,CACD;AAAA;AAAA,QACH;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;AC9OA,SAAS,aAAAC,aAAW,UAAAC,SAAQ,YAAAC,kBAAgB;AAC5C,SAAS,cAAc;AACvB,OAAOC,YAAU;AAkEX,SAMM,OAAAC,OANN,QAAAC,cAAA;AA/BC,IAAM,kBAAkB,CAAC;AAAA,EACE,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AAAA,EACX,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAkB;AAChD,QAAM,CAAC,WAAW,YAAY,IAAIC,WAAS,iBAAiB,SAAS;AACrE,QAAM,EAAE,cAAc,WAAW,IAAI,SAAS,gBAAgB;AAC9D,QAAM,MAAMC,QAAyB,IAAI;AAEzC,QAAM,yBAAyB,CAAC,SAAiB;AAC/C,oBAAgB,IAAI;AACpB,eAAW;AAAA,EACb;AAEA,EAAAC,YAAU,MAAM;AACd,QAAI,WAAW;AACb,UAAI,SAAS,MAAM;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,SACE,gBAAAH,OAAC,SACC;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAWI,OAAK,kDAAkD,EAAE,kBAAkB,CAAC,UAAU,CAAC;AAAA,QAClG,SAAS,MAAM,CAAC,YAAY,aAAa,CAAC,SAAS,IAAI;AAAA,QAEvD;AAAA,0BAAAL,MAAC,SAAI,WAAWK,OAAK,8BAA8B,EAAE,UAAU,UAAU,CAAC,GACvE,sBACC,gBAAAL;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACC,GAAG;AAAA,cACJ;AAAA,cACA;AAAA,cACA,UAAU,WAAS;AACjB,sBAAMM,SAAQ,MAAM,OAAO;AAC3B,6BAAa,MAAM;AACjB,yCAAuBA,MAAK;AAAA,gBAC9B,CAAC;AACD,6BAAaA,MAAK;AAClB,yBAAS,KAAK;AAAA,cAChB;AAAA,cACA,QAAQ,CAAC,UAAU;AACjB,oBAAI,QAAQ;AACV,yBAAO,KAAK;AAAA,gBACd;AACA,uCAAuB,KAAK;AAC5B,6BAAa,KAAK;AAAA,cACpB;AAAA,cACA,WAAW,WAAS;AAClB,oBAAI,MAAM,QAAQ,SAAS;AACzB,+BAAa,KAAK;AAClB,yCAAuB,KAAK;AAAA,gBAC9B;AAAA,cACF;AAAA,cACA,WAAWD,OAAK,yIAAyI;AAAA,gBACvJ,WAAW;AAAA,cACb,GAAG,cAAc;AAAA,cACjB,SAAS,WAAS,MAAM,OAAO,OAAO;AAAA;AAAA,UACxC,IAEA,gBAAAL,MAAC,UAAK,WAAWK,OAAK,wCAAwC,cAAc,GACzE,iBACH,GAEJ;AAAA,UACA,gBAAAL;AAAA,YAAC;AAAA;AAAA,cACC,WAAWK,OAAK,kBAAkB,EAAE,oBAAoB,UAAU,CAAC;AAAA,cACnE;AAAA,cACA,OAAO,EAAE,UAAU,GAAG,IAAI,KAAK;AAAA;AAAA,UACjC;AAAA;AAAA;AAAA,IACF;AAAA,IACE,aAAa,cACb,gBAAAL,MAAC,WAAM,WAAU,iBACd,sBACH;AAAA,KAEJ;AAEJ;AAEO,IAAM,8BAA8B,CAAC;AAAA,EACE,OAAO;AAAA,EACP,eAAe;AAAA,EACf,GAAG;AACL,MAAkB;AAC5D,QAAM,CAAC,OAAO,QAAQ,IAAIE,WAAS,YAAY;AAE/C,EAAAE,YAAU,MAAM;AACd,aAAS,YAAY;AAAA,EACvB,GAAG,CAAC,YAAY,CAAC;AAEjB,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,cAAc,UAAQ;AACpB,iBAAS,IAAI;AACb,qBAAa,IAAI;AAAA,MACnB;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ACpJA,SAAS,kBAAkB;AAEpB,IAAM,cAAc,MAAM;AAC/B,SAAO,WAAW,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACrC;;;ACCO,IAAM,UAAU,CAAI,OAAU,WAAkC;AACrE,SAAO,KAAK;AACZ,SAAO;AACT;;;ACRO,IAAM,gBAAgB,CAAC,UAA2B;AACvD,SAAO,2CAA2C,KAAK,KAAK;AAC9D;;;ACFA,SAAS,SAAS;AAcX,IAAM,aAAa,EAAE,OAAO;AAAA,EACjC,OAAO,EAAE,OAAO;AAAA,EAChB,aAAa,EAAE,OAAO;AAAA,EACtB,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjC,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC5C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAC1B,CAAC,EAAE,UAAgB,CAAC,QAAQ;AAC1B,MAAI,cAAgC,CAAC,IAAI,WAAW;AACpD,MAAI,IAAI,OAAO;AACb,kBAAc,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,WAAW;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,OAAO,IAAI;AAAA,IACX,MAAM,IAAI,KAAK,IAAI,IAAI;AAAA,IACvB;AAAA,IACA,kBAAkB,IAAI,mBAAmB,IAAI,IAAI,IAAI,gBAAgB,IAAI;AAAA,IACzE,MAAM,IAAI;AAAA,EACZ;AACF,CAAC;AAEM,IAAM,iBAAiB,EAAE,MAAM,UAAU;AAEzC,IAAM,sBAAsB,EAAE,OAAO,EAAE,KAAK,aAAa,SAAS,GAAG,cAAc;AAEnF,IAAM,aAAa,CAAC,eAAuB,iBAA2B;AAC3E,SAAO,cAAc,OAAO,UAAQ,aAAa,MAAM,WAAS,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAC5F;;;ACxCO,SAAS,gBAAmB,QAA2B,MAAY;AACxE,SAAO,OAAO,WAAW,aAAc,OAA0B,IAAI,IAAI;AAC3E;","names":["nodeInterop","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","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","removeTrailingSlash","route","replace","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","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","getRouteMatcher","re","groups","pathname","routeMatch","exec","decode","param","decodeURIComponent","DecodeError","params","key","group","Object","entries","match","pos","undefined","repeat","split","map","entry","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","INFINITE_CACHE","INSTRUMENTATION_HOOK_FILENAME","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_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","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","escapeStringRegexp","reHasRegExp","reReplaceRegExp","str","test","replace","getNamedMiddlewareRegex","getNamedRouteRegex","getRouteRegex","parseParameter","PARAMETER_PATTERN","param","match","parseMatchedParameter","optional","startsWith","endsWith","slice","repeat","key","getParametrizedRoute","route","includeSuffix","includePrefix","groups","groupIndex","segments","segment","removeTrailingSlash","split","markerMatch","INTERCEPTION_ROUTE_MARKERS","find","m","paramMatches","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","URL","startsWith","asPath","_","finalUrl","normalizePathTrailingSlash","interpolatedAs","isDynamicRoute","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","RouterContext","React","createContext","process","env","NODE_ENV","displayName","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","useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","errorOnce","_","process","env","NODE_ENV","errors","Set","msg","has","console","error","add","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","current","clsx","clsx","jsx","jsxs","jsx","clsx","useEffect","useState","ChevronDown","useEffect","useState","jsx","useState","useEffect","language","date","clsx","clsx","jsx","jsxs","SolidButton","useEffect","useState","clsx","forwardRef","useCallback","useEffect","useState","clsx","jsx","jsxs","clsx","forwardRef","Expandable","useCallback","ExpandableUncontrolled","useState","useEffect","jsx","useEffect","clsx","useState","clsx","useEffect","useState","jsx","jsxs","clsx","jsx","jsxs","useState","useEffect","clsx","ChevronDown","jsx","useEffect","useRef","useState","Scrollbars","clsx","jsx","jsxs","useRef","useEffect","Scrollbars","useState","clsx","useEffect","useRef","useState","clsx","useEffect","useState","clsx","jsx","jsxs","jsx","jsxs","useState","useEffect","clsx","useRef","jsx","jsxs","clsx","clsx","jsx","jsxs","clsx","jsx","useCallback","useEffect","useState","clsx","jsx","jsxs","useState","useCallback","useEffect","jsx","clsx","jsx","jsxs","Link","useCallback","useEffect","useRef","useState","clsx","jsx","jsxs","useState","useRef","useCallback","animationState","dragState","useEffect","clsx","clsx","jsx","jsxs","clsx","jsx","clsx","Fragment","jsx","open","jsx","clsx","ChevronLeft","ChevronRight","clsx","forwardRef","useEffect","useRef","useState","clsx","useEffect","useState","clsx","jsx","useCallback","React","useEffect","jsx","jsxs","clsx","forwardRef","Input","useRef","value","useState","useEffect","FormInput","useEffect","useState","jsx","jsxs","useState","useEffect","clsx","ChevronLeft","value","ChevronRight","clsx","useCallback","useEffect","useMemo","useState","useState","useMemo","useCallback","useEffect","jsx","jsxs","clsx","Check","ChevronLeft","ChevronRight","clsx","useEffect","useState","jsx","jsxs","clsx","ChevronLeft","ChevronRight","Check","useState","useEffect","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","jsxs","useState","clsx","jsx","clsx","jsx","useState","clsx","jsx","jsxs","clsx","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","jsx","jsx","useCallback","useEffect","useState","clsx","useEffect","useRef","useState","clsx","useEffect","Fragment","jsx","jsxs","clsx","useRef","useState","useEffect","Search","clsx","jsx","jsxs","Fragment","jsx","jsxs","clsx","useCallback","useState","useEffect","options","value","jsx","jsxs","language","createContext","useContext","useEffect","useState","jsx","createContext","useState","useEffect","useContext","jsx","jsxs","theme","Check","useState","Check","clsx","jsx","jsxs","checked","clsx","Check","useState","clsx","jsx","jsxs","clsx","jsx","Check","clsx","jsx","clsx","value","Plus","clsx","useCallback","useEffect","useState","clsx","Fragment","jsx","jsxs","useCallback","clsx","useState","useEffect","options","jsx","softRequired","clsx","Plus","clsx","jsx","jsxs","clsx","value","List","Plus","clsx","jsx","List","softRequired","clsx","Plus","value","clsx","useEffect","useState","clsx","jsx","jsxs","useState","clsx","useEffect","text","jsx","clsx","value","clsx","jsx","useCallback","useEffect","useMemo","useRef","useState","clsx","Scrollbars","useEffect","useState","Fragment","jsx","jsxs","ChevronDown","clsx","jsx","ChevronDown","useEffect","clsx","jsx","jsx","jsxs","useRef","useState","useMemo","useEffect","useCallback","clsx","Scrollbars","useState","clsx","jsx","jsxs","useState","clsx","clsx","jsx","jsxs","clsx","useCallback","useEffect","useState","clsx","jsx","jsxs","useState","useCallback","currentIndex","transition","items","useEffect","distance","clsx","useEffect","useRef","useState","clsx","jsx","jsxs","useState","useRef","useEffect","clsx","value"]}