{"version":3,"sources":["../src/components/branding/AppZumDocBadge.tsx","../src/components/branding/AppZumDocLogo.tsx","../src/components/branding/HelpwaveLogo.tsx","../src/components/branding/HelpwaveBadge.tsx","../src/components/chat/ChatAttachmentCard.tsx","../src/components/user-interaction/IconButton.tsx","../src/components/user-interaction/Tooltip.tsx","../src/hooks/useOverlayRegistry.ts","../src/hooks/useTransitionState.ts","../src/global-contexts/HightideConfigContext.tsx","../src/components/utils/Portal.tsx","../src/components/layout/AnchoredFloatingContainer.tsx","../src/hooks/useAnchoredPosition.ts","../src/utils/math.ts","../src/hooks/useWindowResizeObserver.ts","../src/hooks/useResizeObserver.ts","../src/hooks/useScrollObserver.ts","../src/utils/reactRefs.ts","../src/utils/bagFunctions.ts","../src/components/layout/Visibility.tsx","../src/hooks/useLogOnce.ts","../src/components/chat/ChatConversationList.tsx","../src/components/layout/ScrollableList.tsx","../src/components/chat/ChatConversationRow.tsx","../src/components/display-and-visualization/Avatar.tsx","../src/utils/array.ts","../src/utils/propsUtil.ts","../src/components/chat/ChatDateDivider.tsx","../src/components/chat/ChatMessageBubble.tsx","../src/components/chat/ChatMessageCard.tsx","../src/components/chat/ChatMessageComposer.tsx","../src/hooks/useControlledState.ts","../src/utils/resolveSetState.ts","../src/hooks/useEventCallbackStabelizer.ts","../src/components/chat/ChatMessageList.tsx","../src/components/chat/ChatQuickReplyChip.tsx","../src/components/chat/ChatSystemLine.tsx","../src/components/chat/ChatThreadHeader.tsx","../src/components/display-and-visualization/Card.tsx","../src/hooks/useChangingNumber.ts","../src/utils/curve.ts","../src/components/display-and-visualization/ChangingNumber.tsx","../src/components/user-interaction/Button.tsx","../src/components/display-and-visualization/Chip.tsx","../src/components/display-and-visualization/ExpansionIcon.tsx","../src/components/display-and-visualization/ProgressIndicator.tsx","../src/components/display-and-visualization/process-model/ProcessModelActivityNode.tsx","../src/components/display-and-visualization/process-model/ProcessModelCanvas.tsx","../src/components/display-and-visualization/process-model/layoutProcessModel.ts","../src/components/display-and-visualization/process-model/ProcessModelTerminalNode.tsx","../src/components/display-and-visualization/process-model/ProcessModelTraceReplay.tsx","../src/global-contexts/LocaleContext.tsx","../src/hooks/useStorage.ts","../src/utils/StorageListener.ts","../src/i18n/translations.ts","../src/i18n/util.ts","../src/i18n/useHightideTranslation.ts","../src/components/user-interaction/Select/Select.tsx","../src/components/user-interaction/Select/SelectRoot.tsx","../src/components/user-interaction/Select/SelectContext.tsx","../src/components/user-interaction/Select/useSelect.ts","../src/hooks/useSingleSelection.ts","../src/hooks/useListNavigation.tsx","../src/hooks/useSearch.ts","../src/utils/simpleSearch.ts","../src/hooks/useTypeAheadSearch.ts","../src/utils/dom.ts","../src/components/layout/popup/PopUpContext.tsx","../src/components/user-interaction/Select/SelectButton.tsx","../src/components/user-interaction/Select/SelectOption.tsx","../src/components/user-interaction/Select/SelectContent.tsx","../src/components/layout/popup/PopUp.tsx","../src/components/utils/FocusTrap.tsx","../src/hooks/focus/useFocusTrap.ts","../src/hooks/useOutsideClick.ts","../src/hooks/usePresenceRef.ts","../src/components/user-interaction/input/Input.tsx","../src/hooks/useDelay.ts","../src/hooks/focus/useFocusManagement.ts","../src/components/display-and-visualization/process-model/processModelLibrary.ts","../src/components/form/FieldLayout.tsx","../src/components/form/FormContext.tsx","../src/components/form/FormField.tsx","../src/components/form/FormObserver.tsx","../src/components/form/FormStore.ts","../src/components/form/useCreateForm.tsx","../src/components/layout/Carousel.tsx","../src/components/layout/DividerInserter.tsx","../src/components/layout/Expandable.tsx","../src/components/layout/FAQSection.tsx","../src/components/layout/InifiniteScroll.tsx","../src/components/layout/MarkdownInterpreter.tsx","../src/components/layout/TabSwitcher.tsx","../src/components/layout/TextImage.tsx","../src/components/layout/VerticalDivider.tsx","../src/components/layout/app/AppPage.tsx","../src/hooks/trees/treeUtilities.ts","../src/hooks/trees/useTreeExpansion.ts","../src/components/layout/navigation/navigation-menus/NavigationContext.tsx","../src/components/layout/navigation/navigation-menus/VerticalNavigationMenuItem.tsx","../src/components/layout/navigation/navigation-menus/types.ts","../src/components/layout/navigation/navigation-menus/VerticalNavigationMenu.tsx","../src/components/layout/dialog/Dialog.tsx","../src/components/layout/dialog/DialogContext.tsx","../src/components/layout/dialog/DialogOpener.tsx","../src/components/layout/dialog/DialogRoot.tsx","../src/components/layout/dialog/premade/ConfirmDialog.tsx","../src/components/layout/dialog/premade/DiscardChangesDialog.tsx","../src/components/layout/dialog/premade/InputDialog.tsx","../src/components/layout/dialog/premade/LanguageDialog.tsx","../src/components/layout/dialog/premade/ThemeDialog.tsx","../src/global-contexts/ThemeContext.tsx","../src/components/layout/drawer/Drawer.tsx","../src/components/layout/drawer/DrawerContainer.tsx","../src/components/layout/drawer/DrawerContext.tsx","../src/components/layout/drawer/DrawerCloseButton.tsx","../src/components/layout/drawer/DrawerRoot.tsx","../src/components/layout/loading/ErrorComponent.tsx","../src/components/layout/loading/LoadingAndErrorComponent.tsx","../src/components/layout/loading/LoadingContainer.tsx","../src/components/layout/loading/LoadingAnimation.tsx","../src/components/layout/navigation/BreadCrumbs.tsx","../src/components/layout/navigation/Navigation.tsx","../src/components/layout/navigation/Pagination.tsx","../src/components/layout/navigation/StepperBar.tsx","../src/components/layout/popup/PopUpOpener.tsx","../src/components/layout/popup/PopUpRoot.tsx","../src/components/layout/table/AutoColumnOrderFeature.ts","../src/components/layout/table/columnSizeUtil.ts","../src/components/layout/table/ColumnSizingWithTargetFeature.ts","../src/components/layout/table/FillerCell.tsx","../src/components/layout/table/TableProvider.tsx","../src/components/layout/table/TableContext.tsx","../src/components/user-interaction/data/FilterOperator.tsx","../src/components/user-interaction/data/filter-function.ts","../src/utils/date.ts","../src/components/layout/table/TableFilter.ts","../src/components/layout/table/TableCell.tsx","../src/components/layout/table/placeholderColumn.ts","../src/components/layout/table/TableDisplay.tsx","../src/components/layout/table/TableBody.tsx","../src/components/layout/table/TableHeader.tsx","../src/components/layout/table/TableSortButton.tsx","../src/components/layout/table/TableFilterButton.tsx","../src/components/user-interaction/data/FilterPopUp.tsx","../src/components/user-interaction/input/DateTimeInput.tsx","../src/components/user-interaction/date/TimeInput.tsx","../src/components/user-interaction/input/NumberStepperInput.tsx","../src/hooks/useStepperHold.ts","../src/components/user-interaction/input/NumberInput.tsx","../src/components/user-interaction/date/DatePicker.tsx","../src/components/user-interaction/date/DayPicker.tsx","../src/components/user-interaction/date/YearMonthPicker.tsx","../src/components/user-interaction/date/DateTimePicker.tsx","../src/components/user-interaction/date/DateTimePickerDialog.tsx","../src/components/user-interaction/input/DateTimeField.tsx","../src/components/user-interaction/input/dateTimeSegments.ts","../src/components/user-interaction/MultiSelect/MultiSelect.tsx","../src/components/user-interaction/MultiSelect/MultiSelectRoot.tsx","../src/components/user-interaction/MultiSelect/MultiSelectContext.tsx","../src/components/user-interaction/MultiSelect/useMultiSelect.ts","../src/hooks/useMultiSelection.ts","../src/components/user-interaction/MultiSelect/MultiSelectButton.tsx","../src/components/user-interaction/MultiSelect/MultiSelectOption.tsx","../src/components/user-interaction/MultiSelect/MultiSelectContent.tsx","../src/components/user-interaction/data/FilterOperatorLabel.tsx","../src/components/user-interaction/data/data-types.tsx","../src/components/layout/table/VirtualizedTableBody.tsx","../src/components/layout/virtualization/useVirtualizedRows.ts","../src/components/layout/virtualization/virtualizationScroll.ts","../src/hooks/useScrollbarState.ts","../src/components/layout/table/useNaturalColumnWidthLock.ts","../src/components/layout/table/TablePagination.tsx","../src/components/user-interaction/Checkbox.tsx","../src/components/layout/table/TableWithSelectionProvider.tsx","../src/components/layout/table/Table.tsx","../src/components/layout/table/TableColumn.tsx","../src/components/layout/table/TableColumnSwitcher.tsx","../src/components/layout/virtualization/VirtualizedCardGrid.tsx","../src/components/layout/virtualization/gridLayout.ts","../src/components/user-interaction/Combobox/Combobox.tsx","../src/components/user-interaction/Combobox/ComboboxRoot.tsx","../src/components/user-interaction/Combobox/ComboboxContext.tsx","../src/components/user-interaction/Combobox/useCombobox.ts","../src/components/user-interaction/Combobox/ComboboxInput.tsx","../src/components/user-interaction/Combobox/ComboboxList.tsx","../src/components/user-interaction/Combobox/ComboboxOption.tsx","../src/components/user-interaction/CopyToClipboardWrapper.tsx","../src/utils/writeToClipboard.ts","../src/components/user-interaction/LabelledCheckbox.tsx","../src/components/user-interaction/Menu.tsx","../src/components/user-interaction/MultiSelect/MultiSelectChipDisplay.tsx","../src/components/user-interaction/ScrollPicker.tsx","../src/components/user-interaction/Switch.tsx","../src/components/user-interaction/Textarea.tsx","../src/components/user-interaction/data/FilterList.tsx","../src/components/user-interaction/data/SortingList.tsx","../src/components/user-interaction/date/TimeDisplay.tsx","../src/components/user-interaction/date/TimePicker.tsx","../src/components/user-interaction/input/FlexibleDateTimeInput.tsx","../src/components/user-interaction/input/InsideLabelInput.tsx","../src/components/user-interaction/input/SearchBar.tsx","../src/components/user-interaction/input/ToggleableInput.tsx","../src/components/user-interaction/properties/CheckboxProperty.tsx","../src/components/user-interaction/properties/PropertyBase.tsx","../src/components/user-interaction/properties/DateProperty.tsx","../src/components/user-interaction/properties/MultiSelectProperty.tsx","../src/components/user-interaction/properties/NumberProperty.tsx","../src/components/user-interaction/properties/SelectProperty.tsx","../src/components/user-interaction/properties/TextProperty.tsx","../src/components/utils/Transition.tsx","../src/global-contexts/HightideProvider.tsx","../src/hooks/focus/useFocusGuards.ts","../src/hooks/focus/useFocusOnceVisible.ts","../src/hooks/trees/useTreeFocusNavigation.ts","../src/hooks/trees/useTreeNavigation.ts","../src/hooks/useDebouncer.ts","../src/hooks/useHandleRefs.ts","../src/hooks/useIsMounted.ts","../src/hooks/useLogUnstableDependencies.ts","../src/hooks/useOverwritableState.ts","../src/hooks/useRerender.ts","../src/hooks/useSwipeGesture.ts","../src/hooks/useThrottle.ts","../src/hooks/useUpdatingDateString.ts","../src/utils/emailValidation.ts","../src/hooks/useValidators.ts","../src/utils/builder.ts","../src/utils/duration.ts","../src/utils/loopingArray.ts","../src/utils/match.ts","../src/utils/noop.ts","../src/utils/promise.ts"],"sourcesContent":["import type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\nimport { AppZumDocLogo } from './AppZumDocLogo'\n\ntype Size = 'sm' | 'md' | 'lg'\n\nexport type AppZumDocBadgeProps = HTMLAttributes<HTMLSpanElement> & {\n  size?: Size,\n}\n\nexport const AppZumDocBadge = ({\n  size = 'sm',\n  ...props\n}: AppZumDocBadgeProps) => {\n  return (\n    <span\n      {...props}\n      className={clsx(\n        'flex flex-row items-center font-bold font-space rounded-md text-[#057986]',\n        {\n          'gap-x-1': size === 'sm',\n          'gap-x-2 text-lg': size === 'md',\n          'gap-x-2 text-xl': size === 'lg'\n        },\n        props.className\n      )}\n    >\n      <AppZumDocLogo size={size}/>\n      App zum Doc\n    </span>\n  )\n}\n","import type { CSSProperties, SVGProps } from 'react'\nimport { useId } from 'react'\nimport { clsx } from 'clsx'\n\nconst backFillPath = 'M33.1817 37.511L29.7804 37.511C21.7695 37.511 15.2754 44.0051 15.2754 52.016C15.2754 60.0268 21.7695 66.5209 29.7804 66.5209H35.4017C35.4208 66.5209 35.4274 66.5239 35.4301 66.5251C35.436 66.5275 35.4456 66.5331 35.4559 66.5434C35.4662 66.5536 35.4717 66.5633 35.4742 66.5691C35.4754 66.5719 35.4783 66.5785 35.4783 66.5975L35.4783 72.852C35.4783 80.8628 41.9724 87.3569 49.9833 87.3569C57.9942 87.3569 64.4883 80.8628 64.4883 72.852L64.4883 54.7684C64.4883 45.2374 56.7619 37.511 47.2309 37.511L43.6515 37.511V42.1072L47.2309 42.1072C54.2235 42.1072 59.8921 47.7758 59.8921 54.7684V72.852C59.8921 78.3244 55.4558 82.7608 49.9833 82.7608C44.5108 82.7608 40.0745 78.3244 40.0745 72.852L40.0745 66.5975C40.0745 64.0168 37.9824 61.9248 35.4017 61.9248L29.7804 61.9248C24.3079 61.9248 19.8716 57.4884 19.8716 52.016C19.8716 46.5435 24.3079 42.1072 29.7804 42.1072L33.1817 42.1072V37.511Z'\n\nconst frontFillPath = 'M65.0734 29.3412C65.0734 21.3303 58.5793 14.8362 50.5685 14.8362C42.5576 14.8362 36.0635 21.3303 36.0635 29.3412V47.4247C36.0635 56.9557 43.7899 64.6821 53.3209 64.6821H57.4673V60.086H53.3209C46.3283 60.086 40.6597 54.4173 40.6597 47.4247V29.3412C40.6597 23.8687 45.096 19.4324 50.5685 19.4324C56.0409 19.4324 60.4773 23.8687 60.4773 29.3412V35.5956C60.4773 38.1763 62.5693 40.2684 65.15 40.2684H70.7714C76.2439 40.2684 80.6802 44.7047 80.6802 50.1772C80.6802 55.6496 76.2439 60.086 70.7714 60.086H66.7949V64.6821H70.7714C78.7823 64.6821 85.2764 58.188 85.2764 50.1772C85.2764 42.1663 78.7823 35.6722 70.7714 35.6722H65.15C65.131 35.6722 65.1244 35.6692 65.1216 35.668C65.1158 35.6656 65.1061 35.66 65.0959 35.6497C65.0856 35.6395 65.08 35.6298 65.0776 35.624L65.0775 35.6238C65.0763 35.6209 65.0734 35.6142 65.0734 35.5956V29.3412Z'\n\nconst backStrokePath = 'M43.65 39.81 L47.23 39.81 A14.96 14.96 0 0 1 62.19 54.77 L62.19 72.85 A12.21 12.21 0 0 1 37.78 72.85 L37.78 66.6 Q37.78 64.22 35.4 64.22 L29.78 64.22 A12.21 12.21 0 0 1 29.78 39.81 L33.18 39.81'\n\nconst frontStrokePath = 'M57.47 62.38 L53.32 62.38 A14.96 14.96 0 0 1 38.36 47.42 L38.36 29.34 A12.21 12.21 0 0 1 62.78 29.34 L62.78 35.6 Q62.78 37.97 65.15 37.97 L70.77 37.97 A12.21 12.21 0 0 1 70.77 62.38 L66.79 62.38'\n\nexport type AppZumDocLogoProps = SVGProps<SVGSVGElement> & {\n  frontColor?: string,\n  backColor?: string,\n  animate?: 'none' | 'loading' | 'pulse' | 'bounce',\n  size?: 'sm' | 'md' | 'lg',\n  animationDuration?: number,\n}\n\nexport const AppZumDocLogo = ({\n  frontColor = '#095763',\n  backColor = '#4E97A2',\n  animate = 'none',\n  size,\n  animationDuration = 1.7,\n  ...props\n}: AppZumDocLogoProps) => {\n  const id = useId()\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  const style = animationDuration !== undefined && isLoadingAnimation\n    ? { ...props.style, '--helpwave-loading-duration': `${animationDuration}s` } as CSSProperties\n    : props.style\n\n  return (\n    <svg\n      {...props}\n      style={style}\n      viewBox=\"14 14 72 74\"\n      fill=\"none\"\n      className={clsx({\n        'max-w-16 max-h-16 min-w-16 min-h-16': size === 'lg',\n        'max-w-12 max-h-12 min-w-12 min-h-12': size === 'md',\n        'max-w-8 max-h-8 min-w-8 min-h-8': size === 'sm',\n      }, props.className)}\n    >\n      <g className={clsx(svgAnimationKey)}>\n        {isLoadingAnimation ? (\n          <>\n            <clipPath id={`${id}-back`}>\n              <path d={backFillPath}/>\n            </clipPath>\n            <clipPath id={`${id}-front`}>\n              <path d={frontFillPath}/>\n            </clipPath>\n            <g clipPath={`url(#${id}-back)`}>\n              <path\n                className=\"animate-azd-fill-back\"\n                d={backStrokePath}\n                stroke={backColor}\n                strokeWidth={7}\n                strokeLinecap=\"round\"\n                pathLength={1000}\n                strokeDasharray=\"1000 2000\"\n              />\n            </g>\n            <g clipPath={`url(#${id}-front)`}>\n              <path\n                className=\"animate-azd-fill-front\"\n                d={frontStrokePath}\n                stroke={frontColor}\n                strokeWidth={7}\n                strokeLinecap=\"round\"\n                pathLength={1000}\n                strokeDasharray=\"1000 2000\"\n              />\n            </g>\n          </>\n        ) : (\n          <>\n            <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={backFillPath} fill={backColor}/>\n            <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={frontFillPath} fill={frontColor}/>\n          </>\n        )}\n      </g>\n    </svg>\n  )\n}\n","import type { CSSProperties, SVGProps } from 'react'\nimport { clsx } from 'clsx'\n\nexport type HelpwaveProps = SVGProps<SVGSVGElement> & {\n  color?: string,\n  animate?: 'none' | 'loading' | 'pulse' | 'bounce',\n  size?: 'sm' | 'md' | 'lg',\n  animationDuration?: number,\n}\n\n/**\n * The helpwave loading spinner based on the svg logo.\n */\nexport const HelpwaveLogo = ({\n  color = 'currentColor',\n  size,\n  animate = 'none',\n  animationDuration = 1.7,\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  const style = animationDuration !== undefined && isLoadingAnimation\n    ? { ...props.style, '--helpwave-loading-duration': `${animationDuration}s` } as CSSProperties\n    : props.style\n\n  return (\n    <svg\n      {...props}\n      style={style}\n      viewBox=\"0 0 1024 1024\"\n      fill=\"none\"\n      strokeLinecap=\"round\"\n      strokeWidth={65}\n      className={clsx({\n        'max-w-16 max-h-16 min-w-16 min-h-16': size === 'lg',\n        'max-w-12 max-h-12 min-w-12 min-h-12': size === 'md',\n        'max-w-8 max-h-8 min-w-8 min-h-8': size === 'sm',\n      }, props.className)}\n    >\n      <g className={clsx(svgAnimationKey)}>\n        <path className={clsx({ 'animate-wave-big-left-up': isLoadingAnimation })}\n          d=\"M146 644.214C146 498.088 253.381 379.629 385.843 379.629\" stroke={color} strokeDasharray=\"1000 1000\"/>\n        <path className={clsx({ 'animate-wave-big-right-down': isLoadingAnimation })}\n          d=\"M625.686 645.272C493.224 645.272 385.843 526.813 385.843 380.687\" stroke={color}\n          strokeDasharray=\"1000 1000\"/>\n        <path className={clsx({ 'animate-wave-small-left-up': isLoadingAnimation })}\n          d=\"M533.585 613.522C533.585 508.895 610.47 424.079 705.312 424.079\" stroke={color}\n          strokeDasharray=\"1000 1000\"/>\n        <path className={clsx({ 'animate-wave-small-right-down': isLoadingAnimation })}\n          d=\"M878 615.639C782.628 615.639 705.313 530.822 705.313 426.196\" stroke={color}\n          strokeDasharray=\"1000 1000\"/>\n      </g>\n    </svg>\n  )\n}\n","import { HelpwaveLogo } from './HelpwaveLogo'\nimport type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\ntype Size = 'sm' | 'md' | 'lg'\n\nexport type HelpwaveBadgeProps = HTMLAttributes<HTMLSpanElement> & {\n  size?: Size,\n}\n\n/**\n * A Badge with the helpwave logo and the helpwave name\n */\nexport const HelpwaveBadge = ({\n  size = 'sm',\n  ...props\n}: HelpwaveBadgeProps) => {\n  return (\n    <span\n      {...props}\n      className={clsx(\n        'flex flex-row items-center font-bold font-space rounded-md',\n        {\n          'gap-x-1': size === 'sm',\n          'gap-x-2 text-lg': size === 'md',\n          'gap-x-2 text-xl': size === 'lg'\n        },\n        props.className\n      )}\n    >\n      <HelpwaveLogo size={size}/>\n      helpwave\n    </span>\n  )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { Download, FileText } from 'lucide-react'\nimport { IconButton } from '../user-interaction/IconButton'\nimport type { ChatMessageDirection } from './ChatMessageBubble'\n\nexport type ChatAttachmentCardProps = HTMLAttributes<HTMLDivElement> & {\n  name: ReactNode,\n  metadata?: ReactNode,\n  icon?: ReactNode,\n  direction?: ChatMessageDirection,\n  downloadLabel?: string,\n  onDownload?: () => void,\n}\n\nexport const ChatAttachmentCard = ({\n  name,\n  metadata,\n  icon,\n  direction = 'incoming',\n  downloadLabel = 'Download',\n  onDownload,\n  ...props\n}: ChatAttachmentCardProps) => {\n  return (\n    <div\n      {...props}\n      className={clsx('chat-attachment-card', props.className)}\n      data-direction={direction}\n    >\n      <span className=\"chat-attachment-card-icon\">\n        {icon ?? <FileText/>}\n      </span>\n      <span className=\"chat-attachment-card-info\">\n        <span className=\"chat-attachment-card-filename\">{name}</span>\n        {metadata && (\n          <span className=\"chat-attachment-card-metadata\">{metadata}</span>\n        )}\n      </span>\n      {onDownload && (\n        <IconButton\n          tooltip={downloadLabel}\n          size=\"sm\"\n          color=\"primary\"\n          coloringStyle=\"text\"\n          onClick={onDownload}\n        >\n          <Download/>\n        </IconButton>\n      )}\n    </div>\n  )\n}\n","import type { ForwardedRef, ReactNode } from 'react'\nimport { forwardRef,type ButtonHTMLAttributes } from 'react'\nimport type { TooltipDisplayProps } from './Tooltip'\nimport { TooltipContext, TooltipDisplay, TooltipRoot, useTooltip } from './Tooltip'\nimport { Visibility } from '../layout/Visibility'\nimport { useLogOnce } from '@/src/hooks/useLogOnce'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\nimport clsx from 'clsx'\n\n/**\n * The different sizes for a icon button\n */\ntype IconButtonSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype IconButtonColoringStyle = 'outline' | 'solid' | 'text' | 'tonal' | 'tonal-outline' | null\n\n\n\nexport interface IconButtonBaseProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n    /**\n     * @default 'medium'\n     */\n    size?: IconButtonSize,\n    /**\n     * @default 'solid'\n     */\n    coloringStyle?: IconButtonColoringStyle,\n}\n\nexport const IconButtonBase = forwardRef<HTMLButtonElement, IconButtonBaseProps>(function IconButtonBase({\n  children,\n  size = 'md',\n  color = 'primary',\n  coloringStyle = 'solid',\n  disabled,\n  ...props\n}, ref) {\n  return (\n    <button\n      {...props}\n      ref={ref}\n      disabled={disabled}\n      type={props['type'] ?? 'button'}\n\n\n      onClick={event => {\n        props.onClick?.(event)\n      }}\n\n      className={clsx('icon-button', props.className)}\n      data-disabled={disabled ? '': undefined}\n      data-size={size ?? undefined}\n      data-color={color ?? undefined}\n      data-coloringstyle={coloringStyle ?? undefined}\n    >\n      {children}\n    </button>\n  )\n})\n\n\n\n\n\n\ntype IconButtonTooltipTriggerProps = IconButtonBaseProps\n\n\nconst IconButtonTooltipTrigger = forwardRef<HTMLButtonElement, IconButtonTooltipTriggerProps>(function IconButtonTooltipTrigger({\n  disabled,\n  ...props\n}, ref) {\n  const { trigger: { ref: triggerRef, props: tooltipTriggerProps } } = useTooltip()\n\n  return (\n    <IconButtonBase\n      {...props}\n      ref={ReactRefsUtil.assingRefsBuilder([ref, triggerRef as ForwardedRef<HTMLButtonElement>])}\n      disabled={disabled}\n      type={props['type'] ?? 'button'}\n\n      onClick={event => {\n        if(!disabled) {\n          tooltipTriggerProps.onClick()\n        }\n        props.onClick?.(event)\n      }}\n      onKeyDown={(e) => {\n        if(!disabled) {\n          if(e.key === 'Enter' || e.key === ' ') {\n            tooltipTriggerProps.onClick()\n          }\n        }\n        props.onKeyDown?.(e)\n      }}\n      onPointerEnter={(e) => {\n        if(!disabled) {\n          tooltipTriggerProps.onPointerEnter()\n        }\n        props.onPointerEnter?.(e)\n      }}\n      onPointerLeave={(e) => {\n        if(!disabled) {\n          tooltipTriggerProps.onPointerLeave()\n        }\n        props.onPointerLeave?.(e)\n      }}\n      onPointerCancel={(e) => {\n        if(!disabled) {\n          tooltipTriggerProps.onPointerCancel()\n        }\n        props.onPointerCancel?.(e)\n      }}\n      onBlur={(e) => {\n        if(!disabled) {\n          tooltipTriggerProps.onBlur()\n        }\n        props.onBlur?.(e)\n      }}\n    />\n  )\n})\n\n\n\nexport interface IconButtonProps extends IconButtonBaseProps {\n  useTooltipAsLabel?: boolean,\n  tooltip?: ReactNode,\n  tooltipProps?: Omit<TooltipDisplayProps, 'children' | 'isShown'>,\n}\n\n/**\n * A icon button with a tooltip\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton({\n  tooltip,\n  tooltipProps,\n  'aria-label': ariaLabel,\n  'aria-labelledby': ariaLabelledby,\n  useTooltipAsLabel = true,\n  color = 'neutral',\n  disabled,\n  ...props\n}, ref) {\n  const isLabeled = !!ariaLabel || !!ariaLabelledby\n  const isTooltipLabel = useTooltipAsLabel && !!tooltip\n\n  useLogOnce('IconButton: Either provide \"aria-label\" or \"aria-labelledby\" or use ' +\n    '\"useTooltipAsLabel\" and \"tooltip\" to give the icon button a semantic meaning',\n  !isLabeled && !isTooltipLabel, { type: 'warning' })\n\n  return (\n    <TooltipRoot disabled={disabled}>\n      <TooltipContext.Consumer>\n        {(context) => {\n          const id = context?.tooltip.id\n          return (\n            <IconButtonTooltipTrigger\n              {...props}\n              ref={ref}\n\n              color={color}\n              disabled={disabled}\n\n              aria-describedby={props['aria-describedby'] ?? (isLabeled && !!tooltip ? id : undefined)}\n              aria-labelledby={isLabeled ? ariaLabelledby : (isTooltipLabel ? id : undefined)}\n              aria-label={ariaLabel}\n            />\n          )}}\n      </TooltipContext.Consumer>\n      <Visibility isVisible={!!tooltip}>\n        <TooltipDisplay aria-hidden={!useTooltipAsLabel && !!props['aria-hidden']} {...tooltipProps}>\n          {tooltip}\n        </TooltipDisplay>\n      </Visibility>\n    </TooltipRoot>\n  )\n})","import type { PropsWithChildren, ReactNode, RefObject } from 'react'\nimport { forwardRef, useContext, useEffect } from 'react'\nimport { useId } from 'react'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport type { FloatingElementAlignment, UseAnchoredPositionOptions } from '@/src/hooks/useAnchoredPosition'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport type { TooltipConfig } from '@/src/global-contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/global-contexts/HightideConfigContext'\nimport { Portal } from '@/src/components/utils/Portal'\nimport type { AnchoredFloatingContainerProps } from '../layout/AnchoredFloatingContainer'\nimport { AnchoredFloatingContainer } from '../layout/AnchoredFloatingContainer'\nimport { createContext } from 'react'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport interface TooltipTriggerContextValue {\n  ref: RefObject<HTMLElement | null>,\n  callbackRef: (el: HTMLElement | null) => void,\n  props: {\n    'onPointerEnter': () => void,\n    'onPointerLeave': () => void,\n    'onPointerCancel': () => void,\n    'onClick': () => void,\n    'onBlur': () => void,\n    'aria-describedby'?: string,\n  },\n}\n\nexport interface TooltipContextType {\n  tooltip: {\n    id: string,\n    setId: (id: string) => void,\n  },\n  trigger: TooltipTriggerContextValue,\n  disabled: boolean,\n  isShown: boolean,\n  open: () => void,\n  close: () => void,\n}\n\nexport const TooltipContext = createContext<TooltipContextType | null>(null)\n\nexport const useTooltip = () => {\n  const context = useContext(TooltipContext)\n  if(!context) {\n    throw new Error('useTooltip must be used within a TooltipContext.Provider or TooltipRoot')\n  }\n  return context\n}\n\nexport interface TooltipRootProps extends PropsWithChildren {\n  isInitiallyShown?: boolean,\n  onIsShownChange?: (isShown: boolean) => void,\n  appearDelay?: number,\n  disabled?: boolean,\n}\n\nexport const TooltipRoot = ({\n  children,\n  isInitiallyShown = false,\n  onIsShownChange,\n  appearDelay: appearOverwrite,\n  disabled = false,\n}: TooltipRootProps) => {\n  const generatedId = 'tooltip-' + useId()\n  const [tooltipId, setTooltipId] = useState<string>(generatedId)\n  const [isShown, setIsShown] = useState(isInitiallyShown)\n\n  const timeoutRef = useRef<NodeJS.Timeout>(undefined)\n\n  const { config } = useHightideConfig()\n\n  const appearDelay = useMemo(() =>\n    appearOverwrite ?? config.tooltip.appearDelay,\n  [appearOverwrite, config.tooltip.appearDelay])\n\n  const triggerRef = useRef<HTMLElement | null>(null)\n\n  useEffect(() => {\n    onIsShownChange?.(isShown)\n  }, [isShown, onIsShownChange])\n\n  const openWithDelay = useCallback(() => {\n    if (timeoutRef.current || isShown) return\n\n    if(appearDelay < 0) {\n      setIsShown(true)\n      return\n    }\n\n    timeoutRef.current = setTimeout(() => {\n      timeoutRef.current = undefined\n      setIsShown(true)\n    }, appearDelay)\n  }, [appearDelay, isShown])\n\n\n  const close = useCallback(() => {\n    if (timeoutRef.current) {\n      clearTimeout(timeoutRef.current)\n      timeoutRef.current = undefined\n    }\n    setIsShown(false)\n  }, [])\n\n  useEffect(() => {\n    if (!isShown) return\n\n    const closeOnBlur = () => close()\n    const closeOnScroll = () => close()\n\n    window.addEventListener('blur', closeOnBlur)\n    window.addEventListener('scroll', closeOnScroll, true)\n\n    return () => {\n      window.removeEventListener('blur', closeOnBlur)\n      window.removeEventListener('scroll', closeOnScroll, true)\n    }\n  }, [isShown, close])\n\n  useEffect(() => {\n    if(disabled) {\n      setIsShown(false)\n      if(timeoutRef.current) {\n        clearTimeout(timeoutRef.current)\n        timeoutRef.current = undefined\n      }\n    }\n  }, [disabled])\n\n  const contextValue: TooltipContextType = useMemo(() => ({\n    tooltip: {\n      id: tooltipId,\n      setId: setTooltipId,\n    },\n    trigger: {\n      ref: triggerRef,\n      callbackRef: (el: HTMLElement | null) => triggerRef.current = el,\n      props: {\n        'onPointerEnter': openWithDelay,\n        'onPointerLeave': close,\n        'onPointerCancel': close,\n        'onClick': openWithDelay,\n        'onBlur': close,\n        'aria-describedby': tooltipId,\n      },\n    },\n    disabled,\n    isShown,\n    open: openWithDelay,\n    close,\n  }), [tooltipId, openWithDelay, close, isShown, disabled])\n\n  return (\n    <TooltipContext.Provider value={contextValue}>\n      {children}\n    </TooltipContext.Provider>\n  )\n}\n\n\n\n\n\n\n\ntype TooltipAligment = 'top' | 'bottom' | 'left' | 'right'\n\nexport interface TooltipDisplayProps extends Omit<AnchoredFloatingContainerProps, 'options' | 'anchor'>, Partial<TooltipConfig> {\n  'alignment'?: TooltipAligment,\n  'disabled'?: boolean,\n  'anchor'?: RefObject<HTMLElement | null>,\n  'isShown'?: boolean,\n  'options'?: Omit<UseAnchoredPositionOptions, 'verticalAlignment' | 'horizontalAlignment'>,\n  'data-name'?: string,\n}\n\nexport const TooltipDisplay = forwardRef<HTMLDivElement, TooltipDisplayProps>(function TooltipAnchoredFloatingContainer({\n  children,\n  alignment = 'bottom',\n  disabled: disabledOverwrite,\n  isShown: isShownOverwrite,\n  isAnimated: isAnimatedOverwrite,\n  anchor: anchorOverwrite,\n  ...props\n}, forwardRef) {\n  const { config } = useHightideConfig()\n  const tooltipContext = useContext(TooltipContext)\n  const anchorFallback = useRef(null)\n\n  const disabled = disabledOverwrite ?? tooltipContext?.disabled\n  const isShown = isShownOverwrite ?? tooltipContext?.isShown ?? false\n  const anchor = anchorOverwrite ?? tooltipContext?.trigger.ref ?? anchorFallback\n  const id = tooltipContext?.tooltip.id ?? props.id\n\n  useEffect(() => {\n    if(!tooltipContext || !props.id) return\n    tooltipContext?.tooltip.setId(props.id)\n  }, [props.id, tooltipContext])\n\n  const isAnimated = useMemo(() =>\n    isAnimatedOverwrite ?? config.tooltip.isAnimated,\n  [isAnimatedOverwrite, config.tooltip.isAnimated])\n\n  const container = useRef<HTMLDivElement | null>(null)\n\n  const isActive = !disabled && isShown\n\n  const { isVisible, transitionState } = useTransitionState(\n    useMemo(() => ({ isOpen: isShown, ref: container }), [isShown])\n  )\n\n  const verticalAlignment: FloatingElementAlignment = useMemo(() =>\n    alignment === 'top' ? 'beforeStart' : alignment === 'bottom' ? 'afterEnd' : 'center',\n  [alignment])\n\n  const horizontalAlignment: FloatingElementAlignment = useMemo(() =>\n    alignment === 'left' ? 'beforeStart' : alignment === 'right' ? 'afterEnd' : 'center',\n  [alignment])\n\n  const { zIndex } = useOverlayRegistry({ isActive })\n\n  if(disabled) return null\n\n  return (\n    <Portal>\n      <AnchoredFloatingContainer\n        {...props}\n        id={id}\n        ref={ReactRefsUtil.assingRefsBuilder([container, forwardRef])}\n        active={isVisible}\n        anchor={anchor}\n        options={{\n          verticalAlignment,\n          horizontalAlignment,\n          avoidOverlap: true,\n          screenPadding: config.tooltip.screenPadding,\n          ...props.options,\n        }}\n\n        data-name={props['data-name'] ?? 'tooltip'}\n        data-state={transitionState}\n        data-animated={isAnimated ? '': undefined}\n\n        role=\"tooltip\"\n\n        style={{\n          zIndex,\n          position: 'fixed',\n          opacity: isVisible ? undefined : 0,\n          ...props.style\n        }}\n      >\n        {children}\n      </AnchoredFloatingContainer>\n    </Portal>\n  )\n})\n\n\n\nexport interface TooltipTriggerBag extends TooltipTriggerContextValue {\n  disabled: boolean,\n  isShown: boolean,\n}\n\nexport interface TooltipTriggerProps {\n  children: (bag: TooltipTriggerBag) => ReactNode,\n}\n\nexport const TooltipTrigger = ({\n  children,\n}: TooltipTriggerProps) => {\n  const context = useTooltip()\n  const bag: TooltipTriggerBag = { ...context.trigger, disabled: context.disabled, isShown: context.isShown }\n\n  return BagFunctionUtil.resolve(children, bag)\n}\n\n\n\n\nexport interface TooltipProps extends TooltipRootProps, Pick<TooltipDisplayProps, 'alignment' |'isAnimated'> {\n  tooltip: ReactNode,\n  containerClassName?: string,\n  displayProps?: Omit<TooltipDisplayProps, 'alignment' |'isAnimated'>,\n}\n\n/**\n * A Component for showing a tooltip when hovering over Content\n */\nexport const Tooltip = ({\n  tooltip,\n  children,\n  isInitiallyShown,\n  appearDelay,\n  disabled,\n  containerClassName,\n  alignment,\n  isAnimated,\n  onIsShownChange,\n  displayProps,\n}: TooltipProps) => {\n\n  return (\n    <TooltipRoot\n      isInitiallyShown={isInitiallyShown}\n      onIsShownChange={onIsShownChange}\n      appearDelay={appearDelay}\n      disabled={disabled}\n    >\n      <TooltipTrigger>\n        {({ props, callbackRef, disabled }) => (\n          <div\n            ref={callbackRef}\n            className={containerClassName}\n            {...(disabled ? undefined : props)}\n          >\n            {children}\n          </div>\n        )}\n      </TooltipTrigger>\n      <TooltipDisplay\n        alignment={alignment}\n        isAnimated={isAnimated}\n        {...displayProps}\n      >\n        {tooltip}\n      </TooltipDisplay>\n    </TooltipRoot>\n  )\n}\n","import { useEffect, useId, useMemo, useState } from 'react'\n\nexport type OverlayItem = {\n  id: string,\n  tags?: string[],\n}\n\ntype OverlayItemInformation = OverlayItem & {\n  zIndex: number,\n  position: number,\n  tagPositions: Record<string, number>,\n}\n\ntype OverlayRegistryValue = {\n  itemInformation: Record<string, OverlayItemInformation>,\n  tagItemCounts: Record<string, number>,\n  activeId: string | null,\n}\n\ntype OverlayRegistryListenerCallback = (value: OverlayRegistryValue) => void\n\nexport class OverlayRegistry {\n  private static instance: OverlayRegistry | null = null\n\n  static getInstance(): OverlayRegistry {\n    if (!OverlayRegistry.instance) {\n      OverlayRegistry.instance = new OverlayRegistry()\n    }\n    return OverlayRegistry.instance\n  }\n\n  // The frontmost overlay is at the end of the array\n  private overlayIds: string[] = []\n  private overlayItems: Record<string, OverlayItem> = {}\n  private listeners = new Set<OverlayRegistryListenerCallback>()\n\n  register(item: OverlayItem) {\n    this.overlayIds = this.overlayIds.filter(id => id !== item.id)\n    this.overlayIds.push(item.id)\n    this.overlayItems[item.id] = item\n    this.notify()\n    return () => {\n      this.overlayIds = this.overlayIds.filter(id => id !== item.id)\n      delete this.overlayItems[item.id]\n      this.notify()\n    }\n  }\n\n  update(item: OverlayItem) {\n    this.overlayItems[item.id] = item\n    this.notify()\n  }\n\n  addListener(callback: OverlayRegistryListenerCallback) {\n    this.listeners.add(callback)\n    return () => {\n      this.listeners.delete(callback)\n    }\n  }\n\n  private notify() {\n    const itemInformation: Record<string, OverlayItemInformation> = {}\n    const ids = [...this.overlayIds]\n    const startZIndex = 100\n    const tagCount: Record<string, number> = {}\n    for (let index = ids.length - 1; index >= 0; index--) {\n      const id = ids[index]\n      const item = this.overlayItems[id]\n      itemInformation[id] = {\n        ...item,\n        position: index,\n        tagPositions: {},\n        zIndex: startZIndex + index,\n      }\n      for(const tag of item.tags ?? []) {\n        const count = tagCount[tag] ?? 0\n        const nextPosition = count\n        tagCount[tag] = count + 1\n        itemInformation[id].tagPositions[tag] = nextPosition\n      }\n    }\n    for (const callback of this.listeners) {\n      callback({ activeId: ids[ids.length - 1] ?? null, itemInformation, tagItemCounts: tagCount })\n    }\n  }\n}\n\nexport type UseOverlayRegistryProps = Partial<OverlayItem> & {\n    isActive?: boolean,\n    /** Tags cannot change on every render, thus make sure they are wrapped in a useMemo or similar */\n    tags?: string[],\n}\n\nexport type UseOverlayRegistryResult = {\n    isInFront: boolean,\n    zIndex?: number,\n    position?: number,\n    tagPositions?: Record<string, number>,\n    tagItemCounts: Record<string, number>,\n}\n\nexport const useOverlayRegistry = (props: UseOverlayRegistryProps = {}): UseOverlayRegistryResult => {\n  const generatedId = useId()\n  const item: OverlayItem = useMemo(() => ({\n    id: props.id ?? generatedId,\n    tags: props.tags,\n  }), [props.id, generatedId, props.tags])\n  const [value, setValue] = useState<OverlayRegistryValue>({\n    activeId: null,\n    itemInformation: {},\n    tagItemCounts: {}\n  })\n  const registry = useMemo(() => OverlayRegistry.getInstance(), [])\n\n  useEffect(() => {\n    if(!props.isActive) {\n      return\n    }\n    function callback(value: OverlayRegistryValue) {\n      setValue(value)\n    }\n\n    const removeListener = registry.addListener(callback)\n    const unregister = registry.register(item)\n    return () => {\n      removeListener()\n      unregister()\n      setValue({\n        activeId: null,\n        itemInformation: {},\n        tagItemCounts: {}\n      })\n    }\n  }, [props.isActive, item, registry])\n\n  const itemInformation = value.itemInformation[item.id]\n\n  return {\n    isInFront: value.activeId === item.id,\n    zIndex: itemInformation?.zIndex,\n    position: itemInformation?.position,\n    tagPositions: itemInformation?.tagPositions,\n    tagItemCounts: value.tagItemCounts,\n  }\n}","'use client'\n\nimport type { RefObject } from 'react'\nimport { useCallback, useEffect, useLayoutEffect, useReducer, useRef, useState } from 'react'\n\nexport type TransitionState = 'opened' | 'closed' | 'opening' | 'closing'\n\nconst reducer = (state: TransitionState, action: 'open' | 'close' | 'finished') : TransitionState => {\n  switch (action) {\n  case 'open':\n    return 'opening'\n  case 'close':\n    return 'closing'\n  case 'finished':{\n    if(state === 'opening') {\n      return 'opened'\n    }\n    if(state === 'closing') {\n      return 'closed'\n    }\n    return state\n  }\n  default:\n    return state\n  }\n}\n\ntype UseTransitionStateResult = {\n    transitionState: TransitionState,\n    isVisible: boolean,\n}\n\ntype UseTransitionStateProps = {\n    isOpen: boolean,\n    initialState?: TransitionState,\n    ref: RefObject<HTMLElement | null>,\n    timeout?: number,\n}\n\nexport const useTransitionState = ({\n  isOpen,\n  initialState = 'closed',\n  ref,\n  timeout: initialTimeout = 1000,\n}: UseTransitionStateProps): UseTransitionStateResult => {\n  const [state, dispatch] = useReducer(reducer, initialState)\n\n  const timer = useRef<NodeJS.Timeout | undefined>(undefined)\n  const hasAnimation = useRef<boolean>(false)\n  const [timeout] = useState<number>(initialTimeout)\n\n  useEffect(() => {\n    if (isOpen && (state !== 'opened' && state !== 'opening')) {\n      dispatch('open')\n    } else if (!isOpen && (state !== 'closed' && state !== 'closing')) {\n      dispatch('close')\n    }\n  }, [isOpen, state])\n\n\n  useEffect(() => {\n    if (state === 'opening' || state === 'closing') {\n      if (timer.current) {\n        clearTimeout(timer.current)\n      }\n      if(timeout > 0) {\n        timer.current = setTimeout(() => {\n          dispatch('finished')\n        }, timeout)\n      }\n    } else {\n      if (timer.current) {\n        clearTimeout(timer.current)\n      }\n    }\n  }, [state, timeout])\n\n  useLayoutEffect(() => {\n    if (state === 'opening' || state === 'closing') {\n      let element = ref.current\n      if(!element) {\n        console.warn('useTransitionState: ref is not set to an element using window instead')\n        element = window.document.body\n      }\n      const animations = element.getAnimations({ subtree: true })\n        .filter(animation => animation.effect?.getTiming().duration !== '0s')\n      if (animations.length > 0) {\n        hasAnimation.current = true\n        Promise.all(animations.map(animation => animation.finished))\n          .then(() => {\n            dispatch('finished')\n          })\n          .catch(() => {\n            dispatch('finished')\n          })\n      } else {\n        dispatch('finished')\n        hasAnimation.current = false\n        clearTimeout(timer.current)\n      }\n    }\n  }, [ref, state])\n\n  const onStart = useCallback(() => {\n    hasAnimation.current = true\n  }, [])\n\n  const onEnd = useCallback(() => {\n    dispatch('finished')\n    hasAnimation.current = false\n  }, [])\n\n  useEffect(() => {\n    if (ref?.current && (state === 'opening' || state === 'closing')) {\n      const element = ref.current\n      element.addEventListener('animationstart', onStart)\n      element.addEventListener('animationend', onEnd)\n      element.addEventListener('transitionstart', onStart)\n      element.addEventListener('transitionend', onEnd)\n      element.addEventListener('transitioncancel', onEnd)\n      return () => {\n        element.removeEventListener('animationstart', onStart)\n        element.removeEventListener('animationend', onEnd)\n        element.removeEventListener('transitionstart', onStart)\n        element.removeEventListener('transitionend', onEnd)\n        element.removeEventListener('transitioncancel', onEnd)\n      }\n    }\n  }, [state, ref, onStart, onEnd])\n\n  return {\n    transitionState: state,\n    isVisible: state !== 'closed',\n  }\n}","import { createContext, type PropsWithChildren, useContext, useState } from 'react'\nimport type { ResolvedTheme } from '@/src/global-contexts/ThemeContext'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport type { DeepPartial } from '@/src/utils/typing'\n\nexport type TooltipConfig = {\n  appearDelay: number,\n  isAnimated: boolean,\n  screenPadding: number,\n}\n\nexport type ThemeConfig = {\n  initialTheme: ResolvedTheme,\n}\n\nexport type LocalizationConfig = {\n  defaultLocale: HightideTranslationLocales,\n  defaultTimeZone?: string,\n  defaultIs24HourFormat?: boolean,\n}\n\nexport type HightideConfig = {\n  tooltip: TooltipConfig,\n  theme: ThemeConfig,\n  locale: LocalizationConfig,\n}\n\nconst defaultConfig: HightideConfig = {\n  tooltip: {\n    appearDelay: 0,\n    isAnimated: false,\n    screenPadding: 1,\n  },\n  theme: {\n    initialTheme: 'light'\n  },\n  locale: {\n    defaultLocale: 'de-DE',\n  }\n}\n\nfunction mergeConfig(config: HightideConfig, overwrite: DeepPartial<HightideConfig>): HightideConfig {\n  return {\n    locale: {\n      ...config.locale,\n      ...overwrite?.locale\n    },\n    theme: {\n      ...config.theme,\n      ...overwrite.theme,\n    },\n    tooltip: {\n      ...config.tooltip,\n      ...overwrite.tooltip,\n    }\n  }\n}\n\ntype ConfigType = {\n  config: HightideConfig,\n  setConfig: (configOverwrite: DeepPartial<HightideConfig>) => void,\n}\n\nexport const HightideConfigContext = createContext<ConfigType | null>(null)\n\nexport type HightideConfigProviderProps = PropsWithChildren & DeepPartial<HightideConfig>\n\nexport const HightideConfigProvider = ({\n  children,\n  ...initialOverwrite\n}: HightideConfigProviderProps) => {\n  const [config, setConfig] = useState<HightideConfig>(mergeConfig(defaultConfig, initialOverwrite))\n\n  return (\n    <HightideConfigContext.Provider\n      value={{\n        config,\n        setConfig: (value) => setConfig(prevState => mergeConfig(prevState, value)),\n      }}\n    >\n      {children}\n    </HightideConfigContext.Provider>\n  )\n}\n\nexport const useHightideConfig = () => {\n  const context = useContext(HightideConfigContext)\n  if (!context) {\n    return {\n      config: defaultConfig,\n      setConfig: () => {\n        console.error('useHightideConfig.setConfig is not available without a HightideConfigProvider. Try wrapping your app a HightideConfigProvider.')\n      }\n    }\n  }\n  return context\n}","import type { PropsWithChildren } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface PortalProps extends PropsWithChildren {\n  container?: HTMLElement,\n}\n\nexport const Portal = ({ children, container }: PortalProps) => {\n  return createPortal(children, container ?? document.body)\n}","import type { HTMLAttributes, RefObject } from 'react'\nimport { forwardRef, useRef } from 'react'\nimport type { UseAnchoredPositionOptions } from '@/src/hooks/useAnchoredPosition'\nimport { useAnchoredPosition as useAnchoredPosition } from '@/src/hooks/useAnchoredPosition'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport type BackgroundOverlayProps = HTMLAttributes<HTMLDivElement>\n\nexport interface AnchoredFloatingContainerProps extends HTMLAttributes<HTMLDivElement> {\n  anchor: RefObject<HTMLElement | null>,\n  options?: UseAnchoredPositionOptions,\n  active?: boolean,\n}\n\nexport const AnchoredFloatingContainer = forwardRef<HTMLDivElement, AnchoredFloatingContainerProps>(function FloatingContainer({\n  children,\n  anchor,\n  options = {},\n  active = true,\n  ...props\n}, forwardRef) {\n  const innerRef = useRef<HTMLDivElement>(null)\n\n  const position = useAnchoredPosition({\n    ...options,\n    container: innerRef,\n    anchor: anchor,\n    active,\n  })\n\n  return (\n    <div\n      {...props}\n      ref={ReactRefsUtil.assingRefsBuilder([innerRef, forwardRef])}\n\n      data-positioned={position ? '' : undefined}\n\n      style={{\n        overflow: 'hidden',\n        ...position,\n        ...props.style\n      }}\n    >\n      {children}\n    </div>\n  )\n})","'use client'\n\nimport type { CSSProperties, RefObject } from 'react'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { MathUtil } from '@/src/utils/math'\nimport { useWindowResizeObserver } from './useWindowResizeObserver'\nimport { useResizeObserver } from './useResizeObserver'\nimport { useScrollObserver } from './useScrollObserver'\n\nexport type FloatingElementAlignment = 'beforeStart' | 'afterStart' | 'center' | 'beforeEnd' | 'afterEnd'\n\ntype RectangleBounds = {\n  top: number,\n  right: number,\n  bottom: number,\n  left: number,\n  width: number,\n  height: number,\n}\n\ntype CalculatePositionOptionsResolved = {\n  verticalAlignment: FloatingElementAlignment,\n  horizontalAlignment: FloatingElementAlignment,\n  screenPadding: number,\n  gap: number,\n  avoidOverlap: boolean,\n}\n\ntype CalculatePositionOptions = Partial<CalculatePositionOptionsResolved>\n\ntype CalculatePositionProps = {\n  windowRect: RectangleBounds,\n  containerRect: RectangleBounds,\n  anchorRect: RectangleBounds,\n  options: CalculatePositionOptionsResolved,\n}\n\n\nfunction calculatePosition({\n  windowRect,\n  containerRect,\n  anchorRect,\n  options,\n}: CalculatePositionProps): CSSProperties {\n  const { verticalAlignment, horizontalAlignment, gap, screenPadding, avoidOverlap } = options\n\n  const calculateBasicPosition = (hAlign: FloatingElementAlignment, vAlign: FloatingElementAlignment) => {\n    const windowWidth = windowRect.width\n    const windowHeight = windowRect.height\n\n    const maxWidth = windowWidth - 2 * screenPadding\n    const maxHeight = windowHeight - 2 * screenPadding\n\n    const width = Math.min(containerRect.width, maxWidth)\n    const height = Math.min(containerRect.height, maxHeight)\n\n    const anchorCenterX = anchorRect.left + anchorRect.width / 2\n    const anchorCenterY = anchorRect.top + anchorRect.height / 2\n\n    let left: number\n    let top: number\n    let translateXPercent: number\n    let translateYPercent: number\n\n    switch (hAlign) {\n    case 'beforeStart':\n      left = anchorRect.left\n      translateXPercent = -100\n      break\n    case 'afterStart':\n      left = anchorRect.left\n      translateXPercent = 0\n      break\n    case 'center':\n      left = anchorCenterX\n      translateXPercent = -50\n      break\n    case 'beforeEnd':\n      left = anchorRect.right\n      translateXPercent = -100\n      break\n    case 'afterEnd':\n      left = anchorRect.right\n      translateXPercent = 0\n      break\n    }\n\n    switch (vAlign) {\n    case 'beforeStart':\n      top = anchorRect.top\n      translateYPercent = -100\n      break\n    case 'afterStart':\n      top = anchorRect.top\n      translateYPercent = 0\n      break\n    case 'center':\n      top = anchorCenterY\n      translateYPercent = -50\n      break\n    case 'beforeEnd':\n      top = anchorRect.bottom\n      translateYPercent = -100\n      break\n    case 'afterEnd':\n      top = anchorRect.bottom\n      translateYPercent = 0\n      break\n    }\n\n    if (gap !== 0) {\n      if (hAlign === 'afterEnd') {\n        left += gap\n      } else if (hAlign === 'beforeStart') {\n        left -= gap\n      }\n\n      if (vAlign === 'afterEnd') {\n        top += gap\n      } else if (vAlign === 'beforeStart') {\n        top -= gap\n      }\n    }\n\n    const targetLeft = left + (width * translateXPercent / 100)\n    const targetTop = top + (height * translateYPercent / 100)\n\n    const clampedLeft = MathUtil.clamp(targetLeft, screenPadding, windowWidth - screenPadding - width)\n    const clampedTop = MathUtil.clamp(targetTop, screenPadding, windowHeight - screenPadding - height)\n\n    return {\n      left,\n      top,\n      clampedLeft,\n      clampedTop,\n      width,\n      height,\n      maxWidth,\n      maxHeight,\n    }\n  }\n\n  // Calculate overlap area between two rectangles\n  const calculateOverlap = (left: number, top: number, width: number, height: number): number => {\n    const floatingRect = {\n      left,\n      top,\n      right: left + width,\n      bottom: top + height,\n    }\n\n    // Calculate overlap area\n    const overlapLeft = Math.max(floatingRect.left, anchorRect.left)\n    const overlapTop = Math.max(floatingRect.top, anchorRect.top)\n    const overlapRight = Math.min(floatingRect.right, anchorRect.right)\n    const overlapBottom = Math.min(floatingRect.bottom, anchorRect.bottom)\n\n    const overlapWidth = Math.max(0, overlapRight - overlapLeft)\n    const overlapHeight = Math.max(0, overlapBottom - overlapTop)\n\n    return overlapWidth * overlapHeight\n  }\n\n  // Get original position\n  const originalPos = calculateBasicPosition(horizontalAlignment, verticalAlignment)\n  let bestPosition = originalPos\n\n  // If avoidOverlap is enabled and we have beforeStart/afterEnd alignments, try swapped alignments\n  if (avoidOverlap && (horizontalAlignment === 'beforeStart' || horizontalAlignment === 'afterEnd' || verticalAlignment === 'beforeStart' || verticalAlignment === 'afterEnd')) {\n    let bestOverlap = calculateOverlap(originalPos.clampedLeft, originalPos.clampedTop, originalPos.width, originalPos.height)\n\n    // Create swapped alignments\n    let altHorizontalAlignment = horizontalAlignment\n    let altVerticalAlignment = verticalAlignment\n\n    if (horizontalAlignment === 'beforeStart') {\n      altHorizontalAlignment = 'afterEnd'\n    } else if (horizontalAlignment === 'afterEnd') {\n      altHorizontalAlignment = 'beforeStart'\n    }\n\n    if (verticalAlignment === 'beforeStart') {\n      altVerticalAlignment = 'afterEnd'\n    } else if (verticalAlignment === 'afterEnd') {\n      altVerticalAlignment = 'beforeStart'\n    }\n\n    // Calculate alternative position\n    const altPos = calculateBasicPosition(altHorizontalAlignment, altVerticalAlignment)\n    const altOverlap = calculateOverlap(altPos.clampedLeft, altPos.clampedTop, altPos.width, altPos.height)\n\n    // Use alternative if it has less overlap\n    if (altOverlap < bestOverlap) {\n      bestPosition = altPos\n      bestOverlap = altOverlap\n    }\n  }\n\n  return {\n    left: bestPosition.clampedLeft,\n    top: bestPosition.clampedTop,\n    maxWidth: bestPosition.maxWidth,\n    maxHeight: bestPosition.maxHeight,\n    transformOrigin: 'top left',\n  }\n}\n\nexport type UseAnchoredPositionOptions = CalculatePositionOptions & {\n  isPolling?: boolean,\n  isReactingToResize?: boolean,\n  isReactingToScroll?: boolean,\n  pollingInterval?: number,\n}\n\nexport type UseAnchoredPostitionProps = UseAnchoredPositionOptions & {\n  container: RefObject<HTMLElement | null>,\n  anchor: RefObject<HTMLElement | null>,\n  window?: RefObject<HTMLElement | null>,\n  active?: boolean,\n}\n\nconst measureSizes = ({\n  containerRef,\n  anchorRef,\n  windowRef,\n}: {\n  containerRef?: RefObject<HTMLElement | null>,\n  anchorRef?: RefObject<HTMLElement | null>,\n  windowRef?: RefObject<HTMLElement | null>,\n}) => {\n  const visualViewport = window.visualViewport\n  const fallback = visualViewport ? {\n    top: 0,\n    bottom: visualViewport.height - visualViewport.offsetTop,\n    left: 0,\n    right: visualViewport.width - visualViewport.offsetLeft,\n    width: visualViewport.width - visualViewport.offsetLeft,\n    height: visualViewport.height - visualViewport.offsetTop,\n  }: {\n    top: 0,\n    bottom: window.innerHeight,\n    left: 0,\n    right: window.innerWidth,\n    width: window.innerWidth,\n    height: window.innerHeight,\n  }\n\n  return {\n    container: containerRef?.current?.getBoundingClientRect(),\n    anchor: anchorRef?.current?.getBoundingClientRect(),\n    window: windowRef?.current?.getBoundingClientRect() ?? fallback,\n  }\n}\n\ntype MeasureSize = ReturnType<typeof measureSizes>\n\n// dont check position of container because we are changing it\nconst isSameMeasurment = (a: MeasureSize | null, b: MeasureSize | null) =>\n  !!a &&\n  !!b &&\n  a.container?.width === b.container?.width &&\n  a.container?.height === b.container?.height &&\n  a.anchor?.top === b.anchor?.top &&\n  a.anchor?.left === b.anchor?.left &&\n  a.anchor?.right === b.anchor?.right &&\n  a.anchor?.bottom === b.anchor?.bottom &&\n  a.anchor?.width === b.anchor?.width &&\n  a.anchor?.height === b.anchor?.height &&\n  a.window?.top === b.window?.top &&\n  a.window?.left === b.window?.left &&\n  a.window?.right === b.window?.right &&\n  a.window?.bottom === b.window?.bottom &&\n  a.window?.width === b.window?.width &&\n  a.window?.height === b.window?.height\n\nconst isSameOptions = (a: CalculatePositionOptions | null, b: CalculatePositionOptions | null) =>\n  !!a &&\n  !!b &&\n  a.horizontalAlignment === b.horizontalAlignment &&\n  a.verticalAlignment === b.verticalAlignment &&\n  a.screenPadding === b.screenPadding &&\n  a.gap === b.gap &&\n  a.avoidOverlap === b.avoidOverlap\n\nexport function useAnchoredPosition({\n  active = true,\n  window: windowRef,\n  anchor: anchorRef,\n  container: containerRef,\n  isPolling = false,\n  isReactingToResize = true,\n  isReactingToScroll = false,\n  pollingInterval = 100,\n  verticalAlignment = 'afterEnd',\n  horizontalAlignment = 'afterStart',\n  avoidOverlap = false,\n  screenPadding = 16,\n  gap = 4,\n}: UseAnchoredPostitionProps) {\n  const [style, setStyle] = useState<CSSProperties>()\n  const lastSizes = useRef<MeasureSize | null>(null)\n  const lastOptions = useRef<CalculatePositionOptions | null>(null)\n\n  const options = useMemo(() => ({\n    horizontalAlignment,\n    verticalAlignment,\n    screenPadding,\n    gap,\n    avoidOverlap,\n  }), [horizontalAlignment, verticalAlignment, screenPadding, gap, avoidOverlap])\n\n  const calculate = useCallback(() => {\n    const newMeasurement = measureSizes({ containerRef, anchorRef, windowRef })\n    if (!newMeasurement) return\n    if (isSameMeasurment(lastSizes.current, newMeasurement) && isSameOptions(options, lastOptions.current)) return\n    lastSizes.current = newMeasurement\n    lastOptions.current = options\n\n    if (!newMeasurement.container) {\n      return\n    }\n    const containerRect: RectangleBounds = newMeasurement.container\n    const windowRect: RectangleBounds = newMeasurement.window\n    const anchorRect: RectangleBounds = newMeasurement.anchor ?? newMeasurement.window\n\n    if (containerRect.width === 0 || containerRect.height === 0) {\n      return\n    }\n\n    const calculateProps: CalculatePositionProps = {\n      windowRect,\n      anchorRect,\n      containerRect,\n      options,\n    }\n    setStyle(calculatePosition(calculateProps))\n  }, [anchorRef, containerRef, options, windowRef])\n\n  useLayoutEffect(() => {\n    if (!active) {\n      setStyle(undefined)\n      lastSizes.current = null\n      return\n    } else {\n      calculate()\n    }\n  }, [active, options, calculate])\n\n  useWindowResizeObserver(calculate)\n\n  useResizeObserver({ observedElementRef: containerRef, onResize: calculate, isActive: isReactingToResize && active })\n  useResizeObserver({ observedElementRef: anchorRef, onResize: calculate, isActive: isReactingToResize && active })\n  useResizeObserver({ observedElementRef: windowRef, onResize: calculate, isActive: isReactingToResize && active })\n\n  useScrollObserver({ observedElementRef: anchorRef, onScroll: calculate, isActive: isReactingToScroll && active })\n\n  useEffect(() => {\n    if (!containerRef.current || !active) {\n      return\n    }\n    let timeout: NodeJS.Timeout\n    if (isPolling) {\n      timeout = setInterval(calculate, pollingInterval)\n    }\n    return () => {\n      if (timeout) {\n        clearInterval(timeout)\n      }\n    }\n  }, [active, calculate, containerRef, isPolling, pollingInterval])\n  return style\n}\n","export type Range = [number, number]\nexport type UnBoundedRange = [undefined | number, undefined | number]\nexport type DirectionNumber = 1 | -1\n\nexport type LoopingRangeBound = 'maximum' | 'minimum'\n\nexport type LoopingRangeResult = {\n  value: number,\n  loopedOver: LoopingRangeBound | null,\n}\n\nfunction clamp(value: number, min: number | undefined, max: number | undefined): number {\n  if(min !== undefined) value = Math.max(value, min)\n  if(max !== undefined) value = Math.min(value, max)\n  return value\n}\n\nfunction clamp01(value: number): number {\n  return clamp(value, 0, 1)\n}\n\nfunction closestStep(value: number, stepSize: number): number {\n  return Math.round(value / stepSize) * stepSize\n}\n\nfunction toStepRange(value: number, stepSize: number, min: number | undefined, max: number | undefined): number {\n  const minStep = min !== undefined ? Math.ceil(min / stepSize) * stepSize : undefined\n  const maxStep = max !== undefined ? Math.floor(max / stepSize) * stepSize : undefined\n  value = closestStep(value, stepSize)\n  if(minStep !== undefined) value = Math.max(value, minStep)\n  if(maxStep !== undefined) value = Math.min(value, maxStep)\n  return value\n}\n\nfunction resolveLoopingRangeValue(\n  value: number,\n  minimum: number,\n  maximum: number\n): LoopingRangeResult {\n  const range = maximum - minimum\n\n  if (value > maximum) {\n    return {\n      value: (value - maximum) % range + minimum,\n      loopedOver: 'maximum',\n    }\n  }\n\n  if (value < minimum) {\n    return {\n      value: (value - minimum) % range + minimum,\n      loopedOver: 'minimum',\n    }\n  }\n\n  return {\n    value,\n    loopedOver: null,\n  }\n}\n\nexport const MathUtil = {\n  clamp,\n  clamp01,\n  toStepRange,\n  closestStep,\n  resolveLoopingRangeValue,\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 useWindowResizeObserver = (onResize: () => void) => {\n  useEffect(() => {\n    window.addEventListener('resize', onResize)\n\n    return () => {\n      window.removeEventListener('resize', onResize)\n    }\n  }, [onResize])\n}","import type { RefObject } from 'react'\nimport { useLayoutEffect } from 'react'\n\nexport type UseResizeObserverProps = {\n  observedElementRef?: RefObject<Element | null>,\n  onResize: () => void,\n  isActive?: boolean,\n}\n\nexport function useResizeObserver({ observedElementRef, onResize, isActive = true }: UseResizeObserverProps) {\n  useLayoutEffect(() => {\n    const el = observedElementRef?.current\n    if (!el || !isActive) return\n\n    const observer = new ResizeObserver(() => {\n      onResize()\n    })\n\n    observer.observe(el)\n\n    return () => {\n      observer.disconnect()\n    }\n  }, [observedElementRef, onResize, isActive])\n}\n","'use client'\n\nimport type { RefObject } from 'react'\nimport { useLayoutEffect } from 'react'\n\nfunction getScrollParents(el: HTMLElement): HTMLElement[] {\n  const parents: HTMLElement[] = []\n  let parent = el.parentElement\n\n  while (parent) {\n    const { overflow, overflowX, overflowY } = getComputedStyle(parent)\n    if (/(auto|scroll|overlay)/.test(overflow + overflowX + overflowY)) {\n      parents.push(parent)\n    }\n    parent = parent.parentElement\n  }\n\n  // only safe because window\n  parents.push(window as unknown as HTMLElement)\n  return parents\n}\n\ntype UseScrollObserverProps = {\n  observedElementRef?: RefObject<HTMLElement | null>,\n  onScroll: () => void,\n  isActive?: boolean,\n}\n\nexport function useScrollObserver({ observedElementRef, onScroll, isActive = true }: UseScrollObserverProps) {\n  useLayoutEffect(() => {\n    if (!observedElementRef?.current || !isActive) return\n\n    const parents = getScrollParents(observedElementRef.current)\n    parents.forEach(p => p.addEventListener('scroll', onScroll, { passive: true }))\n\n    return () => {\n      parents.forEach(p => p.removeEventListener('scroll', onScroll))\n    }\n  }, [observedElementRef, onScroll, isActive])\n}","import type { ForwardedRef } from 'react'\n\nfunction assignForwardRef<T>(element: T | null, ref?: ForwardedRef<T>) {\n  if(!ref) return\n  if(typeof ref === 'function') {\n    ref(element)\n  } else {\n    ref.current = element\n  }\n}\n\nfunction assingRefsBuilder<T>(refs: ForwardedRef<T>[]) : (el: T | null) => void {\n  return (element) => {\n    refs.forEach(ref => {\n      assignForwardRef(element, ref)\n    })\n  }\n}\n\nexport const ReactRefsUtil = {\n  assignForwardRef,\n  assingRefsBuilder\n}","import type { ReactNode } from 'react'\n\nexport type BagFunction<B, V = ReactNode> = (bag: B) => V\n\nexport type BagFunctionOrValue<B, V> = BagFunction<B, V> | V\n\nexport type BagFunctionOrNode<B> = BagFunction<B> | ReactNode\n\nexport type PropsWithBagFunction<B, P = unknown> =  P & { children?: BagFunction<B> }\n\nexport type PropsWithBagFunctionOrChildren<B, P = unknown> =  P & { children?:  BagFunctionOrNode<B> }\n\n/**\n * Resolves a BagFunction\n *\n * If V is a function this resolver does not work\n * @param bagFunctionOrValue Function or Value\n * @param bag Values for function resolvers\n * @returns The Value or the result of the function\n */\nconst resolve = <B, V = ReactNode>(bagFunctionOrValue: BagFunctionOrValue<B, V>, bag: B): V => {\n  if (typeof bagFunctionOrValue === 'function') {\n    return (bagFunctionOrValue as BagFunction<B,V>)(bag)\n  }\n\n  return bagFunctionOrValue\n}\n\nexport const BagFunctionUtil = {\n  resolve\n}","import type { PropsWithChildren } from 'react'\n\nexport type VisibilityProps = PropsWithChildren & {\n  isVisible?: boolean,\n}\n\nexport function Visibility({ children, isVisible }: VisibilityProps) {\n  return (<>{isVisible && children}</>)\n}","import { useEffect, useState } from 'react'\n\ntype OptionsResolved = {\n  type?: 'info' | 'error' | 'warning',\n}\n\nconst defaultOptions: OptionsResolved = {\n  type: 'warning',\n}\n\ntype Options = Partial<OptionsResolved>\n\nexport const useLogOnce = (\n  message: string,\n  condition: boolean,\n  options?: Options\n) => {\n  const [hasLogged, setHasLogged] = useState<boolean>(false)\n  const { type } = { ...defaultOptions, ...options }\n\n  useEffect(() => {\n    if (!hasLogged && condition) {\n      switch (type) {\n      case 'info':\n        console.info(message)\n        break\n      case 'error':\n        console.error(message)\n        break\n      case 'warning':\n        console.warn(message)\n        break\n      }\n      setHasLogged(true)\n    }\n  }, [condition, type, hasLogged, message])\n}","import clsx from 'clsx'\nimport { ScrollableList } from '../layout/ScrollableList'\nimport type { ScrollableListProps } from '../layout/ScrollableList'\n\nexport type ChatConversationListProps = Omit<ScrollableListProps, 'as'>\n\nexport const ChatConversationList = ({\n  className,\n  headerClassName,\n  contentClassName,\n  footerClassName,\n  ...props\n}: ChatConversationListProps) => (\n  <ScrollableList\n    {...props}\n    className={clsx('chat-conversation-list', className)}\n    headerClassName={clsx('chat-conversation-list-header', headerClassName)}\n    contentClassName={clsx('chat-conversation-list-scroll', contentClassName)}\n    footerClassName={clsx('chat-conversation-list-footer', footerClassName)}\n  />\n)\n","import type { ComponentPropsWithoutRef, ElementType, ReactNode } from 'react'\nimport clsx from 'clsx'\n\ntype ScrollableListBaseProps = {\n  header?: ReactNode,\n  footer?: ReactNode,\n  footerClassName?: string,\n  headerClassName?: string,\n  contentClassName?: string,\n}\n\nexport type ScrollableListProps<E extends ElementType = 'div'> = ScrollableListBaseProps & {\n  as?: E,\n} & Omit<ComponentPropsWithoutRef<E>, keyof ScrollableListBaseProps | 'as'>\n\nexport const ScrollableList = <E extends ElementType = 'div'>({\n  as,\n  header,\n  footer,\n  footerClassName,\n  headerClassName,\n  contentClassName,\n  className,\n  children,\n  ...props\n}: ScrollableListProps<E>) => {\n  const Component = (as ?? 'div') as ElementType\n\n  return (\n    <Component {...props} className={clsx('scrollable-list', className)}>\n      {header && (\n        <div className={clsx('scrollable-list-header', headerClassName)}>\n          {header}\n        </div>\n      )}\n      <div className={clsx('scrollable-list-content', contentClassName)}>\n        {children}\n      </div>\n      {footer && (\n        <div className={clsx('scrollable-list-footer', footerClassName)}>\n          {footer}\n        </div>\n      )}\n    </Component>\n  )\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { Check, CheckCheck } from 'lucide-react'\nimport type { AvatarWithStatusProps } from '../display-and-visualization/Avatar'\nimport { AvatarWithStatus } from '../display-and-visualization/Avatar'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type ChatConversationSentIndicator = 'sent' | 'sentAndReceived'\n\nexport type ChatConversationRowProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n  avatar: AvatarWithStatusProps,\n  title: ReactNode,\n  timestamp?: ReactNode,\n  preview?: ReactNode,\n  unreadCount?: number,\n  isSelected?: boolean,\n  sentIndicator?: ChatConversationSentIndicator,\n}\n\nexport const ChatConversationRow = ({\n  avatar,\n  title,\n  timestamp,\n  preview,\n  unreadCount,\n  isSelected = false,\n  sentIndicator,\n  ...props\n}: ChatConversationRowProps) => {\n  const isUnread = (unreadCount ?? 0) > 0\n  const SentIndicatorIcon = sentIndicator === 'sentAndReceived' ? CheckCheck : Check\n\n  return (\n    <button\n      {...props}\n      type={props.type ?? 'button'}\n      className={clsx('chat-conversation-row', props.className)}\n      data-selected={PropsUtil.dataAttributes.bool(isSelected)}\n      data-unread={PropsUtil.dataAttributes.bool(isUnread)}\n    >\n      <AvatarWithStatus size=\"md\" {...avatar}/>\n      <span className=\"chat-conversation-row-content\">\n        <span className=\"chat-conversation-row-top\">\n          <span className=\"chat-conversation-row-title\">{title}</span>\n          {timestamp && (\n            <span className=\"chat-conversation-row-timestamp\">{timestamp}</span>\n          )}\n        </span>\n        <span className=\"chat-conversation-row-bottom\">\n          <span className=\"chat-conversation-row-preview\">\n            {sentIndicator && (\n              <SentIndicatorIcon\n                className=\"chat-conversation-row-sent-indicator\"\n                data-sent-indicator={sentIndicator}\n              />\n            )}\n            <span className=\"chat-conversation-row-preview-text\">\n              {preview}\n            </span>\n          </span>\n          {isUnread && (\n            <span className=\"chat-conversation-row-unread-count\">{unreadCount}</span>\n          )}\n        </span>\n      </span>\n    </button>\n  )\n}\n","import type { ElementType, HTMLAttributes, ImgHTMLAttributes, ReactNode } from 'react'\nimport { useEffect, useMemo, useState } from 'react'\nimport clsx from 'clsx'\nimport { UserIcon } from 'lucide-react'\nimport { Visibility } from '../layout/Visibility'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ImageConfig = {\n  avatarUrl: string,\n  alt: string,\n}\n\nexport type AvatarImageProps = ImgHTMLAttributes<HTMLImageElement>\n\nconst DefaultAvatarImage: ElementType<AvatarImageProps> = 'img'\n\nexport type AvatarProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n  image?: ImageConfig,\n  name?: string,\n  size?: AvatarSize,\n  ImageComponent?: ElementType<AvatarImageProps>,\n}\n\n/**\n * A component for showing a profile picture\n */\nexport const Avatar = ({\n  image: initialImage,\n  name,\n  size = 'md',\n  ImageComponent = DefaultAvatarImage,\n  ...props\n}: AvatarProps) => {\n  const [hasError, setHasError] = useState(false)\n  const [hasLoaded, setHasLoaded] = useState(false)\n  const [image, setImage] = useState(initialImage)\n  const Image = ImageComponent\n\n  const displayName = useMemo(() => {\n    const maxLetters = size === 'sm' ? 1 : 2\n    return (name ?? '')\n      .split(' ')\n      .filter((_, index) => index < maxLetters)\n      .map(value => value[0])\n      .join('')\n      .toUpperCase()\n  }, [name, size])\n\n  const isShowingImage = !!image && (!hasError || !hasLoaded)\n\n  useEffect(() => {\n    if(initialImage?.avatarUrl !== image?.avatarUrl) {\n      setHasError(false)\n      setHasLoaded(false)\n    }\n    setImage(initialImage)\n  }, [image?.avatarUrl, initialImage])\n\n  return (\n    <div\n      {...props}\n      data-name=\"avatar\"\n      data-size={size ?? undefined}\n    >\n      <Visibility isVisible={isShowingImage}>\n        <Image\n          key={image?.avatarUrl}\n          src={image?.avatarUrl}\n          alt={image?.alt}\n          data-name=\"avatar-image\"\n          onLoad={() => setHasLoaded(true)}\n          onError={() => setHasError(true)}\n          data-error={hasError ? '' : undefined}\n          data-loaded={hasLoaded ? '' : undefined}\n        />\n      </Visibility>\n      {name ? displayName : (<UserIcon />)}\n    </div>\n  )\n}\n\nexport type AvatarGroupProps = HTMLAttributes<HTMLDivElement> & {\n  'avatars': Omit<AvatarProps, 'size'>[],\n  'showTotalNumber'?: boolean,\n  'size'?: AvatarSize,\n  'data-name'?: string,\n  'ImageComponent'?: ElementType<AvatarImageProps>,\n}\n\n/**\n * A component for showing a group of Avatar's\n */\nexport const AvatarGroup = ({\n  avatars,\n  showTotalNumber = true,\n  size = 'md',\n  ImageComponent,\n  ...props\n}: AvatarGroupProps) => {\n  const maxShownProfiles = 5\n  const displayedProfiles = avatars.length < maxShownProfiles ? avatars : avatars.slice(0, maxShownProfiles)\n  const notDisplayedProfiles = avatars.length - maxShownProfiles\n  const group = (\n    <div className=\"avatar-group-container\">\n      {displayedProfiles.map((avatar, index) => (\n        <Avatar\n          {...avatar}\n          key={index}\n          size={size}\n          data-group=\"\"\n          ImageComponent={avatar.ImageComponent ?? ImageComponent}\n        />\n      ))}\n    </div>\n  )\n\n\n  return (\n    <div\n      {...props}\n      data-name={props['data-name'] ?? 'avatar-group'}\n      data-size={size ?? undefined}\n    >\n      {group}\n      {showTotalNumber && notDisplayedProfiles > 0 && (\n        <span\n          data-name=\"avatar-group-more\"\n          data-size={size}\n        >\n          {`+ ${notDisplayedProfiles}`}\n        </span>\n      )}\n    </div>\n  )\n}\n\nexport type AvatarStatus = 'online' | 'offline' | 'away' | 'busy' | 'unknown'\n\nexport type AvatarWithStatusProps = AvatarProps & {\n  status?: AvatarStatus,\n}\n\nexport const AvatarWithStatus = ({\n  status = 'unknown',\n  className,\n  size = 'md',\n  ...avatarProps\n}: AvatarWithStatusProps) => {\n  return (\n    <div\n      className={clsx(className)}\n      data-name=\"avatar-with-status\"\n      data-size={size ?? undefined}\n    >\n      <Avatar {...avatarProps} size={size} />\n      <div\n        data-name=\"avatar-with-status-dot\"\n        data-size={size ?? undefined}\n        data-status={status}\n      />\n    </div>\n  )\n}\n\ntype AvatarWithLabelPosition = 'left' | 'right'\n\nexport type AvatarWithLabelProps = AvatarProps & {\n  label: ReactNode,\n  labelPosition?: AvatarWithLabelPosition,\n}\n\n/**\n * An avatar with a label displayed beside it\n */\nexport const AvatarWithLabel = ({\n  label,\n  labelPosition = 'left',\n  className,\n  size = 'md',\n  ...avatarProps\n}: AvatarWithLabelProps) => {\n  const avatar = <Avatar {...avatarProps} size={size} />\n  const labelElement = (\n    <span className=\"avatar-with-label-text\">\n      {label}\n    </span>\n  )\n\n  return (\n    <div\n      className={clsx('avatar-with-label', className)}\n      data-label-position={labelPosition}\n      data-size={size ?? undefined}\n    >\n      {labelPosition === 'left' ? labelElement : avatar}\n      {labelPosition === 'left' ? avatar : labelElement}\n    </div>\n  )\n}\n","export const equalSizeGroups = <T>(array: T[], groupSize: number): T[][] => {\n  if (groupSize <= 0) {\n    console.warn(`group size should be greater than 0: groupSize = ${groupSize}`)\n    return [[...array]]\n  }\n\n  const groups = []\n  for (let i = 0; i < array.length; i += groupSize) {\n    groups.push(array.slice(i, Math.min(i + groupSize, array.length)))\n  }\n  return groups\n}\n\nexport type RangeOptions = {\n  /**  Whether the range can be defined empty via end < start without a warning */\n  allowEmptyRange: boolean,\n  stepSize: number,\n  exclusiveStart: boolean,\n  exclusiveEnd: boolean,\n}\n\nconst defaultRangeOptions: RangeOptions = {\n  allowEmptyRange: false,\n  stepSize: 1,\n  exclusiveStart: false,\n  exclusiveEnd: true,\n}\n\n/**\n * @param endOrRange The end value or a range [start, end], end is exclusive\n * @param options the options for defining the range\n */\nexport const range = (endOrRange: number | [number, number], options?: Partial<RangeOptions>): number[] => {\n  const { allowEmptyRange, stepSize, exclusiveStart, exclusiveEnd } = { ...defaultRangeOptions, ...options }\n  let start = 0\n  let end: number\n  if (typeof endOrRange === 'number') {\n    end = endOrRange\n  } else {\n    start = endOrRange[0]\n    end = endOrRange[1]\n  }\n  if (!exclusiveEnd) {\n    end -= 1\n  }\n  if (exclusiveStart) {\n    start += 1\n  }\n\n  if (end - 1 < start) {\n    if (!allowEmptyRange) {\n      console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set options.allowEmptyRange to true`)\n    }\n    return []\n  }\n  return Array.from({ length: end - start }, (_, index) => index * stepSize + start)\n}\n\n/** Finds the closest match\n * @param list The list of all possible matches\n * @param firstCloser Return whether item1 is closer than item2\n */\nexport const closestMatch = <T>(list: T[], firstCloser: (item1: T, item2: T) => boolean) => {\n  return list.reduce((item1, item2) => {\n    return firstCloser(item1, item2) ? item1 : item2\n  })\n}\n\n/**\n * returns the item in middle of a list and its neighbours before and after\n * e.g. [1,2,3,4,5,6] for item = 1 would return [5,6,1,2,3]\n */\nexport const getNeighbours = <T>(list: T[], item: T, neighbourDistance: number = 2) => {\n  const index = list.indexOf(item)\n  const totalItems = neighbourDistance * 2 + 1\n  if (list.length < totalItems) {\n    console.warn('List is to short')\n    return list\n  }\n\n  if (index === -1) {\n    console.error('item not found in list')\n    return list.splice(0, totalItems)\n  }\n\n  let start = index - neighbourDistance\n  if (start < 0) {\n    start += list.length\n  }\n  const end = (index + neighbourDistance + 1) % list.length\n\n  const result: T[] = []\n  let ignoreOnce = list.length === totalItems\n  for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {\n    result.push(list[i]!)\n    if (end === i && ignoreOnce) {\n      ignoreOnce = false\n    }\n  }\n  return result\n}\n\nexport const createLoopingListWithIndex = <T>(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n  if (length < 0) {\n    console.warn(`createLoopingList: length must be >= 0, given ${length}`)\n  } else if (length === 0) {\n    length = list.length\n  }\n\n  const returnList: [number, T][] = []\n\n  if (forwards) {\n    for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {\n      returnList.push([i, list[i]!])\n    }\n  } else {\n    for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {\n      returnList.push([i, list[i]!])\n    }\n  }\n\n  return returnList\n}\n\nexport const createLoopingList = <T>(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n  return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item)\n}\n\n/**\n * @param list The list to be changed\n * @param move The shifting applied to the array (can be negative)\n */\nconst moveItems = <T>(list: T[], move: number = 0) => {\n  const result = []\n  let start = move\n  if (start < 0) {\n    start = list.length - move\n  }\n  start = start % list.length\n  for (let i = 0; i < list.length; i++) {\n    result[i] = list[(i + start) % list.length]\n  }\n  return result\n}\n\nfunction resolveSingleOrArray<T>(value: T | T[]): T[] {\n  if (Array.isArray(value)) {\n    return value\n  } else if (value) {\n    return [value]\n  }\n  return []\n}\n\nexport const ArrayUtil = {\n  unique: <T>(list: T[]): T[] => {\n    const seen = new Set<T>()\n    return list.filter((item) => {\n      if (seen.has(item)) {\n        return false\n      }\n      seen.add(item)\n      return true\n    })\n  },\n  difference: <T>(list: T[], removeList: T[]): T[] => {\n    const remove = new Set<T>(removeList)\n    return list.filter((item) => !remove.has(item))\n  },\n  moveItems,\n  resolveSingleOrArray\n}\n","import type React from 'react'\nimport type { SingleOrArray } from './typing'\nimport { ArrayUtil } from './array'\nimport type { FormFieldInteractionStates } from '../components/form/FieldLayout'\nimport type { HTMLAttributes } from 'react'\n\n///\n/// Data Attributes\n///\n\nfunction bool(isActive: boolean): string | undefined {\n  return isActive ? '' : undefined\n}\n\ntype InteractionStateDataAttributes = {\n  'data-disabled': string | undefined,\n  'data-invalid': string | undefined,\n  'data-readonly': string | undefined,\n  'data-required': string | undefined,\n}\nfunction interactionStatesData(interactionStates: Partial<FormFieldInteractionStates>): Partial<InteractionStateDataAttributes> {\n  return {\n    'data-disabled': bool(!!interactionStates.disabled),\n    'data-invalid': bool(!!interactionStates.invalid),\n    'data-readonly': bool(!!interactionStates.readOnly),\n    'data-required': bool(!!interactionStates.required),\n  }\n}\n\nconst dataAttributes = {\n  bool,\n  interactionStates: interactionStatesData,\n}\n\n///\n/// DOM Event handling\n///\n\ntype MouseEventExtenderProps<T> = {\n  fromProps?: React.MouseEventHandler<T>,\n  extensions: SingleOrArray<React.MouseEventHandler<T>>,\n}\n\nfunction mouseEventExtender<T>({\n  fromProps,\n  extensions\n}: MouseEventExtenderProps<T>): React.MouseEventHandler<T> {\n  return (event) => {\n    fromProps?.(event)\n    ArrayUtil.resolveSingleOrArray(extensions)\n      .forEach(element => element(event))\n  }\n}\n\ntype KeyoardEventExtenderProps<T> = {\n  fromProps: React.KeyboardEventHandler<T>,\n  extensions: SingleOrArray<React.KeyboardEventHandler<T>>,\n}\n\nfunction keyboardEventExtender<T>({\n  fromProps,\n  extensions,\n}: KeyoardEventExtenderProps<T>): React.KeyboardEventHandler<T> {\n  return (event) => {\n    fromProps?.(event)\n    ArrayUtil.resolveSingleOrArray(extensions)\n      .forEach(element => element(event))\n  }\n}\n\nconst extender = {\n  mouseEvent: mouseEventExtender,\n  keyboardEvent: keyboardEventExtender\n}\n\n///\n/// ARIA & Accessibility\n///\n\nfunction click<T>(onClick: () => void) {\n  const keyboardEventHandler: React.KeyboardEventHandler<T> = (event) => {\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault()\n      event.stopPropagation()\n      onClick()\n    }\n  }\n\n  return {\n    onClick: onClick,\n    onKeyDown: keyboardEventHandler,\n  }\n}\n\nfunction close<T>(onClose?: () => void): React.KeyboardEventHandler<T> {\n  return (event) => {\n    if (event.key === 'Escape') {\n      event.preventDefault()\n      event.stopPropagation()\n      onClose?.()\n    }\n  }\n}\n\ntype NavigateType<T> = {\n  left?: (event: React.KeyboardEvent<T>) => void,\n  right?: (event: React.KeyboardEvent<T>) => void,\n  up?: (event: React.KeyboardEvent<T>) => void,\n  down?: (event: React.KeyboardEvent<T>) => void,\n}\nfunction navigate<T>({\n  left,\n  right,\n  up,\n  down,\n}: NavigateType<T>): React.KeyboardEventHandler<T> {\n  return (event) => {\n    switch (event.key) {\n    case 'ArrowLeft':\n      left(event)\n      event.preventDefault()\n      event.stopPropagation()\n      break\n    case 'ArrowRight':\n      right(event)\n      event.preventDefault()\n      event.stopPropagation()\n      break\n    case 'ArrowUp':\n      up(event)\n      event.preventDefault()\n      event.stopPropagation()\n      break\n    case 'ArrowDown':\n      down(event)\n      event.preventDefault()\n      event.stopPropagation()\n      break\n    }\n  }\n}\n\nexport function mergeProps<T extends object, U extends Partial<T>>(\n  slotProps: T,\n  childProps: U\n): T & U {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const result: any = { ...childProps }\n\n  for (const key in slotProps) {\n    const slotValue = slotProps[key as keyof T]\n    const childValue = childProps[key as keyof U]\n\n    if (key === 'className') {\n      result.className = [slotValue, childValue].filter(Boolean).join(' ')\n    } else if (key === 'style') {\n      result.style = { ...(slotValue as React.CSSProperties), ...(childValue as React.CSSProperties) }\n    } else if (\n      key.startsWith('on') &&\n      typeof slotValue === 'function' &&\n      typeof childValue === 'function'\n    ) {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      result[key] = (...args: any[]) => {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n        (slotValue as Function)(...args);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n        (childValue as Function)(...args)\n      }\n    } else {\n      result[key] = childValue ?? slotValue\n    }\n  }\n\n  return result\n}\n\ntype InteractionStateARIAAttributes = Pick<HTMLAttributes<HTMLDivElement>, 'aria-disabled' | 'aria-invalid' | 'aria-readonly' | 'aria-required'>\n\nfunction interactionStatesAria(\n  interactionStates: Partial<FormFieldInteractionStates>,\n  props: Partial<InteractionStateARIAAttributes> = {}\n): Partial<InteractionStateARIAAttributes> {\n  return {\n    'aria-disabled': props['aria-disabled'] ?? interactionStates.disabled,\n    'aria-invalid': props['aria-invalid'] ?? interactionStates.invalid,\n    'aria-readonly': props['aria-readonly'] ?? interactionStates.readOnly,\n    'aria-required': props['aria-required'] ?? interactionStates.required,\n  }\n}\n\nconst aria = {\n  close,\n  click,\n  navigate,\n  interactionStates: interactionStatesAria,\n}\n\nexport const PropsUtil = {\n  extender,\n  dataAttributes,\n  aria,\n  mergeProps,\n}","import type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type ChatDateDividerProps = HTMLAttributes<HTMLDivElement>\n\nexport const ChatDateDivider = ({\n  children,\n  ...props\n}: ChatDateDividerProps) => {\n  return (\n    <div {...props} className={clsx('chat-date-divider', props.className)}>\n      {children}\n    </div>\n  )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { CheckCheck } from 'lucide-react'\n\nexport type ChatMessageDirection = 'incoming' | 'outgoing'\n\nexport type ChatMessageBubbleProps = HTMLAttributes<HTMLDivElement> & {\n  direction?: ChatMessageDirection,\n  timestamp?: ReactNode,\n  readReceipt?: ReactNode,\n}\n\nexport const ChatMessageBubble = ({\n  direction = 'incoming',\n  timestamp,\n  readReceipt,\n  children,\n  ...props\n}: ChatMessageBubbleProps) => {\n  return (\n    <div\n      {...props}\n      className={clsx('chat-message-bubble-container', props.className)}\n      data-direction={direction}\n    >\n      <div className=\"chat-message-bubble\" data-direction={direction}>\n        <span className=\"chat-message-bubble-content\">{children}</span>\n        {timestamp && (\n          <span className=\"chat-message-bubble-timestamp\">{timestamp}</span>\n        )}\n      </div>\n      {readReceipt && (\n        <span className=\"chat-message-bubble-receipt\">\n          <CheckCheck className=\"chat-message-bubble-receipt-icon\"/>\n          {readReceipt}\n        </span>\n      )}\n    </div>\n  )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { ChatMessageDirection } from './ChatMessageBubble'\nimport type { ChipColor } from '../display-and-visualization/Chip'\n\nexport type ChatMessageCardProps = HTMLAttributes<HTMLDivElement> & {\n  icon?: ReactNode,\n  title: ReactNode,\n  subtitle?: ReactNode,\n  badge?: ReactNode,\n  actions?: ReactNode,\n  color?: ChipColor,\n  direction?: ChatMessageDirection,\n}\n\nexport const ChatMessageCard = ({\n  icon,\n  title,\n  subtitle,\n  badge,\n  actions,\n  color = 'primary',\n  direction = 'incoming',\n  children,\n  ...props\n}: ChatMessageCardProps) => {\n  return (\n    <div\n      {...props}\n      className={clsx('chat-message-card', props.className)}\n      data-direction={direction}\n      data-color={color ?? undefined}\n    >\n      <div className=\"chat-message-card-header\">\n        {icon && (\n          <span className=\"chat-message-card-icon\" data-color={color ?? undefined}>\n            {icon}\n          </span>\n        )}\n        <span className=\"chat-message-card-heading\">\n          <span className=\"chat-message-card-title\" data-color={color ?? undefined}>{title}</span>\n          {subtitle && (\n            <span className=\"chat-message-card-subtitle\">{subtitle}</span>\n          )}\n        </span>\n        {badge && (\n          <span className=\"chat-message-card-badge\">{badge}</span>\n        )}\n      </div>\n      {children && (\n        <div className=\"chat-message-card-body\">{children}</div>\n      )}\n      {actions && (\n        <div className=\"chat-message-card-actions\">{actions}</div>\n      )}\n    </div>\n  )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { useCallback, useLayoutEffect, useRef } from 'react'\nimport clsx from 'clsx'\nimport { SendHorizontal } from 'lucide-react'\nimport { IconButton } from '../user-interaction/IconButton'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useWindowResizeObserver } from '@/src/hooks/useWindowResizeObserver'\n\nconst MAX_INPUT_LINES = 7\n\nexport type ChatMessageComposerProps = Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n  value?: string,\n  initialValue?: string,\n  onValueChange?: (value: string) => void,\n  onSend: (value: string) => void,\n  placeholder?: string,\n  sendLabel?: string,\n  disabled?: boolean,\n  actions?: ReactNode,\n  trailing?: ReactNode,\n}\n\nexport const ChatMessageComposer = ({\n  value: controlledValue,\n  initialValue,\n  onValueChange,\n  onSend,\n  placeholder,\n  sendLabel = 'Send',\n  disabled = false,\n  actions,\n  ...props\n}: ChatMessageComposerProps) => {\n  const textareaRef = useRef<HTMLTextAreaElement>(null)\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue ?? '',\n  })\n\n  const syncTextareaHeight = useCallback(() => {\n    const textarea = textareaRef.current\n    if (!textarea) {\n      return\n    }\n    textarea.style.height = '0px'\n    const lineHeight = Number.parseFloat(getComputedStyle(textarea).lineHeight)\n    const maxHeight = Number.isFinite(lineHeight) ? lineHeight * MAX_INPUT_LINES : textarea.scrollHeight\n    textarea.style.height = `${Math.min(textarea.scrollHeight, maxHeight)}px`\n  }, [])\n\n  useLayoutEffect(() => {\n    syncTextareaHeight()\n  }, [value, syncTextareaHeight])\n\n  useWindowResizeObserver(syncTextareaHeight)\n\n  const send = () => {\n    const trimmed = (value ?? '').trim()\n    if (!trimmed) {\n      return\n    }\n    onSend(trimmed)\n    setValue('')\n  }\n\n  return (\n    <div {...props} className={clsx('chat-message-composer', props.className)}>\n      {actions && (\n        <div className=\"chat-message-composer-actions\">\n          {actions}\n        </div>\n      )}\n      <textarea\n        ref={textareaRef}\n        className=\"chat-message-composer-input\"\n        rows={1}\n        value={value ?? ''}\n        placeholder={placeholder}\n        disabled={disabled}\n        onChange={event => setValue(event.target.value)}\n        onKeyDown={event => {\n          if (event.key === 'Enter' && !event.shiftKey) {\n            event.preventDefault()\n            send()\n          }\n        }}\n      />\n      <IconButton\n        tooltip={sendLabel}\n        color=\"primary\"\n        coloringStyle=\"solid\"\n        disabled={disabled || !(value ?? '').trim()}\n        size=\"md\"\n        onClick={send}\n        className=\"chat-message-composer-send-button\"\n      >\n        <SendHorizontal/>\n      </IconButton>\n    </div>\n  )\n}\n","import type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { resolveSetState } from '../utils/resolveSetState'\nimport { useEventCallbackStabilizer } from './useEventCallbackStabelizer'\nimport { useLogOnce } from './useLogOnce'\n\nexport interface ControlledStateProps<T> {\n  /**\n   * The controlled value of the state.\n   *\n   * This is determines whether the state:\n   * 1. (value !== undefined) => controlled\n   * 2. (value === undefined) => uncontrolled\n   *\n   * If you need to include undefined as a valid state, you can set isControlled to true to force the component to be controlled.\n   */\n  value?: T,\n  /** The callback whenever a setter changes the value */\n  onValueChange?: (value: T) => void,\n  /** The default value to use if the component is uncontrolled */\n  defaultValue?: T,\n  /** Forces the component to be controlled even if value is undefined */\n  isControlled?: boolean,\n}\n\nexport const useControlledState = <T>({\n  value: controlledValue,\n  onValueChange,\n  defaultValue,\n  isControlled: isEnforcingControlled\n}: ControlledStateProps<T>) : [T, React.Dispatch<React.SetStateAction<T>>, boolean] => {\n  const [internalValue, setInternalValue] = useState(() => defaultValue)\n  const [isControlled] = useState(isEnforcingControlled || controlledValue !== undefined)\n\n  const onValueChangeStable = useEventCallbackStabilizer(onValueChange)\n\n  useLogOnce(\n    'useControlledState: Attempted to change from controlled to uncontrolled or vice versa.'\n    + 'For a controlled state: isControlled === true OR value !== undefined'\n    + 'For an uncontrolled state: isControlled === false OR value === undefined',\n    isControlled !== (isEnforcingControlled || controlledValue !== undefined),\n    { type: 'error' }\n  )\n\n  const lastValue = useRef(isControlled ? controlledValue : internalValue)\n\n  useEffect(() => {\n    lastValue.current = isControlled ? controlledValue : internalValue\n  }, [isControlled, controlledValue, internalValue])\n\n  const setState: React.Dispatch<React.SetStateAction<T>> = useCallback((action) => {\n    const resolved = resolveSetState(action, lastValue.current)\n    if(!isControlled)  {\n      lastValue.current = resolved\n      setInternalValue(resolved)\n    }\n    onValueChangeStable(resolved)\n  }, [onValueChangeStable, isControlled])\n\n  const value = isControlled ? controlledValue : internalValue\n\n  return [value, setState, isControlled]\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}","import { useCallback, useEffect, useRef } from 'react'\n\nexport function useEventCallbackStabilizer<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends (...args: any[]) => any\n>(\n  callback?: T\n): (...args: Parameters<T>) => ReturnType<T> {\n  const callbackRef = useRef<T | undefined>(callback)\n\n  useEffect(() => {\n    callbackRef.current = callback\n  }, [callback])\n\n  return useCallback((...args: Parameters<T>) => {\n    return callbackRef.current?.(...args)\n  }, [])\n}","import type { HTMLAttributes } from 'react'\nimport { useEffect, useRef } from 'react'\nimport clsx from 'clsx'\n\nexport type ChatMessageListProps = HTMLAttributes<HTMLDivElement> & {\n  autoScroll?: boolean,\n}\n\nexport const ChatMessageList = ({\n  autoScroll = true,\n  children,\n  ...props\n}: ChatMessageListProps) => {\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (autoScroll && ref.current) {\n      ref.current.scrollTop = ref.current.scrollHeight\n    }\n  }, [autoScroll, children])\n\n  return (\n    <div {...props} ref={ref} className={clsx('chat-message-list', props.className)}>\n      {children}\n    </div>\n  )\n}\n","import type { ButtonHTMLAttributes } from 'react'\nimport clsx from 'clsx'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type ChatQuickReplyChipProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n  isActive?: boolean,\n}\n\nexport const ChatQuickReplyChip = ({\n  isActive = false,\n  children,\n  ...props\n}: ChatQuickReplyChipProps) => {\n  return (\n    <button\n      {...props}\n      type={props.type ?? 'button'}\n      className={clsx('chat-quick-reply-chip', props.className)}\n      data-active={PropsUtil.dataAttributes.bool(isActive)}\n    >\n      {children}\n    </button>\n  )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { CheckCheck } from 'lucide-react'\nimport type { ChipColor } from '../display-and-visualization/Chip'\n\nexport type ChatSystemLineProps = HTMLAttributes<HTMLDivElement> & {\n  icon?: ReactNode,\n  color?: ChipColor,\n}\n\nexport const ChatSystemLine = ({\n  icon,\n  color = 'primary',\n  children,\n  ...props\n}: ChatSystemLineProps) => {\n  return (\n    <div\n      {...props}\n      className={clsx('chat-system-line', props.className)}\n      data-color={color ?? undefined}\n    >\n      <span className=\"chat-system-line-icon\">\n        {icon ?? <CheckCheck/>}\n      </span>\n      {children}\n    </div>\n  )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport type { AvatarWithStatusProps } from '../display-and-visualization/Avatar'\nimport { AvatarWithStatus } from '../display-and-visualization/Avatar'\n\nexport type ChatThreadHeaderProps = HTMLAttributes<HTMLDivElement> & {\n  avatar?: AvatarWithStatusProps,\n  title: ReactNode,\n  subtitle?: ReactNode,\n  leftActions?: ReactNode,\n  rightActions?: ReactNode,\n  leadingActionsClassName?: string,\n  trailingActionsClassName?: string,\n}\n\nexport const ChatThreadHeader = ({\n  avatar,\n  title,\n  subtitle,\n  leftActions,\n  rightActions,\n  leadingActionsClassName,\n  trailingActionsClassName,\n  ...props\n}: ChatThreadHeaderProps) => {\n  return (\n    <div {...props} className={clsx('chat-thread-header', props.className)}>\n      {leftActions && (\n        <div className={clsx('chat-thread-header-leading', leadingActionsClassName)}>\n          {leftActions}\n        </div>\n      )}\n      {avatar && (<AvatarWithStatus size=\"md\" {...avatar}/>)}\n      <span className=\"chat-thread-header-info\">\n        <span className=\"chat-thread-header-title\">{title}</span>\n        {subtitle && (\n          <span className=\"chat-thread-header-subtitle\">{subtitle}</span>\n        )}\n      </span>\n      {rightActions && (\n        <div className={clsx('chat-thread-header-trailing', trailingActionsClassName)}>\n          {rightActions}\n        </div>\n      )}\n    </div>\n  )\n}\n","import type { AnchorHTMLAttributes, ElementType, HTMLAttributes, ReactNode } from 'react'\nimport { forwardRef, useId } from 'react'\nimport clsx from 'clsx'\nimport { ChevronRight, ExternalLink } from 'lucide-react'\nimport { Visibility } from '../layout/Visibility'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type CardSize = 'sm' | 'md' | 'lg'\n\ntype CardHeaderContentProps = {\n  title: ReactNode,\n  titleId?: string,\n  description?: ReactNode,\n  descriptionId?: string,\n  leading?: ReactNode,\n  trailing?: ReactNode,\n}\n\nfunction CardHeaderContent({\n  title,\n  titleId,\n  description,\n  descriptionId,\n  leading,\n  trailing,\n}: CardHeaderContentProps) {\n  return (\n    <>\n      {leading != null && (\n        <span className=\"card-leading\">{leading}</span>\n      )}\n      <div className=\"card-content\">\n        <span id={titleId} className=\"card-title\">{title}</span>\n        <Visibility isVisible={!!description}>\n          <span id={descriptionId} className=\"card-description\">{description}</span>\n        </Visibility>\n      </div>\n      {trailing != null && (\n        <span className=\"card-trailing\">{trailing}</span>\n      )}\n    </>\n  )\n}\n\n//\n// Card\n//\n\nexport type CardProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> & {\n  title: ReactNode,\n  description?: ReactNode,\n  size?: CardSize,\n  leading?: ReactNode,\n  trailing?: ReactNode,\n}\n\nexport const Card = ({\n  title,\n  description,\n  size = 'md',\n  leading,\n  trailing,\n  children,\n  className,\n  ...props\n}: CardProps) => {\n  return (\n    <div\n      {...props}\n      className={clsx('group/card card', className)}\n      data-size={size}\n    >\n      <div className=\"card-header\">\n        <CardHeaderContent\n          title={title}\n          description={description}\n          leading={leading}\n          trailing={trailing}\n        />\n      </div>\n      {children}\n    </div>\n  )\n}\n\n//\n// ActionCard\n//\n\nexport type ActionCardProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> & {\n  title: ReactNode,\n  description?: ReactNode,\n  size?: CardSize,\n  leading?: ReactNode,\n  trailing?: ReactNode,\n  disabled?: boolean,\n}\n\nexport const ActionCard = forwardRef<HTMLDivElement, ActionCardProps>(function ActionCard({\n  title,\n  description,\n  size = 'md',\n  leading,\n  trailing,\n  disabled = false,\n  children,\n  className,\n  onClick,\n  onKeyDown,\n  ...props\n}, ref) {\n  return (\n    <div\n      {...props}\n      ref={ref}\n      className={clsx('card group/card action-card', className)}\n      onClick={(event) => {\n        if (disabled) {\n          return\n        }\n        onClick?.(event)\n      }}\n      onKeyDown={(event) => {\n        onKeyDown?.(event)\n        if (disabled || event.defaultPrevented) {\n          return\n        }\n        if (event.key === 'Enter' || event.key === ' ') {\n          event.preventDefault()\n          event.currentTarget.click()\n        }\n      }}\n      data-size={size}\n      data-disabled={PropsUtil.dataAttributes.bool(disabled)}\n      role={onClick ? 'button' : undefined}\n      tabIndex={onClick && !disabled ? 0 : undefined}\n    >\n      <div className=\"card-header\">\n        <CardHeaderContent\n          title={title}\n          description={description}\n          leading={leading}\n          trailing={trailing}\n        />\n      </div>\n      {children}\n    </div>\n  )\n})\n\n\nexport type NavigationCardLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {\n  href: string,\n}\n\nconst DefaultNavigationCardLink: ElementType<NavigationCardLinkProps> = 'a'\n\n//\n// NavigationCard\n//\n\nexport type NavigationCardProps = Omit<HTMLAttributes<HTMLAnchorElement>, 'title'> & {\n  title: ReactNode,\n  description?: ReactNode,\n  size?: CardSize,\n  leading?: ReactNode,\n  href: string,\n  isExternal?: boolean,\n  LinkComponent?: ElementType<NavigationCardLinkProps>,\n}\n\nexport const NavigationCard = forwardRef<HTMLAnchorElement, NavigationCardProps>(function NavigationCard({\n  title,\n  description,\n  size = 'md',\n  leading,\n  href,\n  isExternal = false,\n  LinkComponent = DefaultNavigationCardLink,\n  children,\n  className,\n  ...props\n}, ref) {\n  const generatedId = useId()\n  const descriptionId = `navigation-card-description-${generatedId}`\n  const titleId = `navigation-card-title-${generatedId}`\n\n  return (\n    <LinkComponent\n      {...props}\n      ref={ref}\n      href={href}\n      target={isExternal ? '_blank' : undefined}\n      rel={isExternal ? 'noopener noreferrer' : undefined}\n\n      data-size={size}\n      data-external={PropsUtil.dataAttributes.bool(isExternal)}\n\n      aria-labelledby={titleId}\n      aria-describedby={description ? descriptionId : undefined}\n\n      className={clsx('card group/card navigation-card', className)}\n    >\n      <div className=\"card-header\">\n        <CardHeaderContent\n          title={title}\n          titleId={titleId}\n          description={description}\n          descriptionId={description ? descriptionId : undefined}\n          leading={leading}\n        />\n        <span className=\"navigation-card-action\">\n          {isExternal ? (\n            <ExternalLink className=\"navigation-card-action-icon\" aria-hidden=\"true\" />\n          ) : (\n            <ChevronRight className=\"navigation-card-action-icon\" aria-hidden=\"true\" />\n          )}\n        </span>\n      </div>\n      {children}\n    </LinkComponent>\n  )\n})\n","import { useEffect, useRef, useState } from 'react'\nimport type { Curve } from '@/src/utils/curve'\nimport { CurveBuilderUtil } from '@/src/utils/curve'\nimport { MathUtil } from '@/src/utils/math'\n\nexport type UseChangingNumberOptions = {\n  start: number,\n  end: number,\n  animationTime?: number,\n  curve?: Curve,\n  resetRateAfterUpdate?: boolean,\n}\n\ntype AnimationState = {\n  startTimestamp: number,\n}\n\nexport function useChangingNumber({\n  start,\n  end,\n  animationTime = 1000,\n  curve = CurveBuilderUtil.easeInEaseOut,\n  resetRateAfterUpdate = false,\n}: UseChangingNumberOptions): number {\n  const [displayValue, setDisplayValue] = useState(start)\n  const animationStateRef = useRef<AnimationState>({\n    startTimestamp: performance.now(),\n  })\n  const startRef = useRef(start)\n  const endRef = useRef(end)\n  const curveRef = useRef(curve)\n  const animationTimeRef = useRef(animationTime)\n  const resetRateAfterUpdateRef = useRef(resetRateAfterUpdate)\n  const previousStartRef = useRef(start)\n  const previousEndRef = useRef(end)\n\n  startRef.current = start\n  endRef.current = end\n  curveRef.current = curve\n  animationTimeRef.current = animationTime\n  resetRateAfterUpdateRef.current = resetRateAfterUpdate\n\n  useEffect(() => {\n    const startChanged = previousStartRef.current !== start\n    const endChanged = previousEndRef.current !== end\n\n    if (startChanged) {\n      setDisplayValue(start)\n    }\n\n    if ((startChanged || endChanged) && !resetRateAfterUpdateRef.current) {\n      animationStateRef.current.startTimestamp = performance.now()\n    }\n\n    previousStartRef.current = start\n    previousEndRef.current = end\n  }, [start, end])\n\n  useEffect(() => {\n    if (start === end) {\n      setDisplayValue(end)\n      return\n    }\n\n    let animationFrame = 0\n\n    const tick = (timestamp: number) => {\n      const elapsed = timestamp - animationStateRef.current.startTimestamp\n      const progress = MathUtil.clamp01(elapsed / animationTimeRef.current)\n      const value = startRef.current + curveRef.current(progress) * (endRef.current - startRef.current)\n\n      setDisplayValue(value)\n\n      if (progress < 1) {\n        animationFrame = requestAnimationFrame(tick)\n      } else {\n        setDisplayValue(endRef.current)\n      }\n    }\n\n    animationFrame = requestAnimationFrame(tick)\n\n    return () => {\n      cancelAnimationFrame(animationFrame)\n    }\n  }, [animationTime, curve, end, resetRateAfterUpdate, start])\n\n  return displayValue\n}\n","import { MathUtil } from './math'\n\nexport type Curve = (value: number) => number\n\nexport type ExponentialCurveBuilderPropsResolved = {\n  basis: number,\n  multiplier: number,\n}\n\nexport type ExponentialCurveBuilderProps = Partial<ExponentialCurveBuilderPropsResolved>\n\nexport type ExponentialRateCurveBuilder = (props: ExponentialCurveBuilderProps) => Curve\n\nexport type CubicBezierCurveBuilder = (x1: number, y1: number, x2: number, y2: number) => Curve\n\nconst ExponentialRateCurveBuilder: ExponentialRateCurveBuilder = ({\n  basis = 2,\n  multiplier = 1\n}: ExponentialCurveBuilderProps) => {\n  if(Number.isNaN(multiplier) || !Number.isFinite(multiplier) || multiplier <= 0) {\n    throw new Error(`Invalid muliplier: ${multiplier}`)\n  }\n\n  return (value) => {\n    if(Number.isNaN(value)) {\n      return 0\n    }\n    return multiplier * (basis ** value)\n  }\n}\n\nconst cubicBezierGeneric = (\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number\n): { x: Curve, y: Curve } => {\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  const x = (t: number) => ((ax * t + bx) * t + cx) * t\n  const y = (t: number) => ((ay * t + by) * t + cy) * t\n\n  return { x, y }\n}\n\nconst CubicBezierCurveBuilder: CubicBezierCurveBuilder = (x1, y1, x2, y2) => {\n  const { y } = cubicBezierGeneric(x1, y1, x2, y2)\n  return (t) => y(MathUtil.clamp(t, 0, 1))\n}\n\nconst easeInEaseOut: Curve = CubicBezierCurveBuilder(0.65, 0, 0.35, 1)\n\nexport const CurveBuilderUtil = {\n  ExponentialRateCurveBuilder,\n  CubicBezierCurveBuilder,\n  cubicBezierGeneric,\n  easeInEaseOut,\n}","import type { ReactNode } from 'react'\nimport { useChangingNumber } from '@/src/hooks/useChangingNumber'\nimport type { Curve } from '@/src/utils/curve'\nimport { CurveBuilderUtil } from '@/src/utils/curve'\n\nexport type ChangingNumberProps = {\n  start: number,\n  end: number,\n  animationTime?: number,\n  curve?: Curve,\n  resetRateAfterUpdate?: boolean,\n  formatValue?: (value: number) => ReactNode,\n}\n\n/**\n * Displays a number animating from start to end along a curve over animationTime\n */\nexport function ChangingNumber({\n  start,\n  end,\n  animationTime = 1000,\n  curve = CurveBuilderUtil.easeInEaseOut,\n  resetRateAfterUpdate = false,\n  formatValue = Math.round,\n}: ChangingNumberProps): ReactNode {\n  const value = useChangingNumber({\n    start,\n    end,\n    animationTime,\n    curve,\n    resetRateAfterUpdate,\n  })\n\n  return formatValue(value)\n}\n","import type { ButtonHTMLAttributes } from 'react'\nimport { forwardRef } from 'react'\n\n/**\n * The different sizes for a button\n */\ntype ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ButtonColoringStyle = 'outline' | 'solid' | 'text' | 'tonal' | 'tonal-outline' | null\n\nconst buttonColorsList = ['primary', 'secondary', 'positive', 'warning', 'negative', 'neutral'] as const\n\n/**\n * The allowed colors for the Button\n */\nexport type ButtonColor = typeof buttonColorsList[number] | null\n\nexport const ButtonUtil = {\n  colors: buttonColorsList,\n}\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n  /**\n   * @default 'medium'\n   */\n  size?: ButtonSize,\n  color?: ButtonColor,\n  /**\n   * @default 'solid'\n   */\n  coloringStyle?: ButtonColoringStyle,\n  allowClickEventPropagation?: boolean,\n}\n\n/**\n * A button with a solid background and different sizes\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function SolidButton({\n  children,\n  size = 'md',\n  color = 'primary',\n  coloringStyle = 'solid',\n  disabled,\n  allowClickEventPropagation = false,\n  ...props\n}, ref) {\n  return (\n    <button\n      {...props}\n      ref={ref}\n      disabled={disabled}\n      type={props['type'] ?? 'button'}\n\n      onClick={event => {\n        if(!allowClickEventPropagation) {\n          event.stopPropagation()\n        }\n        props.onClick?.(event)\n      }}\n\n      data-name={props['data-name'] ?? 'button'}\n      data-disabled={disabled ? '': undefined}\n      data-size={size ?? undefined}\n      data-color={color ?? undefined}\n      data-coloringstyle={coloringStyle ?? undefined}\n    >\n      {children}\n    </button>\n  )\n})\n","import type { HTMLAttributes } from 'react'\nimport { ButtonUtil } from '@/src/components/user-interaction/Button'\n\ntype ChipSize = 'xs' | 'sm' | 'md' | 'lg' | null\n\ntype ChipColoringStyle = 'solid' | 'tonal' | 'outline' | 'tonal-outline' | null\n\nconst chipColors = ButtonUtil.colors\nexport type ChipColor = typeof chipColors[number]\n\nexport const ChipUtil = {\n  colors: chipColors,\n}\n\nexport type ChipProps = HTMLAttributes<HTMLDivElement> & {\n  color?: ChipColor,\n  coloringStyle?: ChipColoringStyle,\n  size?: ChipSize,\n}\n\n/**\n * A component for displaying a single chip\n */\nexport const Chip = ({\n  children,\n  color = 'neutral',\n  coloringStyle = 'solid',\n  size = 'md',\n  ...props\n}: ChipProps) => {\n  return (\n    <div\n      {...props}\n      data-name={props['data-name'] ?? 'chip'}\n      data-color={color ?? undefined}\n      data-coloringstyle={coloringStyle ?? undefined}\n      data-size={size ?? undefined}\n    >\n      {children}\n    </div>\n  )\n}\n\nexport type ChipListProps = HTMLAttributes<HTMLUListElement> & {\n  list: ChipProps[],\n}\n\n/**\n * A component for displaying a list of chips\n */\nexport const ChipList = ({\n  list,\n  ...props\n}: ChipListProps) => {\n  return (\n    <ul {...props} data-name={props['data-name'] ?? 'chip-list'}>\n      {list.map((value, index) => (\n        <li key={index}>\n          <Chip\n            key={index}\n            {...value}\n          >\n            {value.children}\n          </Chip>\n        </li>\n      ))}\n    </ul>\n  )\n}\n","import { ChevronDown } from 'lucide-react'\nimport type { HTMLAttributes } from 'react'\n\nexport type ExpansionIconProps = HTMLAttributes<HTMLDivElement> & {\n  isExpanded: boolean,\n  disabled?: boolean,\n}\n\nexport const ExpansionIcon = ({\n  children,\n  isExpanded,\n  disabled = false,\n  ...props\n}: ExpansionIconProps) => {\n\n  return (\n    <div\n      {...props}\n      data-name={props['data-name'] ?? 'expansion-icon'}\n      data-expanded={isExpanded ? '' : undefined}\n      data-disabled={disabled ? '' : undefined}\n    >\n      {children ? (\n        children\n      ) : (\n        <ChevronDown\n          aria-hidden={true}\n          className=\"size-4\"\n        />\n      )}\n    </div>\n  )\n}","export type ProgressIndicatorProps = {\n  /*\n    The amount of progress that has been made\n    Value base 0 to 1\n   */\n  progress: number,\n  strokeWidth?: number,\n  size?: keyof typeof sizeMapping,\n  direction?: 'clockwise' | 'counterclockwise',\n  /*\n    Rotation of the starting point of the indicator\n    default start at 3 o'clock\n    Given in degree\n   */\n  rotation?: number,\n}\n\nconst sizeMapping = { small: 16, medium: 24, big: 48 }\n\n/**\n * A progress indicator\n *\n * Start rotation is 3 o'clock and fills counterclockwise\n *\n * Progress is given from 0 to 1\n */\nexport const ProgressIndicator = ({\n  progress,\n  strokeWidth = 5,\n  size = 'medium',\n  direction = 'counterclockwise',\n  rotation = 0\n}: ProgressIndicatorProps) => {\n  const currentSize = sizeMapping[size]\n  const center = currentSize / 2\n  const radius = center - strokeWidth / 2\n  const arcLength = 2 * Math.PI * radius\n  const arcOffset = arcLength * progress\n  if (direction === 'clockwise') {\n    rotation += 360 * progress\n  }\n  return (\n    <svg\n      style={{\n        height: `${currentSize}px`,\n        width: `${currentSize}px`,\n        transform: `rotate(${rotation}deg)`\n      }}\n    >\n      <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n        className=\"stroke-progress-indicator-fill\"\n      />\n      <circle cx={center} cy={center} r={radius} fill=\"transparent\" strokeWidth={strokeWidth}\n        strokeDasharray={arcLength} strokeDashoffset={arcOffset} className=\"stroke-progress-indicator-background\"\n      />\n    </svg>\n  )\n}\n","import type { MouseEventHandler, PointerEventHandler, ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type ProcessModelActivityNodeKind = 'activity' | 'terminal'\n\nexport type ProcessModelActivityNodeProps = {\n  nodeId: string,\n  label: string,\n  count: string,\n  customIcon: ReactNode,\n  kind?: ProcessModelActivityNodeKind,\n  bordered?: boolean,\n  active?: boolean,\n  visited?: boolean,\n  className?: string,\n  onClick?: MouseEventHandler<HTMLDivElement>,\n  onPointerEnter?: PointerEventHandler<HTMLDivElement>,\n  onPointerLeave?: PointerEventHandler<HTMLDivElement>,\n}\n\nexport const ProcessModelActivityNode = ({\n  nodeId,\n  label,\n  count,\n  customIcon,\n  kind = 'activity',\n  bordered = true,\n  active = false,\n  visited = false,\n  className,\n  onClick,\n  onPointerEnter,\n  onPointerLeave,\n}: ProcessModelActivityNodeProps) => {\n  const interactive = !!onClick\n  const rootName = kind === 'terminal' ? 'process-model-terminal-node' : 'process-model-activity-node'\n  return (\n    <div\n      data-name={rootName}\n      id={`nd-${nodeId}`}\n      className={clsx('process-model-activity-node', className)}\n      data-kind={kind}\n      data-bordered={PropsUtil.dataAttributes.bool(bordered)}\n      data-active={PropsUtil.dataAttributes.bool(active)}\n      data-visited={PropsUtil.dataAttributes.bool(visited)}\n      data-interactive={PropsUtil.dataAttributes.bool(interactive)}\n      tabIndex={interactive ? 0 : undefined}\n      role={interactive ? 'button' : undefined}\n      aria-label={interactive ? label : undefined}\n      onClick={(event) => {\n        onClick?.(event)\n      }}\n      onPointerEnter={(event) => {\n        onPointerEnter?.(event)\n      }}\n      onPointerLeave={(event) => {\n        onPointerLeave?.(event)\n      }}\n      onKeyDown={(event) => {\n        if (!interactive) {\n          return\n        }\n        if (event.key === 'Enter' || event.key === ' ') {\n          event.preventDefault()\n          event.currentTarget.click()\n        }\n      }}\n    >\n      <div className=\"process-model-activity-node-icon\">{customIcon}</div>\n      <div className=\"process-model-activity-node-text\">\n        <div className=\"process-model-activity-node-label\">{label}</div>\n        <div className=\"process-model-activity-node-count\">{count}</div>\n      </div>\n    </div>\n  )\n}\n","import { useId, useMemo, type ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { Check, Plus } from 'lucide-react'\nimport { ProcessModelActivityNode } from './ProcessModelActivityNode'\nimport { ProcessModelTerminalNode } from './ProcessModelTerminalNode'\nimport { ProcessModelLayoutUtilities } from './layoutProcessModel'\nimport type {\n  ProcessModelGraph,\n  ProcessModelGraphActivityNode,\n  ProcessModelGraphNode\n} from './types'\n\nexport type ProcessModelCanvasProps = {\n  graph: ProcessModelGraph,\n  className?: string,\n  showNodeBorder?: boolean,\n  activeNodeId?: string,\n  visitedNodeIds?: ReadonlySet<string>,\n  renderActivityIcon?: (node: ProcessModelGraphActivityNode) => ReactNode,\n  edgePathIdPrefix?: string,\n  edgeReplayHighlight?: { from: string, to: string } | null,\n  replayParticle?: { cx: number, cy: number, opacity: number } | null,\n}\n\nfunction defaultRenderActivityIcon(node: ProcessModelGraphActivityNode): ReactNode {\n  if (node.activityIcon === 'check') {\n    return <Check size={15} strokeWidth={2} className=\"process-model-activity-node-icon-svg\" />\n  }\n  return <Plus size={15} strokeWidth={2} className=\"process-model-activity-node-icon-svg\" />\n}\n\nfunction isVisited(\n  nodeId: string,\n  activeNodeId: string | undefined,\n  visited: ReadonlySet<string> | undefined\n): boolean {\n  if (!visited?.size) {\n    return false\n  }\n  if (nodeId === activeNodeId) {\n    return false\n  }\n  return visited.has(nodeId)\n}\n\nexport const ProcessModelCanvas = ({\n  graph,\n  className,\n  showNodeBorder = true,\n  activeNodeId,\n  visitedNodeIds,\n  renderActivityIcon = defaultRenderActivityIcon,\n  edgePathIdPrefix,\n  edgeReplayHighlight = null,\n  replayParticle = null,\n}: ProcessModelCanvasProps) => {\n  const uid = useId().replace(/:/g, '')\n  const { positions, canvasW, canvasH } = useMemo(() => ProcessModelLayoutUtilities.computeLayout(graph), [graph])\n  const maxW = useMemo(() => ProcessModelLayoutUtilities.maxEdgeWeight(graph.edges), [graph.edges])\n\n  const edgeElements = useMemo(() => {\n    return graph.edges.map((edge) => {\n      const pts = ProcessModelLayoutUtilities.getEdgePoints(positions, edge.from, edge.to, graph.edges)\n      if (!pts) {\n        return null\n      }\n      const { opacity, sw, markerTier } = ProcessModelLayoutUtilities.weightToStyle(edge.weight, maxW)\n      const lp = pts.labelPt\n      const pillW = edge.label.length * 6.8 + 12\n      const pillH = 17\n      const labelStrong = opacity > 0.7\n      const isReplayEdge =\n        edgeReplayHighlight != null\n        && edge.from === edgeReplayHighlight.from\n        && edge.to === edgeReplayHighlight.to\n      const pathId = ProcessModelLayoutUtilities.getProcessModelEdgePathDomId(edgePathIdPrefix, edge.from, edge.to)\n      const strokeOpacity = isReplayEdge ? 1 : opacity\n      const strokeWidth = isReplayEdge ? 3 : sw\n      return (\n        <g key={`${edge.from}-${edge.to}`}>\n          <path\n            id={pathId}\n            d={pts.pathD}\n            fill=\"none\"\n            className=\"process-model-edge-path\"\n            strokeWidth={strokeWidth}\n            strokeOpacity={strokeOpacity}\n            markerEnd={`url(#pm-arr-${markerTier}-${uid})`}\n            data-base-opacity={String(opacity)}\n            data-base-sw={String(sw)}\n          />\n          {edge.label ? (\n            <>\n              <rect\n                className=\"process-model-edge-label-bg\"\n                x={lp.x - pillW / 2}\n                y={lp.y - pillH / 2}\n                width={pillW}\n                height={pillH}\n                rx={4}\n              />\n              <text\n                className={clsx(\n                  'process-model-edge-label-text',\n                  labelStrong ? 'process-model-edge-label-text-strong' : 'process-model-edge-label-text-muted'\n                )}\n                x={lp.x}\n                y={lp.y + 4.5}\n                textAnchor=\"middle\"\n                fontSize={11}\n                fontWeight={600}\n              >\n                {edge.label}\n              </text>\n            </>\n          ) : null}\n        </g>\n      )\n    })\n  }, [graph, positions, maxW, uid, edgePathIdPrefix, edgeReplayHighlight])\n\n  const nodeElements = useMemo(() => {\n    const visited = visitedNodeIds ?? new Set<string>()\n    return graph.nodes.map((node: ProcessModelGraphNode) => {\n      const p = positions[node.id]\n      if (!p) {\n        return null\n      }\n      const active = node.id === activeNodeId\n      const wasVisited = isVisited(node.id, activeNodeId, visited)\n      let inner: ReactNode\n      if (node.type === 'start' || node.type === 'end') {\n        inner = (\n          <ProcessModelTerminalNode\n            nodeId={node.id}\n            variant={node.type}\n            label={node.label}\n            count={node.count}\n            bordered={showNodeBorder}\n            active={active}\n            visited={wasVisited}\n          />\n        )\n      } else {\n        const activityNode = node as ProcessModelGraphActivityNode\n        inner = (\n          <ProcessModelActivityNode\n            nodeId={activityNode.id}\n            label={activityNode.label}\n            count={activityNode.count}\n            customIcon={renderActivityIcon(activityNode)}\n            bordered={showNodeBorder}\n            active={active}\n            visited={wasVisited}\n          />\n        )\n      }\n      return (\n        <foreignObject\n          key={node.id}\n          id={`fn-${node.id}`}\n          x={p.x}\n          y={p.y}\n          width={p.w}\n          height={p.h}\n          className=\"process-model-foreign-object\"\n        >\n          <div className=\"process-model-foreign-object-inner\">{inner}</div>\n        </foreignObject>\n      )\n    })\n  }, [graph.nodes, positions, activeNodeId, visitedNodeIds, renderActivityIcon, showNodeBorder])\n\n  return (\n    <div\n      data-name=\"process-model-canvas\"\n      className={clsx('process-model-canvas-wrap', className)}\n      style={{ width: canvasW + 64, minHeight: canvasH + 64 }}\n    >\n      <svg\n        className=\"process-model-svg\"\n        width={canvasW}\n        height={canvasH}\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <defs>\n          {(['strong', 'medium', 'faint'] as const).map((tier) => {\n            const op = tier === 'strong' ? 1 : tier === 'medium' ? 0.65 : 0.32\n            return (\n              <marker\n                key={tier}\n                id={`pm-arr-${tier}-${uid}`}\n                markerWidth=\"8\"\n                markerHeight=\"8\"\n                refX=\"8\"\n                refY=\"4\"\n                orient=\"auto\"\n              >\n                <path\n                  d=\"M0,0.5 L0,7.5 L8,4 z\"\n                  className=\"process-model-edge-marker-fill\"\n                  fillOpacity={op}\n                />\n              </marker>\n            )\n          })}\n          <filter id={`pm-glow-${uid}`} x=\"-80%\" y=\"-80%\" width=\"360%\" height=\"360%\">\n            <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"3\" />\n          </filter>\n        </defs>\n        <g className=\"process-model-edge-layer\">{edgeElements}</g>\n        <g className=\"process-model-node-layer\">{nodeElements}</g>\n        {replayParticle ? (\n          <circle\n            className=\"process-model-replay-particle\"\n            cx={replayParticle.cx}\n            cy={replayParticle.cy}\n            r={5}\n            fill=\"var(--color-primary)\"\n            fillOpacity={replayParticle.opacity}\n            filter={`url(#pm-glow-${uid})`}\n          />\n        ) : null}\n      </svg>\n    </div>\n  )\n}\n","import type {\n  ProcessModelEdge,\n  ProcessModelEdgePointResult,\n  ProcessModelEdgeStrokeStyle,\n  ProcessModelGraph,\n  ProcessModelGraphNode,\n  ProcessModelLayoutResult,\n  ProcessModelNodePosition\n} from './types'\nimport type { ProcessModelActivityNodeKind } from './ProcessModelActivityNode'\n\nconst NODE_H = 52\nconst COL_GAP = 72\nconst ROW_GAP = 72\n\nconst ACTIVITY_NODE_MIN_WIDTH = 120\n\nconst ACTIVITY_PAD_X = 24\nconst ACTIVITY_ICON_W = 28\nconst ACTIVITY_GAP = 8\nconst ACTIVITY_LABEL_PX_PER_CHAR = 6.9\nconst ACTIVITY_COUNT_PX_PER_CHAR = 6.15\nconst TERMINAL_HEX_W = 34\nconst TERMINAL_GAP = 12\nconst TERMINAL_LABEL_PX_PER_CHAR = 7.5\nconst TERMINAL_COUNT_PX_PER_CHAR = 6.2\nconst ACTIVITY_WIDTH_SAFETY_PX = 14\n\nconst EDGE_LABEL_ALONG_FR = 0.22\nconst EDGE_LABEL_BEZIER_T = 0.2\nconst EDGE_STRAIGHT_PX = 14\n\ntype CubicPt = { x: number, y: number }\n\nfunction stringVisualUnits(s: string): number {\n  return [...s].length\n}\n\nfunction terminalCountDisplayLine(rawCount: string): string {\n  return `${rawCount} traces`\n}\n\nfunction estimateProcessModelActivityChromeWidth(\n  kind: ProcessModelActivityNodeKind,\n  label: string,\n  countLine: string\n): number {\n  const labelPx = kind === 'terminal' ? TERMINAL_LABEL_PX_PER_CHAR : ACTIVITY_LABEL_PX_PER_CHAR\n  const countPx = kind === 'terminal' ? TERMINAL_COUNT_PX_PER_CHAR : ACTIVITY_COUNT_PX_PER_CHAR\n  const labelW = stringVisualUnits(label) * labelPx\n  const countW = stringVisualUnits(countLine) * countPx\n  const textW = Math.max(labelW, countW)\n  const iconW = kind === 'terminal' ? TERMINAL_HEX_W : ACTIVITY_ICON_W\n  const gap = kind === 'terminal' ? TERMINAL_GAP : ACTIVITY_GAP\n  const chrome = ACTIVITY_PAD_X + iconW + gap\n  const w = chrome + textW + ACTIVITY_WIDTH_SAFETY_PX\n  return Math.max(ACTIVITY_NODE_MIN_WIDTH, Math.ceil(w))\n}\n\nfunction estimateProcessModelActivityNodeWidth(label: string, count: string): number {\n  return estimateProcessModelActivityChromeWidth('activity', label, count)\n}\n\nfunction cubicBezierPoint(\n  x0: number,\n  y0: number,\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  x3: number,\n  y3: number,\n  t: number\n): { x: number, y: number } {\n  const u = 1 - t\n  const u2 = u * u\n  const u3 = u2 * u\n  const t2 = t * t\n  const t3 = t2 * t\n  return {\n    x: u3 * x0 + 3 * u2 * t * x1 + 3 * u * t2 * x2 + t3 * x3,\n    y: u3 * y0 + 3 * u2 * t * y1 + 3 * u * t2 * y2 + t3 * y3,\n  }\n}\n\nfunction lerpPt(a: CubicPt, b: CubicPt, t: number): CubicPt {\n  return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t }\n}\n\nfunction splitCubicAt(\n  p0: CubicPt,\n  p1: CubicPt,\n  p2: CubicPt,\n  p3: CubicPt,\n  t: number\n): { left: [CubicPt, CubicPt, CubicPt, CubicPt], right: [CubicPt, CubicPt, CubicPt, CubicPt] } {\n  const q0 = lerpPt(p0, p1, t)\n  const q1 = lerpPt(p1, p2, t)\n  const q2 = lerpPt(p2, p3, t)\n  const r0 = lerpPt(q0, q1, t)\n  const r1 = lerpPt(q1, q2, t)\n  const s = lerpPt(r0, r1, t)\n  return {\n    left: [p0, q0, r0, s],\n    right: [s, r1, q2, p3],\n  }\n}\n\nfunction linePathDWithStraightCaps(sx: number, sy: number, ex: number, ey: number, run: number): string {\n  const dx = ex - sx\n  const dy = ey - sy\n  const len = Math.hypot(dx, dy)\n  if (len < 1e-9) {\n    return `M${sx},${sy}`\n  }\n  const ux = dx / len\n  const uy = dy / len\n  const inset = Math.min(run, Math.max(0, (len - 2) / 2))\n  if (inset < 0.5) {\n    return `M${sx},${sy} L${ex},${ey}`\n  }\n  return `M${sx + ux * inset},${sy + uy * inset} L${ex - ux * inset},${ey - uy * inset}`\n}\n\nfunction cubicPathDWithEndStraightCap(\n  x0: number,\n  y0: number,\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  x3: number,\n  y3: number,\n  runPx: number\n): string {\n  const hull =\n    Math.hypot(x1 - x0, y1 - y0) + Math.hypot(x2 - x1, y2 - y1) + Math.hypot(x3 - x2, y3 - y2)\n  if (hull < runPx * 2 + 6) {\n    return `M${x0},${y0} C${x1},${y1} ${x2},${y2} ${x3},${y3}`\n  }\n  let lo = 0\n  let hi = 1\n  for (let i = 0; i < 28; i++) {\n    const mid = (lo + hi) / 2\n    const b = cubicBezierPoint(x0, y0, x1, y1, x2, y2, x3, y3, mid)\n    const d = Math.hypot(x3 - b.x, y3 - b.y)\n    if (d > runPx) {\n      lo = mid\n    } else {\n      hi = mid\n    }\n  }\n  const t = Math.min(0.9999, Math.max(0.0001, hi))\n  const p0: CubicPt = { x: x0, y: y0 }\n  const p1: CubicPt = { x: x1, y: y1 }\n  const p2: CubicPt = { x: x2, y: y2 }\n  const p3: CubicPt = { x: x3, y: y3 }\n  const [l0, l1, l2, l3] = splitCubicAt(p0, p1, p2, p3, t).left\n  const gap = Math.hypot(x3 - l3.x, y3 - l3.y)\n  if (gap < 0.75) {\n    return `M${l0.x},${l0.y} C${l1.x},${l1.y} ${l2.x},${l2.y} ${x3},${y3}`\n  }\n  return `M${l0.x},${l0.y} C${l1.x},${l1.y} ${l2.x},${l2.y} ${l3.x},${l3.y} L${x3},${y3}`\n}\n\nfunction nodeWidth(n: ProcessModelGraphNode): number {\n  if (n.type === 'start' || n.type === 'end') {\n    return estimateProcessModelActivityChromeWidth(\n      'terminal',\n      n.label,\n      terminalCountDisplayLine(n.count)\n    )\n  }\n  return estimateProcessModelActivityNodeWidth(n.label, n.count)\n}\n\nfunction computeLayout(graph: ProcessModelGraph): ProcessModelLayoutResult {\n  const nodes = graph.nodes\n  const layers: Record<number, ProcessModelGraphNode[]> = {}\n  nodes.forEach((n) => {\n    const l = n.layer ?? 0\n    if (!layers[l]) {\n      layers[l] = []\n    }\n    layers[l].push(n)\n  })\n  const layerKeys = Object.keys(layers).map(Number).sort((a, b) => a - b)\n  layerKeys.forEach((l) => {\n    layers[l].sort((a, b) => (a.col ?? 0) - (b.col ?? 0))\n  })\n\n  const layerTotalWidths = layerKeys.map((l) => {\n    const ns = layers[l]\n    return ns.reduce((s, n) => s + nodeWidth(n), 0) + Math.max(0, ns.length - 1) * COL_GAP\n  })\n  const canvasW = Math.max(...layerTotalWidths) + 120\n\n  const positions: Record<string, ProcessModelNodePosition> = {}\n  let curY = 40\n  layerKeys.forEach((l, li) => {\n    const ns = layers[l]\n    const totalW = layerTotalWidths[li]\n    let curX = (canvasW - totalW) / 2\n    ns.forEach((n) => {\n      const w = nodeWidth(n)\n      positions[n.id] = { x: curX, y: curY, w, h: NODE_H, layer: l }\n      curX += w + COL_GAP\n    })\n    curY += NODE_H + ROW_GAP\n  })\n  const canvasH = curY - ROW_GAP + 40\n\n  return { positions, canvasW, canvasH }\n}\n\nfunction getEdgePoints(\n  pos: Record<string, ProcessModelNodePosition>,\n  fromId: string,\n  toId: string,\n  allEdges: ProcessModelEdge[]\n): ProcessModelEdgePointResult | null {\n  const f = pos[fromId]\n  const t = pos[toId]\n  if (!f || !t) {\n    return null\n  }\n\n  const fc = { x: f.x + f.w / 2, y: f.y + f.h / 2 }\n  const tc = { x: t.x + t.w / 2, y: t.y + t.h / 2 }\n\n  const dx = tc.x - fc.x\n\n  const sameLayer = f.layer === t.layer\n  const isBackEdge = t.layer < f.layer\n  const layerSpan = Math.abs(t.layer - f.layer)\n  const isSkipEdge = !isBackEdge && layerSpan > 1\n  const sameColumn = Math.abs(dx) < 8\n  const hasPair = allEdges.some((e) => e.from === toId && e.to === fromId)\n\n  let pathD: string\n  let labelPt: { x: number, y: number }\n\n  function leftArcRoute(): ProcessModelEdgePointResult {\n    const minL = Math.min(f.layer, t.layer)\n    const maxL = Math.max(f.layer, t.layer)\n    let leftmostX = Math.min(f.x, t.x)\n    Object.entries(pos).forEach(([nid, p]) => {\n      if (p.layer >= minL && p.layer <= maxL && nid !== fromId && nid !== toId) {\n        leftmostX = Math.min(leftmostX, p.x)\n      }\n    })\n    const margin = 56 + layerSpan * 8\n    const leftX = leftmostX - margin\n    const sx = f.x\n    const sy = fc.y\n    const ex = t.x\n    const ey = tc.y\n    const labelPt = cubicBezierPoint(sx, sy, leftX, sy, leftX, ey, ex, ey, EDGE_LABEL_BEZIER_T)\n    const run = EDGE_STRAIGHT_PX\n    const hSign = Math.sign(leftX - sx) || -1\n    const hInset = Math.min(run, Math.max(0, Math.abs(leftX - sx) * 0.35))\n    const sx2 = sx + hSign * hInset\n    const inner = cubicPathDWithEndStraightCap(sx2, sy, leftX, sy, leftX, ey, ex, ey, run)\n    const cIdx = inner.indexOf(' C')\n    const pathD =\n      hInset > 0.25 && cIdx >= 0\n        ? `M${sx},${sy} L${sx2},${sy}${inner.slice(cIdx)}`\n        : inner\n    return {\n      pathD,\n      labelPt,\n    }\n  }\n\n  if (hasPair) {\n    const idxForward = allEdges.findIndex((e) => e.from === fromId && e.to === toId)\n    const idxReverse = allEdges.findIndex((e) => e.from === toId && e.to === fromId)\n    const isForward = idxForward < idxReverse\n    const offsetY = isForward ? -8 : 8\n    const sx = dx > 0 ? f.x + f.w : f.x\n    const ex = dx > 0 ? t.x : t.x + t.w\n    const sy = fc.y + offsetY\n    const ey = tc.y + offsetY\n    pathD = linePathDWithStraightCaps(sx, sy, ex, ey, EDGE_STRAIGHT_PX)\n    labelPt = { x: sx + (ex - sx) * EDGE_LABEL_ALONG_FR, y: sy - 11 }\n  } else if (isBackEdge || isSkipEdge) {\n    const arc = leftArcRoute()\n    pathD = arc.pathD\n    labelPt = arc.labelPt\n  } else if (sameLayer) {\n    const sx = dx > 0 ? f.x + f.w : f.x\n    const ex = dx > 0 ? t.x : t.x + t.w\n    const sy = fc.y\n    const ey = tc.y\n    pathD = linePathDWithStraightCaps(sx, sy, ex, ey, EDGE_STRAIGHT_PX)\n    labelPt = { x: sx + (ex - sx) * EDGE_LABEL_ALONG_FR, y: sy - 11 }\n  } else if (sameColumn) {\n    const sx = fc.x\n    const sy = f.y + f.h\n    const ex = tc.x\n    const ey = t.y\n    pathD = linePathDWithStraightCaps(sx, sy, ex, ey, EDGE_STRAIGHT_PX)\n    const alongY = sy + (ey - sy) * EDGE_LABEL_ALONG_FR\n    labelPt = { x: sx + 16, y: alongY }\n  } else {\n    const sx = fc.x\n    const sy = f.y + f.h\n    const ex = tc.x\n    const ey = t.y\n    const span = Math.abs(ey - sy)\n    const cp1y = sy + span * 0.45\n    const cp2y = ey - span * 0.45\n    const run = EDGE_STRAIGHT_PX\n    const vSign = Math.sign(cp1y - sy) || 1\n    const vInset = Math.min(run, Math.max(0, Math.abs(cp1y - sy) * 0.35))\n    const sy2 = sy + vSign * vInset\n    const inner = cubicPathDWithEndStraightCap(sx, sy2, sx, cp1y, ex, cp2y, ex, ey, run)\n    const cIdx = inner.indexOf(' C')\n    pathD =\n      vInset > 0.25 && cIdx >= 0\n        ? `M${sx},${sy} L${sx},${sy2}${inner.slice(cIdx)}`\n        : inner\n    labelPt = cubicBezierPoint(sx, sy, sx, cp1y, ex, cp2y, ex, ey, EDGE_LABEL_BEZIER_T)\n    const offX = dx > 0 ? 10 : -10\n    labelPt = { x: labelPt.x + offX, y: labelPt.y - 5 }\n  }\n\n  return { pathD, labelPt }\n}\n\nfunction weightToStyle(weight: number, maxWeight: number): ProcessModelEdgeStrokeStyle {\n  const ratio = maxWeight > 0 ? weight / maxWeight : 0\n  if (ratio > 0.6) {\n    return { opacity: 1.0, sw: 2.5, markerTier: 'strong' }\n  }\n  if (ratio > 0.2) {\n    return { opacity: 0.6, sw: 1.8, markerTier: 'medium' }\n  }\n  return { opacity: 0.28, sw: 1.4, markerTier: 'faint' }\n}\n\nfunction maxEdgeWeight(edges: ProcessModelEdge[]): number {\n  if (!edges.length) {\n    return 1\n  }\n  return Math.max(...edges.map((e) => e.weight))\n}\n\nfunction getProcessModelEdgePathDomId(\n  pathIdPrefix: string | undefined,\n  from: string,\n  to: string\n): string {\n  if (pathIdPrefix != null && pathIdPrefix !== '') {\n    return `ep-${pathIdPrefix}-${from}-${to}`\n  }\n  return `ep-${from}-${to}`\n}\n\nexport const ProcessModelLayoutUtilities = {\n  ACTIVITY_NODE_MIN_WIDTH,\n  NODE_H,\n  terminalCountDisplayLine,\n  estimateProcessModelActivityChromeWidth,\n  estimateProcessModelActivityNodeWidth,\n  computeLayout,\n  getEdgePoints,\n  weightToStyle,\n  maxEdgeWeight,\n  getProcessModelEdgePathDomId,\n}\n","import type { ReactNode } from 'react'\nimport { ProcessModelActivityNode } from './ProcessModelActivityNode'\nimport { ProcessModelLayoutUtilities } from './layoutProcessModel'\nimport type { ProcessModelTerminalKind } from './types'\n\nexport type ProcessModelTerminalNodeProps = {\n  nodeId: string,\n  variant: ProcessModelTerminalKind,\n  label: string,\n  count: string,\n  bordered?: boolean,\n  active?: boolean,\n  visited?: boolean,\n  className?: string,\n}\n\nfunction TerminalHexIcon({ variant }: { variant: ProcessModelTerminalKind }): ReactNode {\n  const isStart = variant === 'start'\n  return (\n    <svg\n      className=\"process-model-terminal-node-hex shrink-0\"\n      width=\"34\"\n      height=\"34\"\n      viewBox=\"0 0 44 44\"\n      fill=\"none\"\n      aria-hidden\n    >\n      <polygon\n        className=\"process-model-terminal-node-hex-fill\"\n        points=\"22,2 40,12 40,32 22,42 4,32 4,12\"\n      />\n      <polygon\n        points=\"22,5 38,14 38,30 22,39 6,30 6,14\"\n        fill=\"none\"\n        stroke=\"rgba(255,255,255,0.2)\"\n        strokeWidth=\"1\"\n      />\n      {isStart ? (\n        <polygon points=\"18,15 30,22 18,29\" fill=\"white\" />\n      ) : (\n        <rect x=\"14\" y=\"14\" width=\"16\" height=\"16\" rx=\"2\" fill=\"white\" />\n      )}\n    </svg>\n  )\n}\n\nexport const ProcessModelTerminalNode = ({\n  nodeId,\n  variant,\n  label,\n  count,\n  bordered = true,\n  active = false,\n  visited = false,\n  className,\n}: ProcessModelTerminalNodeProps) => {\n  return (\n    <ProcessModelActivityNode\n      nodeId={nodeId}\n      kind=\"terminal\"\n      label={label}\n      count={ProcessModelLayoutUtilities.terminalCountDisplayLine(count)}\n      customIcon={<TerminalHexIcon variant={variant} />}\n      bordered={bordered}\n      active={active}\n      visited={visited}\n      className={className}\n    />\n  )\n}\n","import {\n  useCallback,\n  useEffect,\n  useId,\n  useRef,\n  useState\n} from 'react'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { Select } from '@/src/components/user-interaction/Select/Select'\nimport { SelectOption } from '@/src/components/user-interaction/Select/SelectOption'\nimport { ProcessModelCanvas } from './ProcessModelCanvas'\nimport { ProcessModelLayoutUtilities } from './layoutProcessModel'\nimport type { ProcessModelGraphWithTraces, ProcessModelTrace } from './types'\nimport { Pause, Play, RotateCcw } from 'lucide-react'\n\nexport type ProcessModelTraceReplayProps = {\n  graph: ProcessModelGraphWithTraces,\n  className?: string,\n}\n\ntype LogLine = {\n  id: string,\n  time: string,\n  text: string,\n}\n\nconst SPEED_OPTIONS = [\n  { value: 1, label: '1×' },\n  { value: 1.5, label: '1.5×' },\n  { value: 2, label: '2×' },\n  { value: 3, label: '3×' },\n] as const\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n  return new Promise((resolve) => {\n    if (signal.aborted) {\n      resolve()\n      return\n    }\n    const id = setTimeout(() => {\n      resolve()\n    }, ms)\n    signal.addEventListener('abort', () => {\n      clearTimeout(id)\n      resolve()\n    }, { once: true })\n  })\n}\n\nfunction runParticleAlongPath(\n  path: SVGPathElement,\n  durationMs: number,\n  signal: AbortSignal,\n  onFrame: (cx: number, cy: number, opacity: number) => void\n): Promise<void> {\n  return new Promise((resolve) => {\n    if (signal.aborted) {\n      resolve()\n      return\n    }\n    const len = path.getTotalLength()\n    if (!Number.isFinite(len) || len <= 0) {\n      onFrame(0, 0, 0)\n      resolve()\n      return\n    }\n    const start = performance.now()\n    const tick = (now: number) => {\n      if (signal.aborted) {\n        onFrame(0, 0, 0)\n        resolve()\n        return\n      }\n      const u = Math.min(1, (now - start) / durationMs)\n      const pt = path.getPointAtLength(u * len)\n      const opacity = u < 0.06 ? u / 0.06 : u > 0.88 ? (1 - u) / 0.12 : 1\n      onFrame(pt.x, pt.y, opacity)\n      if (u < 1) {\n        requestAnimationFrame(tick)\n      } else {\n        onFrame(0, 0, 0)\n        resolve()\n      }\n    }\n    requestAnimationFrame(tick)\n  })\n}\n\nexport const ProcessModelTraceReplay = ({ graph, className }: ProcessModelTraceReplayProps) => {\n  const translation = useHightideTranslation()\n  const pathPrefix = useId().replace(/:/g, '')\n  const hostRef = useRef<HTMLDivElement>(null)\n  const traceIndexRef = useRef(0)\n  const playbackRef = useRef<AbortController | null>(null)\n  const playbackLoopLockRef = useRef(false)\n\n  const [speedMult, setSpeedMult] = useState(2)\n  const [isPlaying, setIsPlaying] = useState(false)\n  const [activeNodeId, setActiveNodeId] = useState<string | undefined>()\n  const [visitedNodeIds, setVisitedNodeIds] = useState<ReadonlySet<string>>(new Set())\n  const [edgeReplayHighlight, setEdgeReplayHighlight] = useState<{ from: string, to: string } | null>(null)\n  const [replayParticle, setReplayParticle] = useState<{ cx: number, cy: number, opacity: number } | null>(null)\n  const [logLines, setLogLines] = useState<LogLine[]>([])\n  const [logPlaceholder, setLogPlaceholder] = useState(true)\n\n  const getPath = useCallback(\n    (from: string, to: string): SVGPathElement | null => {\n      const root = hostRef.current\n      if (!root) {\n        return null\n      }\n      const svg = root.querySelector('svg.process-model-svg')\n      if (!svg) {\n        return null\n      }\n      const id = ProcessModelLayoutUtilities.getProcessModelEdgePathDomId(pathPrefix, from, to)\n      return svg.querySelector(`#${CSS.escape(id)}`)\n    },\n    [pathPrefix]\n  )\n\n  const addLog = useCallback((text: string) => {\n    setLogPlaceholder(false)\n    const time = new Date().toLocaleTimeString('en', { hour: '2-digit', minute: '2-digit', second: '2-digit' })\n    setLogLines((prev) => [\n      ...prev,\n      { id: `${Date.now()}-${Math.random().toString(36).slice(2)}`, time, text },\n    ])\n  }, [])\n\n  const getLabel = useCallback(\n    (id: string) => {\n      const n = graph.nodes.find((x) => x.id === id)\n      return n ? `${n.label} (${n.count})` : id\n    },\n    [graph.nodes]\n  )\n\n  const stopPlayback = useCallback(() => {\n    playbackRef.current?.abort()\n    playbackRef.current = null\n    setIsPlaying(false)\n    setReplayParticle(null)\n  }, [])\n\n  const resetReplay = useCallback(() => {\n    stopPlayback()\n    traceIndexRef.current = 0\n    setActiveNodeId(undefined)\n    setVisitedNodeIds(new Set())\n    setEdgeReplayHighlight(null)\n    setLogLines([])\n    setLogPlaceholder(true)\n  }, [stopPlayback])\n\n  const awaitDoubleRaf = useCallback(() => {\n    return new Promise<void>((resolve) => {\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => resolve())\n      })\n    })\n  }, [])\n\n  const runTraceOnce = useCallback(\n    async (trace: ProcessModelTrace, signal: AbortSignal) => {\n      await awaitDoubleRaf()\n      if (signal.aborted) {\n        return\n      }\n      const BASE = 650 / speedMult\n      const ns = trace.nodes\n      addLog(`▶ ${trace.name}`)\n      setVisitedNodeIds(new Set())\n      setEdgeReplayHighlight(null)\n      setActiveNodeId(ns[0])\n      addLog(`↳ ${getLabel(ns[0])}`)\n\n      for (let i = 0; i < ns.length - 1; i++) {\n        if (signal.aborted) {\n          return\n        }\n        const from = ns[i]\n        const to = ns[i + 1]\n        const dur = (BASE + Math.random() * 180) / speedMult\n        const pathEl = getPath(from, to)\n        const particleMs = dur / speedMult\n        if (pathEl) {\n          await runParticleAlongPath(pathEl, particleMs, signal, (cx, cy, opacity) => {\n            if (opacity <= 0) {\n              setReplayParticle(null)\n            } else {\n              setReplayParticle({ cx, cy, opacity })\n            }\n          })\n        } else {\n          setReplayParticle(null)\n          await sleep(particleMs, signal)\n        }\n        if (signal.aborted) {\n          return\n        }\n        setVisitedNodeIds((prev) => new Set([...prev, from]))\n        setActiveNodeId(to)\n        setEdgeReplayHighlight({ from, to })\n        addLog(`↳ ${getLabel(to)}`)\n        if (i === ns.length - 2) {\n          await sleep(500 / speedMult, signal)\n          if (signal.aborted) {\n            return\n          }\n          setActiveNodeId(undefined)\n          setEdgeReplayHighlight(null)\n        }\n      }\n    },\n    [addLog, awaitDoubleRaf, getLabel, getPath, speedMult]\n  )\n\n  const startPlayback = useCallback(async () => {\n    if (!graph.traces.length || playbackLoopLockRef.current) {\n      return\n    }\n    playbackLoopLockRef.current = true\n    stopPlayback()\n    const ac = new AbortController()\n    playbackRef.current = ac\n    setIsPlaying(true)\n    setLogPlaceholder(false)\n    try {\n      while (!ac.signal.aborted) {\n        const idx = traceIndexRef.current % graph.traces.length\n        const trace = graph.traces[idx]\n        traceIndexRef.current += 1\n        await runTraceOnce(trace, ac.signal)\n        if (ac.signal.aborted) {\n          break\n        }\n        const gap = (600 + Math.random() * 300) / speedMult\n        await sleep(gap, ac.signal)\n      }\n    } finally {\n      if (playbackRef.current === ac) {\n        playbackRef.current = null\n      }\n      playbackLoopLockRef.current = false\n      setIsPlaying(false)\n      setReplayParticle(null)\n    }\n  }, [graph.traces, runTraceOnce, speedMult, stopPlayback])\n\n  useEffect(() => {\n    resetReplay()\n  }, [graph, resetReplay])\n\n  useEffect(() => () => {\n    playbackRef.current?.abort()\n  }, [])\n\n  return (\n    <div data-name=\"process-model-trace-replay\" className={clsx('process-model-trace-replay', className)}>\n      <div className=\"process-model-trace-replay-toolbar\">\n        <Button\n          color=\"primary\"\n          coloringStyle={isPlaying ? 'outline' : 'solid'}\n          className=\"min-w-48\"\n          onClick={() => {\n            if (isPlaying) {\n              stopPlayback()\n            } else {\n              void startPlayback()\n            }\n          }}\n        >\n          {isPlaying ? <Pause /> : <Play />}\n          {isPlaying ? translation('pauseTrace') : translation('playTrace')}\n        </Button>\n        <Button\n          color=\"primary\"\n          coloringStyle=\"outline\"\n          onClick={resetReplay}\n        >\n          <RotateCcw />\n          {translation('reset')}\n        </Button>\n        <div className=\"process-model-trace-replay-speed\">\n          <span className=\"process-model-trace-replay-speed-label\">{translation('speed')}</span>\n          <Select\n            value={speedMult}\n            onValueChange={setSpeedMult}\n            showSearch={false}\n          >\n            {SPEED_OPTIONS.map((option) => (\n              <SelectOption key={option.value} value={option.value} label={option.label} />\n            ))}\n          </Select>\n        </div>\n      </div>\n      <div ref={hostRef}>\n        <ProcessModelCanvas\n          graph={graph}\n          edgePathIdPrefix={pathPrefix}\n          activeNodeId={activeNodeId}\n          visitedNodeIds={visitedNodeIds}\n          edgeReplayHighlight={edgeReplayHighlight}\n          replayParticle={replayParticle}\n        />\n      </div>\n      <div className=\"process-model-trace-log\">\n        <div className=\"process-model-trace-log-header\">Trace log</div>\n        <div className=\"process-model-trace-log-body\">\n          {logPlaceholder ? (\n            <div className=\"process-model-trace-log-placeholder\">\n              Press Play to start trace replay…\n            </div>\n          ) : (\n            logLines.map((line) => (\n              <div key={line.id} className=\"process-model-trace-log-event\">\n                <span className=\"process-model-trace-log-dot\" aria-hidden />\n                <span className=\"process-model-trace-log-time\">{line.time}</span>\n                <span>{line.text}</span>\n              </div>\n            ))\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport { useStorage } from '../hooks/useStorage'\nimport { LocalizationUtil } from '../i18n/util'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport type { LocalizationConfig } from '@/src/global-contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/global-contexts/HightideConfigContext'\nimport { useEventCallbackStabilizer } from '../hooks/useEventCallbackStabelizer'\n\ntype LocaleWithSystem = HightideTranslationLocales | 'system'\n\nexport type LocaleContextValue = {\n  locale: HightideTranslationLocales,\n  setLocale: Dispatch<SetStateAction<LocaleWithSystem>>,\n  timeZone?: string,\n  setTimeZone?: (timeZone: string | undefined) => void,\n  is24HourFormat?: boolean,\n  setIs24HourFormat?: (is24HourFormat: boolean | undefined) => void,\n}\n\nexport const LocaleContext = createContext<LocaleContextValue | null>(null)\n\nexport type LocaleProviderProps = PropsWithChildren & Partial<LocalizationConfig> & {\n  locale?: LocaleWithSystem,\n  onChangedLocale?: (locale: HightideTranslationLocales) => void,\n  timeZone?: string,\n  onChangedTimeZone?: (timeZone: string | undefined) => void,\n  is24HourFormat?: boolean,\n  onChangedIs24HourFormat?: (is24HourFormat: boolean) => void,\n}\n\nexport const LocaleProvider = ({\n  children,\n  locale,\n  defaultLocale,\n  defaultTimeZone,\n  defaultIs24HourFormat,\n  timeZone,\n  is24HourFormat,\n  onChangedLocale,\n  onChangedTimeZone,\n  onChangedIs24HourFormat,\n}: LocaleProviderProps) => {\n  const {\n    value: storedLocale,\n    setValue: setStoredLocale,\n    deleteValue: deleteStoredLocale,\n  } = useStorage<LocaleWithSystem>({ key: 'locale', defaultValue: 'system' })\n  const {\n    value: storedTimeZone,\n    setValue: setStoredTimeZone,\n    deleteValue: deleteStoredTimeZone,\n  } = useStorage<string | null>({ key: 'timeZone', defaultValue: null })\n  const {\n    value: storedIs24HourFormat,\n    setValue: setStoredIs24HourFormat,\n    deleteValue: deleteStoredIs24HourFormat,\n  } = useStorage<boolean | null>({ key: 'is24HourFormat', defaultValue: null })\n  const { config } = useHightideConfig()\n  const [localePreference, setLocalePreference] = useState<LocaleWithSystem>('system')\n\n  const resolvedLocale = useMemo(() => {\n    if (locale && locale !== 'system') {\n      return locale\n    }\n    if (storedLocale && storedLocale !== 'system') {\n      return storedLocale\n    }\n    if (localePreference !== 'system') {\n      return localePreference\n    }\n    return config.locale.defaultLocale ?? defaultLocale\n  }, [config.locale.defaultLocale, defaultLocale, locale, localePreference, storedLocale])\n\n  useEffect(() => {\n    if (!locale) return\n    if (locale === 'system') {\n      deleteStoredLocale()\n    } else {\n      setStoredLocale(locale)\n    }\n  }, [locale, deleteStoredLocale, setStoredLocale])\n\n  const resolvedTimeZone = useMemo(() => {\n    return timeZone ?? storedTimeZone ?? config.locale.defaultTimeZone ?? defaultTimeZone\n  }, [timeZone, storedTimeZone, config.locale.defaultTimeZone, defaultTimeZone])\n\n  useEffect(() => {\n    if (timeZone === undefined) return\n    setStoredTimeZone(timeZone)\n  }, [timeZone, setStoredTimeZone])\n\n  const resolvedIs24HourFormat = useMemo(() => {\n    return is24HourFormat ?? storedIs24HourFormat ?? config.locale.defaultIs24HourFormat ?? defaultIs24HourFormat ?? true\n  }, [is24HourFormat, storedIs24HourFormat, config.locale.defaultIs24HourFormat, defaultIs24HourFormat])\n\n  useEffect(() => {\n    if (is24HourFormat === undefined) return\n    setStoredIs24HourFormat(is24HourFormat)\n  }, [is24HourFormat, setStoredIs24HourFormat])\n\n  const onChangeRef = useEventCallbackStabilizer(onChangedLocale)\n\n  useEffect(() => {\n    onChangeRef?.(resolvedLocale)\n  }, [resolvedLocale, onChangeRef])\n\n  const onChangeTimeZoneRef = useEventCallbackStabilizer(onChangedTimeZone)\n\n  useEffect(() => {\n    onChangeTimeZoneRef?.(resolvedTimeZone)\n  }, [resolvedTimeZone, onChangeTimeZoneRef])\n\n  const onChangeIs24HourFormatRef = useEventCallbackStabilizer(onChangedIs24HourFormat)\n\n  useEffect(() => {\n    onChangeIs24HourFormatRef?.(resolvedIs24HourFormat)\n  }, [resolvedIs24HourFormat, onChangeIs24HourFormatRef])\n\n  useEffect(() => {\n    const localesToTestAgainst = Object.values(LocalizationUtil.locals)\n\n    const detectLanguage = () => {\n      const matchingBrowserLanguage = window.navigator.languages\n        .map(locale =>\n          localesToTestAgainst.find(\n            (test) => locale === test || locale.split('-')[0] === LocalizationUtil.localToLanguage(test)\n          ))\n        .filter((entry): entry is HightideTranslationLocales => entry !== undefined)\n\n      if (matchingBrowserLanguage.length === 0) return\n\n      const firstMatch = matchingBrowserLanguage[0]\n      setLocalePreference(firstMatch)\n    }\n    detectLanguage()\n\n    window.addEventListener('languagechange', detectLanguage)\n    return () => {\n      window.removeEventListener('languagechange', detectLanguage)\n    }\n  }, [])\n\n  return (\n    <LocaleContext.Provider value={{\n      locale: resolvedLocale,\n      setLocale: (newLocale) => {\n        if (locale !== 'system') {\n          console.warn('LocaleProvider: Attempting to change the ' +\n            \"locale while setting a fixed locale won't have any effect. \" +\n            'Change the locale provided to the LocaleProvider instead.')\n        }\n        setStoredLocale(newLocale)\n      },\n      timeZone: resolvedTimeZone,\n      setTimeZone: (newTimeZone) => {\n        if (timeZone !== undefined) {\n          console.warn('LocaleProvider: Attempting to change the ' +\n            \"time zone while setting a fixed time zone won't have any effect. \" +\n            'Change the timeZone provided to the LocaleProvider instead.')\n          return\n        }\n        if (newTimeZone === undefined) {\n          deleteStoredTimeZone()\n        } else {\n          setStoredTimeZone(newTimeZone)\n        }\n      },\n      is24HourFormat: resolvedIs24HourFormat,\n      setIs24HourFormat: (newIs24HourFormat) => {\n        if (is24HourFormat !== undefined) {\n          console.warn('LocaleProvider: Attempting to change the ' +\n            \"hour format while setting a fixed hour format won't have any effect. \" +\n            'Change the is24HourFormat provided to the LocaleProvider instead.')\n          return\n        }\n        if (newIs24HourFormat === undefined) {\n          deleteStoredIs24HourFormat()\n        } else {\n          setStoredIs24HourFormat(newIs24HourFormat)\n        }\n      },\n    }}>\n      {children}\n    </LocaleContext.Provider>\n  )\n}\n\nexport const useLocale = () => {\n  const context = useContext(LocaleContext)\n  if (!context) {\n    throw new Error('useLocale must be used within LocaleContext. Try adding a LocaleProvider around your app.')\n  }\n  return context\n}\n\nexport const useTimeZone = () => {\n  const context = useContext(LocaleContext)\n  if (!context) {\n    throw new Error('useTimeZone must be used within LocaleContext. Try adding a LocaleProvider around your app.')\n  }\n  return { timeZone: context.timeZone, setTimeZone: context.setTimeZone }\n}\n\nexport const useDateTimeFormat = () => {\n  const context = useContext(LocaleContext)\n  return {\n    is24HourFormat: context?.is24HourFormat ?? true,\n    timeZone: context?.timeZone,\n  }\n}\n\nexport const useLanguage = () => {\n  const context = useContext(LocaleContext)\n  if (!context) {\n    throw new Error('useLanguage must be used within LocaleContext. Try adding a LocaleProvider around your app.')\n  }\n  return { language: LocalizationUtil.localToLanguage(context.locale) }\n}\n","'use client'\n\nimport type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { StorageListener } from '../utils/StorageListener'\n\ninterface UseStorageProps<T> {\n  key: string,\n  defaultValue: T,\n  storageType?: 'local' | 'session',\n  serialize?: (value: T) => string,\n  deserialize?: (value: string) => T,\n  /** Whether to listen for storage events and update the value automatically. Defaults to true. */\n  listen?: boolean,\n}\n\ninterface UseStorageResult<T> {\n  value: T,\n  setValue: Dispatch<SetStateAction<T>>,\n  deleteValue: () => void,\n}\n\nexport const useStorage = <T>({\n  key,\n  defaultValue,\n  storageType = 'local',\n  serialize = JSON.stringify,\n  deserialize = JSON.parse,\n  listen = true\n}: UseStorageProps<T>): UseStorageResult<T> => {\n  const lastSerializedRef = useRef<string | null>(null)\n\n  const storageService: Storage | undefined = useMemo(() => {\n    if(typeof window === 'undefined') return undefined\n    if (storageType === 'local') {\n      return window.localStorage\n    }\n    return window.sessionStorage\n  }, [storageType])\n\n  const get = useCallback((): T => {\n    if (!storageService) {\n      return defaultValue\n    }\n    try {\n      const value = storageService.getItem(key)\n      if(!value) {\n        return defaultValue\n      }\n      return deserialize(value)\n    } catch (error) {\n      console.warn('useStorage: Error while reading or deserializing the stored value. Make sure your deserialize function is correct.', error)\n      return defaultValue\n    }\n  }, [storageService, key, deserialize, defaultValue])\n\n  const [value, setValue] = useState<T>(get)\n\n  useEffect(() => {\n    if(!storageService) return\n    let serializedValue: string\n    try {\n      serializedValue = serialize(value)\n    } catch (error) {\n      console.warn('useStorage: Error while serializing the value. Make sure your serialize function is correct.', error)\n      return\n    }\n\n    if(serializedValue === lastSerializedRef.current) return\n\n    lastSerializedRef.current = serializedValue\n    try {\n      storageService?.setItem(key, serialize(value))\n    } catch (error) {\n      console.warn('useStorage: Error while writing the value. Make sure your serialize function is correct.', error)\n    }\n  }, [value, serialize, storageService, key])\n\n  const deleteValue = useCallback(() => {\n    try {\n      storageService?.removeItem(key)\n    } catch {\n      console.warn('useStorage: Error while deleting the value.')\n    }\n    setValue(defaultValue)\n  }, [storageService, key, setValue, defaultValue])\n\n  useEffect(() => {\n    if (!listen) return\n    if (!storageService) return\n\n    const listener = StorageListener.getInstance()\n\n    return listener.subscribe(storageService, key, (raw) => {\n      if (raw === null) {\n        lastSerializedRef.current = null\n        setValue(defaultValue)\n        return\n      }\n\n      try {\n        lastSerializedRef.current = raw\n        setValue(deserialize(raw))\n      } catch (error) {\n        console.warn('useStorage: deserialization failed', error)\n      }\n    })\n  }, [storageService, key, deserialize, defaultValue, listen])\n\n  return { value, setValue, deleteValue }\n}","'use client'\n\nexport type StorageSubscriber = (raw: string | null) => void\n\nexport class StorageListener {\n  private static instance: StorageListener | null = null\n\n  private localSubscriptions = new Map<string, Set<StorageSubscriber>>()\n  private sessionSubscriptions = new Map<string, Set<StorageSubscriber>>()\n  private initialized = false\n\n  private constructor() {}\n\n  static getInstance(): StorageListener {\n    if (!this.instance) {\n      this.instance = new StorageListener()\n    }\n    return this.instance\n  }\n\n  subscribe(storage: Storage, key: string, cb: StorageSubscriber): () => void {\n    this.init()\n\n    const registry = this.getRegistry(storage)\n    let subs = registry.get(key)\n    if (!subs) {\n      subs = new Set()\n      registry.set(key, subs)\n    }\n\n    subs.add(cb)\n\n    return () => {\n      subs!.delete(cb)\n      if (subs!.size === 0) {\n        registry.delete(key)\n      }\n    }\n  }\n\n  private init() {\n    if (this.initialized || typeof window === 'undefined') return\n    this.initialized = true\n\n    window.addEventListener('storage', this.handleEvent)\n  }\n\n  private handleEvent = (event: StorageEvent) => {\n    if (!event.key || !event.storageArea) return\n\n    const registry = this.getRegistry(event.storageArea)\n    const subs = registry.get(event.key)\n    if (!subs) return\n\n    for (const cb of subs) {\n      cb(event.newValue)\n    }\n  }\n\n  private getRegistry(storage: Storage) {\n    return storage === window.localStorage\n      ? this.localSubscriptions\n      : this.sessionSubscriptions\n  }\n}\n","// AUTO-GENERATED. DO NOT EDIT.\n/* eslint-disable @stylistic/quote-props */\n/* eslint-disable no-useless-escape */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { Translation } from '@helpwave/internationalization'\nimport { TranslationGen } from '@helpwave/internationalization'\n\nexport const hightideTranslationLocales = ['de-DE', 'en-US'] as const\n\nexport type HightideTranslationLocales = typeof hightideTranslationLocales[number]\n\nexport type HightideTranslationEntries = {\n  'add': string,\n  'addFilter': string,\n  'addSorting': string,\n  'addTime': string,\n  'after': string,\n  'age': string,\n  'all': string,\n  'apply': string,\n  'back': string,\n  'before': string,\n  'between': string,\n  'cancel': string,\n  'carousel': string,\n  'caseSensitive': string,\n  'change': string,\n  'changeColumnDisplay': string,\n  'changePinning': string,\n  'changeSelection': string,\n  'changeVisibility': string,\n  'chooseLanguage': string,\n  'chooseSlide': string,\n  'chooseTheme': string,\n  'clear': string,\n  'clearValue': string,\n  'click': string,\n  'clickToCopy': string,\n  'clickToSelect': string,\n  'close': string,\n  'closeDialog': string,\n  'columnPicker': string,\n  'columnPickerDescription': string,\n  'columns': string,\n  'confirm': string,\n  'contains': string,\n  'copied': string,\n  'copy': string,\n  'create': string,\n  'date': string,\n  'dayPeriod': string,\n  'decline': string,\n  'decreaseSortingPriority': string,\n  'decreaseValue': string,\n  'delete': string,\n  'discard': string,\n  'discardChanges': string,\n  'done': string,\n  'edit': string,\n  'editFilter': string,\n  'endDate': string,\n  'endsWith': string,\n  'enterText': string,\n  'entriesPerPage': string,\n  'entryDate': string,\n  'equals': string,\n  'error': string,\n  'errorOccurred': string,\n  'exit': string,\n  'fieldRequiredError': string,\n  'filter': string,\n  'filterNonWhitespace': string,\n  'filterNotUndefined': string,\n  'filterOptions': string,\n  'filterUndefined': string,\n  'first': string,\n  'goodToSeeYou': string,\n  'greaterThan': string,\n  'greaterThanOrEqual': string,\n  'hideAllColumns': string,\n  'hideColumn': string,\n  'identifier': string,\n  'increaseSortingPriority': string,\n  'increaseValue': string,\n  'invalidEmail': string,\n  'invalidEmailError': string,\n  'isFalse': string,\n  'isNotUndefined': string,\n  'isTrue': string,\n  'isUndefined': string,\n  'language': string,\n  'last': string,\n  'less': string,\n  'lessThan': string,\n  'lessThanOrEqual': string,\n  'loading': string,\n  'locale': string,\n  'max': string,\n  'maxLengthError': string,\n  'menu': string,\n  'min': string,\n  'minLengthError': string,\n  'more': string,\n  'moveDown': string,\n  'moveUp': string,\n  'name': string,\n  'next': string,\n  'no': string,\n  'noColumn': string,\n  'noData': string,\n  'none': string,\n  'noParameterRequired': string,\n  'notBetween': string,\n  'notContains': string,\n  'notEmpty': string,\n  'notEquals': string,\n  'nothingFound': string,\n  'nResultsFound': (values: { count: number }) => string,\n  'of': string,\n  'onOrAfter': string,\n  'onOrBefore': string,\n  'optional': string,\n  'outOfRangeNumber': (values: { min: number, max: number }) => string,\n  'outOfRangeSelectionItems': (values: { min: number, max: number }) => string,\n  'outOfRangeString': (values: { min: number, max: number }) => string,\n  'parameter': string,\n  'pauseTrace': string,\n  'pinLeft': string,\n  'pinned': string,\n  'pinRight': string,\n  'pinToLeft': string,\n  'pinToRight': string,\n  'playTrace': string,\n  'pleaseWait': string,\n  'previous': string,\n  'pThemes': (values: { count: number }) => string,\n  'rBetween': (values: { value1: string, value2: string }) => string,\n  'rContains': (values: { value: string }) => string,\n  'remove': string,\n  'removeFilter': string,\n  'removeProperty': string,\n  'rEndsWith': (values: { value: string }) => string,\n  'rEquals': (values: { value: string }) => string,\n  'required': string,\n  'reset': string,\n  'rGreaterThan': (values: { value: string }) => string,\n  'rGreaterThanOrEqual': (values: { value: string }) => string,\n  'rLessThan': (values: { value: string }) => string,\n  'rLessThanOrEqual': (values: { value: string }) => string,\n  'rNotBetween': (values: { value1: string, value2: string }) => string,\n  'rNotContains': (values: { value: string }) => string,\n  'rNotEquals': (values: { value: string }) => string,\n  'rSortingOrderAfter': (values: { otherSortings: number }) => string,\n  'rStartsWith': (values: { value: string }) => string,\n  'save': string,\n  'saved': string,\n  'sDateTimeSelect': (values: { datetimeMode: string }) => string,\n  'search': string,\n  'searchResults': string,\n  'select': string,\n  'selection': string,\n  'selectOption': string,\n  'sGender': (values: { gender: string }) => string,\n  'show': string,\n  'showAllColumns': string,\n  'showColumn': string,\n  'showLess': string,\n  'showMore': string,\n  'showSlide': (values: { index: number }) => string,\n  'slide': string,\n  'slideNavigation': string,\n  'slideOf': (values: { index: number, length: number }) => string,\n  'sortAsc': string,\n  'sortDesc': string,\n  'sorting': string,\n  'speed': string,\n  'sSortingState': (values: { sortDirection: string }) => string,\n  'startDate': string,\n  'startsWith': string,\n  'sThemeMode': (values: { theme: string }) => string,\n  'street': string,\n  'submit': string,\n  'success': string,\n  'tag': string,\n  'tags': string,\n  'text': string,\n  'time.ago': string,\n  'time.agoDays': (values: { days: number }) => string,\n  'time.april': string,\n  'time.august': string,\n  'time.century': (values: { count: number }) => string,\n  'time.day': (values: { count: number }) => string,\n  'time.decade': (values: { count: number }) => string,\n  'time.december': string,\n  'time.february': string,\n  'time.hour': (values: { count: number }) => string,\n  'time.in': string,\n  'time.inDays': (values: { days: number }) => string,\n  'time.january': string,\n  'time.july': string,\n  'time.june': string,\n  'time.march': string,\n  'time.may': string,\n  'time.microsecond': (values: { count: number }) => string,\n  'time.millisecond': (values: { count: number }) => string,\n  'time.minute': (values: { count: number }) => string,\n  'time.month': (values: { count: number }) => string,\n  'time.nanosecond': (values: { count: number }) => string,\n  'time.nextMonth': string,\n  'time.november': string,\n  'time.october': string,\n  'time.previousMonth': string,\n  'time.second': (values: { count: number }) => string,\n  'time.september': string,\n  'time.sMonthName': (values: { month: string }) => string,\n  'time.today': string,\n  'time.tomorrow': string,\n  'time.year': (values: { count: number }) => string,\n  'time.yesterday': string,\n  'tooFewSelectionItems': (values: { min: number }) => string,\n  'tooLong': (values: { max: number }) => string,\n  'tooManySelectionItems': (values: { max: number }) => string,\n  'tooShort': (values: { min: number }) => string,\n  'unknown': string,\n  'unpin': string,\n  'unsavedChanges': string,\n  'unsavedChangesSaveQuestion': string,\n  'update': string,\n  'value': string,\n  'welcome': string,\n  'withoutTime': string,\n  'yes': string,\n}\n\nexport const hightideTranslation: Translation<HightideTranslationLocales, Partial<HightideTranslationEntries>> = {\n  'de-DE': {\n    'add': `Hinzufügen`,\n    'addFilter': `Filter hinzufügen`,\n    'addSorting': `Sortierung hinzufügen`,\n    'addTime': `Uhrzeit hinzufügen`,\n    'after': `Nach`,\n    'age': `Alter`,\n    'all': `Alle`,\n    'apply': `Anwenden`,\n    'back': `Zurück`,\n    'before': `Vor`,\n    'between': `Zwischen`,\n    'cancel': `Abbrechen`,\n    'carousel': `Karussell`,\n    'caseSensitive': `Groß-/Klein beachten`,\n    'change': `Ändern`,\n    'changeColumnDisplay': `Spaltenanzeige ändern`,\n    'changePinning': `Anheften ändern`,\n    'changeSelection': `Auswahl ändern`,\n    'changeVisibility': `Sichtbarkeit ändern`,\n    'chooseLanguage': `Wähle deine bevorzugte Sprache`,\n    'chooseSlide': `Wähle die angezeigte Slide aus`,\n    'chooseTheme': `Wähle dein bevorzugtes Farbschema.`,\n    'clear': `Löschen`,\n    'clearValue': `Wert löschen`,\n    'click': `Klicken`,\n    'clickToCopy': `Zum kopieren klicken`,\n    'clickToSelect': `Zum Auswählen drücken`,\n    'close': `Schließen`,\n    'closeDialog': `Dialog schließen`,\n    'columnPicker': `Spaltenauswahl`,\n    'columnPickerDescription': `Spalten neu anordnen und ein- oder ausblenden`,\n    'columns': `Spalten`,\n    'confirm': `Bestätigen`,\n    'contains': `Enthält`,\n    'copied': `Kopiert`,\n    'copy': `Kopieren`,\n    'create': `Erstellen`,\n    'date': `Datum`,\n    'dayPeriod': `AM/PM`,\n    'decline': `Ablehnen`,\n    'decreaseSortingPriority': `Sortierpriorität verringern`,\n    'decreaseValue': `Wert verringern`,\n    'delete': `Löschen`,\n    'discard': `Verwerfen`,\n    'discardChanges': `Änderungen Verwerfen`,\n    'done': `Fertig`,\n    'edit': `Bearbeiten`,\n    'editFilter': `Filter bearbeiten`,\n    'endDate': `Ende`,\n    'endsWith': `Endet mit`,\n    'enterText': `Text hier eingeben`,\n    'entriesPerPage': `Einträge pro Seite`,\n    'entryDate': `Eintragsdatum`,\n    'equals': `Gleich`,\n    'error': `Fehler`,\n    'errorOccurred': `Ein Fehler ist aufgetreten`,\n    'exit': `Beenden`,\n    'fieldRequiredError': `Dieses Feld ist erforderlich.`,\n    'filter': `Filter`,\n    'filterNonWhitespace': `Nicht leer`,\n    'filterNotUndefined': `Definiert`,\n    'filterOptions': `Optionen filtern`,\n    'filterUndefined': `Undefiniert`,\n    'first': `Erste`,\n    'goodToSeeYou': `Schön dich zu sehen`,\n    'greaterThan': `Größer als`,\n    'greaterThanOrEqual': `Größer oder gleich`,\n    'hideAllColumns': `Alle Spalten ausblenden`,\n    'hideColumn': `Spalte ausblenden`,\n    'identifier': `Identifikator`,\n    'increaseSortingPriority': `Sortierpriorität erhöhen`,\n    'increaseValue': `Wert erhöhen`,\n    'invalidEmail': `Die E-Mail ist ungültig.`,\n    'invalidEmailError': `Bitte geben Sie eine gültige E-Mail-Adresse ein.`,\n    'isFalse': `Ist falsch`,\n    'isNotUndefined': `Ist definiert`,\n    'isTrue': `Ist wahr`,\n    'isUndefined': `Ist undefiniert`,\n    'language': `Sprache`,\n    'last': `Letzte`,\n    'less': `Weniger`,\n    'lessThan': `Kleiner als`,\n    'lessThanOrEqual': `Kleiner oder gleich`,\n    'loading': `Lädt`,\n    'locale': `Locale`,\n    'max': `Max`,\n    'maxLengthError': `Maximale Länge überschritten.`,\n    'menu': `Menü`,\n    'min': `Min`,\n    'minLengthError': `Mindestlänge nicht erreicht.`,\n    'more': `Mehr`,\n    'moveDown': `Nach unten`,\n    'moveUp': `Nach oben`,\n    'name': `Name`,\n    'next': `Weiter`,\n    'no': `Nein`,\n    'noColumn': `Keine Spalte`,\n    'noData': `Keine Daten`,\n    'none': `Nichts`,\n    'noParameterRequired': `Kein Parameter erforderlich`,\n    'notBetween': `Nicht zwischen`,\n    'notContains': `Enthält nicht`,\n    'notEmpty': `Das Feld darf nicht leer sein.`,\n    'notEquals': `Nicht gleich`,\n    'nothingFound': `Nichts gefunden`,\n    'nResultsFound': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `${count} Ergebnis gefunden`,\n        'other': `${count} Ergebnisse gefunden`,\n      })\n    },\n    'of': `von`,\n    'onOrAfter': `Nach oder Gleich`,\n    'onOrBefore': `Vor oder Gleich`,\n    'optional': `Optional`,\n    'outOfRangeNumber': ({ min, max }): string => {\n      return `Der Wert muss zwischen ${min} und ${max} liegen.`\n    },\n    'outOfRangeSelectionItems': ({ min, max }): string => {\n      return `Es müssen zwischen ${min} und ${max} Elemente ausgewählt werden.`\n    },\n    'outOfRangeString': ({ min, max }): string => {\n      return `Der Wert muss zwischen ${min} und ${max} Zeichen lang sein.`\n    },\n    'parameter': `Parameter`,\n    'pauseTrace': `Trace pausieren`,\n    'pinLeft': `Links anheften`,\n    'pinned': `Angeheftet`,\n    'pinRight': `Rechts anheften`,\n    'pinToLeft': `Links anheften`,\n    'pinToRight': `Rechts anheften`,\n    'playTrace': `Trace abspielen`,\n    'pleaseWait': `Bitte warten...`,\n    'previous': `Vorherige`,\n    'pThemes': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Farbschema`,\n        'other': `Farbschemas`,\n      })\n    },\n    'rBetween': ({ value1, value2 }): string => {\n      return `Zwischen ${value1} und ${value2}`\n    },\n    'rContains': ({ value }): string => {\n      return `Enthält ${value}`\n    },\n    'remove': `Entfernen`,\n    'removeFilter': `Filter entfernen`,\n    'removeProperty': `Eigenschaft entfernen`,\n    'rEndsWith': ({ value }): string => {\n      return `Endet mit ${value}`\n    },\n    'rEquals': ({ value }): string => {\n      return `Gleich ${value}`\n    },\n    'required': `Erforderlich`,\n    'reset': `Zurücksetzen`,\n    'rGreaterThan': ({ value }): string => {\n      return `Größer als ${value}`\n    },\n    'rGreaterThanOrEqual': ({ value }): string => {\n      return `Größer oder gleich ${value}`\n    },\n    'rLessThan': ({ value }): string => {\n      return `Kleiner als ${value}`\n    },\n    'rLessThanOrEqual': ({ value }): string => {\n      return `Kleiner oder gleich ${value}`\n    },\n    'rNotBetween': ({ value1, value2 }): string => {\n      return `Nicht zwischen ${value1} und ${value2}`\n    },\n    'rNotContains': ({ value }): string => {\n      return `Enthält nicht ${value}`\n    },\n    'rNotEquals': ({ value }): string => {\n      return `Nicht gleich ${value}`\n    },\n    'rSortingOrderAfter': ({ otherSortings }): string => {\n      let _out: string = ''\n      _out += `Angewendet `\n      _out += TranslationGen.resolvePlural(otherSortings, {\n        '=0': `als primäre Sortierung`,\n        '=1': `nach einer anderen Sortierung`,\n        'other': `nach ${otherSortings} anderen Sortierungen`,\n      })\n      return _out\n    },\n    'rStartsWith': ({ value }): string => {\n      return `Beginnt mit ${value}`\n    },\n    'save': `Speichern`,\n    'saved': `Gespeichert`,\n    'sDateTimeSelect': ({ datetimeMode }): string => {\n      return TranslationGen.resolveSelect(datetimeMode, {\n        'time': `Zeit auswählen`,\n        'date': `Datum auswählen`,\n        'dateTime': `Datum und Uhrzeit auswählen`,\n      })\n    },\n    'search': `Suche`,\n    'searchResults': `Suchergebnisse`,\n    'select': `Select`,\n    'selection': `Auswahl`,\n    'selectOption': `Option auswählen`,\n    'sGender': ({ gender }): string => {\n      return TranslationGen.resolveSelect(gender, {\n        'male': `Männlich`,\n        'female': `Weiblich`,\n        'other': `Divers`,\n      })\n    },\n    'show': `Anzeigen`,\n    'showAllColumns': `Alle Spalten einblenden`,\n    'showColumn': `Spalte einblenden`,\n    'showLess': `Weniger anzeigen`,\n    'showMore': `Mehr anzeigen`,\n    'showSlide': ({ index }): string => {\n      return `Zeige Slide ${index}`\n    },\n    'slide': `Slide`,\n    'slideNavigation': `Slide Navigation`,\n    'slideOf': ({ index, length }): string => {\n      return `Slide ${index} von ${length} slides`\n    },\n    'sortAsc': `ASC`,\n    'sortDesc': `DESC`,\n    'sorting': `Sortierung`,\n    'speed': `Geschwindigkeit`,\n    'sSortingState': ({ sortDirection }): string => {\n      return TranslationGen.resolveSelect(sortDirection, {\n        'asc': `Sortierung (Aktuell Aufsteigend)`,\n        'desc': `Sortierung (Aktuell Absteigend)`,\n        'other': `Sortierung (Aktuell Keine)`,\n      })\n    },\n    'startDate': `Start`,\n    'startsWith': `Beginnt mit`,\n    'sThemeMode': ({ theme }): string => {\n      return TranslationGen.resolveSelect(theme, {\n        'dark': `Dunkel`,\n        'light': `Hell`,\n        'system': `System`,\n      })\n    },\n    'street': `Straße`,\n    'submit': `Abschicken`,\n    'success': `Erfolg`,\n    'tag': `Tag`,\n    'tags': `Tags`,\n    'text': `Text`,\n    'time.ago': `vor`,\n    'time.agoDays': ({ days }): string => {\n      return `var ${days} Tagen`\n    },\n    'time.april': `April`,\n    'time.august': `August`,\n    'time.century': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Jahrhundert`,\n        'other': `Jahrhunderte`,\n      })\n    },\n    'time.day': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Tag`,\n        'other': `Tage`,\n      })\n    },\n    'time.decade': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Jahrzehnt`,\n        'other': `Jahrzehnte`,\n      })\n    },\n    'time.december': `December`,\n    'time.february': `Febuar`,\n    'time.hour': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Stunde`,\n        'other': `Stunden`,\n      })\n    },\n    'time.in': `in`,\n    'time.inDays': ({ days }): string => {\n      return `in ${days} Tagen`\n    },\n    'time.january': `Januar`,\n    'time.july': `Juli`,\n    'time.june': `Juni`,\n    'time.march': `März`,\n    'time.may': `Mai`,\n    'time.microsecond': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Mikrosekunde`,\n        'other': `Mikrosekunden`,\n      })\n    },\n    'time.millisecond': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Millisekunde`,\n        'other': `Millisekunden`,\n      })\n    },\n    'time.minute': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Minute`,\n        'other': `Minuten`,\n      })\n    },\n    'time.month': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Monat`,\n        'other': `Monate`,\n      })\n    },\n    'time.nanosecond': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Nanosekunde`,\n        'other': `Nanosekunden`,\n      })\n    },\n    'time.nextMonth': `Nächster Monat`,\n    'time.november': `November`,\n    'time.october': `October`,\n    'time.previousMonth': `Vorheriger Monat`,\n    'time.second': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Sekunde`,\n        'other': `Sekunden`,\n      })\n    },\n    'time.september': `September`,\n    'time.sMonthName': ({ month }): string => {\n      return TranslationGen.resolveSelect(month, {\n        'january': `Januar`,\n        'february': `Februar`,\n        'march': `März`,\n        'april': `April`,\n        'may': `Mai`,\n        'june': `Juni`,\n        'july': `Juli`,\n        'august': `August`,\n        'september': `September`,\n        'october': `Oktober`,\n        'november': `November`,\n        'december': `Dezember`,\n        'other': `Unbekannter Monat`,\n      })\n    },\n    'time.today': `Heute`,\n    'time.tomorrow': `Morgen`,\n    'time.year': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Jahr`,\n        'other': `Jahre`,\n      })\n    },\n    'time.yesterday': `Gestern`,\n    'tooFewSelectionItems': ({ min }): string => {\n      return `Es müssen mindestens ${min} Elemente ausgewählt werden.`\n    },\n    'tooLong': ({ max }): string => {\n      return `Der Wert darf höchstens ${max} Zeichen enthalten.`\n    },\n    'tooManySelectionItems': ({ max }): string => {\n      return `Es müssen maximal ${max} Elemente ausgewählt werden.`\n    },\n    'tooShort': ({ min }): string => {\n      return `Der Wert muss mindestens ${min} Zeichen enthalten.`\n    },\n    'unknown': `Unbekannt`,\n    'unpin': `Loslösen`,\n    'unsavedChanges': `Ungespeicherte Änderungen`,\n    'unsavedChangesSaveQuestion': `Möchtest du die Änderungen speichern?`,\n    'update': `Update`,\n    'value': `Wert`,\n    'welcome': `Willkommen`,\n    'withoutTime': `Ohne Uhrzeit`,\n    'yes': `Ja`\n  },\n  'en-US': {\n    'add': `Add`,\n    'addFilter': `Add filter`,\n    'addSorting': `Add sorting`,\n    'addTime': `Add Time`,\n    'after': `After`,\n    'age': `Age`,\n    'all': `All`,\n    'apply': `Apply`,\n    'back': `Back`,\n    'before': `Before`,\n    'between': `Between`,\n    'cancel': `Cancel`,\n    'carousel': `Carousel`,\n    'caseSensitive': `Case Sensitive`,\n    'change': `Change`,\n    'changeColumnDisplay': `Change column display`,\n    'changePinning': `Change pinning`,\n    'changeSelection': `Change selection`,\n    'changeVisibility': `Change visibility`,\n    'chooseLanguage': `Choose your language`,\n    'chooseSlide': `Choose slide to display`,\n    'chooseTheme': `Choose your preferred color theme.`,\n    'clear': `Clear`,\n    'clearValue': `Clear Value`,\n    'click': `Click`,\n    'clickToCopy': `Click to Copy`,\n    'clickToSelect': `Click to select`,\n    'close': `Close`,\n    'closeDialog': `Close dialog`,\n    'columnPicker': `Column Picker`,\n    'columnPickerDescription': `Reorder and show or hide columns`,\n    'columns': `Columns`,\n    'confirm': `Confirm`,\n    'contains': `Contains`,\n    'copied': `Copied`,\n    'copy': `Copy`,\n    'create': `Create`,\n    'date': `Date`,\n    'dayPeriod': `AM/PM`,\n    'decline': `Decline`,\n    'decreaseSortingPriority': `Decrease sorting priority`,\n    'decreaseValue': `Decrease value`,\n    'delete': `Delete`,\n    'discard': `Discard`,\n    'discardChanges': `Discard Changes`,\n    'done': `Done`,\n    'edit': `Edit`,\n    'editFilter': `Edit filter`,\n    'endDate': `End`,\n    'endsWith': `Ends with`,\n    'enterText': `Enter text here`,\n    'entriesPerPage': `Entries per page`,\n    'entryDate': `Entry Date`,\n    'equals': `Equals`,\n    'error': `Error`,\n    'errorOccurred': `An error occurred`,\n    'exit': `Exit`,\n    'fieldRequiredError': `This field is required.`,\n    'filter': `Filter`,\n    'filterNonWhitespace': `Non-whitespace`,\n    'filterNotUndefined': `Defined`,\n    'filterOptions': `Filter options`,\n    'filterUndefined': `Undefined`,\n    'first': `First`,\n    'goodToSeeYou': `Good to see you`,\n    'greaterThan': `Greater than`,\n    'greaterThanOrEqual': `Greater than or equal`,\n    'hideAllColumns': `Hide all columns`,\n    'hideColumn': `Hide column`,\n    'identifier': `Identifier`,\n    'increaseSortingPriority': `Increase sorting priority`,\n    'increaseValue': `Increase value`,\n    'invalidEmail': `The email is not valid.`,\n    'invalidEmailError': `Please enter a valid email address.`,\n    'isFalse': `Is false`,\n    'isNotUndefined': `Is defined`,\n    'isTrue': `Is true`,\n    'isUndefined': `Is undefined`,\n    'language': `Language`,\n    'last': `Last`,\n    'less': `Less`,\n    'lessThan': `Less than`,\n    'lessThanOrEqual': `Less than or equal`,\n    'loading': `Loading`,\n    'locale': `Locale`,\n    'max': `Max`,\n    'maxLengthError': `Maximum length exceeded.`,\n    'menu': `Menu`,\n    'min': `Min`,\n    'minLengthError': `Minimum length not met.`,\n    'more': `More`,\n    'moveDown': `Move down`,\n    'moveUp': `Move up`,\n    'name': `Name`,\n    'next': `Next`,\n    'no': `No`,\n    'noColumn': `No column`,\n    'noData': `No data`,\n    'none': `None`,\n    'noParameterRequired': `No parameter required`,\n    'notBetween': `Not between`,\n    'notContains': `Not contains`,\n    'notEmpty': `The field cannot be empty.`,\n    'notEquals': `Not equals`,\n    'nothingFound': `Nothing found`,\n    'nResultsFound': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `${count} result found`,\n        'other': `${count} results found`,\n      })\n    },\n    'of': `of`,\n    'onOrAfter': `After or Equal`,\n    'onOrBefore': `Before or Equal`,\n    'optional': `Optional`,\n    'outOfRangeNumber': ({ min, max }): string => {\n      return `The value must be between ${min} and ${max}.`\n    },\n    'outOfRangeSelectionItems': ({ min, max }): string => {\n      return `Between ${min} and ${max} items must be selected.`\n    },\n    'outOfRangeString': ({ min, max }): string => {\n      return `The value needs to have between ${min} and ${max} characters.`\n    },\n    'parameter': `Parameter`,\n    'pauseTrace': `Pause trace`,\n    'pinLeft': `Pin to left`,\n    'pinned': `Pinned`,\n    'pinRight': `Pin to right`,\n    'pinToLeft': `Pin to left`,\n    'pinToRight': `Pin to right`,\n    'playTrace': `Play trace`,\n    'pleaseWait': `Please wait...`,\n    'previous': `Previous`,\n    'pThemes': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Theme`,\n        'other': `Themes`,\n      })\n    },\n    'rBetween': ({ value1, value2 }): string => {\n      return `Between ${value1} and ${value2}`\n    },\n    'rContains': ({ value }): string => {\n      return `Contains ${value}`\n    },\n    'remove': `Remove`,\n    'removeFilter': `Remove filter`,\n    'removeProperty': `Remove Property`,\n    'rEndsWith': ({ value }): string => {\n      return `Ends with ${value}`\n    },\n    'rEquals': ({ value }): string => {\n      return `Equals ${value}`\n    },\n    'required': `Required`,\n    'reset': `Reset`,\n    'rGreaterThan': ({ value }): string => {\n      return `Greater than ${value}`\n    },\n    'rGreaterThanOrEqual': ({ value }): string => {\n      return `Greater than or equal ${value}`\n    },\n    'rLessThan': ({ value }): string => {\n      return `Less than ${value}`\n    },\n    'rLessThanOrEqual': ({ value }): string => {\n      return `Less than or equal ${value}`\n    },\n    'rNotBetween': ({ value1, value2 }): string => {\n      return `Not between ${value1} and ${value2}`\n    },\n    'rNotContains': ({ value }): string => {\n      return `Not contains ${value}`\n    },\n    'rNotEquals': ({ value }): string => {\n      return `Not equals ${value}`\n    },\n    'rSortingOrderAfter': ({ otherSortings }): string => {\n      let _out: string = ''\n      _out += `Applied `\n      _out += TranslationGen.resolvePlural(otherSortings, {\n        '=0': `as the first sorting`,\n        '=1': `after ${otherSortings} other sorting`,\n        'other': `after ${otherSortings} other sortings`,\n      })\n      return _out\n    },\n    'rStartsWith': ({ value }): string => {\n      return `Starts with ${value}`\n    },\n    'save': `Save`,\n    'saved': `Saved`,\n    'sDateTimeSelect': ({ datetimeMode }): string => {\n      return TranslationGen.resolveSelect(datetimeMode, {\n        'time': `Select Time`,\n        'date': `Select Date`,\n        'dateTime': `Select Date and Time`,\n      })\n    },\n    'search': `Search`,\n    'searchResults': `Search results`,\n    'select': `Select`,\n    'selection': `Selection`,\n    'selectOption': `Select an option`,\n    'sGender': ({ gender }): string => {\n      return TranslationGen.resolveSelect(gender, {\n        'male': `Male`,\n        'female': `Female`,\n        'other': `Other`,\n      })\n    },\n    'show': `Show`,\n    'showAllColumns': `Show all columns`,\n    'showColumn': `Show column`,\n    'showLess': `Show less`,\n    'showMore': `Show more`,\n    'showSlide': ({ index }): string => {\n      return `Show Slide ${index}`\n    },\n    'slide': `Slide`,\n    'slideNavigation': `Slide navigation`,\n    'slideOf': ({ index, length }): string => {\n      return `Slide ${index} of ${length} slides`\n    },\n    'sortAsc': `ASC`,\n    'sortDesc': `DESC`,\n    'sorting': `Sorting`,\n    'speed': `Speed`,\n    'sSortingState': ({ sortDirection }): string => {\n      return TranslationGen.resolveSelect(sortDirection, {\n        'asc': `Sorting (Currently Ascending)`,\n        'desc': `Sorting (Currently Descending)`,\n        'other': `Sorting (Currently None)`,\n      })\n    },\n    'startDate': `Start`,\n    'startsWith': `Starts with`,\n    'sThemeMode': ({ theme }): string => {\n      return TranslationGen.resolveSelect(theme, {\n        'dark': `Dark`,\n        'light': `Light`,\n        'system': `System`,\n      })\n    },\n    'street': `Street`,\n    'submit': `Submit`,\n    'success': `Success`,\n    'tag': `Tag`,\n    'tags': `Tags`,\n    'text': `Text`,\n    'time.ago': `ago`,\n    'time.agoDays': ({ days }): string => {\n      return `days ${days} ago`\n    },\n    'time.april': `April`,\n    'time.august': `August`,\n    'time.century': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Century`,\n        'other': `Centuries`,\n      })\n    },\n    'time.day': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Day`,\n        'other': `Days`,\n      })\n    },\n    'time.decade': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Decade`,\n        'other': `Decades`,\n      })\n    },\n    'time.december': `December`,\n    'time.february': `Febuary`,\n    'time.hour': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Hour`,\n        'other': `Hours`,\n      })\n    },\n    'time.in': `in`,\n    'time.inDays': ({ days }): string => {\n      return `in ${days} days`\n    },\n    'time.january': `January`,\n    'time.july': `July`,\n    'time.june': `June`,\n    'time.march': `March`,\n    'time.may': `May`,\n    'time.microsecond': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Microsecond`,\n        'other': `Microseconds`,\n      })\n    },\n    'time.millisecond': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Millisecond`,\n        'other': `Milliseconds`,\n      })\n    },\n    'time.minute': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Minute`,\n        'other': `Minutes`,\n      })\n    },\n    'time.month': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Month`,\n        'other': `Months`,\n      })\n    },\n    'time.nanosecond': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Nanosecond`,\n        'other': `Nanoseconds`,\n      })\n    },\n    'time.nextMonth': `Next month`,\n    'time.november': `November`,\n    'time.october': `October`,\n    'time.previousMonth': `Previous month`,\n    'time.second': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Second`,\n        'other': `Seconds`,\n      })\n    },\n    'time.september': `September`,\n    'time.sMonthName': ({ month }): string => {\n      return TranslationGen.resolveSelect(month, {\n        'january': `January`,\n        'february': `February`,\n        'march': `March`,\n        'april': `April`,\n        'may': `May`,\n        'june': `June`,\n        'july': `July`,\n        'august': `August`,\n        'september': `September`,\n        'october': `October`,\n        'november': `November`,\n        'december': `December`,\n        'other': `Unknown Month`,\n      })\n    },\n    'time.today': `Today`,\n    'time.tomorrow': `Tomorrow`,\n    'time.year': ({ count }): string => {\n      return TranslationGen.resolvePlural(count, {\n        '=1': `Year`,\n        'other': `Years`,\n      })\n    },\n    'time.yesterday': `Yesterday`,\n    'tooFewSelectionItems': ({ min }): string => {\n      return `Select at least ${min} items.`\n    },\n    'tooLong': ({ max }): string => {\n      return `The value requires less than ${max} characters.`\n    },\n    'tooManySelectionItems': ({ max }): string => {\n      return `Select at most ${max} items.`\n    },\n    'tooShort': ({ min }): string => {\n      return `The value requires at least ${min} characters.`\n    },\n    'unknown': `Unknown`,\n    'unpin': `Unpin`,\n    'unsavedChanges': `Unsaved Changes`,\n    'unsavedChangesSaveQuestion': `Do you want to save your changes?`,\n    'update': `Update`,\n    'value': `Value`,\n    'welcome': `Welcome`,\n    'withoutTime': `Without Time`,\n    'yes': `Yes`\n  }\n}\n\n","import type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport { hightideTranslationLocales } from '@/src/i18n/translations'\n\n/**\n * The supported locales' names in their respective language\n */\nconst localsNames: Record<HightideTranslationLocales, string> = {\n  'en-US': 'English (US)',\n  'de-DE': 'Deutsch',\n}\n\nfunction localeToLanguage(locale: HightideTranslationLocales) {\n  return locale.split('-')[0]\n}\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LocalizationUtil = {\n  locals: hightideTranslationLocales,\n  localToLanguage: localeToLanguage,\n  languagesLocalNames: localsNames,\n}\n","import { useLocale } from '@/src/global-contexts/LocaleContext'\nimport type {\n  PartialTranslationExtension,\n  Translation,\n  TranslationEntries\n} from '@helpwave/internationalization'\nimport { combineTranslation, ICUUtil } from '@helpwave/internationalization'\nimport { ArrayUtil } from '@/src/utils/array'\nimport type { SingleOrArray } from '@/src/utils/typing'\nimport type { HightideTranslationEntries, HightideTranslationLocales } from '@/src/i18n/translations'\nimport { hightideTranslation } from '@/src/i18n/translations'\nimport { useMemo } from 'react'\n\n/**\n * Use for translations where you know that all values are ICU strings.\n *\n * This most likely is the case for Translations provided by a backend,\n * for more dynamic and typesafe translation use useTranslation instead\n */\nexport function useICUTranslation<L extends string, T extends Record<string, string>>(\n  translations: Translation<L, T>[] | Translation<L, T>,\n  locale: L\n) {\n  translations = Array.isArray(translations) ? translations : [translations]\n\n  return function translate(\n    key: string,\n    values?: Record<string, object>\n  ): string {\n    try {\n      for (let i = 0; i < translations.length; i++) {\n        const localizedTranslation = translations[i][locale]\n        if (!localizedTranslation) continue\n\n        const msg = localizedTranslation[key]\n        if (typeof msg === 'string') {\n          return ICUUtil.interpret(msg, values)\n        }\n      }\n      console.warn(`useTranslation: No translation for key \"${key}\" found.`)\n    } catch (e) {\n      console.error(`useTranslation: Error translating key \"${String(key)}\"`, e)\n    }\n\n    return `{{${String(locale)}:${String(key)}}}`\n  }\n}\n\ntype UseHidetideTranslationOverwrites = {\n  locale?: HightideTranslationLocales,\n}\n\ntype HidetideTranslationExtension<L extends string, T extends TranslationEntries>\n  = PartialTranslationExtension<L, HightideTranslationLocales, T, HightideTranslationEntries>\n/**\n * A wrapper for the useHightideTranslation to load and specify the translations for the library\n */\nexport function useHightideTranslation<L extends string, T extends TranslationEntries>(\n  extensions?: SingleOrArray<HidetideTranslationExtension<L,T>>,\n  overwrites?: UseHidetideTranslationOverwrites\n) {\n  const { locale: inferredLocale } = useLocale()\n  const locale = overwrites?.locale ?? inferredLocale\n\n  return useMemo(() => combineTranslation<L | HightideTranslationLocales, T & HightideTranslationEntries>([\n    ... ArrayUtil.resolveSingleOrArray(extensions),\n    hightideTranslation as HidetideTranslationExtension<L,T>\n  ], locale),\n  [locale, extensions])\n}\n","import type { ReactNode, JSX, ForwardedRef } from 'react'\nimport { forwardRef } from 'react'\nimport type { SelectRootProps } from './SelectRoot'\nimport { SelectRoot } from './SelectRoot'\nimport type { SelectButtonProps } from './SelectButton'\nimport { SelectButton } from './SelectButton'\nimport type { SelectContentProps } from './SelectContent'\nimport { SelectContent } from './SelectContent'\nimport type { SelectOptionType } from './SelectContext'\n\nexport type SelectProps<T = string> = SelectRootProps<T> & {\n  contentPanelProps?: SelectContentProps,\n  buttonProps?: Omit<SelectButtonProps<T>, 'selectedDisplay'> & {\n    selectedDisplay?: (value: SelectOptionType<T> | null) => ReactNode,\n  } & { [key: string]: unknown },\n};\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps<unknown>>(function Select<T>(\n  { children, contentPanelProps, buttonProps, ...props }: SelectProps<T>,\n  ref: ForwardedRef<HTMLDivElement>\n) {\n\n  return (\n    <SelectRoot<T> {...props}>\n      <SelectButton\n        ref={ref}\n        {...buttonProps}\n        selectedDisplay={(value: SelectOptionType<unknown> | null) => {\n          if (!buttonProps?.selectedDisplay) return undefined\n          return buttonProps.selectedDisplay(value as SelectOptionType<T>)\n        }}\n      />\n      <SelectContent {...contentPanelProps}>{children}</SelectContent>\n    </SelectRoot>\n  )\n}) as <T>(props: SelectProps<T> & React.RefAttributes<HTMLDivElement>) => JSX.Element\n","import type { ReactNode, RefObject } from 'react'\nimport { useCallback, useEffect, useId, useMemo, useState } from 'react'\nimport { SelectContext } from './SelectContext'\nimport type { SelectContextConfig, SelectContextLayout, SelectOptionType } from './SelectContext'\nimport { useSelect } from '@/src/components/user-interaction/Select/useSelect'\nimport { DOMUtils } from '@/src/utils/dom'\nimport type { FormFieldDataHandling } from '@/src/components/form/FormField'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport type { FormFieldInteractionStates } from '@/src/components/form/FieldLayout'\nimport { PopUpContext } from '@/src/components/layout/popup/PopUpContext'\n\nexport interface SelectIds {\n  trigger: string,\n  content: string,\n  listbox: string,\n  searchInput: string,\n}\n\nexport interface SelectRootProps<T> extends Partial<FormFieldDataHandling<T>>, Partial<FormFieldInteractionStates> {\n  value?: T | null,\n  initialValue?: T | null,\n  compareFunction?: (a: T | null, b: T | null) => boolean,\n  initialIsOpen?: boolean,\n  onClose?: () => void,\n  onIsOpenChange?: (isOpen: boolean) => void,\n  showSearch?: boolean,\n  iconAppearance?: 'left' | 'right' | 'none',\n  children: ReactNode,\n}\n\nexport function SelectRoot<T>({\n  children,\n  value,\n  onValueChange,\n  onEditComplete,\n  initialValue,\n  compareFunction,\n  initialIsOpen = false,\n  onClose,\n  onIsOpenChange,\n  showSearch = true,\n  iconAppearance = 'right',\n  invalid = false,\n  disabled = false,\n  readOnly = false,\n  required = false,\n}: SelectRootProps<T>) {\n  const [triggerRef, setTriggerRef] = useState<RefObject<HTMLElement> | null>(null)\n  const [options, setOptions] = useState<SelectOptionType<T>[]>([])\n  const generatedId = useId()\n  const [ids, setIds] = useState<SelectIds>({\n    trigger: 'select-' + generatedId,\n    content: 'select-content-' + generatedId,\n    listbox: 'select-listbox-' + generatedId,\n    searchInput: 'select-search-' + generatedId,\n  })\n\n\n  const registerOption = useCallback(\n    (item: SelectOptionType<T>) => {\n      setOptions((prev) => {\n        const next = prev.filter((o) => o.value !== item.value)\n        next.push(item)\n        next.sort((a, b) =>\n          DOMUtils.compareDocumentPosition(a.ref.current, b.ref.current))\n        return next\n      })\n      return () =>\n        setOptions((prev) => prev.filter((o) => o.value !== item.value))\n    },\n    []\n  )\n\n  const registerTrigger = useCallback((ref: RefObject<HTMLElement>) => {\n    setTriggerRef(ref)\n    return () => {\n      setTriggerRef(null)\n    }\n  }, [])\n\n  const compare = useMemo(() => compareFunction ?? Object.is, [compareFunction])\n\n  const idToOptionMap = useMemo(() => {\n    return options.reduce((acc, o) => {\n      acc[o.id] = o\n      return acc\n    }, {} as Record<string, SelectOptionType<T>>)\n  }, [options])\n\n  const mappedValueId = useMemo(() => {\n    if(value === undefined) return undefined\n    return options.find((o) => compare(o.value, value))?.id ?? null\n  }, [options, value, compare])\n\n  const mappedInitialValueId = useMemo(() => {\n    if(initialValue === undefined) return undefined\n    return options.find((o) => compare(o.value, initialValue))?.id ?? null\n  }, [options, initialValue, compare])\n\n  const onValueChangeStable = useEventCallbackStabilizer(onValueChange)\n  const onEditCompleteStable = useEventCallbackStabilizer(onEditComplete)\n  const onIsOpenChangeStable = useEventCallbackStabilizer(onIsOpenChange)\n\n  const onValueChangeWrapper = useCallback((value: string) => {\n    const option = idToOptionMap[value]\n    if(option === undefined) {\n      console.warn(`Attempted to select an option ${value} that is not valid`)\n      return\n    }\n    onValueChangeStable(option.value)\n  }, [onValueChangeStable, idToOptionMap])\n\n  const onEditCompleteWrapper = useCallback((value: string) => {\n    const option = idToOptionMap[value]\n    if(option === undefined) {\n      console.warn(`Attempted to edit complete an option ${value} that is not valid`)\n      return\n    }\n    onEditCompleteStable(option.value)\n  }, [onEditCompleteStable, idToOptionMap])\n\n\n  const state = useSelect({\n    value: mappedValueId,\n    initialValue: mappedInitialValueId,\n    onValueChange: onValueChangeWrapper,\n    onEditComplete: onEditCompleteWrapper,\n    options,\n    initialIsOpen,\n    onClose,\n    onIsOpenChange: onIsOpenChangeStable,\n  })\n  const { setSearchQuery } = state\n\n  useEffect(() => {\n    if(showSearch === false) {\n      setSearchQuery('')\n    }\n  }, [showSearch, setSearchQuery])\n\n  const config: SelectContextConfig = useMemo(() => ({\n    iconAppearance,\n    ids,\n    setIds,\n  }), [iconAppearance, ids, setIds])\n\n  const layout: SelectContextLayout = useMemo(() => ({\n    triggerRef,\n    registerTrigger,\n  }), [triggerRef, registerTrigger])\n\n  return (\n    <SelectContext.Provider\n      value={{\n        invalid,\n        disabled,\n        readOnly,\n        required,\n        selectedId: state.value,\n        highlightedId: state.highlightedValue,\n        isOpen: state.isOpen,\n        options,\n        visibleOptionIds: state.visibleOptionIds,\n        idToOptionMap,\n        registerOption,\n        toggleSelection: state.selectValue,\n        highlightFirst: state.highlightFirst,\n        highlightLast: state.highlightLast,\n        highlightNext: state.highlightNext,\n        highlightPrevious: state.highlightPrevious,\n        highlightItem: state.highlightItem,\n        handleTypeaheadKey: state.handleTypeaheadKey,\n        setIsOpen: state.setIsOpen,\n        toggleIsOpen: state.toggleOpen,\n        config,\n        layout,\n        search: {\n          hasSearch: showSearch,\n          searchQuery: state.searchQuery,\n          setSearchQuery: state.setSearchQuery,\n        },\n      }}\n    >\n      <PopUpContext.Provider\n        value={{\n          isOpen: state.isOpen,\n          setIsOpen: state.setIsOpen,\n          popUpId: ids.content,\n          triggerId: ids.trigger,\n          triggerRef,\n          setTriggerRef,\n        }}\n      >\n        {children}\n      </PopUpContext.Provider>\n    </SelectContext.Provider>\n  )\n}\n","import type { Dispatch, ReactNode, RefObject, SetStateAction } from 'react'\nimport { createContext, useContext } from 'react'\nimport type { UseSelectFirstHighlightBehavior } from './useSelect'\nimport type { FormFieldInteractionStates } from '../../form/FieldLayout'\n\nexport interface SelectOptionType<T = string> {\n  id: string,\n  value: T,\n  label?: string,\n  display?: ReactNode,\n  disabled?: boolean,\n  ref: RefObject<HTMLElement | null>,\n}\n\nexport interface SelectContextIds {\n  trigger: string,\n  content: string,\n  listbox: string,\n  searchInput: string,\n}\n\nexport interface SelectContextState<T> extends FormFieldInteractionStates {\n  selectedId: string | null,\n  options: ReadonlyArray<SelectOptionType<T>>,\n  highlightedId: string | null,\n  isOpen: boolean,\n}\n\nexport interface SelectContextComputedState<T> {\n  visibleOptionIds: ReadonlyArray<string>,\n  idToOptionMap: Record<string, SelectOptionType<T>>,\n}\n\nexport interface SelectContextActions<T> {\n  registerOption(option: SelectOptionType<T>): () => void,\n  toggleSelection(id: string): void,\n  highlightFirst(): void,\n  highlightLast(): void,\n  highlightNext(): void,\n  highlightPrevious(): void,\n  highlightItem(id: string): void,\n  handleTypeaheadKey(key: string): void,\n  setIsOpen(open: boolean, behavior?: UseSelectFirstHighlightBehavior): void,\n  toggleIsOpen(behavior?: UseSelectFirstHighlightBehavior): void,\n}\n\nexport interface SelectContextLayout {\n  triggerRef: RefObject<HTMLElement | null>,\n  registerTrigger(element: RefObject<HTMLElement | null>): () => void,\n}\n\nexport interface SelectContextSearch {\n  hasSearch: boolean,\n  searchQuery?: string,\n  setSearchQuery(query: string): void,\n}\n\nexport type SelectIconAppearance = 'left' | 'right' | 'none';\n\nexport interface SelectContextConfig {\n  iconAppearance: SelectIconAppearance,\n  ids: SelectContextIds,\n  setIds: Dispatch<SetStateAction<SelectContextIds>>,\n}\n\nexport interface SelectContextType<T> extends SelectContextActions<T>, SelectContextState<T>, SelectContextComputedState<T> {\n  config: SelectContextConfig,\n  layout: SelectContextLayout,\n  search: SelectContextSearch,\n}\n\nexport const SelectContext = createContext<SelectContextType<unknown> | null>(null)\n\nexport function useSelectContext<T>(): SelectContextType<T> {\n  const ctx = useContext(SelectContext)\n  if (!ctx) throw new Error('useSelectContext must be used within SelectRoot')\n  return ctx as SelectContextType<T>\n}\n","import {\n  useCallback,\n  useEffect,\n  useMemo,\n  useState\n} from 'react'\nimport { useSingleSelection } from '@/src/hooks/useSingleSelection'\nimport { useListNavigation } from '@/src/hooks/useListNavigation'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport { useSearch } from '@/src/hooks/useSearch'\nimport { useTypeAheadSearch } from '@/src/hooks/useTypeAheadSearch'\n\nexport interface UseSelectOption {\n  id: string,\n  label?: string,\n  disabled?: boolean,\n}\n\nexport interface UseSelectOptions {\n  options: ReadonlyArray<UseSelectOption>,\n  value?: string | null,\n  initialValue?: string | null,\n  initialIsOpen?: boolean,\n  onValueChange?: (value: string) => void,\n  onEditComplete?: (value: string) => void,\n  onClose?: () => void,\n  onIsOpenChange?: (isOpen: boolean) => void,\n  typeAheadResetMs?: number,\n}\n\nexport type UseSelectFirstHighlightBehavior = 'first' | 'last';\n\nexport interface UseSelectState {\n  value: string | null,\n  highlightedValue: string | undefined,\n  isOpen: boolean,\n  searchQuery: string,\n  options: ReadonlyArray<UseSelectOption>,\n}\n\nexport interface UseSelectComputedState {\n  visibleOptionIds: ReadonlyArray<string>,\n}\n\nexport interface UseSelectActions {\n  setIsOpen: (isOpen: boolean, behavior?: UseSelectFirstHighlightBehavior) => void,\n  toggleOpen: (behavior?: UseSelectFirstHighlightBehavior) => void,\n  setSearchQuery: (query: string) => void,\n  highlightFirst: () => void,\n  highlightLast: () => void,\n  highlightNext: () => void,\n  highlightPrevious: () => void,\n  highlightItem: (value: string) => void,\n  selectValue: (value: string) => void,\n  handleTypeaheadKey: (key: string) => void,\n}\n\nexport interface UseSelectReturn extends UseSelectState, UseSelectComputedState, UseSelectActions {}\n\nexport function useSelect({\n  options,\n  value: controlledValue,\n  onValueChange,\n  onEditComplete,\n  initialValue = null,\n  onClose,\n  onIsOpenChange,\n  initialIsOpen = false,\n  typeAheadResetMs = 500,\n}: UseSelectOptions): UseSelectReturn {\n  const [isOpen, setIsOpen] = useState(initialIsOpen)\n  const [searchQuery, setSearchQuery] = useState('')\n\n  const onValueChangeStable = useEventCallbackStabilizer(onValueChange)\n  const onEditCompleteStable = useEventCallbackStabilizer(onEditComplete)\n  const onCloseStable = useEventCallbackStabilizer(onClose)\n  const onIsOpenChangeStable = useEventCallbackStabilizer(onIsOpenChange)\n\n  const onSelectionChangeWrapper = useCallback((id: string | null) => {\n    if(id === null) return\n    onValueChangeStable(id)\n    onEditCompleteStable(id)\n    setIsOpen(false)\n  }, [onValueChangeStable, onEditCompleteStable, setIsOpen])\n\n  const { selection, selectValue } = useSingleSelection({\n    options: options,\n    selection: controlledValue,\n    onSelectionChange: onSelectionChangeWrapper,\n    initialSelection: initialValue,\n  })\n\n  const { searchResult: visibleOptions } = useSearch({\n    items: options,\n    searchQuery,\n    toTags: useCallback((o: UseSelectOption) => [o.label], []),\n  })\n\n  const visibleOptionIds = useMemo(() => visibleOptions.map((o) => o.id), [visibleOptions])\n\n  const enabledOptions = useMemo(() => visibleOptions.filter((o) => !o.disabled), [visibleOptions])\n\n  const {\n    highlightedId,\n    highlight: listNavHighlight,\n    first: listNavFirst,\n    last: listNavLast,\n    next: listNavNext,\n    previous: listNavPrevious,\n  } = useListNavigation({\n    options: enabledOptions.map((o) => o.id),\n    initialValue: selection,\n  })\n\n  const { addToTypeAhead, reset: typeAheadReset } = useTypeAheadSearch({\n    options: enabledOptions,\n    resetTimer: typeAheadResetMs,\n    toString: (o) => o.label ?? '',\n    onResultChange: useCallback((option: UseSelectOption | null) => {\n      if (option) listNavHighlight(option.id)\n    }, [listNavHighlight]),\n  })\n\n  useEffect(() => {\n    if (!isOpen) typeAheadReset()\n  }, [isOpen, typeAheadReset])\n\n  const state: UseSelectState = useMemo(() => ({\n    value: selection,\n    highlightedValue: highlightedId,\n    isOpen,\n    searchQuery,\n    options,\n  }), [selection, highlightedId, isOpen, searchQuery, options])\n\n  const computedState: UseSelectComputedState = useMemo(() => ({\n    visibleOptionIds,\n  }), [visibleOptionIds])\n\n  const highlightItem = useCallback((value: string) => {\n    if (!enabledOptions.some((o) => o.id === value)) return\n    listNavHighlight(value)\n  }, [enabledOptions, listNavHighlight])\n\n  const setIsOpenWrapper = useCallback((isOpen: boolean, behavior?: UseSelectFirstHighlightBehavior) => {\n    behavior = behavior ?? 'first'\n    if(isOpen) {\n      if(selection == null) {\n        if(behavior === 'first') {\n          listNavFirst()\n        } else if (behavior === 'last') {\n          listNavLast()\n        }\n      } else {\n        highlightItem(selection)\n      }\n    } else {\n      setSearchQuery('')\n      onCloseStable?.()\n    }\n    setIsOpen(isOpen)\n    onIsOpenChangeStable(isOpen)\n  }, [setIsOpen, highlightItem, onCloseStable, setSearchQuery, onIsOpenChangeStable, selection, listNavFirst, listNavLast])\n\n  const toggleOpenWrapper = useCallback((behavior?: UseSelectFirstHighlightBehavior) => {\n    const next = !isOpen\n    setIsOpenWrapper(next, behavior)\n  }, [isOpen, setIsOpenWrapper])\n\n  const actions: UseSelectActions = useMemo(() => ({\n    selectValue: (id: string) => selectValue(id),\n    setIsOpen: setIsOpenWrapper,\n    toggleOpen: toggleOpenWrapper,\n    setSearchQuery,\n    highlightFirst: listNavFirst,\n    highlightLast: listNavLast,\n    highlightNext: listNavNext,\n    highlightPrevious: listNavPrevious,\n    highlightItem,\n    handleTypeaheadKey: addToTypeAhead,\n  }), [selectValue, setIsOpenWrapper, listNavFirst, listNavLast, listNavNext, listNavPrevious, highlightItem, addToTypeAhead, toggleOpenWrapper])\n\n  return useMemo(() => ({\n    ...state,\n    ...computedState,\n    ...actions,\n  }), [state, computedState, actions])\n}\n","import { useCallback, useMemo } from 'react'\nimport { useControlledState } from '@/src/hooks/useControlledState'\n\nexport interface SelectionOption {\n  id: string,\n  disabled?: boolean,\n}\n\nexport interface UseSingleSelectionOptions {\n  options: ReadonlyArray<SelectionOption>,\n  selection?: string | null,\n  onSelectionChange?: (selection: string | null) => void,\n  initialSelection?: string | null,\n  isLooping?: boolean,\n}\n\nexport interface SingleSelectionReturn {\n  selection: string | null,\n  selectedIndex: number | null,\n  selectByIndex: (index: number) => void,\n  selectValue: (value: string | null) => void,\n  selectFirst: () => void,\n  selectLast: () => void,\n  selectNext: () => void,\n  selectPrevious: () => void,\n}\n\nexport function useSingleSelection({\n  options: optionsList,\n  selection: controlledSelection,\n  onSelectionChange,\n  initialSelection,\n  isLooping = true,\n}: UseSingleSelectionOptions): SingleSelectionReturn {\n  const [selection, setSelection] = useControlledState({\n    value: controlledSelection,\n    onValueChange: onSelectionChange,\n    defaultValue: initialSelection,\n  })\n\n  const selectedIndex = useMemo(() => {\n    return optionsList.findIndex((o) => o.id === selection)\n  }, [optionsList, selection])\n\n  const enabledOptions = useMemo(() => optionsList.filter((o) => !o.disabled), [optionsList])\n\n  const changeSelection = useCallback((next: string | null) => {\n    const option = enabledOptions.find((o) => o.id === next)\n    if(!option && next != null) {\n      console.warn(`Attempted to select an option ${next} that is not valid or disabled`)\n      return\n    }\n    setSelection(option?.id ?? null)\n  }, [enabledOptions, setSelection])\n\n  const selectByIndex = useCallback((index: number) => {\n    const option = optionsList[index]\n    if(!option || option.disabled || index < 0 || index >= optionsList.length) {\n      console.warn(`Attempted to select an index ${index} that is not valid or disabled`)\n      return\n    }\n    setSelection(option.id)\n  }, [optionsList, setSelection])\n\n  const selectFirst = useCallback(() => {\n    if(enabledOptions.length === 0) return\n    const first = enabledOptions.find((o) => !o.disabled)\n    setSelection(first?.id ?? null)\n  }, [enabledOptions, setSelection])\n\n  const selectLast = useCallback(() => {\n    if(enabledOptions.length === 0) return\n    const last = [...enabledOptions].reverse().find((o) => !o.disabled)\n    setSelection(last?.id ?? null)\n  }, [enabledOptions, setSelection])\n\n  const selectNext = useCallback(() => {\n    if(enabledOptions.length === 0) return\n    let currentIndex = enabledOptions.findIndex((o) => o.id === selection)\n    if(currentIndex === -1) currentIndex = 0\n    const nextIndex = isLooping ? (currentIndex + 1) % enabledOptions.length : Math.min(currentIndex + 1, enabledOptions.length - 1)\n    setSelection(enabledOptions[nextIndex].id)\n  }, [enabledOptions, selection, isLooping, setSelection])\n\n  const selectPrevious = useCallback(() => {\n    if(enabledOptions.length === 0) return\n    let currentIndex = enabledOptions.findIndex((o) => o.id === selection)\n    if(currentIndex === -1) currentIndex = enabledOptions.length\n    const previousIndex = isLooping ? (currentIndex - 1 + enabledOptions.length) % enabledOptions.length : Math.max(currentIndex - 1, 0)\n    setSelection(enabledOptions[previousIndex].id)\n  }, [enabledOptions, selection, isLooping, setSelection])\n\n  return useMemo(() => ({\n    selection,\n    selectedIndex,\n    selectByIndex,\n    selectValue: changeSelection,\n    selectFirst,\n    selectLast,\n    selectNext,\n    selectPrevious,\n  }), [selection, selectedIndex, changeSelection, selectFirst, selectLast, selectNext, selectPrevious, selectByIndex])\n}\n","import { useCallback, useMemo } from 'react'\nimport { useControlledState } from '@/src/hooks/useControlledState'\n\nexport interface ListNavigationReturn {\n  highlightedId: string | null,\n  highlight: (id: string) => void,\n  first: () => void,\n  last: () => void,\n  next: () => void,\n  previous: () => void,\n}\n\nexport interface ListNavigationOptions {\n  options: ReadonlyArray<string>,\n  value?: string | null,\n  onValueChange?: (highlightedId: string | null) => void,\n  initialValue?: string | null,\n}\n\nexport function useListNavigation({\n  options,\n  value,\n  onValueChange,\n  initialValue,\n}: ListNavigationOptions): ListNavigationReturn {\n  const [highlightedId, setHighlightedId] = useControlledState<string | null>({\n    value,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n\n  const resolvedHighlightId = useMemo(() => {\n    if (options.length === 0) return null\n    if (highlightedId != null && options.includes(highlightedId)) {\n      return highlightedId\n    }\n    return options[0] ?? null\n  }, [options, highlightedId])\n\n  const highlight = useCallback((id: string) => {\n    if (!options.includes(id)) return\n    setHighlightedId(id)\n  }, [options, setHighlightedId])\n\n  const next = useCallback(() => {\n    if (options.length <= 1 || resolvedHighlightId === null) return\n    const idx = options.indexOf(resolvedHighlightId)\n    const nextIdx = idx < 0 ? 0 : (idx + 1) % options.length\n    setHighlightedId(options[nextIdx])\n  }, [options, resolvedHighlightId, setHighlightedId])\n\n  const previous = useCallback(() => {\n    if (options.length <= 1 || resolvedHighlightId === null) return\n    const idx = options.indexOf(resolvedHighlightId)\n    const previousIdx =\n      idx <= 0\n        ? options.length - 1\n        : (idx - 1 + options.length) % options.length\n    setHighlightedId(options[previousIdx])\n  }, [options, resolvedHighlightId, setHighlightedId])\n\n  const first = useCallback(() => {\n    if (options.length <= 1 || resolvedHighlightId === null) return\n    setHighlightedId(options[0])\n  }, [options, resolvedHighlightId, setHighlightedId])\n\n  const last = useCallback(() => {\n    if (options.length <= 1 || resolvedHighlightId === null) return\n    setHighlightedId(options[options.length - 1])\n  }, [options, resolvedHighlightId, setHighlightedId])\n\n  return useMemo((): ListNavigationReturn => ({\n    highlightedId: resolvedHighlightId,\n    highlight,\n    first,\n    last,\n    next,\n    previous,\n  }), [resolvedHighlightId, highlight, first, last, next, previous])\n}\n","import { useMemo } from 'react'\nimport { MultiSearchWithMapping } from '@/src/utils/simpleSearch'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\n\nexport interface UseSearchOptions<T> {\n  items: ReadonlyArray<T>,\n  searchQuery: string,\n  toTags?: (value: T) => string[],\n}\n\nexport interface UseSearchReturn<T> {\n  searchResult: ReadonlyArray<T>,\n}\n\nfunction defaultToTags<T>(value: T): string[] {\n  return [String(value)]\n}\n\nexport function useSearch<T>({\n  items,\n  searchQuery,\n  toTags,\n}: UseSearchOptions<T>): UseSearchReturn<T> {\n  const toTagsResolved = toTags ?? defaultToTags\n  const toTagsStable = useEventCallbackStabilizer(toTagsResolved)\n\n  const searchResult = useMemo(() => {\n    const q = searchQuery.trim().toLowerCase()\n    if (!q) return items\n    return MultiSearchWithMapping(searchQuery, [...items], (item) => toTagsStable(item))\n  }, [items, searchQuery, toTagsStable])\n\n  return useMemo((): UseSearchReturn<T> => ({\n    searchResult,\n  }), [searchResult])\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 { useCallback, useEffect, useRef } from 'react'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\n\nexport interface UseTypeAheadSearchOptions<T> {\n  options: ReadonlyArray<T>,\n  resetTimer: number,\n  toString?: (value: T) => string,\n  onResultChange: (value: T | null) => void,\n}\n\nexport interface UseTypeAheadSearchReturn {\n  addToTypeAhead: (str: string) => void,\n  reset: () => void,\n}\n\nfunction defaultToString<T>(value: T): string {\n  return String(value)\n}\n\nexport function useTypeAheadSearch<T>({\n  options,\n  resetTimer,\n  toString: toStringProp,\n  onResultChange,\n}: UseTypeAheadSearchOptions<T>): UseTypeAheadSearchReturn {\n  const bufferRef = useRef('')\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n  const toString = toStringProp ?? defaultToString\n  const toStringStable = useEventCallbackStabilizer(toString)\n  const onResultChangeStable = useEventCallbackStabilizer(onResultChange)\n\n  const reset = useCallback(() => {\n    if (timeoutRef.current) {\n      clearTimeout(timeoutRef.current)\n      timeoutRef.current = null\n    }\n    bufferRef.current = ''\n    onResultChangeStable(null)\n  }, [onResultChangeStable])\n\n  useEffect(() => () => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current)\n  }, [])\n\n  const addToTypeAhead = useCallback((str: string) => {\n    if (timeoutRef.current) clearTimeout(timeoutRef.current)\n    bufferRef.current += str\n    timeoutRef.current = setTimeout(() => {\n      timeoutRef.current = null\n      bufferRef.current = ''\n      onResultChangeStable(null)\n    }, resetTimer)\n\n    const buf = bufferRef.current.trim().toLowerCase()\n    if (!buf) {\n      onResultChangeStable(null)\n      return\n    }\n    const found = options.find((opt) => {\n      const s = toStringStable(opt)?.trim().toLowerCase() ?? ''\n      return s.startsWith(buf)\n    })\n    onResultChangeStable(found ?? null)\n  }, [options, resetTimer, toStringStable, onResultChangeStable])\n\n  return { addToTypeAhead, reset }\n}\n","function compareDocumentPosition(a: Node | null | undefined, b: Node | null | undefined) {\n  if (!a && !b) return 0\n  if (!a) return 1\n  if (!b) return -1\n  return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n}\n\nexport const DOMUtils = {\n  compareDocumentPosition,\n}","import type { Dispatch, RefObject, SetStateAction } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport type PopUpContextType = {\n  isOpen: boolean,\n  setIsOpen: Dispatch<SetStateAction<boolean>>,\n  popUpId: string,\n  triggerId: string,\n  triggerRef: RefObject<HTMLElement> | null,\n  setTriggerRef: (ref: RefObject<HTMLElement> | null) => void,\n}\n\nexport const PopUpContext = createContext<PopUpContextType | null>(null)\n\nexport function usePopUpContext() {\n  const context = useContext(PopUpContext)\n  if (!context) {\n    throw new Error('usePopUpContext must be used within a <PopUpContext.Provider>')\n  }\n  return context\n}\n","import type { ComponentPropsWithoutRef, ForwardedRef, ReactNode } from 'react'\nimport { forwardRef, useEffect, useRef } from 'react'\nimport type { SelectOptionType } from './SelectContext'\nimport { useSelectContext } from './SelectContext'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { SelectOptionDisplayContext } from './SelectOption'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport interface SelectButtonProps<T = string> extends ComponentPropsWithoutRef<'div'> {\n  'placeholder'?: ReactNode,\n  'disabled'?: boolean,\n  'selectedDisplay'?: (value: SelectOptionType<T> | null) => ReactNode,\n  'hideExpansionIcon'?: boolean,\n  'data-name'?: string,\n}\n\nexport const SelectButton = forwardRef<HTMLDivElement, SelectButtonProps<unknown>>(\n  function SelectButton<T>(\n    {\n      id,\n      placeholder,\n      disabled: disabledOverride,\n      selectedDisplay,\n      hideExpansionIcon = false,\n      ...props\n    }: SelectButtonProps<T>,\n    ref: ForwardedRef<HTMLDivElement>\n  ) {\n    const translation = useHightideTranslation()\n    const context = useSelectContext<T>()\n    const { config, layout } = context\n    const { setIds } = config\n    const { registerTrigger } = layout\n\n    useEffect(() => {\n      if (id) setIds((prev) => ({ ...prev, trigger: id }))\n    }, [id, setIds])\n\n    const innerRef = useRef<HTMLDivElement | null>(null)\n\n    useEffect(() => {\n      const unregister = registerTrigger(innerRef)\n      return () => unregister()\n    }, [registerTrigger])\n\n    const disabled = !!disabledOverride || !!context.disabled\n    const readOnly = !!context.readOnly\n    const invalid = context.invalid\n    const hasValue = context.selectedId !== null\n    const hasInteractions = !readOnly && !disabled\n    const selectedOption = context.selectedId ? (context.idToOptionMap[context.selectedId] ?? null) : null\n\n    return (\n      <div\n        {...props}\n        ref={ReactRefsUtil.assingRefsBuilder([innerRef, ref])}\n        id={context.config.ids.trigger}\n        onClick={(event) => {\n          if (!hasInteractions) return\n          props.onClick?.(event)\n          context.toggleIsOpen()\n        }}\n        onKeyDown={(event) => {\n          props.onKeyDown?.(event)\n          if (!hasInteractions) return\n          switch (event.key) {\n          case 'Enter':\n          case ' ':\n            context.toggleIsOpen()\n            event.preventDefault()\n            event.stopPropagation()\n            break\n          case 'ArrowDown':\n            context.setIsOpen(true, 'first')\n            event.preventDefault()\n            event.stopPropagation()\n            break\n          case 'ArrowUp':\n            context.setIsOpen(true, 'last')\n            event.preventDefault()\n            event.stopPropagation()\n            break\n          }\n        }}\n        data-name={props['data-name'] ?? 'select-button'}\n        data-value={hasValue ? '' : undefined}\n        data-disabled={disabled ? '' : undefined}\n        data-readonly={readOnly ? '' : undefined}\n        data-invalid={invalid ? '' : undefined}\n        tabIndex={disabled ? -1 : 0}\n        role=\"button\"\n        aria-invalid={invalid}\n        aria-disabled={disabled}\n        aria-readonly={readOnly}\n        aria-haspopup=\"dialog\"\n        aria-expanded={context.isOpen}\n        aria-controls={context.isOpen ? context.config.ids.content : undefined}\n      >\n        <SelectOptionDisplayContext.Provider value=\"trigger\">\n          {hasValue\n            ? selectedDisplay?.(selectedOption) ?? (selectedOption?.display)\n            : placeholder ?? translation('clickToSelect')}\n        </SelectOptionDisplayContext.Provider>\n        {!hideExpansionIcon && <ExpansionIcon isExpanded={context.isOpen} />}\n      </div>\n    )\n  }\n)\n","import clsx from 'clsx'\nimport { CheckIcon } from 'lucide-react'\nimport type { HTMLAttributes, ReactNode, RefObject } from 'react'\nimport { createContext, forwardRef, useContext, useEffect, useId, useRef } from 'react'\nimport type { SelectIconAppearance } from './SelectContext'\nimport { useSelectContext } from './SelectContext'\n\nexport type SelectOptionDisplayLocation = 'trigger' | 'list';\n\nexport const SelectOptionDisplayContext = createContext<SelectOptionDisplayLocation | null>(null)\n\nexport function useSelectOptionDisplayLocation(): SelectOptionDisplayLocation {\n  const context = useContext(SelectOptionDisplayContext)\n  if (!context) {\n    throw new Error('useSelectOptionDisplayLocation must be used within a SelectOptionDisplayContext')\n  }\n  return context\n}\n\nexport interface SelectOptionProps<T = string> extends HTMLAttributes<HTMLLIElement> {\n  value: T,\n  label: string,\n  disabled?: boolean,\n  iconAppearance?: SelectIconAppearance,\n}\n\nexport const SelectOption = forwardRef<HTMLLIElement, SelectOptionProps<unknown>>(function SelectOption<T = string>({\n  children,\n  label,\n  value,\n  disabled = false,\n  iconAppearance,\n  ...props\n}: SelectOptionProps<T>, ref) {\n  const context= useSelectContext<T>()\n  const { registerOption } = context\n  const itemRef = useRef<HTMLLIElement>(null)\n\n  const display: ReactNode = children ?? label\n  const iconAppearanceResolved = iconAppearance ?? context.config.iconAppearance\n\n  const generatedId = useId()\n  const optionId = props?.id ?? 'select-option-' + generatedId\n\n  useEffect(() => {\n    return registerOption({\n      id: optionId,\n      value,\n      label,\n      display,\n      disabled: disabled,\n      ref: itemRef as React.RefObject<HTMLElement>,\n    })\n  }, [value, label, disabled, registerOption, display, optionId])\n\n  const isHighlighted = context.highlightedId === optionId\n  const isSelected = context.selectedId === optionId\n  const isVisible = context.visibleOptionIds.includes(optionId)\n\n  return (\n    <li\n      {...props}\n      ref={(node) => {\n        itemRef.current = node\n        if (typeof ref === 'function') ref(node)\n        else if (ref) (ref as RefObject<HTMLLIElement | null>).current = node\n      }}\n      id={optionId}\n      hidden={!isVisible}\n      role=\"option\"\n      aria-disabled={disabled}\n      aria-selected={isSelected}\n      aria-hidden={!isVisible}\n\n      data-name=\"select-list-option\"\n      data-highlighted={isHighlighted ? '' : undefined}\n      data-selected={isSelected ? '' : undefined}\n      data-disabled={disabled ? '' : undefined}\n      data-visible={isVisible ? '' : undefined}\n\n      onClick={(event) => {\n        if (!disabled) {\n          context.toggleSelection(optionId)\n          props.onClick?.(event)\n        }\n      }}\n      onMouseEnter={(event) => {\n        if (!disabled) {\n          context.highlightItem(optionId)\n          props.onMouseEnter?.(event)\n        }\n      }}\n    >\n      {iconAppearanceResolved === 'left' && context.selectedId !== null && (\n        <CheckIcon\n          className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n          aria-hidden={true}\n        />\n      )}\n      <SelectOptionDisplayContext.Provider value=\"list\">{display}</SelectOptionDisplayContext.Provider>\n      {iconAppearanceResolved === 'right' && context.selectedId !== null && (\n        <CheckIcon\n          className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n          aria-hidden={true}\n        />\n      )}\n    </li>\n  )\n})\n","import type { ComponentProps, ForwardedRef } from 'react'\nimport { forwardRef, useCallback, useEffect, useRef } from 'react'\nimport { useSelectContext } from './SelectContext'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { PopUp, type PopUpProps } from '@/src/components/layout/popup/PopUp'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport interface SelectContentProps extends PopUpProps {\n  showSearch?: boolean,\n  searchInputProps?: Omit<ComponentProps<typeof Input>, 'value' | 'onValueChange'>,\n}\n\nexport const SelectContent = forwardRef<HTMLUListElement, SelectContentProps>(function SelectContent<T>({\n  id, options, showSearch: showSearchOverride, searchInputProps, ...props\n}: SelectContentProps, ref: ForwardedRef<HTMLUListElement>) {\n  const translation = useHightideTranslation()\n  const innerRef = useRef<HTMLUListElement>(null)\n  const searchInputRef = useRef<HTMLInputElement>(null)\n\n  const context = useSelectContext<T>()\n  const { config, handleTypeaheadKey, toggleSelection, highlightNext, highlightPrevious, highlightFirst, highlightLast, highlightedId } = context\n  const { setIds } = config\n\n  useEffect(() => {\n    if (id) setIds((prev) => ({ ...prev, content: id }))\n  }, [id, setIds])\n\n  const showSearch = showSearchOverride ?? context.search.hasSearch\n  const listboxAriaLabel = showSearch ? translation('searchResults') : undefined\n\n  const keyHandler = useCallback(\n    (event: React.KeyboardEvent) => {\n      switch (event.key) {\n      case 'ArrowDown':\n        highlightNext()\n        event.preventDefault()\n        break\n      case 'ArrowUp':\n        highlightPrevious()\n        event.preventDefault()\n        break\n      case 'Home':\n        event.preventDefault()\n        highlightFirst()\n        break\n      case 'End':\n        event.preventDefault()\n        highlightLast()\n        break\n      case 'Enter':\n      case ' ':\n        if (showSearch && event.key === ' ') return\n        if (highlightedId) {\n          toggleSelection(highlightedId)\n          event.preventDefault()\n        }\n        break\n      default:\n        if (!showSearch && !event.ctrlKey && !event.metaKey && !event.altKey && event.key.length === 1) {\n          handleTypeaheadKey(event.key)\n          event.preventDefault()\n        }\n        break\n      }\n    },\n    [showSearch, handleTypeaheadKey, toggleSelection, highlightedId, highlightNext, highlightPrevious, highlightFirst, highlightLast]\n  )\n\n  return (\n    <PopUp\n      {...props}\n      id={context.config.ids.content}\n      isOpen={context.isOpen}\n      anchor={context.layout.triggerRef}\n      options={options}\n      forceMount={true}\n      onClose={() => {\n        context.setIsOpen(false)\n        props.onClose?.()\n      }}\n      aria-labelledby={context.config.ids.trigger}\n      className={clsx('select-content', props.className)}\n    >\n      {showSearch && (\n        <Input\n          {...searchInputProps}\n          ref={searchInputRef}\n          id={context.config.ids.searchInput}\n          value={context.search.searchQuery}\n          onValueChange={context.search.setSearchQuery}\n          onKeyDown={keyHandler}\n          placeholder={searchInputProps?.placeholder ?? translation('filterOptions')}\n          role=\"combobox\"\n          aria-autocomplete=\"list\"\n          aria-expanded={context.isOpen}\n          aria-controls={context.config.ids.listbox}\n          aria-activedescendant={\n            context.highlightedId ? context.config.ids.listbox + '-' + context.highlightedId : undefined\n          }\n          aria-label={searchInputProps?.['aria-label'] ?? translation('filterOptions')}\n          className={clsx('mx-2 mt-2 shrink-0', searchInputProps?.className)}\n        />\n      )}\n      <ul\n        ref={ReactRefsUtil.assingRefsBuilder([innerRef, ref])}\n        id={context.config.ids.listbox}\n        onKeyDown={showSearch ? undefined : keyHandler}\n        role=\"listbox\"\n        aria-multiselectable={false}\n        aria-orientation=\"vertical\"\n        aria-label={listboxAriaLabel}\n        tabIndex={showSearch ? undefined : 0}\n        className={clsx('flex-col-1 p-2 overflow-auto')}\n      >\n        {props.children}\n        <Visibility isVisible={showSearch}>\n          <li\n            role=\"option\"\n            aria-selected={false}\n            aria-disabled={true}\n            aria-live=\"polite\"\n            aria-atomic={true}\n            data-name=\"select-list-status\"\n            className={clsx({ 'sr-only': context.visibleOptionIds.length > 0 })}\n          >\n            {translation('nResultsFound', { count: context.visibleOptionIds.length })}\n          </li>\n        </Visibility>\n      </ul>\n    </PopUp>\n  )\n})\n","import type { RefObject } from 'react'\nimport { forwardRef, useCallback, useContext, useMemo, useRef } from 'react'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport { Portal } from '../../utils/Portal'\nimport type { AnchoredFloatingContainerProps } from '../AnchoredFloatingContainer'\nimport { AnchoredFloatingContainer } from '../AnchoredFloatingContainer'\nimport { Visibility } from '../Visibility'\nimport type { UseFocusTrapProps } from '@/src/hooks/focus/useFocusTrap'\nimport { FocusTrap } from '../../utils/FocusTrap'\nimport type { UseOutsideClickHandlers, UseOutsideClickOptions } from '@/src/hooks/useOutsideClick'\nimport { useOutsideClick } from '@/src/hooks/useOutsideClick'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { usePresenceRef } from '@/src/hooks/usePresenceRef'\nimport { useLogOnce } from '@/src/hooks/useLogOnce'\nimport { PopUpContext } from './PopUpContext'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useScrollObserver } from '@/src/hooks/useScrollObserver'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport interface PopUpProps extends Omit<AnchoredFloatingContainerProps, 'anchor'>, Partial<UseOutsideClickHandlers> {\n  'isOpen'?: boolean,\n  'focusTrapOptions'?: Omit<UseFocusTrapProps, 'container'>,\n  'outsideClickOptions'?: Partial<UseOutsideClickOptions>,\n  'onClose'?: () => void,\n  'forceMount'?: boolean,\n  'anchorExcludedFromOutsideClick'?: boolean,\n  'anchor'?: RefObject<HTMLElement |null>,\n  'data-name'?: string,\n}\n\nexport const PopUp = forwardRef<HTMLDivElement, PopUpProps>(function PopUp({\n  children,\n  isOpen: isOpenOverwrite,\n  focusTrapOptions,\n  onOutsideClick,\n  onClose,\n  outsideClickOptions,\n  anchor: anchorOverwrite,\n  forceMount = false,\n  anchorExcludedFromOutsideClick = false,\n  ...props\n}, forwardRef) {\n  const context = useContext(PopUpContext)\n  const isOpen = isOpenOverwrite ?? context?.isOpen ?? false\n  const fallbackAnchorRef = useRef(null)\n  const anchor = anchorOverwrite ?? context?.triggerRef ?? fallbackAnchorRef\n  const id = props.id ?? context?.popUpId\n  const { refAssignment, isPresent, ref } = usePresenceRef<HTMLDivElement>({ isOpen })\n\n  const onCloseStable = useEventCallbackStabilizer(onClose)\n  const onOutsideClickStable = useEventCallbackStabilizer(onOutsideClick)\n\n  const onCloseWrapper = useCallback(() => {\n    onCloseStable()\n    context?.setIsOpen(false)\n  }, [onCloseStable, context])\n\n  const { zIndex, tagPositions } = useOverlayRegistry({ isActive: isOpen, tags: useMemo(() => ['popup'], []) })\n  const isInFront = tagPositions?.['popup'] === 0\n\n  const isOutsideClickActive = isOpen && isInFront && (outsideClickOptions?.active ?? true)\n\n  useOutsideClick({\n    onOutsideClick: useCallback((event: MouseEvent | TouchEvent) => {\n      if(event.defaultPrevented) return\n      onCloseWrapper()\n      onOutsideClickStable(event)\n      event.preventDefault()\n    }, [onCloseWrapper, onOutsideClickStable]),\n    active: isOutsideClickActive,\n    refs: [ref, ...(anchorExcludedFromOutsideClick || !anchor ? [] : [anchor]), ...(outsideClickOptions?.refs ?? [])],\n  })\n\n  useScrollObserver({ observedElementRef: ref, onScroll: onCloseWrapper, isActive: isOpen })\n\n  useLogOnce('PopUp: Either provide \"aria-label\" or \"aria-labelledby\"', !props['aria-label'] && !props['aria-labelledby'])\n\n  return (\n    <Visibility isVisible={isOpen || forceMount}>\n      <Portal>\n        <FocusTrap {...focusTrapOptions} active={isPresent && isOpen && (focusTrapOptions?.active ?? true)} container={ref}>\n          <AnchoredFloatingContainer\n            {...props}\n            id={id}\n            anchor={anchor}\n            ref={ReactRefsUtil.assingRefsBuilder([refAssignment, forwardRef])}\n            active={isOpen}\n            hidden={!isOpen && forceMount}\n\n            onKeyDown={PropsUtil.aria.close(onCloseWrapper)}\n\n            role=\"dialog\"\n            aria-modal={true}\n            aria-hidden={!isOpen}\n\n            style={{\n              zIndex,\n              position: 'fixed',\n              overflow: 'hidden',\n              ...props.style\n            }}\n            data-name={props['data-name'] ?? 'pop-up'}\n          >\n            {children}\n          </AnchoredFloatingContainer>\n        </FocusTrap>\n      </Portal>\n    </Visibility>\n  )\n})\n","'use client'\n\nimport type { HTMLAttributes, PropsWithChildren } from 'react'\nimport { useRef } from 'react'\nimport { forwardRef } from 'react'\nimport type { UseFocusTrapProps } from '@/src/hooks/focus/useFocusTrap'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\n\nexport interface FocusTrapProps extends PropsWithChildren, UseFocusTrapProps {}\n\nexport const FocusTrap = ({ children, ...props }: FocusTrapProps) => {\n\n  useFocusTrap({\n    ...props\n  })\n\n  return children\n}\n\n\nexport interface FocusTrapWrapperProps extends HTMLAttributes<HTMLDivElement>, Omit<FocusTrapProps, 'container'> {}\n\n/**\n * A wrapper for the useFocusTrap hook that directly renders it to a div\n */\nexport const FocusTrapWrapper = forwardRef<HTMLDivElement, FocusTrapWrapperProps>(function FocusTrap({\n  active,\n  initialFocus,\n  ...props\n}, forwardedRef) {\n  const innerRef = useRef<HTMLDivElement>(null)\n\n  useFocusTrap({ container: innerRef, active, initialFocus })\n\n  return (\n    <div\n      ref={(node) => {\n        innerRef.current = node\n\n        if (typeof forwardedRef === 'function') {\n          forwardedRef(node)\n        } else if (forwardedRef) {\n          forwardedRef.current = node\n        }\n      }}\n      {...props}\n    />\n  )\n})","'use client'\n\nimport type { RefObject } from 'react'\nimport { useCallback, useEffect, useId, useRef, useState } from 'react'\n\nconst createFocusGuard = () => {\n  const div = document.createElement('div')\n  Object.assign(div.style, {\n    opacity: '0',\n    outline: 'none',\n    boxShadow: 'none',\n    position: 'fixed',\n    pointerEvents: 'none',\n    touchAction: 'none',\n  })\n  div.tabIndex = 0\n  div.setAttribute('data-hw-focus-guard', '')\n  document.body.appendChild(div)\n  return div\n}\n\nfunction getContainedFocusableElements(element: HTMLElement | null) {\n  return [...(element?.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])') ?? [])]\n}\n\ntype ListenerType = {\n  id: string,\n  pause: () => void,\n  unpause: () => void,\n  focus: () => void,\n  focusLast: () => void,\n  container: RefObject<HTMLElement | null>,\n  initialFocusElement?: RefObject<HTMLElement | null>,\n}\n\nclass FocusTrapService {\n  // The last entry is always the active one\n  private listeners: ListenerType[] = []\n\n  public getActive(): ListenerType | undefined {\n    if (this.listeners.length === 0) return undefined\n    return this.listeners[this.listeners.length - 1]\n  }\n\n  private focusElement() {\n    const active = this.getActive()\n    if (!active) return\n    const { container, initialFocusElement } = active\n    const containerElement = container.current\n    // Try in the following order\n    // 1. Focus the initial element\n    // 2. Focus the first focusable element in the container\n    // 3. Focus the container\n    if (initialFocusElement?.current) {\n      initialFocusElement.current.focus()\n    } else if(containerElement) {\n      const elements = getContainedFocusableElements(containerElement)\n      if (elements && elements.length > 0) {\n        const first = elements[0] as HTMLElement\n        first.focus()\n      } else {\n        containerElement.focus()\n      }\n    }\n  }\n\n  private onFocusIn = (event: FocusEvent) => {\n    const active = this.getActive()\n    if (!active || !active.container.current) return\n    const { container } = active\n    if (container.current && !container.current.contains(event.target as HTMLElement)) {\n      this.focusElement()\n    }\n  }\n\n  private removeGuards() {\n    document.querySelectorAll('[data-hw-focus-guard]').forEach((node) => node.remove())\n  }\n\n  private addGuards() {\n    document.body.insertAdjacentElement('afterbegin', createFocusGuard())\n    document.body.insertAdjacentElement('beforeend', createFocusGuard())\n  }\n\n  private activate() {\n    document.addEventListener('focusin', this.onFocusIn)\n    this.addGuards()\n  }\n\n  private deactivate() {\n    document.removeEventListener('focusin', this.onFocusIn)\n    this.removeGuards()\n  }\n\n  register(listener: ListenerType) {\n    this.listeners.push(listener)\n    if (this.listeners.length === 1) {\n      this.activate()\n    }\n    const active = listener\n    this.listeners.forEach((listener) => {\n      const { focus, pause } = listener\n      if (listener === active) {\n        focus()\n      } else {\n        pause()\n      }\n    })\n  }\n\n  unregister(id: string) {\n    const index = this.listeners.findIndex(trap => trap.id === id)\n    if (index !== -1) {\n      const isActive = index === this.listeners.length - 1\n      const listener = this.listeners[index]\n      this.listeners = this.listeners.filter(listener => listener.id !== id)\n      if (isActive) {\n        // Deactivate all focus traps\n        this.deactivate()\n        // Focus last element in previous focus context\n        listener.focusLast()\n        // Activate and pause remaining focus traps\n        const active = this.getActive()\n        this.listeners.forEach((listener) => {\n          const { pause, unpause } = listener\n          if (listener === active) {\n            unpause()\n          } else {\n            pause()\n          }\n        })\n        // Reactivate\n        if (this.listeners.length > 0) {\n          this.activate()\n        }\n      }\n    } else {\n      console.warn(`Unable to unregister id ${id}: not found`)\n    }\n  }\n}\n\nconst service = new FocusTrapService()\n\nexport type UseFocusTrapProps = {\n  container: RefObject<HTMLElement | null>,\n  active: boolean,\n  initialFocus?: RefObject<HTMLElement | null>,\n}\n\nexport const useFocusTrap = ({\n  container,\n  active,\n  initialFocus,\n}: UseFocusTrapProps) => {\n  const lastFocusRef = useRef<HTMLElement>(null)\n  const [paused, setPaused] = useState(false)\n  const id = useId()\n\n  const focusElement = useCallback(() => {\n    const containerElement = container.current\n    // Try in the following order\n    // 1. Focus the initial element\n    // 2. Focus the first focusable element in the container\n    if (initialFocus?.current) {\n      initialFocus.current.focus()\n    } else if (containerElement) {\n      const elements = getContainedFocusableElements(containerElement)\n      if (elements && elements.length > 0) {\n        const first = elements[0] as HTMLElement\n        first.focus()\n      } else {\n        console.warn('No focusable elements found in the focus trap. Affected element: ', containerElement)\n      }\n    }\n  }, [container, initialFocus])\n\n  useEffect(() => {\n    if (active) {\n      if (!lastFocusRef.current) {\n        lastFocusRef.current = document.activeElement as HTMLElement\n      }\n\n      function pause() {\n        setPaused(true)\n      }\n\n      function unpause() {\n        setPaused(false)\n\n        if (container.current && !container.current.contains(document.activeElement as HTMLElement)) {\n          focusElement()\n        }\n      }\n\n      function focus() {\n        focusElement()\n        setPaused(false)\n      }\n\n      function focusLast() {\n        lastFocusRef.current?.focus()\n      }\n\n      service.register({ id, pause, focus, focusLast, unpause, container, initialFocusElement: initialFocus })\n      return () => {\n        service.unregister(id)\n        lastFocusRef.current = null\n      }\n    }\n  }, [active, container, focusElement, id, initialFocus])\n\n  useEffect(() => {\n    const containerElement = container.current\n    if (active && !paused && containerElement) {\n      function onKeyDown(event: KeyboardEvent) {\n        const key = event.key\n        const elements = getContainedFocusableElements(containerElement)\n        const active = document.activeElement as HTMLElement\n        const index = [...elements].findIndex(value => value === active)\n        if (index === -1 || event.altKey || event.ctrlKey || event.metaKey) {\n          return\n        }\n        if (key === 'Tab') {\n          const next = event.shiftKey ? -1 : 1\n          const nextIndex = (index + next + elements.length) % elements.length\n          const nextElement = elements[nextIndex] as HTMLElement\n          nextElement.focus()\n          event.preventDefault()\n        }\n      }\n\n      // Register and unregister the listeners\n      containerElement.addEventListener('keydown', onKeyDown)\n      return () => {\n        containerElement.removeEventListener('keydown', onKeyDown)\n      }\n    }\n  }, [active, paused, container, initialFocus, focusElement])\n}\n","import type { RefObject } from 'react'\nimport { useEffect } from 'react'\n\nexport interface UseOutsideClickOptions {\n  refs: RefObject<HTMLElement | null>[],\n  active?: boolean,\n}\n\nexport interface UseOutsideClickHandlers {\n  onOutsideClick: (event: MouseEvent | TouchEvent) => void,\n}\n\nexport interface UseOutsideClickProps extends UseOutsideClickOptions, UseOutsideClickHandlers{}\n\n\nexport const useOutsideClick = ({ refs, onOutsideClick, active = true }: UseOutsideClickProps) => {\n  useEffect(() => {\n    if (!active) return\n\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\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      onOutsideClick(event)\n    }\n    document.addEventListener('mousedown', listener)\n    document.addEventListener('touchstart', listener)\n    document.addEventListener('pointerdown', listener)\n    return () => {\n      document.removeEventListener('mousedown', listener)\n      document.removeEventListener('touchstart', listener)\n      document.removeEventListener('pointerdown', listener)\n    }\n  }, [refs, onOutsideClick, active])\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\n\nexport interface UsePresenceRefProps {\n  isOpen?: boolean,\n}\n\nexport const usePresenceRef = <T extends HTMLElement>({\n  isOpen = true,\n}: UsePresenceRefProps) => {\n  const [isPresent, setIsPresent] = useState(false)\n  const ref = useRef<T>(null)\n\n  const refAssignment = useCallback((node: T | null) => {\n    ref.current = node\n    setIsPresent(prev => prev || !!node)\n  }, [])\n\n\n  useEffect(() => {\n    if(!isOpen) {\n      setIsPresent(false)\n    }\n  }, [isOpen])\n\n  return {\n    isPresent,\n    ref,\n    refAssignment,\n  }\n}","import type { InputHTMLAttributes } from 'react'\nimport React, { forwardRef, useRef } from 'react'\nimport type { UseDelayOptionsResolved } from '@/src/hooks/useDelay'\nimport { useDelay } from '@/src/hooks/useDelay'\nimport { useFocusManagement } from '@/src/hooks/focus/useFocusManagement'\nimport type { FormFieldInteractionStates } from '../../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport type EditCompleteOptionsResolved = {\n  onBlur: boolean,\n  afterDelay: boolean,\n  allowEnterComplete?: boolean,\n} & Omit<UseDelayOptionsResolved, 'disabled'>\n\nexport type EditCompleteOptions = Partial<EditCompleteOptionsResolved>\n\nconst defaultEditCompleteOptions: EditCompleteOptionsResolved = {\n  allowEnterComplete: false,\n  onBlur: true,\n  afterDelay: false,\n  delay: 2500\n}\n\nexport type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'value'>\n  & Partial<FormFieldDataHandling<string>>\n  & Partial<FormFieldInteractionStates>\n  & {\n    'editCompleteOptions'?: EditCompleteOptions,\n    'initialValue'?: string,\n    'data-name'?: string,\n  }\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input({\n  value: controlledValue,\n  initialValue,\n  invalid = false,\n  onValueChange,\n  onEditComplete,\n  editCompleteOptions,\n  ...props\n}, forwardedRef) {\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onValueChange,\n    defaultValue: initialValue,\n  })\n  const {\n    onBlur: allowEditCompleteOnBlur,\n    afterDelay,\n    delay,\n    allowEnterComplete\n  } = { ...defaultEditCompleteOptions, ...editCompleteOptions }\n\n  const {\n    restartTimer,\n    clearTimer\n  } = useDelay({ delay, disabled: !afterDelay || props.disabled || props.readOnly })\n\n  const innerRef = useRef<HTMLInputElement>(null)\n\n  const { focusNext } = useFocusManagement()\n\n  return (\n    <input\n      {...props}\n      value={value}\n      ref={ReactRefsUtil.assingRefsBuilder([innerRef, forwardedRef])}\n\n      onKeyDown={event => {\n        props.onKeyDown?.(event)\n        if (!allowEnterComplete) {\n          return\n        }\n        if (event.key === 'Enter' && !event.shiftKey) {\n          event.preventDefault()\n          innerRef.current?.blur()\n          onEditComplete?.((event.target as HTMLInputElement).value)\n          focusNext()\n        }\n      }}\n      onBlur={event => {\n        props.onBlur?.(event)\n        if (allowEditCompleteOnBlur) {\n          onEditComplete?.(event.target.value)\n          clearTimer()\n        }\n      }}\n      onChange={event => {\n        props.onChange?.(event)\n        const value = event.target.value\n        restartTimer(() => {\n          innerRef.current?.blur()\n          onEditComplete?.(value)\n        })\n        setValue(value)\n      }}\n\n      data-name={props['data-name'] ?? 'input'}\n      data-value={PropsUtil.dataAttributes.bool(!!value)}\n      {...PropsUtil.dataAttributes.interactionStates({ ...props, invalid })}\n\n      {...PropsUtil.aria.interactionStates({ ...props, invalid }, props)}\n    />\n  )\n})\n","import { useEffect, useState } from 'react'\n\nexport type UseDelayOptionsResolved = {\n  delay: number,\n  disabled: boolean,\n}\n\nexport type UseDelayOptions = Partial<UseDelayOptionsResolved>\n\nconst defaultOptions: UseDelayOptionsResolved = {\n  delay: 3000,\n  disabled: false,\n}\n\nexport function useDelay(options?: UseDelayOptions) {\n  const [timer, setTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n  const { delay, disabled }: UseDelayOptionsResolved = {\n    ...defaultOptions,\n    ...options\n  }\n\n  const clearTimer = () => {\n    clearTimeout(timer)\n    setTimer(undefined)\n  }\n\n  const restartTimer = (onDelayFinish: () => void) => {\n    if(disabled) {\n      return\n    }\n    clearTimeout(timer)\n    setTimer(setTimeout(() => {\n      onDelayFinish()\n      setTimer(undefined)\n    }, delay))\n  }\n\n  useEffect(() => {\n    return () => {\n      clearTimeout(timer)\n    }\n  }, [timer])\n\n  useEffect(() => {\n    if(disabled){\n      clearTimeout(timer)\n      setTimer(undefined)\n    }\n  }, [disabled, timer])\n\n  return { restartTimer, clearTimer, hasActiveTimer: !!timer }\n}","import { useCallback } from 'react'\n\nexport function useFocusManagement() {\n  const getFocusableElements = useCallback((): HTMLElement[] => {\n    return Array.from(\n      document.querySelectorAll(\n        'input, button, select, textarea, a[href], [tabindex]:not([tabindex=\"-1\"])'\n      )\n    ).filter(\n      (el): el is HTMLElement =>\n        el instanceof HTMLElement &&\n        !el.hasAttribute('disabled') &&\n        !el.hasAttribute('hidden') &&\n        el.tabIndex !== -1\n    )\n  }, [])\n\n  const getNextFocusElement = useCallback((): HTMLElement | undefined => {\n    const elements = getFocusableElements()\n    if(elements.length === 0) {\n      return undefined\n    }\n    let nextElement = elements[0]\n    if(document.activeElement instanceof HTMLElement) {\n      const currentIndex = elements.indexOf(document.activeElement)\n      nextElement = elements[(currentIndex + 1) % elements.length]\n    }\n    return nextElement\n  }, [getFocusableElements])\n\n  const focusNext = useCallback(() => {\n    const nextElement = getNextFocusElement()\n    nextElement?.focus()\n  }, [getNextFocusElement])\n\n  const getPreviousFocusElement = useCallback((): HTMLElement | undefined => {\n    const elements = getFocusableElements()\n    if(elements.length === 0) {\n      return undefined\n    }\n    let previousElement = elements[0]\n    if(document.activeElement instanceof HTMLElement) {\n      const currentIndex = elements.indexOf(document.activeElement)\n      if(currentIndex === 0) {\n        previousElement = elements[elements.length - 1]\n      } else {\n        previousElement = elements[currentIndex - 1]\n      }\n    }\n    return previousElement\n  }, [getFocusableElements])\n\n  const focusPrevious = useCallback(() => {\n    const previousElement = getPreviousFocusElement()\n    if (previousElement) previousElement.focus()\n  }, [getPreviousFocusElement])\n\n  return {\n    getFocusableElements,\n    getNextFocusElement,\n    getPreviousFocusElement,\n    focusNext,\n    focusPrevious,\n  }\n}","import type { ProcessModelLibraryEntry } from './types'\n\nexport const processModelLibrary: ProcessModelLibraryEntry[] = [\n  {\n    id: 'patient-flow',\n    name: 'Patient Flow',\n    description: 'Hospital patient admission to discharge · 1,280 total traces',\n    graph: {\n      nodes: [\n        { id: 'start', label: 'Patient created', count: '1.280', type: 'start', layer: 0, col: 0 },\n        { id: 'task-172', label: 'Task added', count: '172', type: 'activity', layer: 1, col: 0 },\n        { id: 'assign-1108', label: 'Assign bed', count: '1.108', type: 'activity', layer: 1, col: 1 },\n        { id: 'assign-208', label: 'Assign bed', count: '208', type: 'activity', layer: 2, col: 0 },\n        { id: 'task-900', label: 'Task added', count: '900', type: 'activity', layer: 2, col: 1 },\n        { id: 'task-done', label: 'Task done', count: '900', type: 'activity', layer: 2, col: 2, activityIcon: 'check' },\n        { id: 'unassigned', label: 'Unassigned', count: '1.108', type: 'activity', layer: 3, col: 0 },\n        { id: 'end', label: 'Patient discharged', count: '1.280', type: 'end', layer: 4, col: 0 },\n      ],\n      edges: [\n        { from: 'start', to: 'assign-1108', label: '1.108', weight: 1108 },\n        { from: 'start', to: 'task-172', label: '172', weight: 172 },\n        { from: 'assign-1108', to: 'task-900', label: '900', weight: 900 },\n        { from: 'assign-1108', to: 'assign-208', label: '208', weight: 208 },\n        { from: 'task-172', to: 'assign-208', label: '172', weight: 172 },\n        { from: 'task-900', to: 'unassigned', label: '900', weight: 900 },\n        { from: 'task-900', to: 'task-done', label: '528', weight: 528 },\n        { from: 'task-done', to: 'task-900', label: '528', weight: 528 },\n        { from: 'assign-208', to: 'unassigned', label: '208', weight: 208 },\n        { from: 'assign-208', to: 'end', label: '172', weight: 172 },\n        { from: 'unassigned', to: 'end', label: '1.108', weight: 1108 },\n      ],\n      traces: [\n        { name: 'Main path', nodes: ['start', 'assign-1108', 'task-900', 'unassigned', 'end'] },\n        { name: 'Task loop ×1', nodes: ['start', 'assign-1108', 'task-900', 'task-done', 'task-900', 'unassigned', 'end'] },\n        { name: 'Task loop ×2', nodes: ['start', 'assign-1108', 'task-900', 'task-done', 'task-900', 'task-done', 'task-900', 'unassigned', 'end'] },\n        { name: 'Alt: Task added → Assign 208', nodes: ['start', 'task-172', 'assign-208', 'unassigned', 'end'] },\n        { name: 'Alt: Assign bed → Assign 208', nodes: ['start', 'assign-1108', 'assign-208', 'unassigned', 'end'] },\n        { name: 'Short: directly discharged', nodes: ['start', 'task-172', 'assign-208', 'end'] },\n        { name: 'Short: Assign bed → discharged', nodes: ['start', 'assign-1108', 'assign-208', 'end'] },\n      ],\n    },\n  },\n  {\n    id: 'order-fulfillment',\n    name: 'Order Fulfillment',\n    description: 'E-commerce order from placement to delivery · 3,440 traces',\n    graph: {\n      nodes: [\n        { id: 'start', label: 'Order placed', count: '3.440', type: 'start', layer: 0, col: 0 },\n        { id: 'payment', label: 'Payment check', count: '3.440', type: 'activity', layer: 1, col: 0 },\n        { id: 'fraud', label: 'Fraud review', count: '412', type: 'activity', layer: 2, col: 0 },\n        { id: 'pick', label: 'Pick & pack', count: '3.028', type: 'activity', layer: 2, col: 1 },\n        { id: 'reject', label: 'Order rejected', count: '89', type: 'activity', layer: 3, col: 0 },\n        { id: 'ship', label: 'Shipped', count: '3.351', type: 'activity', layer: 3, col: 1 },\n        { id: 'return', label: 'Return initiated', count: '187', type: 'activity', layer: 4, col: 0 },\n        { id: 'deliver', label: 'Delivered', count: '3.164', type: 'activity', layer: 4, col: 1 },\n        { id: 'end', label: 'Order complete', count: '3.440', type: 'end', layer: 5, col: 0 },\n      ],\n      edges: [\n        { from: 'start', to: 'payment', label: '3.440', weight: 3440 },\n        { from: 'payment', to: 'fraud', label: '412', weight: 412 },\n        { from: 'payment', to: 'pick', label: '3.028', weight: 3028 },\n        { from: 'fraud', to: 'reject', label: '89', weight: 89 },\n        { from: 'fraud', to: 'pick', label: '323', weight: 323 },\n        { from: 'pick', to: 'ship', label: '3.351', weight: 3351 },\n        { from: 'ship', to: 'deliver', label: '3.164', weight: 3164 },\n        { from: 'ship', to: 'return', label: '187', weight: 187 },\n        { from: 'return', to: 'pick', label: '142', weight: 142 },\n        { from: 'deliver', to: 'end', label: '3.164', weight: 3164 },\n        { from: 'reject', to: 'end', label: '89', weight: 89 },\n        { from: 'return', to: 'end', label: '45', weight: 45 },\n      ],\n      traces: [\n        { name: 'Happy path', nodes: ['start', 'payment', 'pick', 'ship', 'deliver', 'end'] },\n        { name: 'Fraud review → cleared', nodes: ['start', 'payment', 'fraud', 'pick', 'ship', 'deliver', 'end'] },\n        { name: 'Fraud review → rejected', nodes: ['start', 'payment', 'fraud', 'reject', 'end'] },\n        { name: 'Return & reship', nodes: ['start', 'payment', 'pick', 'ship', 'return', 'pick', 'ship', 'deliver', 'end'] },\n        { name: 'Return only', nodes: ['start', 'payment', 'pick', 'ship', 'return', 'end'] },\n        { name: 'Fraud + return', nodes: ['start', 'payment', 'fraud', 'pick', 'ship', 'return', 'pick', 'ship', 'deliver', 'end'] },\n      ],\n    },\n  },\n  {\n    id: 'software-deploy',\n    name: 'Software Deployment',\n    description: 'CI/CD pipeline from commit to production · 892 runs',\n    graph: {\n      nodes: [\n        { id: 'start', label: 'Commit pushed', count: '892', type: 'start', layer: 0, col: 0 },\n        { id: 'lint', label: 'Lint & format', count: '892', type: 'activity', layer: 1, col: 0 },\n        { id: 'test', label: 'Unit tests', count: '851', type: 'activity', layer: 2, col: 0 },\n        { id: 'build', label: 'Build artifact', count: '819', type: 'activity', layer: 3, col: 0 },\n        { id: 'staging', label: 'Deploy staging', count: '819', type: 'activity', layer: 4, col: 0 },\n        { id: 'e2e', label: 'E2E tests', count: '794', type: 'activity', layer: 5, col: 0 },\n        { id: 'approve', label: 'Manual approval', count: '761', type: 'activity', layer: 5, col: 1 },\n        { id: 'prod', label: 'Deploy prod', count: '761', type: 'activity', layer: 6, col: 0 },\n        { id: 'rollback', label: 'Rollback', count: '58', type: 'activity', layer: 7, col: 0 },\n        { id: 'end', label: 'Release complete', count: '892', type: 'end', layer: 8, col: 0 },\n      ],\n      edges: [\n        { from: 'start', to: 'lint', label: '892', weight: 892 },\n        { from: 'lint', to: 'test', label: '851', weight: 851 },\n        { from: 'lint', to: 'end', label: '41', weight: 41 },\n        { from: 'test', to: 'build', label: '819', weight: 819 },\n        { from: 'test', to: 'end', label: '32', weight: 32 },\n        { from: 'build', to: 'staging', label: '819', weight: 819 },\n        { from: 'staging', to: 'e2e', label: '794', weight: 794 },\n        { from: 'staging', to: 'approve', label: '25', weight: 25 },\n        { from: 'e2e', to: 'approve', label: '761', weight: 761 },\n        { from: 'e2e', to: 'end', label: '33', weight: 33 },\n        { from: 'approve', to: 'prod', label: '761', weight: 761 },\n        { from: 'prod', to: 'rollback', label: '58', weight: 58 },\n        { from: 'prod', to: 'end', label: '703', weight: 703 },\n        { from: 'rollback', to: 'staging', label: '31', weight: 31 },\n        { from: 'rollback', to: 'end', label: '27', weight: 27 },\n      ],\n      traces: [\n        { name: 'Green path', nodes: ['start', 'lint', 'test', 'build', 'staging', 'e2e', 'approve', 'prod', 'end'] },\n        { name: 'Lint failure', nodes: ['start', 'lint', 'end'] },\n        { name: 'Test failure', nodes: ['start', 'lint', 'test', 'end'] },\n        { name: 'E2E failure', nodes: ['start', 'lint', 'test', 'build', 'staging', 'e2e', 'end'] },\n        { name: 'Rollback & retry', nodes: ['start', 'lint', 'test', 'build', 'staging', 'e2e', 'approve', 'prod', 'rollback', 'staging', 'e2e', 'approve', 'prod', 'end'] },\n        { name: 'Skip E2E (fast track)', nodes: ['start', 'lint', 'test', 'build', 'staging', 'approve', 'prod', 'end'] },\n        { name: 'Rollback → abandon', nodes: ['start', 'lint', 'test', 'build', 'staging', 'e2e', 'approve', 'prod', 'rollback', 'end'] },\n      ],\n    },\n  },\n  {\n    id: 'loan-approval',\n    name: 'Loan Approval',\n    description: 'Bank loan application process · 5,120 applications',\n    graph: {\n      nodes: [\n        { id: 'start', label: 'Application', count: '5.120', type: 'start', layer: 0, col: 0 },\n        { id: 'kyc', label: 'KYC check', count: '5.120', type: 'activity', layer: 1, col: 0 },\n        { id: 'credit', label: 'Credit score', count: '4.890', type: 'activity', layer: 2, col: 0 },\n        { id: 'manual', label: 'Manual review', count: '1.240', type: 'activity', layer: 3, col: 0 },\n        { id: 'auto-ok', label: 'Auto approved', count: '3.650', type: 'activity', layer: 3, col: 1 },\n        { id: 'collateral', label: 'Collateral check', count: '890', type: 'activity', layer: 4, col: 0 },\n        { id: 'approved', label: 'Loan approved', count: '4.210', type: 'activity', layer: 4, col: 1 },\n        { id: 'declined', label: 'Loan declined', count: '910', type: 'activity', layer: 5, col: 0 },\n        { id: 'disburse', label: 'Disbursement', count: '4.210', type: 'activity', layer: 5, col: 1 },\n        { id: 'end', label: 'Case closed', count: '5.120', type: 'end', layer: 6, col: 0 },\n      ],\n      edges: [\n        { from: 'start', to: 'kyc', label: '5.120', weight: 5120 },\n        { from: 'kyc', to: 'credit', label: '4.890', weight: 4890 },\n        { from: 'kyc', to: 'declined', label: '230', weight: 230 },\n        { from: 'credit', to: 'manual', label: '1.240', weight: 1240 },\n        { from: 'credit', to: 'auto-ok', label: '3.650', weight: 3650 },\n        { from: 'manual', to: 'collateral', label: '890', weight: 890 },\n        { from: 'manual', to: 'approved', label: '350', weight: 350 },\n        { from: 'manual', to: 'declined', label: '0', weight: 50 },\n        { from: 'auto-ok', to: 'approved', label: '3.650', weight: 3650 },\n        { from: 'collateral', to: 'approved', label: '760', weight: 760 },\n        { from: 'collateral', to: 'declined', label: '130', weight: 130 },\n        { from: 'approved', to: 'disburse', label: '4.210', weight: 4210 },\n        { from: 'declined', to: 'end', label: '910', weight: 910 },\n        { from: 'disburse', to: 'end', label: '4.210', weight: 4210 },\n      ],\n      traces: [\n        { name: 'Auto-approved fast path', nodes: ['start', 'kyc', 'credit', 'auto-ok', 'approved', 'disburse', 'end'] },\n        { name: 'Manual review → approved', nodes: ['start', 'kyc', 'credit', 'manual', 'approved', 'disburse', 'end'] },\n        { name: 'Collateral required', nodes: ['start', 'kyc', 'credit', 'manual', 'collateral', 'approved', 'disburse', 'end'] },\n        { name: 'Collateral insufficient', nodes: ['start', 'kyc', 'credit', 'manual', 'collateral', 'declined', 'end'] },\n        { name: 'KYC failure → declined', nodes: ['start', 'kyc', 'declined', 'end'] },\n        { name: 'Manual review → declined', nodes: ['start', 'kyc', 'credit', 'manual', 'declined', 'end'] },\n      ],\n    },\n  },\n  {\n    id: 'support-ticket',\n    name: 'Support Ticket',\n    description: 'Customer support ticket lifecycle · 8,750 tickets',\n    graph: {\n      nodes: [\n        { id: 'start', label: 'Ticket opened', count: '8.750', type: 'start', layer: 0, col: 0 },\n        { id: 'triage', label: 'Triage', count: '8.750', type: 'activity', layer: 1, col: 0 },\n        { id: 'l1', label: 'L1 support', count: '6.300', type: 'activity', layer: 2, col: 0 },\n        { id: 'l2', label: 'L2 escalation', count: '2.450', type: 'activity', layer: 2, col: 1 },\n        { id: 'resolved', label: 'Resolved', count: '5.890', type: 'activity', layer: 3, col: 0 },\n        { id: 'l3', label: 'L3 engineering', count: '1.120', type: 'activity', layer: 3, col: 1 },\n        { id: 'reopen', label: 'Reopened', count: '940', type: 'activity', layer: 4, col: 0 },\n        { id: 'fix', label: 'Bug fix deployed', count: '870', type: 'activity', layer: 4, col: 1 },\n        { id: 'csat', label: 'CSAT survey', count: '7.810', type: 'activity', layer: 5, col: 0 },\n        { id: 'end', label: 'Ticket closed', count: '8.750', type: 'end', layer: 6, col: 0 },\n      ],\n      edges: [\n        { from: 'start', to: 'triage', label: '8.750', weight: 8750 },\n        { from: 'triage', to: 'l1', label: '6.300', weight: 6300 },\n        { from: 'triage', to: 'l2', label: '2.450', weight: 2450 },\n        { from: 'l1', to: 'resolved', label: '5.890', weight: 5890 },\n        { from: 'l1', to: 'l2', label: '410', weight: 410 },\n        { from: 'l2', to: 'resolved', label: '1.740', weight: 1740 },\n        { from: 'l2', to: 'l3', label: '1.120', weight: 1120 },\n        { from: 'resolved', to: 'reopen', label: '940', weight: 940 },\n        { from: 'resolved', to: 'csat', label: '4.950', weight: 4950 },\n        { from: 'l3', to: 'fix', label: '870', weight: 870 },\n        { from: 'l3', to: 'resolved', label: '250', weight: 250 },\n        { from: 'reopen', to: 'l1', label: '580', weight: 580 },\n        { from: 'reopen', to: 'l2', label: '360', weight: 360 },\n        { from: 'fix', to: 'resolved', label: '870', weight: 870 },\n        { from: 'csat', to: 'end', label: '7.810', weight: 7810 },\n        { from: 'resolved', to: 'end', label: '2.860', weight: 2860 },\n      ],\n      traces: [\n        { name: 'L1 quick resolve', nodes: ['start', 'triage', 'l1', 'resolved', 'csat', 'end'] },\n        { name: 'L2 escalation → resolved', nodes: ['start', 'triage', 'l2', 'resolved', 'csat', 'end'] },\n        { name: 'Full escalation to L3', nodes: ['start', 'triage', 'l1', 'l2', 'l3', 'fix', 'resolved', 'csat', 'end'] },\n        { name: 'Resolved then reopened', nodes: ['start', 'triage', 'l1', 'resolved', 'reopen', 'l1', 'resolved', 'csat', 'end'] },\n        { name: 'L3 → closed no survey', nodes: ['start', 'triage', 'l2', 'l3', 'resolved', 'end'] },\n        { name: 'Reopen escalates to L3', nodes: ['start', 'triage', 'l1', 'resolved', 'reopen', 'l2', 'l3', 'fix', 'resolved', 'csat', 'end'] },\n      ],\n    },\n  },\n  {\n    id: 'recipe',\n    name: 'Pizza Order (Restaurant)',\n    description: 'Restaurant order from entry to table · 620 orders',\n    graph: {\n      nodes: [\n        { id: 'start', label: 'Guest seated', count: '620', type: 'start', layer: 0, col: 0 },\n        { id: 'order', label: 'Order taken', count: '620', type: 'activity', layer: 1, col: 0 },\n        { id: 'kitchen', label: 'In kitchen', count: '620', type: 'activity', layer: 2, col: 0 },\n        { id: 'modify', label: 'Order modified', count: '88', type: 'activity', layer: 2, col: 1 },\n        { id: 'ready', label: 'Food ready', count: '620', type: 'activity', layer: 3, col: 0 },\n        { id: 'serve', label: 'Served', count: '620', type: 'activity', layer: 4, col: 0 },\n        { id: 'complaint', label: 'Complaint', count: '34', type: 'activity', layer: 5, col: 0 },\n        { id: 'bill', label: 'Bill requested', count: '620', type: 'activity', layer: 5, col: 1 },\n        { id: 'end', label: 'Guest leaves', count: '620', type: 'end', layer: 6, col: 0 },\n      ],\n      edges: [\n        { from: 'start', to: 'order', label: '620', weight: 620 },\n        { from: 'order', to: 'kitchen', label: '620', weight: 620 },\n        { from: 'kitchen', to: 'modify', label: '88', weight: 88 },\n        { from: 'modify', to: 'kitchen', label: '88', weight: 88 },\n        { from: 'kitchen', to: 'ready', label: '620', weight: 620 },\n        { from: 'ready', to: 'serve', label: '620', weight: 620 },\n        { from: 'serve', to: 'complaint', label: '34', weight: 34 },\n        { from: 'serve', to: 'bill', label: '586', weight: 586 },\n        { from: 'complaint', to: 'kitchen', label: '24', weight: 24 },\n        { from: 'complaint', to: 'bill', label: '10', weight: 10 },\n        { from: 'bill', to: 'end', label: '620', weight: 620 },\n      ],\n      traces: [\n        { name: 'Smooth dinner', nodes: ['start', 'order', 'kitchen', 'ready', 'serve', 'bill', 'end'] },\n        { name: 'Order modified once', nodes: ['start', 'order', 'kitchen', 'modify', 'kitchen', 'ready', 'serve', 'bill', 'end'] },\n        { name: 'Complaint handled', nodes: ['start', 'order', 'kitchen', 'ready', 'serve', 'complaint', 'bill', 'end'] },\n        { name: 'Complaint → remake', nodes: ['start', 'order', 'kitchen', 'ready', 'serve', 'complaint', 'kitchen', 'ready', 'serve', 'bill', 'end'] },\n        { name: 'Multiple modifications', nodes: ['start', 'order', 'kitchen', 'modify', 'kitchen', 'modify', 'kitchen', 'ready', 'serve', 'bill', 'end'] },\n      ],\n    },\n  },\n]\n\nexport function getProcessModelLibraryEntry(id: string): ProcessModelLibraryEntry | undefined {\n  return processModelLibrary.find((e) => e.id === id)\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { useId, useMemo, forwardRef } from 'react'\n\nexport type FormFieldAriaAttributes = Pick<HTMLAttributes<HTMLElement>, 'aria-labelledby' | 'aria-describedby' | 'aria-disabled' | 'aria-readonly' | 'aria-invalid' | 'aria-errormessage' | 'aria-required'>\n\nexport type FormFieldInteractionStates = {\n  invalid: boolean,\n  disabled: boolean,\n  readOnly: boolean,\n  required: boolean,\n}\n\nexport type FormFieldLayoutIds = {\n  input: string,\n  error: string,\n  label: string,\n  description: string,\n}\n\nexport type FormFieldLayoutBag = {\n  interactionStates: FormFieldInteractionStates,\n  ariaAttributes: FormFieldAriaAttributes,\n  id: string,\n}\n\nexport type FormFieldLayoutProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & Omit<Partial<FormFieldInteractionStates>, 'invalid'> & {\n  children: (bag: FormFieldLayoutBag) => ReactNode,\n  ids?: Partial<FormFieldLayoutIds>,\n  label?: ReactNode,\n  labelProps?: Omit<HTMLAttributes<HTMLLabelElement>, 'children' | 'id'>,\n  invalidDescription?: ReactNode,\n  invalidDescriptionProps?: Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'id'>,\n  description?: ReactNode,\n  descriptionProps?: Omit<HTMLAttributes<HTMLParagraphElement>, 'children' | 'id'>,\n  showRequiredIndicator?: boolean,\n}\n\nexport const FormFieldLayout = forwardRef<HTMLDivElement, FormFieldLayoutProps>(function FormFieldLayout({\n  children,\n  ids: idOverwrites = {},\n  required = false,\n  disabled = false,\n  readOnly = false,\n  label,\n  labelProps,\n  invalidDescription,\n  invalidDescriptionProps,\n  description,\n  descriptionProps,\n  showRequiredIndicator = true,\n  ...props\n}, ref) {\n  const generatedId = useId()\n\n  const ids = useMemo(() => ({\n    input: idOverwrites.input ?? `form-field-input-${generatedId}`,\n    error: idOverwrites.error ?? `form-field-error-${generatedId}`,\n    label: idOverwrites.label ?? `form-field-label-${generatedId}`,\n    description: idOverwrites.description ?? `form-field-description-${generatedId}`\n  }), [generatedId, idOverwrites])\n\n  const describedBy: string = [\n    description ? ids.description : undefined,\n    invalidDescription ? ids.error : undefined,\n  ].filter(Boolean).join(' ')\n\n  const invalid = !!invalidDescription\n\n  const inputAriaAttributes: FormFieldAriaAttributes = useMemo(() => ({\n    'aria-required': required,\n    'aria-describedby': describedBy,\n    'aria-labelledby': label ? ids.label : undefined,\n    'aria-invalid': invalid,\n    'aria-errormessage': invalid ? ids.error : undefined,\n  }), [describedBy, ids.error, ids.label, invalid, label, required])\n\n  const state: FormFieldInteractionStates = useMemo(() => ({\n    disabled,\n    invalid,\n    readOnly,\n    required,\n  }), [disabled, invalid, readOnly, required])\n\n  const bag: FormFieldLayoutBag = {\n    interactionStates: state,\n    ariaAttributes: inputAriaAttributes,\n    id: ids.input,\n  }\n\n  return (\n    <div\n      {...props}\n      ref={ref}\n\n      data-name=\"form-field-container\"\n    >\n      {label && (\n        <label\n          {...labelProps}\n          id={ids.label}\n          htmlFor={ids.input}\n          data-name=\"form-field-label\"\n        >\n          {label}\n          {showRequiredIndicator && required && <div role=\"none\" className=\"bg-primary w-2 h-2 rounded-full\" />}\n        </label>\n      )}\n      {description && (\n        <p\n          {...descriptionProps}\n          id={ids.description}\n\n          data-name=\"form-field-description\"\n        >\n          {description}\n        </p>\n      )}\n      {children(bag)}\n      {invalid && (\n        <div\n          {...invalidDescriptionProps}\n          id={ids.description}\n\n          role=\"alert\"\n          aria-hidden={!invalid}\n          aria-live=\"polite\"\n\n          data-name=\"form-field-error\"\n        >\n          {invalidDescription}\n        </div>\n      )}\n    </div>\n  )\n})\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { createContext, useCallback, useContext, useSyncExternalStore } from 'react'\nimport type { FormStore, FormValue, FormValidationBehaviour } from './FormStore'\nimport type { UseCreateFormResult } from './useCreateForm'\nimport type { FormFieldDataHandling } from './FormField'\n\nexport type FormContextType<T extends FormValue> = UseCreateFormResult<T>\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const FormContext = createContext<FormContextType<any> | null>(null)\n\nexport type FormProviderProps<T extends FormValue> = PropsWithChildren & {\n  state: FormContextType<T>,\n}\n\nexport const FormProvider = <T extends FormValue>({ children, state }: FormProviderProps<T>) => {\n  return (\n    <FormContext.Provider value={state}>\n      {children}\n    </FormContext.Provider>\n  )\n}\n\nexport function useForm<T extends FormValue>() {\n  const ctx = useContext(FormContext)\n  if (!ctx) throw new Error('FormContext is only available inside a <Form>')\n  return ctx as FormContextType<T>\n}\n\nexport interface UseFormFieldParameter<T extends FormValue> {\n  key: keyof T,\n}\n\nexport interface UseFormFieldOptions {\n  triggerUpdate?: boolean,\n  validationBehaviour?: FormValidationBehaviour,\n}\n\nexport interface UserFormFieldProps<T extends FormValue> extends UseFormFieldParameter<T>, UseFormFieldOptions {}\n\nexport type FormFieldResult<T> = {\n  store: FormStore<T>,\n  value: T,\n  error: ReactNode,\n  touched: boolean,\n  hasTriedSubmitting: boolean,\n  dataProps: FormFieldDataHandling<T>,\n  registerRef: (el: HTMLElement | null) => void,\n}\n\nexport function useFormField<T extends FormValue, K extends keyof T>(key: K, { triggerUpdate = true, validationBehaviour = 'touched' }: UseFormFieldOptions): FormFieldResult<T[K]> | null {\n  const context = useContext(FormContext)\n\n  const subscribe = useCallback((cb: () => void) => {\n    if (!context) return () => { }\n    return context.store.subscribe(key, cb)\n  }, [context, key])\n\n  const subscribeAll = useCallback((cb: () => void) => {\n    if (!context) return () => { }\n    return context.store.subscribe('ALL', cb)\n  }, [context])\n\n  const value = useSyncExternalStore(\n    subscribe,\n    () => context ? context.store.getValue(key) : undefined\n  )\n\n  const error = useSyncExternalStore(\n    subscribe,\n    () => context ? context.store.getError(key) : undefined\n  )\n\n  const touched = useSyncExternalStore(\n    subscribe,\n    () => context ? context.store.getTouched(key) : undefined\n  )\n\n  const hasTriedSubmitting = useSyncExternalStore(\n    subscribeAll,\n    () => context ? context.store.getHasTriedSubmitting() : undefined\n  )\n  const isShowingErrors =\n    validationBehaviour === 'always' ||\n    (validationBehaviour === 'touched' && (touched ?? false)) ||\n    (validationBehaviour === 'submit' && (hasTriedSubmitting ?? false))\n\n\n  const getDataProps = useCallback(() => {\n    return {\n      value,\n      onValueChange: (val: T[K]) => context?.store.setValue(key, val),\n      onEditComplete: (val: T[K]) => {\n        context?.store.setTouched(key)\n        context?.store.setValue(key, val, triggerUpdate)\n      }\n    }\n  }, [context?.store, key, triggerUpdate, value])\n\n\n  if (!context) return null\n\n  const { registerRef } = context\n\n  return {\n    store: context.store,\n    value,\n    error: isShowingErrors ? error : undefined,\n    touched: touched ?? false,\n    hasTriedSubmitting: hasTriedSubmitting ?? false,\n    dataProps: getDataProps(),\n    registerRef: registerRef(key),\n  }\n}\n\nexport type UseFormObserverProps<T extends FormValue> = {\n  formStore?: FormStore<T>,\n}\n\nexport interface FormObserverResult<T extends FormValue> {\n  store: FormStore<T>,\n  values: T,\n  touched: Partial<Record<keyof T, boolean>>,\n  errors: Partial<Record<keyof T, ReactNode>>,\n  hasErrors: boolean,\n  hasTriedSubmitting: boolean,\n}\n\nexport function useFormObserver<T extends FormValue>({ formStore }: UseFormObserverProps<T> = {}) : FormObserverResult<T> | null {\n  const context = useContext(FormContext)\n  const store = formStore ?? context?.store as FormStore<T>\n\n  const subscribe = useCallback((cb: () => void) => {\n    if (!store) return () => { }\n    return store.subscribe('ALL', cb)\n  }, [store])\n\n\n  const values = useSyncExternalStore(subscribe, () => store ? store.getAllValues() : undefined)\n  const errors = useSyncExternalStore(subscribe, () => store ? store.getErrors() : undefined)\n  const touched = useSyncExternalStore(subscribe, () => store ? store.getAllTouched() : undefined)\n  const hasErrors = useSyncExternalStore(subscribe, () => store ? store.getHasError() : undefined)\n  const hasTriedSubmitting = useSyncExternalStore(subscribe, () => store ? store.getHasTriedSubmitting() : undefined)\n\n  if (!store) return null\n\n  return {\n    store,\n    values,\n    errors,\n    touched,\n    hasErrors,\n    hasTriedSubmitting,\n  }\n}\n\nexport interface UseFormObserverKeyProps<T extends FormValue, K extends keyof T> {\n  formStore?: FormStore<T>,\n  formKey: K,\n}\n\nexport interface FormObserverKeyResult<T extends FormValue, K extends keyof T> {\n  store: FormStore<T>,\n  value: T[K],\n  error: ReactNode,\n  hasError: boolean,\n  touched: boolean,\n}\n\nexport function useFormObserverKey<T extends FormValue, K extends keyof T>({ formStore, formKey }: UseFormObserverKeyProps<T, K>): FormObserverKeyResult<T, K> | null {\n  const context = useContext(FormContext)\n  const store = formStore ?? context?.store as FormStore<T>\n\n  const subscribe = useCallback((cb: () => void) => {\n    if (!store) return () => { }\n    return store.subscribe(formKey, cb)\n  }, [store, formKey])\n\n  const value = useSyncExternalStore(subscribe, () => store ? store.getValue(formKey) : undefined)\n  const error = useSyncExternalStore(subscribe, () => store ? store.getError(formKey) : undefined)\n  const touched = useSyncExternalStore(subscribe, () => store ? store.getTouched(formKey) : undefined)\n\n  if (!store) return null\n\n  return {\n    store,\n    value,\n    error,\n    touched,\n    hasError: !!error,\n  }\n}","import type { FormFieldAriaAttributes, FormFieldInteractionStates } from './FieldLayout'\nimport { FormFieldLayout, type FormFieldLayoutProps } from './FieldLayout'\nimport { useFormField } from './FormContext'\nimport type { ReactNode } from 'react'\nimport type { FormValue, FormValidationBehaviour } from './FormStore'\n\nexport type FormFieldFocusableElementProps = FormFieldAriaAttributes & {\n  id: string,\n  ref: (element: HTMLElement | null) => void,\n}\n\nexport type FormFieldBag<T extends FormValue, K extends keyof T> = {\n  dataProps: FormFieldDataHandling<T[K]>,\n  focusableElementProps: FormFieldFocusableElementProps,\n  interactionStates: FormFieldInteractionStates,\n  touched: boolean,\n  other: {\n    updateValue: (value: T[K]) => void,\n  },\n}\n\nexport interface FormFieldProps<T extends FormValue, K extends keyof T> extends Omit<FormFieldLayoutProps, 'invalidDescription' | 'children'> {\n  children: (bag: FormFieldBag<T, K>) => ReactNode,\n  name: K,\n  triggerUpdateOnEditComplete?: boolean,\n  validationBehaviour?: FormValidationBehaviour,\n}\n\nexport type FormFieldDataHandling<T> = {\n  value: T,\n  onValueChange: (value: T) => void,\n  onEditComplete: (value: T) => void,\n}\n\nexport const FormField = <T extends FormValue, K extends keyof T>({ children, name, triggerUpdateOnEditComplete, validationBehaviour, ...props }: FormFieldProps<T, K>) => {\n  const formField = useFormField<T, K>(name, { triggerUpdate: triggerUpdateOnEditComplete, validationBehaviour })\n\n  if (!formField) {\n    throw new Error('<FormField> can only be used inside a FormContext try wrapping your app in a <FormProvider>')\n  }\n\n  return (\n    <FormFieldLayout {...props} invalidDescription={formField.error}>\n      {(formFieldLayoutBag) => children({\n        dataProps: formField.dataProps,\n        focusableElementProps: {\n          id: formFieldLayoutBag.id,\n          ...formFieldLayoutBag.ariaAttributes,\n          ref: formField.registerRef,\n        },\n        interactionStates: formFieldLayoutBag.interactionStates,\n        touched: formField.touched,\n        other: {\n          updateValue: (value: T[K]) => formField.store.setValue(name, value, true),\n        },\n      })}\n    </FormFieldLayout>\n  )\n}","import type { ReactNode } from 'react'\nimport type { FormValue } from './FormStore'\nimport type { FormObserverKeyResult, UseFormObserverKeyProps, UseFormObserverProps } from './FormContext'\nimport { useFormObserver, useFormObserverKey, type FormObserverResult } from './FormContext'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\n\nexport interface FormObserverProps<T extends FormValue> extends UseFormObserverProps<T> {\n  children: (bag:FormObserverResult<T>) => ReactNode,\n}\n\nexport const FormObserver = <T extends FormValue>({ children, formStore }: FormObserverProps<T>) => {\n  const formObserver = useFormObserver<T>({ formStore })\n\n  if (!formObserver) {\n    throw new Error('<FormObserver> can only be used inside a <FormProvider>')\n  }\n\n  return BagFunctionUtil.resolve(children, formObserver)\n}\n\nexport interface FormObserverKeyProps<T extends FormValue, K extends keyof T> extends UseFormObserverKeyProps<T, K> {\n  children: (bag:FormObserverKeyResult<T, K>) => ReactNode,\n}\n\nexport const FormObserverKey = <T extends FormValue, K extends keyof T>({ children, formStore, formKey }: FormObserverKeyProps<T, K>) => {\n  const formObserver = useFormObserverKey<T, K>({ formStore, formKey })\n\n  if (!formObserver) {\n    throw new Error('<FormObserverKey> can only be used inside a <FormProvider>')\n  }\n\n  return BagFunctionUtil.resolve(children, formObserver)\n}","import type { ReactNode } from 'react'\n\nexport type FormValidationBehaviour = 'always' | 'touched' | 'submit'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FormValue =  Record<string, any>\n\nexport type FormEvent<T extends FormValue> = {\n  type: 'onSubmit',\n  key: 'ALL',\n  hasErrors: boolean,\n  values: T,\n  errors: Partial<Record<keyof T, ReactNode>>,\n} | {\n  type: 'reset',\n  key: 'ALL',\n  values: T,\n  errors: Partial<Record<keyof T, ReactNode>>,\n} | {\n  type: 'onTouched',\n  key: keyof T,\n  value: T[keyof T],\n  values: T,\n} | {\n  type: 'onUpdate',\n  key: 'ALL',\n  updatedKeys: (keyof T)[],\n  update: Partial<T>,\n  values: T,\n  hasErrors: boolean,\n  errors: Partial<Record<keyof T, ReactNode>>,\n} | {\n  type: 'onChange',\n  key: keyof T,\n  value: T[keyof T],\n  values: T,\n} | {\n  type: 'onError',\n  key: keyof T,\n  value: T[keyof T],\n  values: T,\n  error: ReactNode,\n}\n\nexport type FormEventListener<T extends FormValue> = (event: FormEvent<T>) => void\n\nexport type FormValidator<T extends FormValue> = (value: T[keyof T]) => ReactNode\n\nexport type FormStoreProps<T extends FormValue> = {\n  initialValues: T,\n  hasTriedSubmitting?: boolean,\n  submittingTouchesAll?: boolean,\n  validators?: Partial<{ [K in keyof T]: (v: T[K]) => ReactNode }>,\n}\n\nexport class FormStore<T extends FormValue> {\n  private values: T\n  private initialValues: T\n  private validators: Partial<{ [K in keyof T]: FormValidator<T> }>\n\n  private hasTriedSubmitting: boolean = false\n  private errors: Partial<Record<keyof T, ReactNode>> = {}\n  private touched: Partial<Record<keyof T, boolean>> = {}\n\n  private listeners = new Map<keyof T | 'ALL', Set<FormEventListener<T>>>()\n  private submittingTouchesAll: boolean = false\n\n\n  constructor({\n    initialValues,\n    hasTriedSubmitting,\n    submittingTouchesAll = true,\n    validators = {},\n  }: FormStoreProps<T>) {\n    this.initialValues = initialValues\n    this.values = { ...initialValues }\n\n    this.hasTriedSubmitting = hasTriedSubmitting\n    this.submittingTouchesAll = submittingTouchesAll\n    if(this.submittingTouchesAll && this.hasTriedSubmitting) {\n      Object.keys(this.initialValues).forEach(key => {\n        this.touched[key as keyof T] = true\n      })\n    }\n\n    this.validators = validators\n    this.validateAll()\n  }\n\n  // Values\n  getValue<K extends keyof T>(key: K): T[K] {\n    return this.values[key]\n  }\n\n  getAllValues(): T {\n    return this.values\n  }\n\n  setValue<K extends keyof T>(key: K, value: T[K], triggerUpdate: boolean = false) {\n    if (this.values[key] !== value) {\n      this.values[key] = value\n\n      this.notify({ type: 'onChange', key, value, values: this.values })\n      this.validate(key)\n    }\n\n    if(triggerUpdate) {\n      this.notify({\n        type: 'onUpdate',\n        key: 'ALL',\n        updatedKeys: [key],\n        update: { [key]: value } as unknown as Partial<T>,\n        values: this.values,\n        hasErrors: this.getHasError(),\n        errors: this.getErrors()\n      })\n    }\n  }\n\n  setValues(values: Partial<T>, triggerUpdate: boolean = false) {\n    Object.keys(values).forEach(key => this.setValue(key, values[key]))\n\n    if(triggerUpdate) {\n      this.notify({\n        type: 'onUpdate',\n        key: 'ALL',\n        updatedKeys: Object.keys(values) as (keyof T)[],\n        update: values,\n        values: this.values,\n        hasErrors: this.getHasError(),\n        errors: this.getErrors()\n      })\n    }\n  }\n\n  // Touched\n  getTouched(key: keyof T): boolean {\n    return !!this.touched[key]\n  }\n\n  getAllTouched(): Partial<Record<keyof T, boolean>> {\n    return this.touched\n  }\n\n  setTouched(key: keyof T, isTouched: boolean = true) {\n    if (this.touched[key] === isTouched) return\n\n    this.touched[key] = isTouched\n    this.notify({ type: 'onTouched', key, value: this.values[key], values: this.values })\n  }\n\n  // Error and Validation\n  getHasError() : boolean {\n    return Object.values(this.errors).some(value => value !== undefined && value !== null)\n  }\n\n  getErrors(): Partial<Record<keyof T, ReactNode>> {\n    return this.errors\n  }\n\n  getError(key: keyof T): ReactNode {\n    return this.errors[key]\n  }\n\n  private setError(key: keyof T, error: ReactNode) {\n    if (this.errors[key] === error) return\n\n    if (error === undefined || error === null) {\n      delete this.errors[key]\n    } else {\n      this.errors[key] = error\n    }\n\n    this.notify({ type: 'onError', key,  value: this.values[key], error, values: this.values })\n  }\n\n  getHasTriedSubmitting(): boolean {\n    return this.hasTriedSubmitting\n  }\n\n  changeValidators(validators: Partial<Record<keyof T, FormValidator<T>>>) {\n    this.validators = { ...this.validators, ...validators }\n    this.validateAll()\n  }\n\n  validate(key: keyof T) {\n    const validator = this.validators[key]\n\n    if (!validator) {\n      this.setError(key, undefined)\n      return\n    }\n\n    const error = validator(this.values[key])\n    this.setError(key, error)\n  }\n\n  validateAll() {\n    Object.keys(this.initialValues).forEach(key => {\n      this.validate(key)\n    })\n  }\n\n  // Obeserver\n  subscribe(key: keyof T | 'ALL', listener: FormEventListener<T>): () => void {\n    if (!this.listeners.has(key)) {\n      this.listeners.set(key, new Set())\n    }\n    this.listeners.get(key)!.add(listener)\n\n    return () => {\n      this.listeners.get(key)?.delete(listener)\n      if (this.listeners.get(key)?.size === 0) {\n        this.listeners.delete(key)\n      }\n    }\n  }\n\n  private notify(event: FormEvent<T>) {\n    const key = event.key\n    if(key !== 'ALL') {\n      this.listeners.get(key)?.forEach((listener) => listener(event))\n    }\n    this.listeners.get('ALL')?.forEach((listener) => listener(event))\n  }\n\n  // Form\n  submit() {\n    this.hasTriedSubmitting = true\n\n    if(this.submittingTouchesAll) {\n      Object.keys(this.initialValues).forEach((k) => {\n        this.touched[k as keyof T] = true\n      })\n    }\n\n    const hasErrors = Object.keys(this.errors).length > 0\n\n    this.notify({\n      type: 'onSubmit',\n      key: 'ALL',\n      hasErrors: hasErrors,\n      errors: this.errors,\n      values: this.values\n    })\n  }\n\n  reset() {\n    this.values = { ...this.initialValues }\n    this.hasTriedSubmitting = false\n    this.touched = {}\n    Object.keys(this.initialValues).forEach(key => {\n      this.notify({ type: 'onChange', key: key, value: this.values[key], values: this.values })\n    })\n    this.validateAll()\n    this.notify({ type: 'reset', key: 'ALL',  values: this.values, errors: this.errors })\n  }\n}","import { useCallback, useEffect, useMemo, useRef, type ReactNode } from 'react'\nimport type { FormEvent, FormStoreProps, FormValue } from './FormStore'\nimport { FormStore } from './FormStore'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\n\nexport type UseCreateFormProps<T extends FormValue> = Omit<FormStoreProps<T>, 'validationBehaviour'> & {\n  onFormSubmit: (values: T) => void,\n  onFormError?: (values: T, errors: Partial<Record<keyof T, ReactNode>>) => void,\n  /**\n   * Called when the form values change.\n   *\n   * E.g. a key press for an input field.\n   *\n   * For most purposes use {@link onUpdate} instead.\n   * @param values The new values of the form.\n   */\n  onValueChange?: (values: T) => void,\n  /**\n   * Called when the form values change and the corresponding inputs determined that the user\n   * finished editing these fields and the client should make an update against the server.\n   *\n   * E.g. a user finished editing an input field by pressing enter or blurring the field.\n   *\n   * @param updatedKeys The keys that were updated.\n   * @param update The update that was made.\n   */\n  onValidUpdate?: (updatedKeys: (keyof T)[], update: Partial<T>) => void,\n  /**\n   * Called when the form values change and the corresponding inputs determined that the user\n   * finished editing these fields and the client should make an update against the server.\n   *\n   * E.g. a user finished editing an input field by pressing enter or blurring the field.\n   *\n   * @param updatedKeys The keys that were updated.\n   * @param update The update that was made.\n   */\n  onUpdate?: (updatedKeys: (keyof T)[], update: Partial<T>) => void,\n  /* Whether to scroll and focus the first element when submitting with an error or resetting */\n  scrollToElements?: boolean,\n  scrollOptions?: ScrollIntoViewOptions,\n}\n\nexport type UseCreateFormResult<T extends FormValue> = {\n  /**\n   * The form store.\n   * Do not attempt to read the store directly, use useFormObserver or useFormField instead.\n   * Otherwise you will not get the latest values and errors.\n   */\n  store: FormStore<T>,\n  reset: () => void,\n  submit: () => void,\n  update: (updater: Partial<T> | ((current: T) => Partial<T>), triggerUpdate?: boolean) => void,\n  validateAll: () => void,\n  registerRef: (key: keyof T) => (el: HTMLElement | null) => void,\n}\n\nexport function useCreateForm<T extends FormValue>({\n  onFormSubmit,\n  onFormError,\n  onValueChange,\n  onUpdate,\n  onValidUpdate,\n  initialValues,\n  hasTriedSubmitting,\n  validators,\n  scrollToElements = true,\n  scrollOptions = { behavior: 'smooth', block: 'center' },\n}: UseCreateFormProps<T>) : UseCreateFormResult<T> {\n  const onFormSubmitStable = useEventCallbackStabilizer(onFormSubmit)\n  const onFormErrorStable = useEventCallbackStabilizer(onFormError)\n  const onValueChangeStable = useEventCallbackStabilizer(onValueChange)\n  const onUpdateStable = useEventCallbackStabilizer(onUpdate)\n  const onValidUpdateStable = useEventCallbackStabilizer(onValidUpdate)\n\n  const storeRef = useRef<FormStore<T>>(\n    new FormStore<T>({\n      initialValues,\n      hasTriedSubmitting,\n      validators,\n    })\n  )\n\n  useEffect(() => {\n    storeRef.current.changeValidators(validators)\n  }, [validators])\n\n  const fieldRefs = useRef<Partial<Record<keyof T, HTMLElement | null>>>({})\n  const registerRef = useCallback((key: keyof T) => {\n    return (el: HTMLElement | null) => {\n      fieldRefs.current[key] = el\n    }\n  }, [])\n\n  useEffect(() => {\n    const handleUpdate = (event: FormEvent<T>) => {\n      if (event.type === 'onSubmit') {\n        if(event.hasErrors) {\n          onFormErrorStable(event.values, event.errors)\n\n          if (scrollToElements) {\n            const errorInputs = (Object.keys(event.errors) as (keyof T)[])\n              .filter((key) => event.errors[key])\n              .map((key) => fieldRefs.current[key])\n              .filter((el): el is HTMLElement => el !== null && el !== undefined)\n\n            if (errorInputs.length > 0) {\n              errorInputs.sort((a, b) => {\n                const position = a.compareDocumentPosition(b)\n                if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n                if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n                return 0\n              })\n\n              errorInputs[0].scrollIntoView(scrollOptions)\n              errorInputs[0].focus()\n            }\n          }\n        } else {\n          onFormSubmitStable(event.values)\n        }\n      } else if (event.type === 'reset') {\n        if (scrollToElements) {\n          const inputs = Object.values(fieldRefs.current).filter(\n            (el): el is HTMLElement => el !== null && el !== undefined\n          )\n          if (inputs.length > 0) {\n            inputs.sort((a, b) => {\n              const position = a.compareDocumentPosition(b)\n              if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n              if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n              return 0\n            })\n\n            inputs[0].scrollIntoView(scrollOptions)\n            inputs[0].focus()\n          }\n        }\n      } else if (event.type === 'onChange') {\n        onValueChangeStable(storeRef.current.getAllValues())\n      } else if (event.type === 'onUpdate') {\n        onUpdateStable(event.updatedKeys, event.update)\n        if(!event.hasErrors) {\n          onValidUpdateStable(event.updatedKeys, event.update)\n        }\n      }\n    }\n\n    const unsubscribe = storeRef.current.subscribe('ALL', handleUpdate)\n    return () => {\n      unsubscribe()\n    }\n  }, [onFormErrorStable, onFormSubmitStable, onUpdateStable, onValidUpdateStable, onValueChangeStable, scrollOptions, scrollToElements])\n\n\n  const callbacks = useMemo(() => ({\n    reset: () => storeRef.current.reset(),\n    submit: () => storeRef.current.submit(),\n    update: (updater: Partial<T> | ((current: T) => Partial<T>), triggerUpdate: boolean = false) => {\n      if (typeof updater === 'function') {\n        storeRef.current.setValues(updater(storeRef.current.getAllValues()), triggerUpdate)\n      } else {\n        storeRef.current.setValues(updater, triggerUpdate)\n      }\n    },\n    validateAll: () => storeRef.current.validateAll(),\n  }), [])\n\n  return {\n    store: storeRef.current,\n    ...callbacks,\n    registerRef\n  }\n}","import type { HTMLAttributes, ReactNode } from 'react'\nimport React, {\n  createContext,\n  forwardRef,\n  useCallback,\n  useContext,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState\n} from 'react'\nimport clsx from 'clsx'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '@/src/utils/array'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport { IconButton } from '../user-interaction/IconButton'\n\n//\n// CarouselContext\n//\ntype CarouselContextType = {\n  id: string,\n  currentIndex: number,\n  slideCount: number,\n  isLooping: boolean,\n}\n\nconst CarouselContext = createContext<CarouselContextType | null>(null)\n\nconst useCarouselContext = () => {\n  const context = useContext(CarouselContext)\n  if (!context) {\n    throw Error('useCarouselContext must be used within CarouselContext')\n  }\n  return context\n}\n\n//\n// CarouselTab\n//\ntype CarouselTabsProps = {\n  onChange: (index: number) => void,\n}\n\nexport default function CarouselTabs({\n  onChange,\n}: CarouselTabsProps) {\n  const translation = useHightideTranslation()\n  const { id, slideCount, currentIndex, isLooping } = useCarouselContext()\n\n  const tabRefs = useRef<(HTMLButtonElement | null)[]>([])\n\n  const handleKeyDown = (event: React.KeyboardEvent, index: number) => {\n    let newIndex = index\n    if (event.key === 'ArrowRight') {\n      newIndex = isLooping ? (index + 1) % slideCount : Math.max(index + 1, slideCount - 1)\n    } else if (event.key === 'ArrowLeft') {\n      newIndex = isLooping ? (index - 1 + slideCount) % slideCount : Math.max(index - 1, 0)\n    } else {\n      return\n    }\n    event.preventDefault()\n    onChange(newIndex)\n    tabRefs.current[newIndex]?.focus()\n  }\n\n  return (\n    <div\n      className=\"flex-row-1 items-center justify-center w-full my-2\"\n      role=\"tablist\"\n      aria-label={translation('slideNavigation')}\n      id={`${id}-tablist`}\n    >\n      {range(slideCount).map((index) => {\n        const isSelected = currentIndex === index\n        return (\n          <button\n            id={`${id}-tab-${index}`}\n            key={index}\n            ref={(el) => {\n              tabRefs.current[index] = el\n            }}\n            onClick={() => onChange(index)}\n            onKeyDown={(e) => handleKeyDown(e, index)}\n\n            className={clsx(\n              'w-8 min-w-8 h-3 min-h-3 first:rounded-l-md last:rounded-r-md',\n              {\n                'bg-carousel-dot-disabled hover:bg-carousel-dot-active': currentIndex !== index,\n                'bg-carousel-dot-active hover:brightness-90': currentIndex === index,\n              }\n            )}\n\n            type=\"button\"\n            role=\"tab\"\n            tabIndex={isSelected ? 0 : -1}\n            aria-label={translation('showSlide', { index: (index + 1) })}\n            aria-selected={isSelected}\n            aria-controls={`slide-${index}`}\n            aria-disabled={isSelected}\n          />\n        )\n      })}\n    </div>\n  )\n}\n\n//\n// CarouselSlide\n//\nexport interface CarouselSlideProps extends HTMLAttributes<HTMLDivElement> {\n  isSelected: boolean,\n  index: number,\n}\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n  function CarouselSlide({\n    index,\n    isSelected,\n    ...props\n  }, ref) {\n    const translation = useHightideTranslation()\n    const { id, slideCount } = useCarouselContext()\n\n    return (\n      <div\n        {...props}\n        ref={ref}\n        id={`${id}-slide-${index}`}\n\n        className={clsx('focus-style-none group/slide', props.className)}\n\n        tabIndex={isSelected ? 0 : undefined}\n        role=\"group\"\n        aria-roledescription={translation('slide')}\n        aria-label={translation('slideOf', {\n          index: (index + 1),\n          length: (slideCount),\n        })}\n        aria-hidden={isSelected ? undefined : true}\n      />\n    )\n  }\n)\n\n//\n// Carousel\n//\ntype DragState = {\n  dragStartX: number,\n  dragOffsetX: number,\n}\n\ntype ItemType = {\n  item: ReactNode,\n  index: number,\n}\n\nexport type CarouselProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n  children: ReactNode[],\n  animationTime?: number,\n  isLooping?: boolean,\n  isAutoPlaying?: boolean,\n  autoLoopingTimeOut?: number,\n  autoLoopAnimationTime?: number,\n  hintNext?: boolean,\n  arrows?: boolean,\n  dots?: boolean,\n  /**\n   * Percentage that is allowed to be scrolled further\n   */\n  overScrollThreshold?: number,\n  blurColor?: string,\n  heightClassName?: string,\n  slideClassName?: string,\n  slideContainerProps?: HTMLAttributes<HTMLDivElement>,\n  onSlideChanged?: (index: number) => void,\n}\n\nexport const Carousel = ({\n  children,\n  animationTime = 200,\n  isLooping = false,\n  isAutoPlaying = false,\n  autoLoopingTimeOut = 5000,\n  autoLoopAnimationTime = 1000,\n  hintNext = false,\n  arrows = false,\n  dots = true,\n  blurColor = 'from-background',\n  heightClassName = 'h-96',\n  slideClassName = 'w-[70%] desktop:w-1/2',\n  slideContainerProps,\n  onSlideChanged,\n  ...props\n}: CarouselProps) => {\n  const translation = useHightideTranslation()\n  const onSlideChangedStable = useEventCallbackStabilizer(onSlideChanged)\n  const slideRefs = useRef<HTMLDivElement[]>([])\n  const [currentIndex, setCurrentIndex] = useState<number>(0)\n  const [hasFocus, setHasFocus] = useState(false)\n  const [dragState, setDragState] = useState<DragState>()\n  const isPaused = hasFocus\n  const carouselContainerRef = useRef<HTMLDivElement>(null)\n  const [disableClick, setDisableClick] = useState(false)\n\n  const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n\n  const length = useMemo(() => children.length, [children])\n  const paddingItemCount = 3 // The number of items to append left and right of the list to allow for clean transition when looping\n\n  const generatedId = 'carousel' + useId()\n  const id = props.id ?? generatedId\n\n  // Validation\n  if (isAutoPlaying && !isLooping) {\n    console.error('When isAutoLooping is true, isLooping should also be true')\n    isLooping = true\n  }\n  autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut) // time between transitions\n  animationTime = Math.max(100, animationTime) // in ms, must be > 0\n  autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n  useEffect(() => {\n    const carousel = carouselContainerRef.current\n\n    if (carousel) {\n      function onFocus() {\n        setHasFocus(true)\n      }\n\n      function onBlur() {\n        setHasFocus(false)\n      }\n\n\n      carousel?.addEventListener('focusin', onFocus)\n      carousel?.addEventListener('focusout', onBlur)\n      return () => {\n        carousel?.removeEventListener('focusin', onFocus)\n        carousel?.removeEventListener('focusin', onFocus)\n      }\n    }\n  }, [])\n\n  const getStyleOffset = (index: number) => {\n    const baseOffset = -50 + (index - currentIndex) * 100\n    return `${baseOffset}%`\n  }\n\n  const canGoLeft = () => {\n    return isLooping || currentIndex !== 0\n  }\n\n  const canGoRight = useCallback(() => {\n    return isLooping || currentIndex !== length - 1\n  }, [currentIndex, isLooping, length])\n\n  const left = () => {\n    if (canGoLeft()) {\n      setCurrentIndex((currentIndex + length - 1) % length)\n    }\n  }\n\n  const right = useCallback(() => {\n    if (canGoRight()) {\n      setCurrentIndex((currentIndex + length + 1) % length)\n    }\n  }, [canGoRight, currentIndex, length])\n\n  useEffect(() => {\n    if (!timeOut.current && !isPaused) {\n      if (autoLoopingTimeOut > 0) {\n        timeOut.current = setTimeout(() => {\n          right()\n          timeOut.current = undefined\n        }, autoLoopingTimeOut)\n      } else {\n        right()\n      }\n    }\n    if ((isPaused || !!dragState) && timeOut.current) {\n      clearTimeout(timeOut.current)\n      timeOut.current = undefined\n    }\n  }, [right, isPaused, autoLoopingTimeOut, dragState])\n\n\n  let items: ItemType[] = children.map((item, index) => ({\n    index,\n    item\n  }))\n  let before: ItemType[] = []\n  let after: ItemType[] = []\n  if (isLooping) {\n    before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n      index,\n      item\n    }))\n    after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n      index,\n      item\n    }))\n\n    items = [...before, ...items, ...after]\n  }\n\n  const handlePointerDown = (e: React.PointerEvent) => {\n    setDragState({\n      dragOffsetX: 0,\n      dragStartX: e.clientX,\n    })\n  }\n\n  const handlePointerMove = (e: React.PointerEvent) => {\n    if (!dragState) return\n    setDragState(prevState => {\n      if(!prevState) return prevState\n      return { dragStartX: prevState.dragStartX, dragOffsetX: e.clientX - prevState.dragStartX }\n    })\n  }\n\n  const handlePointerUp = () => {\n    if (!dragState) return\n    if (dragState.dragOffsetX > 50) {\n      left()\n    } else if (dragState.dragOffsetX < -50) {\n      right()\n    }\n    setDragState(undefined)\n  }\n\n  useEffect(() => {\n    setDisableClick(!dragState)\n  }, [dragState])\n\n  useEffect(() => {\n    onSlideChangedStable(currentIndex)\n  }, [currentIndex, onSlideChangedStable])\n\n  return (\n    <CarouselContext.Provider value={{ id, currentIndex, slideCount: length, isLooping }}>\n      <div\n        ref={carouselContainerRef}\n        {...props}\n        className={clsx('flex-col-2 items-center w-full', props.className)}\n\n        id={id}\n        role=\"region\"\n        aria-roledescription={translation('slide')}\n      >\n        <div\n          {...slideContainerProps}\n          className={clsx(`relative w-full overflow-hidden`, heightClassName, slideContainerProps?.className)}\n        >\n          {hintNext ? (\n            <div\n              onPointerDown={handlePointerDown}\n              onPointerMove={handlePointerMove}\n              onPointerUp={handlePointerUp}\n              onPointerLeave={handlePointerUp}\n              className={clsx(`flex-row-2 relative h-full`, heightClassName)}\n            >\n              <div className=\"flex-row-2 relative h-full w-full px-2 overflow-hidden\">\n                {items.map(({\n                  item,\n                  index\n                }, listIndex) => {\n                  const isInItems = before.length <= listIndex && listIndex < items.length - after.length\n\n                  return (\n                    <CarouselSlide\n                      ref={(el) => {\n                        const array = slideRefs.current\n                        if(!array || !el || !isInItems) return\n                        array[index] = el\n                      }}\n                      key={listIndex}\n                      index={index}\n                      isSelected={isInItems && currentIndex === index}\n                      className={clsx(\n                        `absolute left-[50%] h-full overflow-hidden transition-transform ease-in-out`,\n                        slideClassName\n                      )}\n                      onClick={() => !disableClick && setCurrentIndex(index)}\n                      style={{\n                        translate: `calc(${getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0))} + ${dragState ? dragState.dragOffsetX : 0}px)`,\n                        transitionDuration: dragState ? '0ms' : ((isAutoPlaying && !isPaused ? autoLoopAnimationTime : animationTime) + 'ms'),\n                      }}\n                    >\n                      {item}\n                    </CarouselSlide>\n                  )\n                })}\n              </div>\n              <div\n                className={clsx(`hidden desktop:block pointer-events-none absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n              />\n              <div\n                className={clsx(`hidden desktop:block pointer-events-none absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n              />\n            </div>\n          ) : (\n            <div\n              ref={(el) => {\n                const array = slideRefs.current\n                if(!array || !el) return\n                array[currentIndex] = el\n              }}\n              className={clsx('px-16 h-full')}\n\n              tabIndex={0}\n              role=\"group\"\n              aria-roledescription={translation('slide')}\n              aria-label={translation('slideOf', {\n                index: (currentIndex + 1),\n                length: items.length\n              })}\n            >\n              {children[currentIndex]}\n            </div>\n          )}\n          {arrows && (\n            <>\n              <IconButton\n                tooltip={translation('previous')}\n                color=\"neutral\"\n                className={clsx('absolute z-10 left-2 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoLeft() })}\n                disabled={!canGoLeft()}\n                onClick={() => left()}\n              >\n                <ChevronLeft size={24}/>\n              </IconButton>\n              <IconButton\n                tooltip={translation('next')}\n                color=\"neutral\"\n                className={clsx('absolute z-10 right-2 top-1/2 -translate-y-1/2 shadow-md', { hidden: !canGoRight() })}\n                disabled={!canGoRight()}\n                onClick={() => right()}\n              >\n                <ChevronRight size={24}/>\n              </IconButton>\n            </>\n          )}\n        </div>\n        {dots && (<CarouselTabs onChange={setCurrentIndex}/>)}\n      </div>\n    </CarouselContext.Provider>\n  )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\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  ...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 {...restProps}>\n      {nodes}\n    </div>\n  )\n}\n","import type { Dispatch, HTMLAttributes, ReactNode, SetStateAction } from 'react'\nimport { useEffect, useRef } from 'react'\nimport { useState } from 'react'\nimport { createContext, forwardRef, useCallback, useContext, useId, useMemo } from 'react'\nimport clsx from 'clsx'\nimport { Visibility } from './Visibility'\nimport { ExpansionIcon } from '../display-and-visualization/ExpansionIcon'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\n//\n// Context\n//\ntype ExpandableContextIdsState = {\n  root: string,\n  header: string,\n  content: string,\n}\n\ntype ExpandableContextState = {\n  ids: ExpandableContextIdsState,\n  setIds: Dispatch<SetStateAction<ExpandableContextIdsState>>,\n  disabled: boolean,\n  isExpanded: boolean,\n  toggle: () => void,\n  setIsExpanded: Dispatch<SetStateAction<boolean>>,\n}\n\nconst ExpandableContext = createContext<ExpandableContextState | null>(null)\n\nfunction useExpandableContext() {\n  const context = useContext(ExpandableContext)\n  if (!context) {\n    throw new Error('Expandable components must be used within an ExpandableRoot')\n  }\n  return context\n}\n\n//\n// ExpandableRoot\n//\n\nexport type ExpandableRootProps = HTMLAttributes<HTMLDivElement> & {\n  'isExpanded'?: boolean,\n  'onExpandedChange'?: (isExpanded: boolean) => void,\n  'isInitialExpanded'?: boolean,\n  'disabled'?: boolean,\n  'allowContainerToggle'?: boolean,\n  'data-name'?: string,\n}\n\nexport const ExpandableRoot = forwardRef<HTMLDivElement, ExpandableRootProps>(function ExpandableRoot({\n  children,\n  id: providedId,\n  isExpanded: controlledExpanded,\n  onExpandedChange,\n  isInitialExpanded = false,\n  disabled = false,\n  allowContainerToggle = false,\n  ...props\n}, ref) {\n  const generatedId = useId()\n  const [ids, setIds] = useState<ExpandableContextIdsState>({\n    root: providedId ?? `expandable-${generatedId}-root`,\n    header: `expandable-${generatedId}-header`,\n    content: `expandable-${generatedId}-content`\n  })\n  const [isExpanded, setIsExpanded] = useControlledState({\n    value: controlledExpanded,\n    onValueChange: onExpandedChange,\n    defaultValue: isInitialExpanded,\n  })\n\n  const toggle = useCallback(() => {\n    if (!disabled) {\n      setIsExpanded(!isExpanded)\n    }\n  }, [disabled, isExpanded, setIsExpanded])\n\n  const contextValue = useMemo(() => ({\n    isExpanded,\n    toggle,\n    setIsExpanded,\n    ids,\n    setIds,\n    disabled\n  }), [isExpanded, toggle, setIsExpanded, ids, disabled])\n\n  return (\n    <ExpandableContext.Provider value={contextValue}>\n      <div\n        {...props}\n        ref={ref}\n        id={ids.root}\n        data-name={props['data-name'] ?? 'expandable-root'}\n        onClick={(event) => {\n          props.onClick?.(event)\n          if (allowContainerToggle) {\n            toggle()\n          }\n        }}\n        data-expanded={isExpanded ? '' : undefined}\n        data-disabled={disabled ? '' : undefined}\n        data-containertoggleable={allowContainerToggle ? '' : undefined}\n      >\n        {children}\n      </div>\n    </ExpandableContext.Provider>\n  )\n})\n\n//\n// ExpandableHeader\n//\n\nexport type ExpandableHeaderProps = HTMLAttributes<HTMLDivElement> & {\n  'isUsingDefaultIcon'?: boolean,\n  'data-name'?: string,\n}\n\nexport const ExpandableHeader = forwardRef<HTMLDivElement, ExpandableHeaderProps>(function ExpandableHeader({\n  children,\n  isUsingDefaultIcon = true,\n  ...props\n}, ref) {\n  const { isExpanded, toggle, ids, setIds, disabled } = useExpandableContext()\n  useEffect(() => {\n    const id = props.id\n    if (id) {\n      setIds(prevState => ({ ...prevState, header: id }))\n    }\n  }, [props.id, setIds])\n\n  return (\n    <div\n      {...props}\n      ref={ref}\n      id={ids.header}\n      data-name={props['data-name'] ?? 'expandable-header'}\n      onClick={event => {\n        event.stopPropagation()\n        props.onClick?.(event)\n        toggle()\n      }}\n      data-expanded={isExpanded ? '' : undefined}\n      data-disabled={disabled ? '' : undefined}\n      aria-expanded={isExpanded}\n      aria-controls={ids.content}\n      aria-disabled={disabled || undefined}\n    >\n      {children}\n      <Visibility isVisible={isUsingDefaultIcon}>\n        <ExpansionIcon isExpanded={isExpanded} disabled={disabled} />\n      </Visibility>\n    </div>\n  )\n})\n\n//\n// ExpandableContent\n//\n\nexport type ExpandableContentProps = HTMLAttributes<HTMLDivElement> & {\n  'forceMount'?: boolean,\n  'data-name'?: string,\n}\n\nexport const ExpandableContent = forwardRef<HTMLDivElement, ExpandableContentProps>(function ExpandableContent({\n  children,\n  forceMount = false,\n  ...props\n}, forwardedRef) {\n  const { isExpanded, ids, setIds } = useExpandableContext()\n\n  const ref = useRef<HTMLDivElement | null>(null)\n\n  useEffect(() => {\n    const id = props.id\n    if (id) {\n      setIds(prevState => ({ ...prevState, content: id }))\n    }\n  }, [props.id, setIds])\n\n  const { transitionState } = useTransitionState({ isOpen: isExpanded, ref })\n\n  return (\n    <div\n      {...props}\n      ref={ReactRefsUtil.assingRefsBuilder([ref, forwardedRef])}\n      id={ids.content}\n      data-name={props['data-name'] ?? 'expandable-content'}\n      data-expanded={isExpanded ? '' : undefined}\n      data-state={transitionState}\n    >\n      <Visibility isVisible={forceMount || isExpanded}>\n        {children}\n      </Visibility>\n    </div>\n  )\n})\n\n\n//\n// Composite\n//\nexport interface ExpandableProps extends ExpandableRootProps {\n  trigger: ReactNode,\n  triggerProps?: Omit<ExpandableHeaderProps, 'children'>,\n  contentProps?: Omit<ExpandableContentProps, 'children'>,\n  contentExpandedClassName?: string,\n}\n\nexport const Expandable = forwardRef<HTMLDivElement, ExpandableProps>(function Expandable({\n  children,\n  trigger,\n  triggerProps,\n  contentProps,\n  contentExpandedClassName,\n  ...props\n}, ref) {\n  return (\n    <ExpandableRoot ref={ref} {...props}>\n      <ExpandableHeader {...triggerProps}>\n        {trigger}\n      </ExpandableHeader>\n      <ExpandableContext.Consumer>\n        {ctx => (\n          <ExpandableContent\n            className={clsx(contentProps?.className, { [contentExpandedClassName ?? '']: !!ctx?.isExpanded })}\n          >\n            {children}\n          </ExpandableContent>\n        )}\n      </ExpandableContext.Consumer>\n    </ExpandableRoot>\n  )\n})","import type { ReactNode } from 'react'\nimport type { ExpandableProps } from './Expandable'\nimport { ExpandableContent, ExpandableHeader, ExpandableRoot } from './Expandable'\n\nexport type FAQItem = Pick<ExpandableProps, 'isExpanded' | 'className'> & {\n  title: string,\n  content: ReactNode,\n}\n\nexport type FAQSectionProps = {\n  entries: FAQItem[],\n}\n\n// TODO add a descirption\nexport const FAQSection = ({\n  entries,\n}: FAQSectionProps) => {\n  return (\n    <ul className=\"flex-col-4\">\n      {entries.map(({ title, content, ...restProps }, index) => (\n        <li key={index}>\n          <ExpandableRoot\n            {...restProps}\n            allowContainerToggle={true}\n          >\n            <ExpandableHeader>\n              {title}\n            </ExpandableHeader>\n            <ExpandableContent>\n              {content}\n            </ExpandableContent>\n          </ExpandableRoot>\n        </li>\n      ))}\n    </ul>\n  )\n}\n","import type {\n  UIEvent,\n  ReactNode\n} from 'react'\nimport {\n  useRef,\n  useState,\n  useLayoutEffect,\n  useMemo,\n  useCallback\n} from 'react'\nimport clsx from 'clsx'\nimport { range } from '@/src/utils/array'\nimport { Button } from '../user-interaction/Button'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport { Visibility } from './Visibility'\n\nexport interface InfiniteScrollProps {\n  itemCount: number,\n  /** How many items to keep in the DOM at once (default: 30) */\n  bufferSize?: number,\n  /** How many items to add tp the DOM when reaching one end at once (default: 7) */\n  stepSize?: number,\n  /** Pixels from edge to trigger a fetch/shift (default: 30) */\n  scrollThreshold?: number,\n  /** Initial index to center on or start at (optional) */\n  initialIndex?: number,\n  /** Render prop for each item */\n  children: (index: number) => ReactNode,\n  /** Optional classname for the scroll container */\n  className?: string,\n  /** Optional style for the container */\n  style?: React.CSSProperties,\n}\n\nexport function InfiniteScroll({\n  children,\n  itemCount,\n  bufferSize = 30,\n  scrollThreshold = 30,\n  stepSize = 7,\n  initialIndex = 0,\n  className,\n  style,\n}: InfiniteScrollProps) {\n  if (stepSize > bufferSize) {\n    throw new Error('InfiniteScroll: stepSize <= bufferSize must hold')\n  }\n  if (itemCount < 1) {\n    throw new Error('InfiniteScroll: itemCount > 0 must hold')\n  }\n  const items = useMemo(() => range(itemCount), [itemCount])\n  const containerRef = useRef<HTMLDivElement>(null)\n  const snapshotRef = useRef({ scrollHeight: 0, scrollTop: 0, fromTop: false })\n\n  const [windowState, setWindowState] = useState(() => {\n    let index = initialIndex\n    if (index < 0) {\n      index = 0\n    }\n\n    const halfBuffer = Math.floor(bufferSize / 2)\n    const safeStart = Math.max(0, initialIndex - halfBuffer)\n\n    return {\n      start: safeStart,\n      end: Math.min(items.length, safeStart + bufferSize)\n    }\n  })\n\n  const addToStart = useCallback((amount = stepSize) => {\n    setWindowState(prev => {\n      const newStart = Math.max(0, prev.start - amount)\n      const newEnd = Math.min(items.length, newStart + bufferSize)\n      return { start: newStart, end: newEnd }\n    })\n  }, [bufferSize, items.length, stepSize])\n\n  const addToEnd = useCallback((amount = stepSize) => {\n    setWindowState(prev => {\n      const newEnd = Math.min(items.length, prev.end + amount)\n      const newStart = Math.max(0, newEnd - bufferSize)\n      return { start: newStart, end: newEnd }\n    })\n  }, [bufferSize, items.length, stepSize])\n\n  const handleScroll = (e: UIEvent<HTMLElement>) => {\n    const { scrollTop, scrollHeight, clientHeight } = e.currentTarget\n\n    if (scrollTop < scrollThreshold && windowState.start > 0) {\n      snapshotRef.current = { scrollHeight, scrollTop, fromTop: true }\n      addToStart()\n    }\n    else if (scrollTop + clientHeight > scrollHeight - scrollThreshold && windowState.end < items.length) {\n      snapshotRef.current = { scrollHeight, scrollTop, fromTop: false }\n      addToEnd()\n    }\n  }\n\n  useLayoutEffect(() => {\n    const container = containerRef.current\n    if (!container || !snapshotRef.current.fromTop) return\n\n    const heightDifference = container.scrollHeight - snapshotRef.current.scrollHeight\n\n    if (heightDifference > 0) {\n      container.scrollTop = snapshotRef.current.scrollTop + heightDifference\n    }\n    snapshotRef.current.fromTop = false\n  }, [windowState])\n\n  const visibleItems = useMemo(() =>\n    items.slice(windowState.start, windowState.end),\n  [items, windowState])\n\n  const isUsingInfiteScroll = itemCount > bufferSize\n\n  return (\n    <div\n      ref={containerRef}\n      onScroll={isUsingInfiteScroll ? handleScroll : undefined}\n      className={clsx('overflow-y-auto', className)}\n      style={style}\n    >\n      <Visibility isVisible={windowState.start > 0}>\n        <Button color=\"neutral\" onClick={() => addToStart()}>\n          <ChevronUp/>\n        </Button>\n      </Visibility>\n      {visibleItems.map((index) => children(index))}\n      <Visibility isVisible={windowState.end < itemCount - 1}>\n        <Button color=\"neutral\" onClick={() => addToEnd()}>\n          <ChevronDown/>\n        </Button>\n      </Visibility>\n    </div>\n  )\n}","type ASTNodeModifierType =\n  'none'\n  | 'italic'\n  | 'bold'\n  | 'underline'\n  | 'font-space'\n  | 'primary'\n  | 'secondary'\n  | 'warn'\n  | 'positive'\n  | 'negative'\n\nconst astNodeInserterType = ['helpwave', 'newline'] as const\ntype ASTNodeInserterType = typeof astNodeInserterType[number]\ntype ASTNodeDefaultType = 'text'\n\ntype ASTNode = {\n  type: ASTNodeModifierType,\n  children: ASTNode[],\n} | {\n  type: ASTNodeInserterType,\n} | {\n  type: ASTNodeDefaultType,\n  text: string,\n}\n\nexport type ASTNodeInterpreterProps = {\n  node: ASTNode,\n  isRoot?: boolean,\n  className?: string,\n}\nexport const ASTNodeInterpreter = ({\n  node,\n  isRoot = false,\n  className = '',\n}: ASTNodeInterpreterProps) => {\n  switch (node.type) {\n  case 'newline':\n    return <br/>\n  case 'text':\n    return isRoot ? <span className={className}>{node.text}</span> : node.text\n  case 'helpwave':\n    return (<span className=\"font-bold font-space no-underline\">helpwave</span>)\n  case 'none':\n    return isRoot ? (\n      <span className={className}>{node.children.map((value, index) => (\n        <ASTNodeInterpreter key={index}\n          node={value}/>\n      ))}</span>\n    ) :\n      <>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</>\n  case 'bold':\n    return <b>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</b>\n  case 'italic':\n    return <i>{node.children.map((value, index) => <ASTNodeInterpreter key={index} node={value}/>)}</i>\n  case 'underline':\n    return (<u>{node.children.map((value, index) => (<ASTNodeInterpreter key={index} node={value}/>))}</u>)\n  case 'font-space':\n    return (\n      <span className=\"font-space\">{node.children.map((value, index) => (\n        <ASTNodeInterpreter key={index}\n          node={value}/>\n      ))}</span>\n    )\n  case 'primary':\n    return (\n      <span className=\"text-primary\">{node.children.map((value, index) => (\n        <ASTNodeInterpreter\n          key={index} node={value}/>\n      ))}</span>\n    )\n  case 'secondary':\n    return (\n      <span className=\"text-secondary\">{node.children.map((value, index) => (\n        <ASTNodeInterpreter\n          key={index} node={value}/>\n      ))}</span>\n    )\n  case 'warn':\n    return (\n      <span className=\"text-warning\">{node.children.map((value, index) => (\n        <ASTNodeInterpreter\n          key={index} node={value}/>\n      ))}</span>\n    )\n  case 'positive':\n    return (\n      <span className=\"text-positive\">{node.children.map((value, index) => (\n        <ASTNodeInterpreter\n          key={index} node={value}/>\n      ))}</span>\n    )\n  case 'negative':\n    return (\n      <span className=\"text-negative\">{node.children.map((value, index) => (\n        <ASTNodeInterpreter\n          key={index} node={value}/>\n      ))}</span>\n    )\n  default:\n    return null\n  }\n}\n\nconst modifierIdentifierMapping = [\n  { id: 'i', name: 'italic' },\n  { id: 'b', name: 'bold' },\n  { id: 'u', name: 'underline' },\n  { id: 'space', name: 'font-space' },\n  { id: 'primary', name: 'primary' },\n  { id: 'secondary', name: 'secondary' },\n  { id: 'warn', name: 'warn' },\n  { id: 'positive', name: 'positive' },\n  { id: 'negative', name: 'negative' },\n] as const\n\nconst inserterIdentifierMapping = [\n  { id: 'helpwave', name: 'helpwave' },\n  { id: 'newline', name: 'newline' }\n] as const\nconst parseMarkdown = (\n  text: string,\n  commandStart: string = '\\\\',\n  open: string = '{',\n  close: string = '}'\n): ASTNode => {\n  let start = text.indexOf(commandStart)\n  const children: ASTNode[] = []\n\n  // parse the text step by step\n  while (text !== '') {\n    if (start === -1) {\n      children.push({\n        type: 'text',\n        text\n      })\n      break\n    }\n    children.push(parseMarkdown(text.substring(0, start)))\n    text = text.substring(start)\n    if (text.length <= 1) {\n      children.push({\n        type: 'text',\n        text\n      })\n      text = ''\n      continue\n    }\n    const simpleReplace = [commandStart, open, close]\n    if (simpleReplace.some(value => text[1] === value)) {\n      children.push({\n        type: 'text',\n        text: simpleReplace.find(value => text[1] === value)!\n      })\n      text = text.substring(2)\n      start = text.indexOf(commandStart)\n      continue\n    }\n    const inserter = inserterIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n    if (inserter) {\n      children.push({\n        type: inserter.name,\n      })\n      text = text.substring(inserter.id.length + 1)\n      start = text.indexOf(commandStart)\n      continue\n    }\n    const modifier = modifierIdentifierMapping.find(value => text.substring(1).startsWith(value.id))\n    if (modifier) {\n      // check brackets\n      if (text[modifier.id.length + 1] !== open) {\n        children.push({\n          type: 'text',\n          text: text.substring(0, modifier.id.length + 1)\n        })\n        text = text.substring(modifier.id.length + 2)\n        start = text.indexOf(commandStart)\n        continue\n      }\n      let closing = -1\n      let index = modifier.id.length + 2\n      let counter = 1\n      let escaping = false\n      while (index < text.length) {\n        if (text[index] === open && !escaping) {\n          counter++\n        }\n        if (text[index] === close && !escaping) {\n          counter--\n          if (counter === 0) {\n            closing = index\n            break\n          }\n        }\n        escaping = text[index] === commandStart\n        index++\n      }\n\n      if (closing !== -1) {\n        children.push({\n          type: modifier.name,\n          children: [parseMarkdown(text.substring(modifier.id.length + 2, closing))]\n        })\n        text = text.substring(closing + 1)\n        start = text.indexOf(commandStart)\n        continue\n      }\n    }\n    // nothing could be applied to command start\n    children.push({\n      type: 'text',\n      text: text[0]!\n    })\n    text = text.substring(1)\n    start = text.indexOf(commandStart)\n  }\n\n  return {\n    type: 'none',\n    children\n  }\n}\n\nconst optimizeTree = (node: ASTNode) => {\n  if (node.type === 'text') {\n    return !node.text ? undefined : node\n  }\n  if (astNodeInserterType.some(value => value === node.type)) {\n    return node\n  }\n\n  const currentNode = node as\n    { type: ASTNodeModifierType, children: ASTNode[] }\n\n  if (currentNode.children.length === 0) {\n    return undefined\n  }\n\n  let children: ASTNode[] = []\n  for (let i = 0; i < currentNode.children.length; i++) {\n    const child = optimizeTree(currentNode.children[i]!)\n    if (!child) {\n      continue\n    }\n    if (child.type === 'none') {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  currentNode.children = children\n  children = []\n\n  for (let i = 0; i < currentNode.children.length; i++) {\n    const child = currentNode.children[i]!\n    if (child) {\n      if (child.type === 'text' && children[children.length - 1]?.type === 'text') {\n        (children[children.length - 1]! as { type: ASTNodeDefaultType, text: string }).text += child.text\n      } else {\n        children.push(child)\n      }\n    }\n  }\n  currentNode.children = children\n  return currentNode\n}\n\nexport type MarkdownInterpreterProps = {\n  text: string,\n  className?: string,\n}\n\nexport const MarkdownInterpreter = ({ text, className }: MarkdownInterpreterProps) => {\n  const tree = parseMarkdown(text)\n  const optimizedTree = optimizeTree(tree)!\n  return <ASTNodeInterpreter node={optimizedTree} isRoot={true} className={className}/>\n}\n","import type { CSSProperties, Dispatch, HTMLAttributes, KeyboardEvent, PropsWithChildren, ReactNode, RefObject, SetStateAction } from 'react'\nimport { useCallback, useId, useState } from 'react'\nimport { createContext, useContext, useEffect, useRef } from 'react'\nimport clsx from 'clsx'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { resolveSetState } from '@/src/utils/resolveSetState'\nimport { createPortal } from 'react-dom'\nimport { Visibility } from './Visibility'\nimport { useControlledState } from '@/src/hooks/useControlledState'\n\nexport interface TabInfo {\n  id: string,\n  labelId: string,\n  label: ReactNode,\n  disabled?: boolean,\n  ref: RefObject<HTMLElement | null>,\n}\n\nfunction sortByDomOrder(infos: TabInfo[]): TabInfo[] {\n  return infos.slice().sort((a, b) => {\n    const elA = a.ref.current\n    const elB = b.ref.current\n    if (!elA && !elB) return 0\n    if (!elA) return 1\n    if (!elB) return -1\n    return (elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING) ? -1 : 1\n  })\n}\n\ntype PortalState = {\n  id: string,\n  ref: RefObject<HTMLElement | null>,\n}\n\nexport interface TabContextType {\n  tabs: {\n    activeId: string | null,\n    setActiveId: Dispatch<SetStateAction<string | null>>,\n    subscribe: (info: TabInfo) => () => void,\n    infos: TabInfo[],\n  },\n  portal: {\n    id: string | null,\n    element: HTMLElement | null,\n    setPortal: Dispatch<SetStateAction<PortalState | null>>,\n  },\n}\n\nconst TabContext = createContext<TabContextType | null>(null)\n\nexport function useTabContext(): TabContextType {\n  const context = useContext(TabContext)\n  if (!context) throw new Error('useTabContext must be used inside a <TabView>')\n  return context\n}\n\nexport interface TabSwitcherProps extends PropsWithChildren {\n  activeId?: string,\n  onActiveIdChange?: (activeId: string | null) => void,\n  initialActiveId?: string,\n}\n\n//\n// TabSwitcher\n//\n\n/**\n * The controlling component of several Tabpanels.\n *\n * The uncontrolled mode only works if the Tabpanels do not remount.\n */\nexport function TabSwitcher({ children, activeId: controlledActiveId, onActiveIdChange, initialActiveId }: TabSwitcherProps) {\n  const [activeId, setActiveId] = useControlledState<string | null>({\n    value: controlledActiveId,\n    defaultValue: initialActiveId ?? null,\n    onValueChange: onActiveIdChange,\n  })\n  const [tabInfos, setTabInfos] = useState<TabInfo[]>([])\n  const [portalState, setPortalState] = useState<PortalState | null>(null)\n\n  const subscribe = useCallback((info: TabInfo) => {\n    const id = info.id\n    setTabInfos(prevState => {\n      const existingIndex = prevState.findIndex(t => t.id === id)\n      const infos = existingIndex >= 0\n        ? prevState.map((t, i) => (i === existingIndex ? { ...t, ...info } : t))\n        : [...prevState, info]\n      return sortByDomOrder(infos)\n    })\n    return () => {\n      setTabInfos(prevState => {\n        return prevState.filter(t => t.id !== id)\n      })\n    }\n  }, [])\n\n\n  useEffect(() => {\n    const active = tabInfos.find(value => value.id === activeId)\n    if(!active || !active.disabled) return\n    const firstEnabled = tabInfos.find(value => !value.disabled)\n    if(firstEnabled) {\n      setActiveId(firstEnabled.id)\n    } else {\n      setActiveId(null)\n    }\n  }, [activeId, setActiveId, tabInfos])\n\n  const registerPortal: Dispatch<SetStateAction<PortalState | null>> = useCallback((action) => {\n    setPortalState(prev => resolveSetState(action, prev))\n  }, [])\n\n  const changeActiveId: Dispatch<SetStateAction<string | null>> = useCallback((action) => {\n    setActiveId(prev => {\n      const next = resolveSetState(action, prev)\n      if (next === null) return next\n      const info = tabInfos.find(value => value.id === next)\n      if (info?.disabled) return prev\n      return next\n    })\n  }, [setActiveId, tabInfos])\n\n  const resolvedActiveId = () => {\n    const active = tabInfos.find(value => value.id === activeId)\n    if(!!active && !active.disabled) return activeId\n    const firstEnabled = tabInfos.find(value => !value.disabled)\n    if(firstEnabled) return firstEnabled.id\n    return tabInfos[0]?.id ?? null\n  }\n\n  return (\n    <TabContext.Provider\n      value={{\n        tabs: {\n          activeId: resolvedActiveId(),\n          setActiveId: changeActiveId,\n          subscribe,\n          infos: tabInfos,\n        },\n        portal: {\n          id: portalState?.id ?? null,\n          element: portalState?.ref.current ?? null,\n          setPortal: registerPortal,\n        }\n      }}\n    >\n      {children}\n    </TabContext.Provider>\n  )\n}\n\n//\n// TabList\n//\ntype TabListProps = HTMLAttributes<HTMLUListElement>\n\nexport function TabList({ ...props }: TabListProps) {\n  const { tabs } = useTabContext()\n  const { infos, activeId, setActiveId: setActive } = tabs\n  const refs = useRef<Record<string, HTMLLIElement | null>>({})\n\n  const onKeyDown = (e: KeyboardEvent<HTMLUListElement>) => {\n    if(!infos) return\n    const idx = infos?.findIndex((tab) => tab.id === activeId)\n    if (idx === -1) return\n\n    const step = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0\n    if (step === 0) return\n\n    let nextIdx = idx\n    for (let i = 0; i < infos.length; i++) {\n      nextIdx = (nextIdx + step + infos.length) % infos.length\n      if (!infos[nextIdx].disabled) break\n    }\n    if (infos[nextIdx].disabled) return\n\n    const nextId = infos[nextIdx].id\n    setActive(nextId)\n    refs.current[nextId]?.focus()\n  }\n\n  return (\n    <ul\n      {...props}\n      data-name=\"tab-list\"\n      onKeyDown={onKeyDown}\n      role=\"tablist\"\n      aria-orientation=\"horizontal\"\n      style={{ '--tab-count': infos?.length ?? 0, ...props.style } as CSSProperties}\n    >\n      {infos?.map((tabInfo) => {\n        const isDisabled = !!tabInfo.disabled\n        const isActive = activeId === tabInfo.id\n        return (\n          <li\n            key={tabInfo.id}\n            ref={(el) => {\n              refs.current[tabInfo.id] = el\n            }}\n            id={tabInfo.labelId}\n\n\n            {...(isDisabled ? {} : PropsUtil.aria.click(() => setActive(tabInfo.id)))}\n\n            data-name=\"tab-list-item\"\n            data-active={PropsUtil.dataAttributes.bool(isActive)}\n            data-disabled={PropsUtil.dataAttributes.bool(isDisabled)}\n\n            role=\"tab\"\n            aria-selected={isActive}\n            aria-disabled={isDisabled}\n            aria-controls={tabInfo.id}\n            tabIndex={isActive && !isDisabled ? 0 : -1}\n          >\n            {tabInfo.label}\n          </li>\n        )\n      })}\n    </ul>\n  )\n}\n\n\n//\n// TabView\n//\ntype TabViewProps = HTMLAttributes<HTMLDivElement>\n\nexport function TabView({ ...props }: TabViewProps) {\n  const generated = useId()\n  const id = props.id ?? 'tab-view-' + generated\n  const { portal } = useTabContext()\n  const { setPortal } = portal\n  const ref = useRef<HTMLDivElement | null>(null)\n\n  useEffect(() => {\n    setPortal({ id, ref })\n    return () => setPortal(null)\n  }, [id, setPortal])\n\n  return (\n    <div\n      {...props}\n      ref={ref}\n      id={id}\n      className={clsx('tab-view', props.className)}\n    />\n  )\n}\n\ntype TabPanelProps = HTMLAttributes<HTMLDivElement> & {\n  label: string,\n  forceMount?: boolean,\n  disabled?: boolean,\n  initiallyActive?: boolean,\n}\n\n//\n// TabPanel\n//\nexport function TabPanel({ label, forceMount = false, disabled = false, initiallyActive = false, ...props }: TabPanelProps) {\n  const { tabs, portal } = useTabContext()\n  const { subscribe, activeId, setActiveId } = tabs\n  const generatedId = useId()\n  const id = props.id ?? 'tab-panel-' + generatedId\n  const labelId = 'tab-list-button-' + generatedId\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    return subscribe({ id, label, labelId, disabled, ref })\n  }, [id, label, labelId, disabled, subscribe])\n\n  const [hasAnnouncedIntialliyActive, setHasAnnouncedIntialliyActive] = useState(false)\n  useEffect(() => {\n    if(!hasAnnouncedIntialliyActive) {\n      if(initiallyActive) {\n        setActiveId(id)\n      }\n      setHasAnnouncedIntialliyActive(true)\n    }\n  }, [hasAnnouncedIntialliyActive, id, initiallyActive, setActiveId])\n\n  const isActive = activeId === id\n\n  const content = (\n    <div\n      {...props}\n      ref={ref}\n      id={id}\n      hidden={!isActive}\n\n      data-name=\"tab-panel\"\n      data-disabled={PropsUtil.dataAttributes.bool(disabled)}\n\n      role=\"tabpanel\"\n      aria-labelledby={labelId}\n    >\n      <Visibility isVisible={isActive || forceMount}>\n        {props.children}\n      </Visibility>\n    </div>\n  )\n\n  if (portal.element) {\n    return createPortal(content, portal.element)\n  }\n\n  return content\n}","import clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '../user-interaction/Button'\n\ntype TextImageColor = 'primary' | 'secondary' | 'dark'\n\nexport type TextImageProps = {\n  title: string,\n  description: string,\n  imageUrl: string,\n  onShowMoreClicked?: () => void,\n  color?: TextImageColor,\n  badge?: string,\n  contentClassName?: string,\n  className?: string,\n}\n\n/**\n * A Component for layering a Text upon an image\n */\nexport const TextImage = ({\n  title,\n  description,\n  imageUrl,\n  onShowMoreClicked,\n  color = 'primary',\n  badge,\n  contentClassName = '',\n  className = '',\n}: TextImageProps) => {\n  const translation = useHightideTranslation()\n\n  const chipColorMapping: Record<TextImageColor, string> = {\n    primary: 'text-text-image-primary-background bg-text-image-primary-text',\n    secondary: 'text-text-image-secondary-background bg-text-image-secondary-text',\n    dark: 'text-text-image-dark-background bg-text-image-dark-text',\n  }\n\n  const colorMapping: Record<TextImageColor, string> = {\n    primary: 'text-text-image-primary-text bg-linear-to-r from-30% from-text-image-primary-background to-text-image-primary-background/55',\n    secondary: 'text-text-image-secondary-text bg-linear-to-r from-30% from-text-image-secondary-background to-text-image-secondary-background/55',\n    dark: 'text-text-image-dark-text bg-linear-to-r from-30% from-text-image-dark-background to-text-image-dark-background/55',\n  }\n\n  return (\n    <div\n      className={clsx('rounded-2xl w-full', className)}\n      style={{\n        backgroundImage: `url(${imageUrl})`,\n        backgroundSize: 'cover',\n      }}>\n      <div\n        className={clsx(`flex-col-2 px-6 py-12 rounded-2xl h-full`, colorMapping[color], contentClassName)}\n      >\n        {badge && (\n          <div className={clsx(`chip-full mb-2 py-2 px-4 w-fit`, chipColorMapping[color])}>\n            <span className=\"text-lg font-bold\">{badge}</span>\n          </div>\n        )}\n        <div className=\"flex-col-1 overflow-hidden\">\n          <span className=\"typography-title-lg\">{title}</span>\n          <span className=\"text-ellipsis overflow-hidden\">{description}</span>\n        </div>\n        {onShowMoreClicked && (\n          <div className=\"flex-row-2 mt-2 underline\">\n            <Button\n              color=\"neutral\"\n              coloringStyle=\"text\"\n              onClick={onShowMoreClicked}\n            >\n              {translation('showMore')}\n            </Button>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n","export type VerticalDividerProps = {\n  width?: number,\n  height?: number,\n  strokeWidth?: number,\n  dashGap?: number,\n  dashLength?: number,\n}\n\n/**\n * A Component for creating a vertical Divider\n */\nexport const VerticalDivider = ({\n  width = 1,\n  height = 100,\n  strokeWidth = 4,\n  dashGap = 4,\n  dashLength = 4,\n}: VerticalDividerProps) => {\n  return (\n    <div style={{ width: width + 'px', height: height + 'px' }}>\n      <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\">\n        <line\n          opacity=\"0.5\"\n          x1={width / 2}\n          y1={height}\n          x2={width / 2}\n          y2=\"0\"\n          stroke=\"url(#paint_linear)\"\n          strokeWidth={strokeWidth}\n          strokeDasharray={`${dashLength} ${dashLength + dashGap}`}\n          strokeLinecap=\"round\"\n        />\n        <defs>\n          <linearGradient\n            id=\"paint_linear\"\n            x1={width / 2}\n            y1=\"0\"\n            x2={width / 2}\n            y2={height}\n            gradientUnits=\"userSpaceOnUse\"\n          >\n            <stop stopOpacity=\"0\" stopColor=\"currentColor\"/>\n            <stop offset=\"0.5\" stopColor=\"currentColor\"/>\n            <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity=\"0\"/>\n          </linearGradient>\n        </defs>\n      </svg>\n    </div>\n  )\n}\n","import clsx from 'clsx'\nimport type { ElementType } from 'react'\nimport { useCallback, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from 'react'\nimport { IconButton } from '../../user-interaction/IconButton'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { MenuIcon, X } from 'lucide-react'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport type { LinkComponentProps } from '../navigation/navigation-menus/VerticalNavigationMenu'\nimport { VerticalNavigationMenu, type NavigationItemData } from '../navigation/navigation-menus/VerticalNavigationMenu'\nimport { FocusTrap } from '../../utils/FocusTrap'\n\nexport interface AppSidebarProps extends HTMLAttributes<HTMLDivElement> {\n  isOpen?: boolean,\n  onClose?: () => void,\n}\n\nexport const AppSidebar = ({ isOpen = false, onClose, children, ...props }: AppSidebarProps) => {\n  const translation = useHightideTranslation()\n  const { zIndex } = useOverlayRegistry({ isActive: isOpen })\n  const ref = useRef<HTMLDivElement>(null)\n\n  return (\n    <>\n      {isOpen && (\n        <div\n          data-name=\"app-sidebar-backdrop\"\n          onClick={onClose}\n          role=\"presentation\"\n        />\n      )}\n      <div\n        data-name=\"app-sidebar-container\"\n        data-open={PropsUtil.dataAttributes.bool(isOpen)}\n        style={{ zIndex }}\n      >\n        <FocusTrap\n          active={isOpen}\n          container={ref}\n        >\n          <aside\n            ref={ref}\n            {...props}\n            data-name=\"app-sidebar-content\"\n            data-open={PropsUtil.dataAttributes.bool(isOpen)}\n            className={clsx(props.className)}\n          >\n            <IconButton\n              className=\"app-sidebar-close-button\"\n              tooltip={translation('close')}\n              onClick={onClose}\n              coloringStyle=\"text\"\n              color=\"neutral\"\n            >\n              <X className=\"size-6\" />\n            </IconButton>\n            {children}\n          </aside>\n        </FocusTrap>\n      </div>\n    </>\n  )\n}\n\nexport interface AppPageSidebarWithNavigationProps extends AppSidebarProps {\n  header?: ReactNode,\n  footer?: ReactNode,\n  navigationItems?: NavigationItemData[],\n  contentOverwrite?: ReactNode,\n  activeId?: string | null,\n  LinkComponent?: ElementType<LinkComponentProps>,\n}\n\nexport const AppPageSidebarWithNavigation = ({\n  header,\n  footer,\n  navigationItems,\n  contentOverwrite,\n  activeId,\n  LinkComponent,\n  ...props\n}: AppPageSidebarWithNavigationProps) => {\n  return (\n    <AppSidebar {...props}>\n      <div className=\"app-page-sidebar-with-navigation\">\n        {header && (\n          <div className=\"app-page-sidebar-with-navigation-header\">\n            {header}\n          </div>\n        )}\n        {navigationItems && !contentOverwrite && (\n          <nav className=\"app-page-sidebar-with-navigation-scroll\">\n            <VerticalNavigationMenu\n              items={navigationItems}\n              LinkComponent={LinkComponent}\n              activeId={activeId}\n            />\n          </nav>\n        )}\n        {contentOverwrite && (\n          <div className=\"app-page-sidebar-with-navigation-scroll\">\n            {contentOverwrite}\n          </div>\n        )}\n        {footer && (\n          <div className=\"app-page-sidebar-with-navigation-footer\">\n            {footer}\n          </div>\n        )}\n      </div>\n    </AppSidebar>\n  )\n}\n\nexport interface AppPageNavigationItem {\n  id: string,\n  label: ReactNode,\n  icon?: ReactNode,\n  url?: string,\n  external?: boolean,\n  items?: AppPageNavigationItem[],\n}\n\nfunction findActiveIdByUrl(\n  items: ReadonlyArray<AppPageNavigationItem>,\n  activeUrl: string\n): string | null {\n  for (const item of items) {\n    if (item.url === activeUrl) return item.id\n    if (item.items != null) {\n      const found = findActiveIdByUrl(item.items, activeUrl)\n      if (found != null) return found\n    }\n  }\n  return null\n}\n\nexport interface AppPageSidebarProps {\n  activeId?: string | null,\n  activeUrl?: string,\n  header?: ReactNode,\n  items?: AppPageNavigationItem[],\n  contentOverwrite?: ReactNode,\n  footer?: ReactNode,\n  LinkComponent?: ElementType<LinkComponentProps>,\n}\n\nexport interface AppPageProps extends HTMLAttributes<HTMLDivElement> {\n  headerActions?: ReactNode[],\n  sidebarProps: AppPageSidebarProps,\n  noScrolling?: boolean,\n  hasSpacer?: boolean,\n}\n\nexport const AppPage = ({\n  children,\n  headerActions,\n  sidebarProps,\n  noScrolling = false,\n  hasSpacer = true,\n  ...props }: AppPageProps) => {\n  const translation = useHightideTranslation()\n  const [isSidebarOpen, setIsSidebarOpen] = useState(false)\n\n  const resolvedActiveId = useMemo(() => {\n    if (sidebarProps.activeId !== undefined) return sidebarProps.activeId\n    if (sidebarProps.activeUrl == null || sidebarProps.items == null) return null\n    return findActiveIdByUrl(sidebarProps.items, sidebarProps.activeUrl)\n  }, [sidebarProps.activeId, sidebarProps.activeUrl, sidebarProps.items])\n\n  const toNavigationItems = useCallback((items?: AppPageNavigationItem[]): NavigationItemData[] | undefined => {\n    return items?.map((item) => {\n      const isActive = item.id === resolvedActiveId\n      return ({\n        id: item.id,\n        label: (\n          <span className=\"app-page-navigation-item-label\" data-active-page={isActive ? '' : undefined}>\n            {item.icon && (\n              <span className=\"size-5\">\n                {item.icon}\n              </span>\n            )}\n            {item.label}\n          </span>\n        ),\n        url: item.url,\n        external: item.external,\n        items: toNavigationItems(item.items),\n      })\n    }) ?? undefined\n  }, [resolvedActiveId])\n\n  const navigationItems = useMemo(() => toNavigationItems(\n    sidebarProps.items\n  ), [sidebarProps.items, toNavigationItems])\n\n  return (\n    <div\n      {...props}\n      data-name=\"app-page\"\n      className={clsx(props.className)}\n    >\n      <AppPageSidebarWithNavigation\n        isOpen={isSidebarOpen}\n        onClose={() => setIsSidebarOpen(false)}\n        header={sidebarProps.header}\n        footer={sidebarProps.footer}\n        navigationItems={navigationItems}\n        contentOverwrite={sidebarProps.contentOverwrite}\n        activeId={resolvedActiveId}\n        LinkComponent={sidebarProps.LinkComponent}\n      />\n      <div data-name=\"app-page-body\">\n        <header data-name=\"app-page-header\">\n          <IconButton\n            className=\"app-page-menu-button\"\n            tooltip={translation('menu')}\n            onClick={() => setIsSidebarOpen(prev => !prev)}\n            coloringStyle=\"text\"\n          >\n            <MenuIcon />\n          </IconButton>\n          {headerActions}\n        </header>\n        <div data-name=\"app-page-content\" data-no-scrolling={noScrolling ? '' : undefined}>\n          <main data-name=\"app-page-main-content\" data-outer-no-scrolling={noScrolling ? '' : undefined}>\n            {children}\n            {hasSpacer && (<div className=\"app-page-main-spacer\" />)}\n          </main>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import type { TreeIndex, TreeIndexEntry, TreeItem, TreeNode } from './types'\n\n\nfunction buildTreeIndex(nodes: ReadonlyArray<TreeNode>): TreeIndex {\n  const byId = new Map<string, TreeIndexEntry>()\n\n  const walk = (\n    nodeList: ReadonlyArray<TreeNode>,\n    parentId: string | null,\n    parentPath: string[]\n  ) => {\n    for (const node of nodeList) {\n      const path = [...parentPath, node.id]\n      if (byId.has(node.id)) {\n        console.warn(`Duplicate tree node id: ${node.id}`)\n      }\n      byId.set(node.id, { node, parentId, path })\n      walk(node.items, node.id, path)\n    }\n  }\n\n  walk(nodes, null, [])\n\n  return {\n    byId,\n    roots: [...nodes],\n  }\n}\n\nexport function resolveTreeNodePath(\n  nodes: ReadonlyArray<TreeNode>,\n  id: string | null\n): ReadonlyArray<string> | null {\n  if (id == null) return null\n  const entry = buildTreeIndex(nodes).byId.get(id)\n  return entry?.path ?? null\n}\n\nfunction flattenAllItems(\n  nodes: ReadonlyArray<TreeNode>,\n  expandedIds: ReadonlySet<string>,\n  path: string[] = []\n): TreeItem[] {\n  const result: TreeItem[] = []\n\n  for (const node of nodes) {\n    const currentPath = [...path, node.id]\n    const hasChildren = node.items.length > 0\n    const expanded = hasChildren && expandedIds.has(node.id)\n\n    result.push({ id: node.id, path: currentPath, expanded })\n    result.push(...flattenAllItems(node.items, expandedIds, currentPath))\n  }\n\n  return result\n}\n\nfunction flattenVisibleItems(\n  nodes: ReadonlyArray<TreeNode>,\n  expandedIds: ReadonlySet<string>,\n  path: string[] = []\n): TreeItem[] {\n  const result: TreeItem[] = []\n\n  for (const node of nodes) {\n    const currentPath = [...path, node.id]\n    const hasChildren = node.items.length > 0\n    const expanded = hasChildren && expandedIds.has(node.id)\n\n    result.push({ id: node.id, path: currentPath, expanded })\n\n    if (expanded) {\n      result.push(...flattenVisibleItems(node.items, expandedIds, currentPath))\n    }\n  }\n\n  return result\n}\n\nfunction getExpandableAncestorIds(path: ReadonlyArray<string>, index: TreeIndex): string[] {\n  return path.slice(0, -1).filter((id) => {\n    const entry = index.byId.get(id)\n    return entry != null && entry.node.items.length > 0\n  })\n}\n\nfunction getDescendantIds(index: TreeIndex, id: string): string[] {\n  const entry = index.byId.get(id)\n  if (entry == null) return []\n\n  const result: string[] = []\n\n  const walk = (nodeList: ReadonlyArray<TreeNode>) => {\n    for (const node of nodeList) {\n      result.push(node.id)\n      walk(node.items)\n    }\n  }\n\n  walk(entry.node.items)\n  return result\n}\n\nfunction isAncestorOf(ancestorId: string, descendantPath: ReadonlyArray<string>): boolean {\n  const index = descendantPath.indexOf(ancestorId)\n  return index >= 0 && index < descendantPath.length - 1\n}\n\nfunction pruneExpandedIds(\n  expandedIds: ReadonlySet<string>,\n  focusedPath: ReadonlyArray<string> | null,\n  onlyOneExpandedTree: boolean,\n  index: TreeIndex\n): Set<string> {\n  if (!onlyOneExpandedTree || focusedPath == null) {\n    return new Set(expandedIds)\n  }\n\n  const pathSet = new Set(focusedPath)\n  const pruned = new Set<string>()\n\n  for (const id of expandedIds) {\n    if (!pathSet.has(id)) continue\n    const entry = index.byId.get(id)\n    if (entry != null && entry.node.items.length > 0) {\n      pruned.add(id)\n    }\n  }\n\n  return pruned\n}\n\nfunction areExpandedIdsEqual(\n  left: ReadonlySet<string>,\n  right: ReadonlySet<string>\n): boolean {\n  if (left === right) return true\n  if (left.size !== right.size) return false\n  for (const id of left) {\n    if (!right.has(id)) return false\n  }\n  return true\n}\n\nfunction syncExpansionForFocused(\n  expandedIds: ReadonlySet<string>,\n  focusedPath: ReadonlyArray<string>,\n  onlyOneExpandedTree: boolean,\n  index: TreeIndex\n): ReadonlySet<string> {\n  const next = new Set(expandedIds)\n\n  for (const id of getExpandableAncestorIds(focusedPath, index)) {\n    next.add(id)\n  }\n\n  const pruned = pruneExpandedIds(next, focusedPath, onlyOneExpandedTree, index)\n  return areExpandedIdsEqual(expandedIds, pruned) ? expandedIds : pruned\n}\n\nexport const TreeUtilities = {\n  areExpandedIdsEqual,\n  syncExpansionForFocused,\n  buildTreeIndex,\n  flattenAllItems,\n  flattenVisibleItems,\n  getDescendantIds,\n  getExpandableAncestorIds,\n  isAncestorOf,\n  pruneExpandedIds\n}","import type React from 'react'\nimport { useCallback, useMemo } from 'react'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport type { TreeItem, TreeNode } from './types'\nimport { TreeUtilities } from './treeUtilities'\n\nexport interface TreeExpansionOptions {\n  nodes: ReadonlyArray<TreeNode>,\n  onlyOneExpandedTree?: boolean,\n  expandedIds?: ReadonlySet<string>,\n  onExpandedIdsChange?: (expandedIds: ReadonlySet<string>) => void,\n  initialExpandedIds?: ReadonlySet<string>,\n  pruneCollapsedSubtrees?: boolean,\n}\n\nexport interface TreeExpansionActionOptions {\n  focusedPath?: ReadonlyArray<string> | null,\n  focusedId?: string | null,\n}\n\nexport interface TreeExpansionReturn {\n  visibleItems: ReadonlyArray<TreeItem>,\n  allItems: ReadonlyArray<TreeItem>,\n  expandedIds: ReadonlySet<string>,\n  setExpandedIds: React.Dispatch<React.SetStateAction<ReadonlySet<string>>>,\n  expand: (id: string, options?: TreeExpansionActionOptions) => void,\n  collapse: (id: string, options?: TreeExpansionActionOptions) => void,\n  toggleExpansion: (id: string, options?: TreeExpansionActionOptions) => void,\n  expandForPath: (path: ReadonlyArray<string>) => void,\n}\n\n\nexport function useTreeExpansion({\n  nodes,\n  onlyOneExpandedTree = false,\n  expandedIds: controlledExpandedIds,\n  onExpandedIdsChange,\n  initialExpandedIds,\n  pruneCollapsedSubtrees = true,\n}: TreeExpansionOptions): TreeExpansionReturn {\n  const index = useMemo(() => TreeUtilities.buildTreeIndex(nodes), [nodes])\n  const [expandedIds, setExpandedIds] = useControlledState<ReadonlySet<string>>({\n    value: controlledExpandedIds,\n    onValueChange: onExpandedIdsChange,\n    defaultValue: initialExpandedIds ?? new Set(),\n  })\n\n  const visibleItems = useMemo(() => {\n    return TreeUtilities.flattenVisibleItems(nodes, expandedIds)\n  }, [nodes, expandedIds])\n\n  const allItems = useMemo(() => {\n    return TreeUtilities.flattenAllItems(nodes, expandedIds)\n  }, [nodes, expandedIds])\n\n  const removeCollapsedSubtree = useCallback((expanded: ReadonlySet<string>, id: string) => {\n    const next = new Set(expanded)\n    next.delete(id)\n    if (pruneCollapsedSubtrees) {\n      for (const descendantId of TreeUtilities.getDescendantIds(index, id)) {\n        next.delete(descendantId)\n      }\n    }\n    return TreeUtilities.areExpandedIdsEqual(expanded, next) ? expanded : next\n  }, [index, pruneCollapsedSubtrees])\n\n  const expandForPath = useCallback((path: ReadonlyArray<string>) => {\n    setExpandedIds((prev) => TreeUtilities.syncExpansionForFocused(prev, path, onlyOneExpandedTree, index))\n  }, [index, onlyOneExpandedTree, setExpandedIds])\n\n  const expand = useCallback((id: string, options?: TreeExpansionActionOptions) => {\n    const entry = index.byId.get(id)\n    if (entry == null || entry.node.items.length === 0) return\n\n    setExpandedIds((prev) => {\n      const next = new Set(prev)\n      next.add(id)\n      const pruned = TreeUtilities.pruneExpandedIds(next, options?.focusedPath ?? null, onlyOneExpandedTree, index)\n      return TreeUtilities.areExpandedIdsEqual(prev, pruned) ? prev : pruned\n    })\n  }, [index, onlyOneExpandedTree, setExpandedIds])\n\n  const collapse = useCallback((id: string, options?: TreeExpansionActionOptions) => {\n    if (options?.focusedId != null) {\n      const focusedEntry = index.byId.get(options.focusedId)\n      if (focusedEntry != null && TreeUtilities.isAncestorOf(id, focusedEntry.path)) return\n    }\n\n    setExpandedIds((prev) => removeCollapsedSubtree(prev, id))\n  }, [index, removeCollapsedSubtree, setExpandedIds])\n\n  const toggleExpansion = useCallback((id: string, options?: TreeExpansionActionOptions) => {\n    const entry = index.byId.get(id)\n    if (entry == null || entry.node.items.length === 0) return\n\n    setExpandedIds((prev) => {\n      if (prev.has(id)) {\n        return removeCollapsedSubtree(prev, id)\n      }\n\n      const next = new Set(prev)\n      next.add(id)\n      for (const ancestorId of TreeUtilities.getExpandableAncestorIds(entry.path, index)) {\n        next.add(ancestorId)\n      }\n      const pruned = TreeUtilities.pruneExpandedIds(next, options?.focusedPath ?? entry.path, onlyOneExpandedTree, index)\n      return TreeUtilities.areExpandedIdsEqual(prev, pruned) ? prev : pruned\n    })\n  }, [index, onlyOneExpandedTree, removeCollapsedSubtree, setExpandedIds])\n\n  return useMemo((): TreeExpansionReturn => ({\n    visibleItems,\n    allItems,\n    expandedIds,\n    setExpandedIds,\n    expand,\n    collapse,\n    toggleExpansion,\n    expandForPath,\n  }), [visibleItems, allItems, expandedIds, setExpandedIds, expand, collapse, toggleExpansion, expandForPath])\n}\n","import type { TreeItem } from '@/src/hooks/trees/types'\nimport { TreeUtilities } from '@/src/hooks/trees/treeUtilities'\nimport type { TreeExpansionOptions } from '@/src/hooks/trees/useTreeExpansion'\nimport { useTreeExpansion } from '@/src/hooks/trees/useTreeExpansion'\nimport type { ReactNode } from 'react'\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\n\n\nexport interface NavigationItemState {\n  expanded: boolean,\n  isActive: boolean,\n  isOnActivePath: boolean,\n  path: ReadonlyArray<string>,\n}\n\nexport interface NavigationContextActions {\n  toggleExpansion: ReturnType<typeof useTreeExpansion>['toggleExpansion'],\n}\n\nexport interface NavigationContextType extends NavigationContextActions {\n  activeId: string | null,\n  activePath: ReadonlyArray<string> | null,\n  allItems: ReadonlyArray<TreeItem>,\n  getItemState: (id: string) => NavigationItemState | null,\n}\n\nconst NavigationContext = createContext<NavigationContextType | null>(null)\n\nexport interface NavigationProviderProps extends TreeExpansionOptions {\n  children: ReactNode,\n  activeId?: string | null,\n}\n\nexport function NavigationProvider({\n  children,\n  activeId = null,\n  nodes,\n  ...expansionOptions\n}: NavigationProviderProps) {\n  const expansion = useTreeExpansion({ nodes, ...expansionOptions })\n\n  const index = useMemo(() => TreeUtilities.buildTreeIndex(nodes), [nodes])\n  const activePath = useMemo(() => {\n    if (activeId == null) return null\n    return index.byId.get(activeId)?.path ?? null\n  }, [activeId, index])\n\n  const [hasExpandedForActiveId, setHasExpandedForActiveId] = useState(false)\n  const { allItems, expandForPath } = expansion\n\n  useEffect(() => {\n    if (activeId == null || hasExpandedForActiveId || activePath == null) return\n    const navigationItem = allItems.find((item) => item.id === activeId)\n    if (navigationItem == null) return\n    expandForPath(activePath)\n    setHasExpandedForActiveId(true)\n  }, [activeId, activePath, allItems, expandForPath, hasExpandedForActiveId])\n\n  const itemStateById = useMemo(() => {\n    const map = new Map<string, NavigationItemState>()\n\n    for (const item of expansion.allItems) {\n      map.set(item.id, {\n        expanded: item.expanded,\n        isActive: activeId === item.id,\n        isOnActivePath: activePath?.includes(item.id) ?? false,\n        path: item.path,\n      })\n    }\n\n    return map\n  }, [expansion.allItems, activeId, activePath])\n\n  const getItemState = useCallback((id: string) => {\n    return itemStateById.get(id) ?? null\n  }, [itemStateById])\n\n  const value = useMemo((): NavigationContextType => ({\n    activeId,\n    activePath,\n    allItems: expansion.allItems,\n    getItemState,\n    toggleExpansion: expansion.toggleExpansion,\n  }), [\n    activeId,\n    activePath,\n    expansion.allItems,\n    expansion.toggleExpansion,\n    getItemState,\n  ])\n\n  return (\n    <NavigationContext.Provider value={value}>\n      {children}\n    </NavigationContext.Provider>\n  )\n}\n\nexport function useNavigationContext(): NavigationContextType {\n  const context = useContext(NavigationContext)\n  if (context == null) {\n    throw new Error('useNavigationContext must be used within NavigationProvider')\n  }\n  return context\n}\n\nexport function useNavigationItem(id: string) {\n  const context = useNavigationContext()\n  const state = context.getItemState(id)\n\n  if (state == null) {\n    throw new Error(`useNavigationItem could not resolve state for id \"${id}\"`)\n  }\n\n  return useMemo(() => ({\n    ...state,\n    toggleExpansion: context.toggleExpansion,\n  }), [state, context.toggleExpansion])\n}\n","import type { ElementType, HTMLAttributeAnchorTarget, ReactNode } from 'react'\nimport { useId, useRef } from 'react'\nimport { ExternalLink } from 'lucide-react'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { IconButton } from '@/src/components/user-interaction/IconButton'\nimport { useNavigationItem } from './NavigationContext'\nimport type { NavigationItemData } from './types'\n\nexport interface LinkComponentProps {\n  'className'?: string,\n  'href': string,\n  'target'?: HTMLAttributeAnchorTarget | undefined,\n  'rel'?: string | undefined,\n  'aria-current'?: 'page' | undefined,\n  'children'?: ReactNode,\n}\n\nexport interface VerticalNavigationMenuItemProps {\n  id: string,\n  label: NavigationItemData['label'],\n  url?: string,\n  external?: boolean,\n  items?: NavigationItemData[],\n  depth?: number,\n  forceMountDepth?: number,\n  LinkComponent?: ElementType<LinkComponentProps>,\n}\n\nconst DefaultLink: ElementType<LinkComponentProps> = 'a'\n\nexport function VerticalNavigationMenuItem({\n  id,\n  label,\n  url,\n  external = false,\n  items,\n  depth = 0,\n  forceMountDepth = 2,\n  LinkComponent = DefaultLink,\n}: VerticalNavigationMenuItemProps) {\n  const ref = useRef<HTMLButtonElement | null>(null)\n  const groupId = useId()\n  const {\n    expanded,\n    isActive,\n    toggleExpansion,\n  } = useNavigationItem(id)\n\n  const hasChildren = items != null && items.length > 0\n  const hasLink = url != null\n\n  const labelContent = hasLink ? (\n    <LinkComponent\n      href={url}\n      className=\"vertical-navigation-item-link\"\n      aria-current={isActive ? 'page' : undefined}\n      target={external ? '_blank' : undefined}\n      rel={external ? 'noopener noreferrer' : undefined}\n    >\n      <div className=\"vertical-navigation-item-label\" data-action-padding={hasChildren ? '' : undefined}>\n        {label}\n        {external && (\n          <ExternalLink className=\"vertical-navigation-item-link-external-icon\" />\n        )}\n      </div>\n    </LinkComponent>\n  ) : (\n    <div className=\"vertical-navigation-item-label\">\n      {label}\n    </div>\n  )\n\n  const interactable = hasLink || hasChildren\n  const forceMountChildren = depth < forceMountDepth\n\n  return (\n    <li\n      data-depth={depth}\n      data-expanded={expanded ? '' : undefined}\n      className=\"vertical-navigation-item\"\n    >\n      <div\n        className=\"vertical-navigation-item-row\"\n        data-interactable={interactable ? '' : undefined}\n        onClick={(event) => {\n          if(ref.current?.contains(event.target as Node)) return\n          if(hasChildren && !hasLink) {\n            toggleExpansion(id)\n          }\n        }}\n      >\n        {labelContent}\n\n        {hasChildren && (\n          <IconButton\n            ref={ref}\n            type=\"button\"\n            coloringStyle=\"text\"\n            color=\"neutral\"\n            aria-label={`${expanded ? 'Collapse' : 'Expand'} ${typeof label === 'string' ? label : id}`}\n            aria-expanded={expanded}\n            aria-controls={groupId}\n            onClick={() => {\n              toggleExpansion(id)\n            }}\n            className=\"vertical-navigation-toggle\"\n          >\n            <ExpansionIcon isExpanded={expanded} aria-hidden />\n          </IconButton>\n        )}\n      </div>\n\n      {hasChildren && (expanded || forceMountChildren) && (\n        <ul\n          id={groupId}\n          className=\"vertical-navigation-group\"\n          hidden={!expanded}\n        >\n          {items.map((item) => (\n            <VerticalNavigationMenuItem\n              key={item.id}\n              {...item}\n              depth={depth + 1}\n              LinkComponent={LinkComponent}\n            />\n          ))}\n        </ul>\n      )}\n    </li>\n  )\n}\n","import type { ReactNode } from 'react'\nimport type { TreeNode } from '@/src/hooks/trees/types'\n\nexport interface NavigationItemData {\n  id: string,\n  label: ReactNode,\n  url?: string,\n  external?: boolean,\n  items?: NavigationItemData[],\n}\n\nexport function toTreeNodes(items: ReadonlyArray<NavigationItemData>): TreeNode[] {\n  return items.map((item) => ({\n    id: item.id,\n    items: item.items != null ? toTreeNodes(item.items) : [],\n  }))\n}\n","import type { ElementType } from 'react'\nimport {\n  NavigationProvider,\n  type NavigationProviderProps\n} from './NavigationContext'\nimport { VerticalNavigationMenuItem, type LinkComponentProps } from './VerticalNavigationMenuItem'\nimport { type NavigationItemData, toTreeNodes } from './types'\n\nexport type { NavigationItemData } from './types'\nexport type { LinkComponentProps } from './VerticalNavigationMenuItem'\nexport { VerticalNavigationMenuItem as VerticalNavigationItem } from './VerticalNavigationMenuItem'\nexport {\n  useNavigationContext as useVerticalNavigationContext,\n  useNavigationItem as useVerticalNavigationItem,\n  NavigationProvider as VerticalNavigationProvider,\n} from './NavigationContext'\n\nexport interface VerticalNavigationMenuProps extends Omit<NavigationProviderProps, 'children' | 'nodes'> {\n  items: NavigationItemData[],\n  LinkComponent?: ElementType<LinkComponentProps>,\n}\n\nexport function VerticalNavigationMenu({\n  items,\n  LinkComponent,\n  ...navigationOptions\n}: VerticalNavigationMenuProps) {\n  const nodes = toTreeNodes(items)\n\n  return (\n    <NavigationProvider nodes={nodes} {...navigationOptions}>\n      <ul data-name=\"vertical-navigation-menu\">\n        {items.map((item) => (\n          <VerticalNavigationMenuItem key={item.id} {...item} LinkComponent={LinkComponent} />\n        ))}\n      </ul>\n    </NavigationProvider>\n  )\n}\n","'use client'\n\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport { forwardRef, useCallback, useContext, useId, useMemo, useRef } from 'react'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport { X } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { useLogOnce } from '@/src/hooks/useLogOnce'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { Visibility } from '../Visibility'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { Portal } from '../../utils/Portal'\nimport { FocusTrap } from '../../utils/FocusTrap'\nimport { usePresenceRef } from '@/src/hooks/usePresenceRef'\nimport { DialogContext } from './DialogContext'\nimport { IconButton } from '../../user-interaction/IconButton'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport type DialogPosition = 'top' | 'center' | 'none'\n\nexport type DialogProps = HTMLAttributes<HTMLDivElement> & {\n  /** Whether the dialog is currently open */\n  isOpen?: boolean,\n  /** Title of the Dialog used for accessibility */\n  titleElement: ReactNode,\n  /** Description of the Dialog used for accessibility */\n  description: ReactNode,\n  /** Callback when the dialog tries to close */\n  onClose?: () => void,\n  /** Styling for the background */\n  backgroundClassName?: string,\n  /** If true shows a close button and sends onClose on background clicks */\n  isModal?: boolean,\n  position?: DialogPosition,\n  isAnimated?: boolean,\n  containerClassName?: string,\n}\n\n/**\n * A generic dialog window which is managed by its parent\n */\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(function Dialog({\n  children,\n  isOpen: isOpenOverwrite,\n  titleElement,\n  description,\n  isModal: isModalOverwrite = true,\n  onClose,\n  backgroundClassName,\n  position = 'center',\n  containerClassName,\n  ...props\n}, forwardedRef) {\n  const translation = useHightideTranslation()\n  const generatedId = useId()\n  const ids = useMemo(() => ({\n    container: `dialog-container-${generatedId}`,\n    background: `dialog-background-${generatedId}`,\n    content: props.id ?? `dialog-content-${generatedId}`,\n    title: `dialog-title-${generatedId}`,\n    description: `dialog-description-${generatedId}`,\n  }), [generatedId, props.id])\n\n  const containerRef = useRef<HTMLDivElement>(null)\n  const context = useContext(DialogContext)\n  const isOpen = isOpenOverwrite ?? context?.isOpen ?? false\n  const isModal = isModalOverwrite ?? context?.isModal ?? true\n\n  const { refAssignment, isPresent, ref } = usePresenceRef<HTMLDivElement>({\n    isOpen,\n  })\n\n  const onCloseStable = useEventCallbackStabilizer(onClose)\n  const onCloseWrapper = useCallback(() => {\n    if (!isModal) return\n    onCloseStable()\n    context?.setIsOpen(false)\n  }, [onCloseStable, context, isModal])\n\n  useLogOnce('Dialog: onClose should be defined for modal dialogs', isModal && !onClose && !context)\n\n  const { isVisible, transitionState } = useTransitionState({ isOpen, ref: containerRef })\n\n  useFocusTrap({\n    container: ref,\n    active: isVisible,\n  })\n\n  const { zIndex } = useOverlayRegistry({\n    isActive: isVisible,\n  })\n\n  const hasDescription = !!description\n\n  return (\n    <Visibility isVisible={isVisible}>\n      <Portal>\n        <div\n          ref={containerRef}\n          id={ids.container}\n\n          data-open={PropsUtil.dataAttributes.bool(isOpen)}\n\n          data-name=\"dialog-container\"\n          className={containerClassName}\n          style={{ zIndex }}\n        >\n          <div\n            id={ids.background}\n\n            onClick={onCloseWrapper}\n\n            data-name=\"dialog-background\"\n            data-state={transitionState}\n\n            aria-hidden={true}\n\n            className={backgroundClassName}\n          />\n          <FocusTrap active={isPresent && isOpen} container={ref}>\n            <div\n              {...props}\n              id={ids.content}\n              ref={ReactRefsUtil.assingRefsBuilder([refAssignment, forwardedRef])}\n\n              onKeyDown={PropsUtil.aria.close(onCloseWrapper)}\n\n              data-state={transitionState}\n              data-position={position}\n\n              role=\"dialog\"\n              aria-modal={isModal}\n              aria-labelledby={ids.title}\n              aria-describedby={hasDescription ? ids.description : undefined}\n\n              data-name={props['data-name'] ?? 'dialog-content'}\n            >\n              <div className=\"typography-title-lg mr-10\">\n                {titleElement}\n              </div>\n              <Visibility isVisible={hasDescription}>\n                <div className=\"text-description\">\n                  {description}\n                </div>\n              </Visibility>\n              <Visibility isVisible={isModal}>\n                <div\n                  className=\"absolute top-0 right-0\"\n                  style={{\n                    paddingTop: 'inherit',\n                    paddingRight: 'inherit'\n                  }}\n                >\n                  <IconButton\n                    tooltip={translation('closeDialog')}\n                    size=\"xs\"\n                    color=\"neutral\"\n                    coloringStyle=\"text\"\n                    onClick={onCloseWrapper}\n                  >\n                    <X size={24}/>\n                  </IconButton>\n                </div>\n              </Visibility>\n              {children}\n            </div>\n          </FocusTrap>\n        </div>\n      </Portal>\n    </Visibility>\n  )\n})","import type { Dispatch, SetStateAction } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport type DialogContextType = {\n  isOpen: boolean,\n  setIsOpen: Dispatch<SetStateAction<boolean>>,\n  isModal: boolean,\n}\n\nexport const DialogContext = createContext<DialogContextType | null>(null)\n\nexport function useDialogContext() {\n  const context = useContext(DialogContext)\n  if (!context) {\n    throw new Error('useDialogContext must be used within a <DialogContext.Provider>')\n  }\n  return context\n}","import { useMemo, type ReactNode } from 'react'\nimport { useDialogContext } from './DialogContext'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\n\nexport interface DialogOpenerWrapperBag {\n    open: () => void,\n    close: () => void,\n    isOpen: boolean,\n    toggleOpen: () => void,\n    props: {\n        'onClick': () => void,\n        'aria-haspopup': 'dialog',\n    },\n}\n\nexport interface DialogOpenerWrapperProps {\n    children: (props: DialogOpenerWrapperBag) => ReactNode,\n}\n\nexport function DialogOpenerWrapper({ children }: DialogOpenerWrapperProps) {\n  const context = useDialogContext()\n\n  const bag: DialogOpenerWrapperBag = useMemo<DialogOpenerWrapperBag>(() => ({\n    open: () => context.setIsOpen(true),\n    close: () => context.setIsOpen(false),\n    toggleOpen: () => context.setIsOpen(prev => !prev),\n    isOpen: context.isOpen,\n    props: {\n      'onClick': () => context.setIsOpen(true),\n      'aria-haspopup': 'dialog',\n    },\n  }), [context])\n\n  return BagFunctionUtil.resolve(children, bag)\n}\n\n\nexport interface DialogOpenerPassingProps {\n  'children'?: React.ReactNode,\n  'onClick'?: React.MouseEventHandler<HTMLButtonElement>,\n  'aria-haspopup'?: 'dialog',\n}\n","import { useControlledState } from '@/src/hooks/useControlledState'\nimport type { PropsWithChildren } from 'react'\nimport { DialogContext } from './DialogContext'\n\nexport interface DialogRootProps extends PropsWithChildren {\n    isOpen?: boolean,\n    onIsOpenChange?: (isOpen: boolean) => void,\n    initialIsOpen?: boolean,\n    isModal?: boolean,\n}\n\nexport function DialogRoot({\n  children,\n  isOpen: controlledIsOpen,\n  onIsOpenChange,\n  initialIsOpen = false,\n  isModal = true,\n}: DialogRootProps) {\n  const [isOpen, setIsOpen] = useControlledState({\n    value: controlledIsOpen,\n    onValueChange: onIsOpenChange,\n    defaultValue: initialIsOpen,\n  })\n\n  return (\n    <DialogContext.Provider value={{ isOpen, setIsOpen, isModal }}>\n      {children}\n    </DialogContext.Provider>\n  )\n}","import type { PropsWithChildren } from 'react'\nimport type { ButtonColor } from '@/src/components/user-interaction/Button'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport clsx from 'clsx'\nimport type { DialogProps } from '@/src/components/layout/dialog/Dialog'\nimport { Dialog } from '@/src/components/layout/dialog/Dialog'\n\nexport type ConfirmDialogType = 'positive' | 'negative' | 'neutral' | 'primary'\n\ntype ButtonOverwriteType = {\n  text?: string,\n  color?: ButtonColor,\n  disabled?: boolean,\n}\n\nexport type ConfirmDialogProps = Omit<DialogProps, 'onClose'> & {\n  isShowingDecline?: boolean,\n  requireAnswer?: boolean,\n  onCancel: () => void,\n  onConfirm: () => void,\n  onDecline?: () => void,\n  confirmType?: ConfirmDialogType,\n  /**\n   * Order: Cancel, Decline, Confirm\n   */\n  buttonOverwrites?: [ButtonOverwriteType, ButtonOverwriteType, ButtonOverwriteType],\n}\n\n/**\n * A Dialog for asking the user for confirmation\n */\nexport const ConfirmDialog = ({\n  children,\n  onCancel,\n  onConfirm,\n  onDecline,\n  confirmType = 'positive',\n  buttonOverwrites,\n  className,\n  ...restProps\n}: PropsWithChildren<ConfirmDialogProps>) => {\n  const translation = useHightideTranslation()\n\n  const mapping: Record<ConfirmDialogType, ButtonColor> = {\n    neutral: 'neutral',\n    negative: 'negative',\n    positive: 'positive',\n    primary: 'primary',\n  }\n\n  return (\n    <Dialog {...restProps} onClose={onCancel} className={clsx('justify-between', className)}>\n      <div className=\"flex-col-2 grow\">\n        {children}\n      </div>\n      <div className=\"flex-row-4 mt-3 justify-end\">\n        {onCancel && (\n          <Button\n            color={buttonOverwrites?.[0].color ?? 'neutral'}\n            onClick={onCancel}\n            disabled={buttonOverwrites?.[0].disabled ?? false}\n          >\n            {buttonOverwrites?.[0].text ?? translation('cancel')}\n          </Button>\n        )}\n        {onDecline && (\n          <Button\n            color={buttonOverwrites?.[1].color ?? 'negative'}\n            onClick={onDecline}\n\n            disabled={buttonOverwrites?.[1].disabled ?? false}\n          >\n            {buttonOverwrites?.[1].text ?? translation('decline')}\n          </Button>\n        )}\n        <Button\n          color={buttonOverwrites?.[2].color ?? mapping[confirmType]}\n          onClick={onConfirm}\n          disabled={buttonOverwrites?.[2].disabled ?? false}\n        >\n          {buttonOverwrites?.[2].text ?? translation('confirm')}\n        </Button>\n      </div>\n    </Dialog>\n  )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { ConfirmDialogProps } from '@/src/components/layout/dialog/premade/ConfirmDialog'\nimport { ConfirmDialog } from '@/src/components/layout/dialog/premade/ConfirmDialog'\n\ntype DiscardChangesDialogProps =\n  Omit<ConfirmDialogProps, 'onDecline' | 'onConfirm' | 'buttonOverwrites' | 'titleElement' | 'description'>\n  & {\n  isShowingDecline?: boolean,\n  requireAnswer?: boolean,\n  onCancel: () => void,\n  onSave: () => void,\n  onDontSave: () => void,\n  titleOverwrite?: ReactNode,\n  descriptionOverwrite?: ReactNode,\n}\n\nexport const DiscardChangesDialog = ({\n  children,\n  onCancel,\n  onSave,\n  onDontSave,\n  titleOverwrite,\n  descriptionOverwrite,\n  ...props\n}: PropsWithChildren<DiscardChangesDialogProps>) => {\n  const translation = useHightideTranslation()\n  return (\n    <ConfirmDialog\n      {...props}\n      titleElement={titleOverwrite ?? translation('unsavedChanges')}\n      description={descriptionOverwrite ?? translation('unsavedChangesSaveQuestion')}\n      onConfirm={onSave}\n      onCancel={onCancel}\n      onDecline={onDontSave}\n      buttonOverwrites={[{ text: translation('cancel') }, { text: translation('discardChanges') }, { text: translation('save') }]}\n    >\n      {children}\n    </ConfirmDialog>\n  )\n}\n","import type { InputProps } from '../../../user-interaction/input/Input'\nimport { Input } from '../../../user-interaction/input/Input'\nimport type { ConfirmDialogProps } from '@/src/components/layout/dialog/premade/ConfirmDialog'\nimport { ConfirmDialog } from '@/src/components/layout/dialog/premade/ConfirmDialog'\n\nexport type InputModalProps = ConfirmDialogProps & {\n  inputs: InputProps[],\n}\n\n/**\n * A modal for receiving multiple inputs\n */\nexport const InputDialog = ({\n  inputs,\n  buttonOverwrites,\n  ...props\n}: InputModalProps) => {\n  return (\n    <ConfirmDialog\n      buttonOverwrites={buttonOverwrites}\n      {...props}\n    >\n      {inputs.map((inputProps, index) => <Input key={`input ${index}`} {...inputProps}/>)}\n    </ConfirmDialog>\n  )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport type { DialogProps } from '@/src/components/layout/dialog/Dialog'\nimport { Dialog } from '@/src/components/layout/dialog/Dialog'\nimport { LocalizationUtil } from '@/src/i18n/util'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { HightideTranslationLocales } from '@/src/i18n/translations'\nimport type { SelectProps } from '@/src/components/user-interaction/Select/Select'\nimport { Select } from '@/src/components/user-interaction/Select/Select'\nimport { SelectOption } from '@/src/components/user-interaction/Select/SelectOption'\nimport clsx from 'clsx'\n\ntype LanguageSelectProps = Omit<SelectProps, 'value' | 'children'>\n\nexport const LanguageSelect = ({ ...props }: LanguageSelectProps) => {\n  const { locale, setLocale } = useLocale()\n\n  return (\n    <Select\n      {...props}\n      value={locale}\n      onValueChange={(language: string) => {\n        setLocale(language as HightideTranslationLocales)\n        props.onValueChange?.(language)\n      }}\n      buttonProps={{\n        ...props.buttonProps,\n        className: clsx('min-w-40 w-fit', props.buttonProps?.className),\n      }}\n    >\n      {LocalizationUtil.locals.map((local) => (\n        <SelectOption key={local} value={local} label={LocalizationUtil.languagesLocalNames[local]}>\n          {LocalizationUtil.languagesLocalNames[local]}\n        </SelectOption>\n      ))}\n    </Select>\n  )\n}\n\ntype LanguageDialogProps = Omit<DialogProps, 'titleElement' | 'description'> & PropsWithChildren<{\n  titleOverwrite?: ReactNode,\n  descriptionOverwrite?: ReactNode,\n}>\n\n/**\n * A Dialog for selecting the Language\n *\n * The State of open needs to be managed by the parent\n */\nexport const LanguageDialog = ({\n  onClose,\n  titleOverwrite,\n  descriptionOverwrite,\n  ...props\n}: LanguageDialogProps) => {\n  const translation = useHightideTranslation()\n\n  return (\n    <Dialog\n      titleElement={titleOverwrite ?? translation('language')}\n      description={descriptionOverwrite ?? translation('chooseLanguage')}\n      onClose={onClose}\n      className={clsx('w-80', props.className)}\n      {...props}\n    >\n      <LanguageSelect />\n      <div className=\"flex-row-4 mt-3 justify-end\">\n        <Button color=\"positive\" onClick={onClose}>\n          {translation('done')}\n        </Button>\n      </div>\n    </Dialog>\n  )\n}\n","import type { HTMLAttributes } from 'react'\nimport { type PropsWithChildren, type ReactNode } from 'react'\nimport type { DialogProps } from '@/src/components/layout/dialog/Dialog'\nimport { Dialog } from '@/src/components/layout/dialog/Dialog'\nimport { MonitorCog, MoonIcon, SunIcon } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { ThemeType } from '@/src/global-contexts/ThemeContext'\nimport { ThemeUtil, useTheme } from '@/src/global-contexts/ThemeContext'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { SelectProps } from '@/src/components/user-interaction/Select/Select'\nimport { Select } from '@/src/components/user-interaction/Select/Select'\nimport { SelectOption } from '@/src/components/user-interaction/Select/SelectOption'\n\nexport interface ThemeIconProps extends HTMLAttributes<SVGSVGElement> {\n  theme?: ThemeType,\n}\n\nexport const ThemeIcon = ({ theme: themeOverride, ...props }: ThemeIconProps) => {\n  const { resolvedTheme } = useTheme()\n  const theme = themeOverride ?? resolvedTheme\n\n  switch (theme) {\n  case 'dark':\n    return <MoonIcon {...props} className={clsx('w-4 h-4', props. className)}/>\n  case 'light':\n    return <SunIcon {...props} className={clsx('w-4 h-4', props.className)}/>\n  default:\n    return <MonitorCog {...props}className={clsx('w-4 h-4', props.className)}/>\n  }\n}\n\nexport type ThemeSelectProps = Omit<SelectProps<ThemeType>, 'value' | 'children'>\n\nexport const ThemeSelect = ({ ...props }: ThemeSelectProps) => {\n  const translation = useHightideTranslation()\n  const { theme, setTheme } = useTheme()\n\n  return (\n    <Select<ThemeType>\n      value={theme}\n      onEditComplete={(value) => {\n        props.onEditComplete?.(value)\n        setTheme(value)\n      }}\n      iconAppearance=\"right\"\n      {...props}\n      buttonProps={{\n        ...props.buttonProps,\n        className: clsx('min-w-40 w-fit', props.buttonProps?.className),\n      }}\n      showSearch={false}\n    >\n      {ThemeUtil.themes.map((theme) => (\n        <SelectOption\n          key={theme}\n          value={theme}\n          label={translation('sThemeMode', { theme: theme })}\n          className=\"gap-x-6 justify-between\"\n        >\n          <div className=\"flex-row-2 items-center\">\n            <ThemeIcon theme={theme}/>\n            {translation('sThemeMode', { theme: theme })}\n          </div>\n        </SelectOption>\n      ))}\n    </Select>\n  )\n}\n\nexport interface ThemeDialogProps extends Omit<DialogProps, 'titleElement' | 'description'> {\n  titleOverwrite?: ReactNode,\n  descriptionOverwrite?: ReactNode,\n}\n\n/**\n * A Dialog for selecting the Theme\n *\n * The State of open needs to be managed by the parent\n */\nexport const ThemeDialog = ({\n  onClose,\n  titleOverwrite,\n  descriptionOverwrite,\n  ...props\n}: PropsWithChildren<ThemeDialogProps>) => {\n  const translation = useHightideTranslation()\n\n  return (\n    <Dialog\n      titleElement={titleOverwrite ?? translation('pThemes', { count: 1 })}\n      description={descriptionOverwrite ?? translation('chooseTheme')}\n      onClose={onClose}\n      className=\"w-80\"\n      {...props}\n    >\n      <ThemeSelect />\n      <div className=\"flex-row-4 w-full mt-3 justify-end\">\n        <Button onClick={onClose}>\n          {translation('done')}\n        </Button>\n      </div>\n    </Dialog>\n  )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { useStorage } from '../hooks/useStorage'\nimport type { ThemeConfig } from '@/src/global-contexts/HightideConfigContext'\nimport { useHightideConfig } from '@/src/global-contexts/HightideConfigContext'\n\nconst themes = ['light', 'dark', 'system'] as const\n\nexport type ThemeType = typeof themes[number]\nexport type ResolvedTheme = Exclude<ThemeType, 'system'>\n\nexport const ThemeUtil = {\n  themes,\n}\n\ntype ThemeContextType = {\n  theme: ThemeType,\n  resolvedTheme: ResolvedTheme,\n  setTheme: Dispatch<SetStateAction<ThemeType>>,\n}\n\nexport const ThemeContext = createContext<ThemeContextType | null>(null)\n\nexport type ThemeProviderProps = PropsWithChildren & Partial<ThemeConfig> & {\n  /**\n   * Only set this if you want to control the theme yourself\n   */\n  theme?: ThemeType,\n}\n\nexport const ThemeProvider = ({ children, theme, initialTheme }: ThemeProviderProps) => {\n  const {\n    value: storedTheme,\n    setValue: setStoredTheme,\n    deleteValue: deleteStoredTheme\n  } = useStorage<ThemeType>({ key: 'theme', defaultValue: 'system' })\n  const { config } = useHightideConfig()\n  const [themePreference, setThemePreference] = useState<ThemeType>('system')\n\n  const resolvedTheme = useMemo((): ResolvedTheme => {\n    if (theme && theme !== 'system') {\n      return theme\n    }\n    if (storedTheme && storedTheme !== 'system') {\n      return storedTheme\n    }\n    if (themePreference !== 'system') {\n      return themePreference\n    }\n    return initialTheme ?? config.theme.initialTheme\n  }, [config.theme.initialTheme, initialTheme, storedTheme, theme, themePreference])\n\n  useEffect(() => {\n    if(!theme) return\n    if (theme === 'system') {\n      deleteStoredTheme()\n    } else {\n      setStoredTheme(theme)\n    }\n  }, [theme, deleteStoredTheme, setStoredTheme])\n\n  useEffect(() => {\n    document.documentElement.setAttribute('data-theme', resolvedTheme)\n  }, [resolvedTheme])\n\n  const getPreference = useCallback(() => {\n    const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches\n    const prefersLight = window.matchMedia('(prefers-color-scheme: light)').matches\n    setThemePreference(prefersDark ? 'dark' : (prefersLight ? 'light' : 'system'))\n  }, [])\n\n  useEffect(() => {\n    getPreference()\n  }, [getPreference])\n\n  useEffect(() => {\n    const darkQuery = window.matchMedia('(prefers-color-scheme: dark)')\n    const lightQuery = window.matchMedia('(prefers-color-scheme: light)')\n    const noPrefQuery = window.matchMedia('(prefers-color-scheme: no-preference)')\n    darkQuery.addEventListener('change', getPreference)\n    lightQuery.addEventListener('change', getPreference)\n    noPrefQuery.addEventListener('change', getPreference)\n    return () => {\n      darkQuery.removeEventListener('change', getPreference)\n      lightQuery.removeEventListener('change', getPreference)\n      noPrefQuery.removeEventListener('change', getPreference)\n    }\n  }, [getPreference])\n\n  return (\n    <ThemeContext.Provider\n      value={{\n        theme: storedTheme,\n        resolvedTheme,\n        setTheme: (newTheme) => {\n          if (theme && theme !== 'system') {\n            console.warn('ThemeProvider: Attempting to change the ' +\n              \"theme while setting a fixed theme won't have any effect. \" +\n              'Change the theme provided to the ThemeProvider instead.')\n          }\n          setStoredTheme(newTheme)\n        }\n      }}\n    >\n      {children}\n    </ThemeContext.Provider>\n  )\n}\n\nexport const useTheme = () => {\n  const context = useContext(ThemeContext)\n  if (!context) {\n    throw new Error('useTheme must be used within ThemeContext. Try adding a ThemeProvider around your app.')\n  }\n  return context\n}\n","import type { ReactNode } from 'react'\nimport { forwardRef, type HTMLAttributes } from 'react'\nimport { Visibility } from '../Visibility'\nimport { DrawerContainer } from './DrawerContainer'\nimport { DrawerCloseButton } from './DrawerCloseButton'\nimport { DrawerRoot } from './DrawerRoot'\n\nexport type DrawerAligment = 'left' | 'right' | 'bottom' | 'top'\n\nexport type DrawerProps = HTMLAttributes<HTMLDivElement> & {\n  isOpen: boolean,\n  alignment: DrawerAligment,\n  titleElement: ReactNode,\n  description: ReactNode,\n  headerOverwrite?: ReactNode,\n  footer?: ReactNode,\n  isAnimated?: boolean,\n  containerClassName?: string,\n  backgroundClassName?: string,\n  onClose: () => void,\n  forceMount?: boolean,\n  hasDefaultCloseIcon?: boolean,\n  noScrolling?: boolean,\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer({\n  children,\n  isOpen = true,\n  alignment = 'left',\n  titleElement,\n  description,\n  headerOverwrite,\n  footer,\n  containerClassName,\n  backgroundClassName,\n  onClose,\n  forceMount = false,\n  hasDefaultCloseIcon = true,\n  noScrolling = false,\n  ...props\n}, forwardedRef) {\n  return (\n    <DrawerRoot isOpen={isOpen} onIsOpenChange={(open) => !open && onClose()}>\n      <DrawerContainer\n        ref={forwardedRef}\n        alignment={alignment}\n        containerClassName={containerClassName}\n        backgroundClassName={backgroundClassName}\n        forceMount={forceMount}\n        {...props}\n      >\n        <div className=\"drawer-content\" data-no-scrolling={noScrolling ? '' : undefined}>\n          <div className=\"drawer-header\">\n            {headerOverwrite ? headerOverwrite : (\n              <>\n                <div className=\"drawer-title\">\n                  {titleElement}\n                </div>\n                <Visibility isVisible={!!description}>\n                  <div className=\"drawer-description\">\n                    {description}\n                  </div>\n                </Visibility>\n              </>\n            )}\n          </div>\n          <div className=\"drawer-main-content\" data-no-outer-scrolling={noScrolling ? '' : undefined}>\n            {children}\n          </div>\n          {!!footer && (\n            <div className=\"drawer-footer\">\n              {footer}\n            </div>\n          )}\n        </div>\n        {hasDefaultCloseIcon && (\n          <div className=\"drawer-close-button-positioner\">\n            <DrawerCloseButton />\n          </div>\n        )}\n      </DrawerContainer>\n    </DrawerRoot>\n  )\n})","import { forwardRef, useId, useMemo, useRef, type HTMLAttributes } from 'react'\nimport { useFocusTrap } from '@/src/hooks/focus/useFocusTrap'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useTransitionState } from '@/src/hooks/useTransitionState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { Portal } from '../../utils/Portal'\nimport { useDrawerContext } from './DrawerContext'\nimport type { DrawerAligment } from './Drawer'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\nimport clsx from 'clsx'\n\nexport type DrawerContainerProps = HTMLAttributes<HTMLDivElement> & {\n  alignment: DrawerAligment,\n  containerClassName?: string,\n  backgroundClassName?: string,\n  forceMount?: boolean,\n}\n\nexport const DrawerContainer = forwardRef<HTMLDivElement, DrawerContainerProps>(function DrawerContent({\n  children,\n  alignment = 'left',\n  containerClassName,\n  backgroundClassName,\n  forceMount = false,\n  ...props\n}, forwardedRef) {\n  const { isOpen } = useDrawerContext()\n  const generatedId = useId()\n  const ids = useMemo(() => ({\n    screenCover: `drawer-screen-cover-${generatedId}`,\n    background: `drawer-background-${generatedId}`,\n    container: props.id ?? `drawer-container-${generatedId}`\n  }), [generatedId, props.id])\n\n  const ref = useRef<HTMLDivElement>(null)\n\n  const { isVisible, transitionState } = useTransitionState({ isOpen, ref })\n\n  useFocusTrap({\n    container: ref,\n    active: isVisible,\n  })\n\n  const { zIndex, tagPositions, tagItemCounts } = useOverlayRegistry({\n    isActive: isVisible,\n    tags: useMemo(() => ['drawer'], [])\n  })\n  const depth = tagPositions && tagItemCounts ? ((tagItemCounts['drawer'] ?? 0) - (tagPositions['drawer'] ?? 0)) : 0\n  const { setOpen } = useDrawerContext()\n\n  if (!isVisible && !forceMount) return null\n\n  return (\n    <Portal>\n      <div\n        id={ids.screenCover}\n        className={clsx('drawer-screen-cover', containerClassName)}\n        data-open={PropsUtil.dataAttributes.bool(isOpen)}\n        hidden={!isVisible && forceMount}\n        style={{ zIndex, '--drawer-depth': depth.toString() } as React.CSSProperties}\n      >\n        <div\n          id={ids.background}\n          onClick={() => setOpen(false)}\n          className={backgroundClassName}\n          data-name=\"drawer-background\"\n          data-state={transitionState}\n          data-depth={depth}\n          data-alignment={alignment}\n          aria-hidden={true}\n        />\n        <div\n          {...props}\n          id={ids.container}\n          ref={ReactRefsUtil.assingRefsBuilder([ref, forwardedRef])}\n          onKeyDown={PropsUtil.aria.close(() => setOpen(false))}\n          className=\"drawer-container\"\n          data-state={transitionState}\n          data-depth={depth}\n          data-alignment={alignment}\n        >\n          {children}\n        </div>\n      </div>\n    </Portal>\n  )\n})\n\n\n","import type { Dispatch, SetStateAction } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport type DrawerContextType = {\n  isOpen: boolean,\n  setOpen: Dispatch<SetStateAction<boolean>>,\n}\n\nexport const DrawerContext = createContext<DrawerContextType | null>(null)\n\nexport function useDrawerContext() {\n  const context = useContext(DrawerContext)\n  if (!context) {\n    throw new Error('useDrawerContext must be used within a <DrawerRoot>')\n  }\n  return context\n}\n\n\n","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { X } from 'lucide-react'\nimport type { IconButtonProps } from '../../user-interaction/IconButton'\nimport { IconButton } from '../../user-interaction/IconButton'\nimport { useDrawerContext } from './DrawerContext'\n\nexport type DrawerCloseButtonProps = IconButtonProps\n\nexport function DrawerCloseButton({\n  tooltip,\n  onClick,\n  ...props\n}: DrawerCloseButtonProps) {\n  const translation = useHightideTranslation()\n  const { setOpen } = useDrawerContext()\n\n  const handleClose = () => {\n    setOpen(false)\n  }\n\n  return (\n    <IconButton\n      coloringStyle=\"text\"\n      color=\"neutral\"\n      size=\"sm\"\n\n      {...props}\n\n      tooltip={tooltip ?? translation('close')}\n\n      onClick={(event) => {\n        handleClose()\n        onClick?.(event)\n      }}\n    >\n      <X />\n    </IconButton>\n  )\n}\n\n\n","import { useControlledState } from '@/src/hooks/useControlledState'\nimport type { PropsWithChildren } from 'react'\nimport { DrawerContext } from './DrawerContext'\n\nexport interface DrawerRootProps extends PropsWithChildren {\n  isOpen?: boolean,\n  onIsOpenChange?: (isOpen: boolean) => void,\n  initialIsOpen?: boolean,\n}\n\nexport function DrawerRoot({\n  children,\n  isOpen: controlledIsOpen,\n  onIsOpenChange,\n  initialIsOpen = false,\n}: DrawerRootProps) {\n  const [isOpen, setIsOpen] = useControlledState({\n    value: controlledIsOpen,\n    onValueChange: onIsOpenChange,\n    defaultValue: initialIsOpen,\n  })\n\n  return (\n    <DrawerContext.Provider value={{ isOpen, setOpen: setIsOpen }}>\n      {children}\n    </DrawerContext.Provider>\n  )\n}\n\n\n","import { AlertOctagon } from 'lucide-react'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\nexport type ErrorComponentProps = {\n  errorText?: string,\n  classname?: string,\n}\n\n/**\n * The Component to show when an error occurred\n */\nexport const ErrorComponent = ({\n  errorText,\n  classname\n}: ErrorComponentProps) => {\n  const translation = useHightideTranslation()\n  return (\n    <div className={clsx('flex-col-4 items-center justify-center w-full h-24', classname)}>\n      <AlertOctagon size={64} className=\"text-warning\"/>\n      {errorText ?? `${translation('errorOccurred')} :(`}\n    </div>\n  )\n}\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useState } from 'react'\nimport { LoadingContainer } from '@/src/components/layout/loading/LoadingContainer'\nimport { clsx } from 'clsx'\n\nexport type LoadingAndErrorComponentProps = PropsWithChildren<{\n  isLoading?: boolean,\n  hasError?: boolean,\n  loadingComponent?: ReactNode,\n  errorComponent?: ReactNode,\n  /**\n   * in milliseconds\n   */\n  minimumLoadingDuration?: number,\n  className?: string,\n}>\n\n/**\n * A Component that shows the Error and Loading animation, when appropriate and the children otherwise\n */\nexport const LoadingAndErrorComponent = ({\n  children,\n  isLoading = false,\n  hasError = false,\n  loadingComponent,\n  errorComponent,\n  minimumLoadingDuration = 200,\n  className\n}: LoadingAndErrorComponentProps) => {\n  const [isInMinimumLoading, setIsInMinimumLoading] = useState(false)\n  const [hasUsedMinimumLoading, setHasUsedMinimumLoading] = useState(false)\n  if (minimumLoadingDuration && !isInMinimumLoading && !hasUsedMinimumLoading) {\n    setIsInMinimumLoading(true)\n    setTimeout(() => {\n      setIsInMinimumLoading(false)\n      setHasUsedMinimumLoading(true)\n    }, minimumLoadingDuration)\n  }\n\n  if (isLoading || (minimumLoadingDuration && isInMinimumLoading)) {\n    return <>{(loadingComponent ?? <LoadingContainer className={className}/>)}</>\n  }\n  if (hasError) {\n    return <>{(errorComponent ?? <LoadingContainer className={clsx('bg-negative', className)}/>)}</>\n  }\n  return <>{children}</>\n}\n","import { clsx } from 'clsx'\n\nexport type LoadingComponentProps = {\n  className?: string,\n}\n\nexport const LoadingContainer = ({ className }: LoadingComponentProps) => {\n  return (\n    <div className={clsx('relative overflow-hidden shimmer bg-disabled/30 rounded-md', className)}/>\n  )\n}","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport clsx from 'clsx'\nimport { HelpwaveLogo } from '@/src/components/branding/HelpwaveLogo'\n\nexport type LoadingAnimationProps = {\n  loadingText?: string,\n  classname?: string,\n  animationDuration?: number,\n}\n\nexport const LoadingAnimation = ({\n  loadingText,\n  classname,\n  animationDuration\n}: LoadingAnimationProps) => {\n  const translation = useHightideTranslation()\n  return (\n    <div className={clsx('flex-col-2 items-center justify-center w-full h-24', classname)}>\n      <HelpwaveLogo animate=\"loading\" animationDuration={animationDuration} />\n      {loadingText ?? `${translation('loading')}...`}\n    </div>\n  )\n}\n","import { ArrayUtil } from '@/src/utils/array'\nimport clsx from 'clsx'\nimport type { AnchorHTMLAttributes, ElementType, HTMLAttributes, ReactNode } from 'react'\n\nexport type BreadCrumbLinkElementProps = AnchorHTMLAttributes<HTMLAnchorElement> & { href: string }\n\nexport type BreadCrumbLinkProps = BreadCrumbLinkElementProps & { LinkElement?: ElementType<BreadCrumbLinkElementProps> }\n\nconst DefaultBreadCrumbLinkElement = 'a'\n\nexport const BreadCrumbLink = ({ LinkElement = DefaultBreadCrumbLinkElement, className, ...props } : BreadCrumbLinkProps) => {\n  return (\n    <LinkElement\n      {...props}\n      className={clsx('breadcrumb-link', className)}\n    />\n  )\n}\n\nconst BreadCrumbDivider = () => {\n  return (\n    <span data-name=\"breadcrumb-divider\">/</span>\n  )\n}\n\n\ntype BreadCrumbGroupProps = HTMLAttributes<HTMLUListElement> & {\n  divider?: ReactNode | null,\n}\n\n/**\n * A component for showing a hierarchical link structure with an independent link on each element\n *\n * e.g. Organizations/Ward/<id>\n */\nexport const BreadCrumbGroup = ({ children, divider, ...props }: BreadCrumbGroupProps) => {\n  const items = ArrayUtil.resolveSingleOrArray(children)\n\n  return (\n    <ul {...props} data-name=\"breadcrumb\">\n      {items.map((item, index) => {\n        const isLast = index === items.length - 1\n        return (\n          <li key={index} data-name=\"breadcrumb-item\">\n            {item}\n            {!isLast && divider !== null && (divider ?? <BreadCrumbDivider/>)}\n          </li>\n        )\n      })}\n    </ul>\n  )\n}\n\nexport type Crumb = {\n  href: string,\n  label: ReactNode,\n}\n\nexport type BreadCrumbProps = {\n  crumbs: Crumb[],\n  LinkElement?: ElementType<BreadCrumbLinkElementProps>,\n}\n\nexport const BreadCrumbs = ({ crumbs, LinkElement }: BreadCrumbProps) => {\n  return (\n    <BreadCrumbGroup>\n      {crumbs.map(( { href, label }, index) => (\n        <BreadCrumbLink key={index} href={href} LinkElement={LinkElement}>\n          {label}\n        </BreadCrumbLink>\n      ))}\n    </BreadCrumbGroup>\n  )\n}","import { Menu as MenuIcon, XIcon } from 'lucide-react'\nimport type { ComponentPropsWithoutRef, ElementType, HTMLAttributes, ReactNode } from 'react'\nimport { useEffect } from 'react'\nimport React, { useCallback, useId, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { UseAnchoredPositionOptions } from '@/src/hooks/useAnchoredPosition'\nimport { useAnchoredPosition } from '@/src/hooks/useAnchoredPosition'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { useOverlayRegistry } from '@/src/hooks/useOverlayRegistry'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { IconButton } from '../../user-interaction/IconButton'\n\ntype SimpleNavigationItem = {\n  label: ReactNode,\n  link: string,\n  external?: boolean,\n}\n\n// TODO allow for nesting deeper than one level\ntype SubItemNavigationItem = {\n  label: ReactNode,\n  items?: SimpleNavigationItem[],\n}\n\nexport type NavigationItemType = SimpleNavigationItem | SubItemNavigationItem\n\nexport type NavigationLinkComponentProps = ComponentPropsWithoutRef<'a'>\n\nconst DefaultLink: ElementType<NavigationLinkComponentProps> = 'a'\n\nfunction isSubItem(item: NavigationItemType): item is SubItemNavigationItem {\n  return 'items' in item && Array.isArray(item.items)\n}\n\n///\n/// NavigationItemWithSubItem\n///\ntype NavigationItemWithSubItemProps = SubItemNavigationItem & UseAnchoredPositionOptions & {\n  LinkComponent?: ElementType<NavigationLinkComponentProps>,\n}\n\nconst NavigationItemWithSubItem = ({\n  items,\n  label,\n  horizontalAlignment = 'center',\n  LinkComponent = DefaultLink,\n  ...options\n}: NavigationItemWithSubItemProps) => {\n  const [isOpen, setOpen] = useState(false)\n  const containerRef = useRef<HTMLUListElement | null>(null)\n  const triggerRef = useRef<HTMLButtonElement | null>(null)\n  const id = useId()\n\n  const style = useAnchoredPosition({\n    active: isOpen,\n    container: containerRef,\n    anchor: triggerRef,\n    horizontalAlignment,\n    ...options,\n  })\n\n  const onBlur = useCallback((event: React.FocusEvent) => {\n    // If focus moves outside the menu + trigger, close\n    const nextFocus = event.relatedTarget as Node | null\n    if (\n      !containerRef.current?.contains(nextFocus) &&\n      !triggerRef.current?.contains(nextFocus)\n    ) {\n      setOpen(false)\n    }\n  }, [])\n\n  const { zIndex } = useOverlayRegistry()\n  // TODO at arrow key navigation\n\n  return (\n    <>\n      <button\n        id={'navigation-' + id}\n        ref={triggerRef}\n        type=\"button\"\n\n        onClick={() => {\n          setOpen(!isOpen)\n        }}\n        onBlur={onBlur}\n\n        className=\"navigation-item-button\"\n\n        aria-haspopup=\"true\"\n        aria-expanded={isOpen}\n        aria-controls={'navigation-items-' + id}\n      >\n        {label}\n        <ExpansionIcon isExpanded={isOpen} />\n      </button>\n      <ul\n        id={'navigation-items-' + id}\n        ref={containerRef}\n\n        onKeyDown={(event) => {\n          if (event.key === 'Escape') {\n            setOpen(false)\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }}\n        onBlur={onBlur}\n\n        hidden={!isOpen}\n        className={clsx(\n          'fixed flex-col-4 p-4 bg-surface text-on-surface shadow-side shadow-hw-bottom rounded-md',\n          { 'opacity-0': !style }\n        )}\n        style={{ ...style, zIndex }}\n      >\n        {!!items && items.length > 0 && items.map(({ link, label, external }, index) => (\n          <li key={index}>\n            <LinkComponent\n              href={link}\n              target={external ? '_blank' : undefined}\n              rel={external ? 'noopener noreferrer' : undefined}\n              className=\"navigation-item-link-in-box\"\n            >\n              {label}\n            </LinkComponent>\n          </li>\n        ))}\n      </ul>\n    </>\n  )\n}\n\n///\n/// NavigationItemList\n///\nexport type NavigationItemListProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {\n  items: NavigationItemType[],\n  LinkComponent?: ElementType<NavigationLinkComponentProps>,\n}\n\nexport const NavigationItemList = ({ items, LinkComponent = DefaultLink, ...restProps }: NavigationItemListProps) => {\n  return (\n    <ul {...restProps} className={clsx('flex-row-6 items-center', restProps.className)}>\n      {items.map((item, index) => (\n        <li key={index}>\n          {isSubItem(item) ? (\n            <NavigationItemWithSubItem {...item} LinkComponent={LinkComponent} />\n          ) : (\n            <LinkComponent\n              href={item.link}\n              target={item.external ? '_blank' : undefined}\n              rel={item.external ? 'noopener noreferrer' : undefined}\n              className=\"navigation-item-link\"\n            >\n              {item.label}\n            </LinkComponent>\n          )}\n        </li>\n      ))}\n    </ul>\n  )\n}\n\n///\n/// Navigation\n///\nexport type NavigationProps = NavigationItemListProps\n\nexport const Navigation = ({ ...props }: NavigationProps) => {\n  const translation = useHightideTranslation()\n  const [isMobileOpen, setIsMobileOpen] = useState(false)\n  const id = useId()\n  const menuRef = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    menuRef.current?.focus()\n  }, [isMobileOpen])\n\n  const { zIndex } = useOverlayRegistry({ isActive: isMobileOpen })\n\n  return (\n    <nav>\n      <NavigationItemList\n        {...props}\n        className={clsx('hidden', { 'desktop:flex': !isMobileOpen }, props.className)}\n      />\n      <IconButton\n        tooltip={translation('menu')}\n        coloringStyle=\"text\"\n        color=\"neutral\"\n        onClick={() => setIsMobileOpen(true)}\n\n        className=\"desktop:hidden\"\n\n        aria-haspopup=\"true\"\n        aria-expanded={isMobileOpen}\n        aria-controls={'navigation-menu-' + id}\n      >\n        <MenuIcon className=\"w-6 h-6\"/>\n      </IconButton>\n      <div\n        id={'navigation-menu-' + id}\n        ref={menuRef}\n        hidden={!isMobileOpen}\n\n        onKeyDown={(event) => {\n          if (event.key === 'Escape') {\n            setIsMobileOpen(false)\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }}\n\n        className={clsx(\n          'flex-col-8 items-center justify-center fixed inset-0 p-8 w-screen h-screen bg-surface text-on-surface', {\n            'desktop:hidden': isMobileOpen,\n          },\n          props.className\n        )}\n        style={{ zIndex }}\n      >\n        <IconButton\n          tooltip={translation('close')}\n          coloringStyle=\"text\"\n          color=\"neutral\"\n          onClick={() => setIsMobileOpen(false)}\n        >\n          <XIcon/>\n        </IconButton>\n        <NavigationItemList {...props} className={clsx('flex-col-8', props.className)}/>\n      </div>\n    </nav>\n  )\n}","import { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { MathUtil } from '@/src/utils/math'\nimport type { HTMLAttributes } from 'react'\nimport { useEffect, useState } from 'react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { IconButton } from '../../user-interaction/IconButton'\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n  pageIndex: number,\n  pageCount: number,\n  onPageIndexChanged?: (pageIndex: number) => void,\n}\n\n/**\n * A Component showing the pagination allowing first, before, next and last page navigation\n */\nexport const Pagination = ({\n  pageIndex,\n  pageCount,\n  onPageIndexChanged,\n  ...props\n}: PaginationProps) => {\n  const translation = useHightideTranslation()\n  const [value, setValue] = useState<string>((pageIndex + 1).toString())\n\n  const noPages = pageCount === 0\n  const onFirstPage = pageIndex === 0 && !noPages\n  const onLastPage = pageIndex === pageCount - 1\n\n  useEffect(() => {\n    if (noPages) {\n      setValue('0')\n    } else {\n      setValue((pageIndex + 1).toString())\n    }\n  }, [pageIndex, noPages])\n\n  const changePage = (page: number) => {\n    onPageIndexChanged?.(page)\n  }\n\n  return (\n    <div {...props} className={clsx('flex-row-1', props.className)} >\n      <IconButton\n        tooltip={translation('first')}\n        coloringStyle=\"text\"\n        color=\"neutral\"\n        onClick={() => changePage(0)} disabled={onFirstPage || noPages}\n      >\n        <ChevronFirst/>\n      </IconButton>\n      <IconButton\n        tooltip={translation('previous')}\n        coloringStyle=\"text\"\n        color=\"neutral\"\n        onClick={() => changePage(pageIndex - 1)} disabled={onFirstPage || noPages}\n      >\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          className={clsx(\n            'w-24 text-center font-bold input-indicator-hidden h-10'\n          )}\n          type=\"number\"\n          min={1}\n          max={pageCount}\n          disabled={noPages}\n          onValueChange={value => {\n            if (value) {\n              setValue(MathUtil.clamp(Number(value), 1, pageCount).toString())\n            } else {\n              setValue(value)\n            }\n          }}\n          onEditComplete={value => {\n            changePage(MathUtil.clamp(Number(value) - 1, 0, pageCount - 1))\n          }}\n          editCompleteOptions={{ delay: 800 }}\n        />\n        <span className=\"select-none w-10\">{translation('of')}</span>\n        <span\n          className=\"flex-row-2 w-24 items-center justify-center select-none h-10 bg-input-background text-input-text rounded-md font-bold\"\n        >\n          {pageCount}\n        </span>\n      </div>\n      <IconButton\n        tooltip={translation('next')}\n        coloringStyle=\"text\"\n        color=\"neutral\"\n        onClick={() => changePage(pageIndex + 1)} disabled={onLastPage || noPages}\n      >\n        <ChevronRight/>\n      </IconButton>\n      <IconButton\n        tooltip={translation('last')}\n        coloringStyle=\"text\"\n        color=\"neutral\"\n        onClick={() => changePage(pageCount - 1)} disabled={onLastPage || noPages}\n      >\n        <ChevronLast/>\n      </IconButton>\n    </div>\n  )\n}\n","import { Check, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { range } from '@/src/utils/array'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport clsx from 'clsx'\nimport { useControlledState } from '@/src/hooks/useControlledState'\n\nexport type StepperState = {\n  currentStep: number,\n  seenSteps: Set<number>,\n}\n\nexport type StepperBarProps = {\n  state?: StepperState,\n  initialState?: StepperState,\n  onStateChange: (state: StepperState) => void,\n  numberOfSteps: number,\n  disabledSteps?: Set<number>,\n  onFinish: () => void,\n  finishText?: string,\n  showDots?: boolean,\n  className?: string,\n}\n\nconst defaultState: StepperState = {\n  currentStep: 0,\n  seenSteps: new Set([0])\n}\n\n/**\n * A Component for stepping\n */\nexport const StepperBar = ({\n  state: controlledState,\n  initialState = defaultState,\n  numberOfSteps,\n  disabledSteps = new Set(),\n  onStateChange,\n  onFinish,\n  finishText,\n  showDots = true,\n  className = '',\n}: StepperBarProps) => {\n  const translation = useHightideTranslation()\n  const dots = range(numberOfSteps + 1) // +1 for last finish step\n  const [state, setState] = useControlledState({\n    value: controlledState,\n    onValueChange: onStateChange,\n    defaultValue: initialState,\n  })\n  const { currentStep, seenSteps } = state\n\n  const update = (newStep: number) => {\n    seenSteps.add(newStep)\n    setState({ currentStep: newStep, seenSteps })\n  }\n\n  return (\n    <div\n      className={clsx('flex-row-2 justify-between',className)}\n    >\n      <div className=\"flex-row-2 flex-[2] justify-start\">\n        <Button\n          disabled={currentStep === 0 || disabledSteps.has(currentStep)}\n          onClick={() => {\n            update(currentStep - 1)\n          }}\n          className=\"flex-row-1 items-center justify-center\"\n        >\n          <ChevronLeft size={14}/>\n          {translation('back')}\n        </Button>\n      </div>\n      <div className=\"flex-row-2 flex-[5] justify-center items-center\">\n        {showDots && dots.map((value, index) => {\n          const seen = seenSteps.has(index)\n          return (\n            <div\n              key={index}\n              onClick={() => seen && update(index)}\n              className={clsx('rounded-full w-4 h-4', {\n                'bg-stepperbar-dot-active hover:brightness-75': index === currentStep && seen && !disabledSteps.has(currentStep),\n                'bg-stepperbar-dot-normal hover:bg-stepperbar-dot-active': index !== currentStep && seen && !disabledSteps.has(currentStep),\n                'bg-stepperbar-dot-disabled': !seen || disabledSteps.has(currentStep),\n              },\n              {\n                'cursor-pointer': seen,\n                'cursor-not-allowed': !seen || disabledSteps.has(currentStep),\n              })}\n            />\n          )\n        })}\n      </div>\n      {currentStep !== numberOfSteps && (\n        <div className=\"flex-row-2 flex-[2] justify-end\">\n          <Button\n            onClick={() => update(currentStep + 1)}\n            className=\"flex-row-1 items-center justify-center\"\n            disabled={disabledSteps.has(currentStep)}\n          >\n            {translation('next')}\n            <ChevronRight size={14}/>\n          </Button>\n        </div>\n      )}\n      {currentStep === numberOfSteps && (\n        <div className=\"flex-row-2 flex-[2] justify-end\">\n          <Button\n            disabled={disabledSteps.has(currentStep)}\n            onClick={onFinish}\n            className=\"flex-row-1 items-center justify-center\"\n          >\n            <Check size={14}/>\n            {finishText ?? translation('confirm')}\n          </Button>\n        </div>\n      )}\n    </div>\n  )\n}\n","import { useEffect, useMemo, useRef, type ReactNode } from 'react'\nimport { usePopUpContext } from './PopUpContext'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\nimport type { RefObject } from 'react'\n\nexport interface PopUpOpenerBag<T extends HTMLElement> {\n  open: () => void,\n  close: () => void,\n  isOpen: boolean,\n  toggleOpen: () => void,\n  props: {\n    'id': string,\n    'onClick': () => void,\n    'aria-haspopup': 'dialog',\n    'aria-controls': string,\n    'aria-expanded': boolean,\n    'ref': RefObject<T>,\n  },\n}\n\nexport interface PopUpOpenerProps<T extends HTMLElement> {\n  children: (props: PopUpOpenerBag<T>) => ReactNode,\n}\n\nexport function PopUpOpener<T extends HTMLElement = HTMLButtonElement>({ children }: PopUpOpenerProps<T>) {\n  const context = usePopUpContext()\n  const { setTriggerRef } = context\n  const ref = useRef<T>(null)\n\n  useEffect(() => {\n    setTriggerRef(ref)\n    return () => {\n      setTriggerRef(null)\n    }\n  }, [setTriggerRef])\n\n  const bag: PopUpOpenerBag<T> = useMemo<PopUpOpenerBag<T>>(() => ({\n    open: () => context.setIsOpen(true),\n    close: () => context.setIsOpen(false),\n    toggleOpen: () => context.setIsOpen(prev => !prev),\n    isOpen: context.isOpen,\n    props: {\n      'id': context.triggerId,\n      'onClick': () => context.setIsOpen(true),\n      'aria-haspopup': 'dialog',\n      'aria-controls': context.popUpId,\n      'aria-expanded': context.isOpen,\n      'ref': ref,\n    },\n  }), [context])\n\n  return BagFunctionUtil.resolve(children, bag)\n}\n","import { useControlledState } from '@/src/hooks/useControlledState'\nimport type { PropsWithChildren, RefObject } from 'react'\nimport { useId, useMemo, useState } from 'react'\nimport { PopUpContext } from './PopUpContext'\n\nexport interface PopUpRootProps extends PropsWithChildren {\n  isOpen?: boolean,\n  onIsOpenChange?: (isOpen: boolean) => void,\n  initialIsOpen?: boolean,\n  popUpId?: string,\n  triggerId?: string,\n}\n\nexport function PopUpRoot({\n  children,\n  isOpen: controlledIsOpen,\n  onIsOpenChange,\n  initialIsOpen = false,\n  popUpId: popUpIdOverwrite,\n  triggerId: triggerIdOverwrite,\n}: PopUpRootProps) {\n  const generatedPopUpId = useId()\n  const generatedTriggerId = useId()\n\n  const [isOpen, setIsOpen] = useControlledState({\n    value: controlledIsOpen,\n    onValueChange: onIsOpenChange,\n    defaultValue: initialIsOpen,\n  })\n\n  const [triggerRef, setTriggerRef] = useState<RefObject<HTMLElement> | null>(null)\n\n  const popUpId = useMemo(() => popUpIdOverwrite ?? `pop-up-${generatedPopUpId}`, [popUpIdOverwrite, generatedPopUpId])\n  const triggerId = useMemo(() => triggerIdOverwrite ?? `pop-up-trigger-${generatedTriggerId}`, [triggerIdOverwrite, generatedTriggerId])\n\n  const contextValue = useMemo(() => ({\n    isOpen,\n    setIsOpen,\n    popUpId,\n    triggerId,\n    triggerRef,\n    setTriggerRef,\n  }), [isOpen, setIsOpen, popUpId, triggerId, triggerRef])\n\n\n  return (\n    <PopUpContext.Provider value={contextValue}>\n      {children}\n    </PopUpContext.Provider>\n  )\n}\n","import type { TableFeature, Table } from '@tanstack/react-table'\n\nexport const AutoColumnOrderFeature: TableFeature = {\n  createTable: <T>(table: Table<T>) => {\n    const oldSetColumnOrder = table.setColumnOrder\n\n    table.setColumnOrder = (updater) => {\n      let newOrder =\n        typeof updater === 'function'\n          ? updater(table.getState().columnOrder)\n          : updater\n\n      const columnIds = table.getAllColumns().map(c => c.id)\n      newOrder = newOrder.filter(id => columnIds.includes(id))\n\n      const missing = columnIds.filter(id => !newOrder.includes(id))\n      newOrder = [...newOrder, ...missing]\n\n      oldSetColumnOrder(newOrder)\n    }\n\n    const currentColumnIds = table.getAllColumns().map(c => c.id)\n    const stateColumnOrder = table.getState().columnOrder\n\n    if (!stateColumnOrder || stateColumnOrder.length === 0) {\n      table.setColumnOrder(currentColumnIds)\n    } else {\n      table.setColumnOrder(stateColumnOrder)\n    }\n\n    return table\n  },\n}\n","import { MathUtil } from '@/src/utils/math'\nimport type { ColumnSizingState } from '@tanstack/react-table'\n\ntype ColumnSizeCalculateTargetBehavoir = 'equalOrHigher'\n\ntype ColumnSizeCalculateTarget = {\n    width: number,\n    behaviour: ColumnSizeCalculateTargetBehavoir,\n}\n\nexport type ColumnSizeCalculatoProps = {\n  previousSizing: Record<string, number>,\n  newSizing: Record<string, number>,\n  columnIds: string[],\n  target?: ColumnSizeCalculateTarget,\n  minWidthsPerColumn: Record<string, number>,\n  maxWidthsPerColumn?: Record<string, number>,\n}\n\nconst calculate = ({\n  previousSizing,\n  newSizing,\n  columnIds,\n  target,\n  minWidthsPerColumn,\n  maxWidthsPerColumn\n}: ColumnSizeCalculatoProps) => {\n  if(columnIds.length === 0) {\n    return {}\n  }\n  const deltas: Record<string, number> = {}\n\n  const removedColumns = Object.keys(newSizing).filter(columnId => !columnIds.includes(columnId))\n  for(const columnId of removedColumns) {\n    delete newSizing[columnId]\n  }\n\n  for (const columnId of columnIds) {\n    if(!newSizing[columnId]) {\n      newSizing[columnId] = 0\n      continue\n    }\n    const delta = (newSizing[columnId] ?? 0) - (previousSizing[columnId] ?? 0)\n    if (delta !== 0) {\n      deltas[columnId] = delta\n    }\n  }\n\n  const minWidth = Object.values(minWidthsPerColumn).reduce((previousValue, currentValue) => previousValue + currentValue, 0)\n  const maxWidth = maxWidthsPerColumn ? Object.values(maxWidthsPerColumn).reduce((previousValue, currentValue) => previousValue + currentValue, 0) : Infinity\n\n  if (minWidth > maxWidth) {\n    throw new Error('Min width is greater than max width')\n  }\n\n  const hasTargetWidth = target?.width !== undefined\n\n  const result = {\n    ...newSizing,\n  }\n  for (const columnId of columnIds) {\n    result[columnId] = MathUtil.clamp(\n      result[columnId],\n      minWidthsPerColumn[columnId],\n      maxWidthsPerColumn?.[columnId]\n    )\n  }\n\n  if(!hasTargetWidth) {\n    return result\n  }\n\n  let targetWidth = target?.width ?? -1\n  if (hasTargetWidth) {\n    switch (target?.behaviour) {\n    case 'equalOrHigher':\n      targetWidth = Math.max(target.width, minWidth)\n      break\n    }\n  }\n\n\n  const resultWidth = Object.values(result).reduce((previousValue, currentValue) => previousValue + currentValue, 0)\n\n  if(resultWidth == targetWidth) {\n    return result\n  } else if(resultWidth < targetWidth) {\n    const widthToGive = targetWidth - resultWidth\n    const lastColumnId = columnIds[columnIds.length - 1]\n    result[lastColumnId] += widthToGive\n    return result\n  } else {\n    const widthToTake = resultWidth - targetWidth\n    const lastColumnId = columnIds[columnIds.length - 1]\n    const isLastColumnChanging = Object.keys(deltas).find(columnId => columnId === lastColumnId) !== undefined\n    if(isLastColumnChanging) {\n      return result\n    } else {\n      result[lastColumnId] = Math.max(result[lastColumnId] - widthToTake, minWidthsPerColumn[lastColumnId])\n      return result\n    }\n  }\n}\n\nexport const toSizeVars = (sizing: ColumnSizingState) => {\n  return Object.entries(sizing).reduce((previousValue, [columnId, size]) => {\n    return {\n      ...previousValue,\n      [`--header-${columnId}-size`]: size,\n    }\n  }, {})\n}\n\nexport const ColumnSizeUtil = {\n  calculate,\n  toSizeVars,\n}","import type { TableFeature } from '@tanstack/react-table'\nimport { ColumnSizeUtil } from './columnSizeUtil'\n\nexport const ColumnSizingWithTargetFeature: TableFeature = {\n  createTable: (table) => {\n    const oldSetColumnSizing = table.setColumnSizing\n\n    table.setColumnSizing = (updater) => {\n      const target = table.options.columnSizingTarget\n      if(!target) {\n        return oldSetColumnSizing(updater)\n      }\n\n      const newSizing = typeof updater === 'function' ? updater(table.getState().columnSizing) : updater\n\n      const columnVisibility = table.getState().columnVisibility\n      const columnPinning = table.getState().columnPinning\n\n      const columnIdsLeft = []\n      const columnIdsCenter = []\n      const columnIdsRight = []\n      for(const columnId of table.getState().columnOrder) {\n        if(columnVisibility[columnId] ?? true) {\n          if(columnPinning.left?.includes(columnId)) {\n            columnIdsLeft.push(columnId)\n          } else if(columnPinning.right?.includes(columnId)) {\n            columnIdsRight.push(columnId)\n          } else {\n            columnIdsCenter.push(columnId)\n          }\n        }\n      }\n      const columnIds = [...columnIdsLeft, ...columnIdsCenter, ...columnIdsRight]\n      const existingColumnIds = new Set(table.getAllColumns().map(column => column.id))\n      const visibleSortedColumns = (columnIds.length === 0 ?\n        table.getVisibleLeafColumns().map(column => column.id).filter(Boolean)\n        : columnIds\n      ).filter(columnId => existingColumnIds.has(columnId))\n\n      const result = ColumnSizeUtil.calculate({\n        previousSizing: table.getState().columnSizing,\n        newSizing,\n        columnIds: visibleSortedColumns,\n        target: {\n          width: target,\n          behaviour: 'equalOrHigher',\n        },\n        minWidthsPerColumn: visibleSortedColumns.reduce((previousValue, columnId) => {\n          const column = table.getColumn(columnId)\n          if(!column) return previousValue\n          return {\n            ...previousValue,\n            [column.id]: column.columnDef.minSize ?? table.options.defaultColumn?.minSize ?? 20,\n          }\n        }, {}),\n        maxWidthsPerColumn: visibleSortedColumns.reduce((previousValue, columnId) => {\n          const column = table.getColumn(columnId)\n          if(!column) return previousValue\n          return {\n            ...previousValue,\n            [column.id]: column.columnDef.maxSize ?? table.options.defaultColumn?.maxSize ?? 1000,\n          }\n        }, {}),\n      })\n      oldSetColumnSizing(result)\n    }\n\n    return table\n  },\n}","\nimport { Minus } from 'lucide-react'\nimport type { HTMLAttributes } from 'react'\n\nexport type FillerCellProps = HTMLAttributes<HTMLDivElement> & {\n  'data-name'?: string,\n}\n\nexport const FillerCell = ({ ...props }: FillerCellProps) => {\n  return (\n    <div\n      {...props}\n      data-name={props['data-name'] ?? 'table-filler-cell'}\n    >\n      <Minus className=\"max-w-4 max-h-4\" />\n    </div>\n  )\n}","import type { ReactNode } from 'react'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport { ColumnSizeUtil } from './columnSizeUtil'\nimport type { ColumnSizingMode, TableColumnDefinitionContextType, TableContainerContextType, TableStateWithoutSizingContextType } from './TableContext'\nimport { TableColumnDefinitionContext, TableContainerContext, TableStateContext, TableStateWithoutSizingContext } from './TableContext'\nimport { TableFilter } from './TableFilter'\nimport type { ColumnDef, InitialTableState, Row, TableOptions, TableState , Table as ReactTable, CellContext, Table } from '@tanstack/react-table'\nimport { getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'\nimport { TableCell } from './TableCell'\nimport { ColumnSizingWithTargetFeature } from './ColumnSizingWithTargetFeature'\nimport { useWindowResizeObserver } from '@/src/hooks/useWindowResizeObserver'\nimport { AutoColumnOrderFeature } from './AutoColumnOrderFeature'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { createNoColumnPlaceholderColumn, hasNonExcludedColumns } from './placeholderColumn'\nimport { FillerCell } from './FillerCell'\n\nexport type TableProviderProps<T> = {\n  data: T[],\n  columns?: ColumnDef<T>[],\n  children?: ReactNode,\n  placeholderColumnExcludeIds?: string[],\n  isUsingFillerRows?: boolean,\n  columnSizingMode?: ColumnSizingMode,\n  fillerRowCell?: (columnId: string, table: ReactTable<T>) => ReactNode,\n  initialState?: InitialTableState,\n  onRowClick?: (row: Row<T>, table: ReactTable<T>) => void,\n  onFillerRowClick?: (index: number, table: ReactTable<T>) => void,\n  state?: Partial<TableState>,\n} & Partial<TableOptions<T>>\n\nexport const TableProvider = <T,>({\n  data,\n  isUsingFillerRows = true,\n  columnSizingMode = 'fill',\n  fillerRowCell: fillerRowCellOverwrite,\n  initialState,\n  onRowClick,\n  onFillerRowClick,\n  defaultColumn: defaultColumnOverwrite,\n  state,\n  columns: columnsProp,\n  placeholderColumnExcludeIds,\n  children,\n  ...tableOptions\n}: TableProviderProps<T>) => {\n  const translation = useHightideTranslation()\n  const onRowClickStable = useEventCallbackStabilizer(onRowClick)\n  const onFillerRowClickStable = useEventCallbackStabilizer(onFillerRowClick)\n\n  const [registeredColumns, setRegisteredColumns] = useState<ColumnDef<T>[]>([])\n  const containerRef = useRef<HTMLDivElement | null>(null)\n  const [tableState, setTableState] = useState<TableState>({\n    columnSizing: {},\n    columnOrder: [],\n    columnFilters: [],\n    columnVisibility: {},\n    columnPinning: {},\n    sorting: [],\n    columnSizingInfo: {\n      columnSizingStart: [],\n      startOffset: 0,\n      startSize: 0,\n      deltaOffset: 0,\n      deltaPercentage: 0,\n      isResizingColumn: false,\n    },\n    rowPinning: {},\n    globalFilter: undefined,\n    expanded: {},\n    grouping: [],\n    rowSelection: {},\n    pagination: {\n      pageIndex: 0,\n      pageSize: 10,\n    },\n  })\n\n  const negotiatesWidths = columnSizingMode === 'fill'\n  const [targetWidth, setTargetWidth] =  useState<number | undefined>(undefined)\n  const computeWidth = useCallback(() => {\n    const el = containerRef?.current\n    let width = el?.getBoundingClientRect().width\n\n    if(width === undefined || !el) return width\n    const styles = getComputedStyle(el)\n    let leftBorderWidth = parseFloat(styles.borderLeftWidth)\n    if(isNaN(leftBorderWidth)) leftBorderWidth = 0\n    let rightBorderWidth = parseFloat(styles.borderRightWidth)\n    if(isNaN(rightBorderWidth)) rightBorderWidth = 0\n    width = width - leftBorderWidth - rightBorderWidth\n    return Math.floor(width)\n  }, [containerRef])\n\n  useLayoutEffect(() => {\n    if(!negotiatesWidths) return\n    setTargetWidth(computeWidth())\n  }, [computeWidth, negotiatesWidths])\n\n  useWindowResizeObserver(useCallback(() => {\n    if(!negotiatesWidths) return\n    setTargetWidth(computeWidth())\n  }, [computeWidth, negotiatesWidths]))\n\n  const registerColumn = useCallback((column: ColumnDef<T>) => {\n    setRegisteredColumns(prev => {\n      return [...prev, column]\n    })\n    return () => {\n      setRegisteredColumns(prev => {\n        return prev.filter(value => value.id !== column.id)\n      })\n    }\n  }, [])\n\n  const columns = useMemo(() => {\n    const contextColumns = Array.from(registeredColumns.values())\n    const merged = columnsProp ? [...contextColumns, ...columnsProp] : contextColumns\n\n    const nonVisibleColumnIds: string[] = merged\n      .reduce((prev, next) => {\n        const id = next.id\n        if(!id || (tableState?.columnVisibility[id] ?? true)) return prev\n        return [...prev, id]\n      },[] as string[])\n\n    const excludedIds = [\n      ...(placeholderColumnExcludeIds ?? []),\n      ...nonVisibleColumnIds,\n    ]\n\n    if (!hasNonExcludedColumns(merged, excludedIds)) {\n      return [...merged, createNoColumnPlaceholderColumn<T>(translation)]\n    }\n\n    return merged\n  }, [columnsProp, registeredColumns, placeholderColumnExcludeIds, translation, tableState.columnVisibility])\n\n  const defaultCell = useCallback((value : CellContext<T, unknown>) => {\n    let parsedValue: string = ''\n    if(typeof value === 'string') parsedValue = value\n    else parsedValue = String(value.cell.getValue())\n    return (<TableCell>{parsedValue}</TableCell>)\n  }, [])\n\n  const table = useReactTable({\n    data,\n    getCoreRowModel: getCoreRowModel(),\n    getFilteredRowModel: getFilteredRowModel(),\n    getSortedRowModel: getSortedRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n    initialState,\n    defaultColumn: {\n      minSize: 60,\n      maxSize: 800,\n      cell: defaultCell,\n      enableResizing: true,\n      enablePinning: true,\n      ...defaultColumnOverwrite,\n    },\n    columns,\n    state: {\n      ...state,\n    },\n    onStateChange: (updaterOrValue) => {\n      setTableState(prev => {\n        return typeof updaterOrValue === 'function' ? updaterOrValue(prev) : updaterOrValue\n      })\n      tableOptions.onStateChange?.(updaterOrValue)\n    },\n    filterFns: {\n      ...tableOptions?.filterFns,\n      text: TableFilter.text,\n      number: TableFilter.number,\n      date: TableFilter.date,\n      dateTime: TableFilter.dateTime,\n      boolean: TableFilter.boolean,\n      multiTags: TableFilter.multiTags,\n      singleTag: TableFilter.singleTag,\n      unknownType: TableFilter.unknownType,\n    },\n    _features: [\n      ...(tableOptions._features ?? []),\n      ColumnSizingWithTargetFeature,\n      AutoColumnOrderFeature,\n    ],\n    columnSizingTarget: negotiatesWidths ? targetWidth : undefined,\n    autoResetPageIndex: false,\n    enableColumnResizing: true,\n    columnResizeMode: 'onChange',\n    ...tableOptions,\n  })\n\n  const pagination = table.getState().pagination\n  const pageCount = table.getPageCount()\n\n  // Fix pagination index when page count changes\n  useEffect(() => {\n    if(pageCount === -1) {\n      return\n    }\n    if(pagination.pageIndex > pageCount - 1) {\n      table.setPageIndex(pageCount - 1)\n    }\n  }, [table, pagination.pageIndex, pageCount])\n\n  // Fix column order when columns change\n  useEffect(() => {\n    table.setColumnOrder(prev => [...prev])\n  }, [table, columns])\n\n  // Fix column sizing when target width changes or column visibility changes\n  const columnVisibility = table.getState().columnVisibility\n  const columnOrder = table.getState().columnOrder\n  const columnPinning = table.getState().columnPinning\n  useEffect(() => {\n    table.setColumnSizing(prev => ({ ...prev }))\n  }, [table, targetWidth, columnVisibility, columnOrder, columnPinning])\n\n\n  const tableColumnDefinitionContextValue: TableColumnDefinitionContextType<T> = useMemo(() => ({\n    table,\n    registerColumn,\n  }), [table, registerColumn])\n\n\n  const tableContainerContextValue: TableContainerContextType<T> = useMemo(() => ({\n    table,\n    containerRef,\n  }), [table, containerRef])\n\n  const relevantTableState: Omit<TableState, 'columnSizing' | 'columnSizingInfo'> = (() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const { columnSizing, columnSizingInfo, ...rest } = table.getState()\n    return rest\n  })()\n\n  const rowModel = table.getRowModel()\n  const fillerRowCell = useCallback((columnId: string, table: Table<T>) => {\n    if(fillerRowCellOverwrite) return fillerRowCellOverwrite(columnId, table)\n    return <FillerCell/>\n  }, [fillerRowCellOverwrite])\n  const tableStateWithoutSizingContextValue = useMemo<TableStateWithoutSizingContextType<T>>(() => ({\n    table,\n    isUsingFillerRows,\n    columnSizingMode,\n    fillerRowCell,\n    onRowClick: onRowClickStable,\n    onFillerRowClick: onFillerRowClickStable,\n    columnVisibility: relevantTableState.columnVisibility,\n    columnOrder: relevantTableState.columnOrder,\n    columnPinning: relevantTableState.columnPinning,\n    rowPinning: relevantTableState.rowPinning,\n    globalFilter: relevantTableState.globalFilter,\n    expanded: relevantTableState.expanded,\n    grouping: relevantTableState.grouping,\n    rowSelection: relevantTableState.rowSelection,\n    pagination: relevantTableState.pagination,\n    sorting: relevantTableState.sorting,\n    columnFilters: relevantTableState.columnFilters,\n    data,\n    columns,\n    rowModel,\n  }), [\n    table,\n    data,\n    columns,\n    rowModel,\n    isUsingFillerRows,\n    columnSizingMode,\n    fillerRowCell,\n    onRowClickStable,\n    onFillerRowClickStable,\n    relevantTableState.columnVisibility,\n    relevantTableState.columnOrder,\n    relevantTableState.columnPinning,\n    relevantTableState.rowPinning,\n    relevantTableState.globalFilter,\n    relevantTableState.expanded,\n    relevantTableState.grouping,\n    relevantTableState.rowSelection,\n    relevantTableState.pagination,\n    relevantTableState.sorting,\n    relevantTableState.columnFilters\n  ])\n\n  const columnSizing = table.getState().columnSizing\n  const columnSizingInfo = table.getState().columnSizingInfo\n  const tableStateContextValue = useMemo(() => ({\n    ...tableStateWithoutSizingContextValue,\n    sizeVars: ColumnSizeUtil.toSizeVars(columnSizing),\n    columnSizingInfo,\n    columnSizing,\n    targetWidth,\n  }), [columnSizing, columnSizingInfo, tableStateWithoutSizingContextValue, targetWidth])\n\n  return (\n    <TableStateWithoutSizingContext.Provider value={tableStateWithoutSizingContextValue}>\n      <TableStateContext.Provider value={tableStateContextValue}>\n        <TableColumnDefinitionContext.Provider value={tableColumnDefinitionContextValue}>\n          <TableContainerContext.Provider value={tableContainerContextValue}>\n            {children}\n          </TableContainerContext.Provider>\n        </TableColumnDefinitionContext.Provider>\n      </TableStateContext.Provider>\n    </TableStateWithoutSizingContext.Provider>\n  )\n}\n","import type {\n  Row,\n  RowModel,\n  Table,\n  TableState\n} from '@tanstack/react-table'\nimport {\n  type ColumnDef,\n  type Table as ReactTable\n} from '@tanstack/react-table'\nimport type { ReactNode, RefObject } from 'react'\nimport { createContext, useContext } from 'react'\n\n\nexport type ColumnSizingMode = 'fill' | 'natural'\n\nexport interface TableStateWithoutSizingContextType<T> extends Omit<TableState, 'columnSizing' | 'columnSizingInfo'> {\n  table: ReactTable<T>,\n  data: T[],\n  columns: ColumnDef<T>[],\n  rowModel: RowModel<T>,\n  isUsingFillerRows: boolean,\n  columnSizingMode: ColumnSizingMode,\n  fillerRowCell: (columnId: string, table: ReactTable<T>) => ReactNode,\n  onRowClick?: (row: Row<T>, table: ReactTable<T>) => void,\n  onFillerRowClick?: (index: number, table: ReactTable<T>) => void,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableStateWithoutSizingContext = createContext<TableStateWithoutSizingContextType<any> | null>(null)\n\n/**\n * Context for the table state without sizing\n *\n * Use this context to access the table state without sizing\n *\n * This is done to avoid re-rendering the table when the sizing changes rapidly\n */\nexport const useTableStateWithoutSizingContext = <T,>(): TableStateWithoutSizingContextType<T> => {\n  const context = useContext(TableStateWithoutSizingContext)\n  if (!context) throw new Error('useTableStateWithoutSizingContext must be used within a <TableStateWithoutSizingContext.Provider> like <TableStateWithoutSizing>')\n  return context as TableStateWithoutSizingContextType<T>\n}\n\n\n\nexport interface TableStateContextType<T> extends TableState {\n  table: Table<T>,\n  data: T[],\n  columns: ColumnDef<T>[],\n  rowModel: RowModel<T>,\n  isUsingFillerRows: boolean,\n  columnSizingMode: ColumnSizingMode,\n  fillerRowCell: (columnId: string, table: ReactTable<T>) => ReactNode,\n  onRowClick?: (row: Row<T>, table: ReactTable<T>) => void,\n  onFillerRowClick?: (index: number, table: ReactTable<T>) => void,\n  sizeVars: Record<string, number>,\n  targetWidth?: number,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableStateContext = createContext<TableStateContextType<any> | null>(null)\n\n/**\n * Context for the table state\n *\n * Use this context to access the table state and only do cheap operations on it as it can be re-rendered frequently\n */\nexport const useTableStateContext = <T,>(): TableStateContextType<T> => {\n  const context = useContext(TableStateContext)\n  if (!context) throw new Error('useTableStateContext must be used within a <TableStateContext.Provider> like <TableState>')\n  return context as TableStateContextType<T>\n}\n\n\n\nexport type TableContainerContextType<T> = {\n  table: Table<T>,\n  containerRef: RefObject<HTMLDivElement | null>,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableContainerContext = createContext<TableContainerContextType<any> | null>(null)\n\nexport const useTableContainerContext = <T,>(): TableContainerContextType<T> => {\n  const context = useContext(TableContainerContext)\n  if (!context) throw new Error('useTableContainerContext must be used within a <TableContainerContext.Provider> like <TableContainer>')\n  return context as TableContainerContextType<T>\n}\n\nexport type TableColumnDefinitionContextType<T> = {\n  table: Table<T>,\n  registerColumn: (column: ColumnDef<T>) => () => void,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableColumnDefinitionContext = createContext<TableColumnDefinitionContextType<any> | null>(null)\n\nexport const useTableColumnDefinitionContext = <T,>(): TableColumnDefinitionContextType<T> => {\n  const context = useContext(TableColumnDefinitionContext)\n  if (!context) throw new Error('useTableColumnDefinitionContext must be used within a <TableColumnDefinitionContext.Provider> like <TableColumnDefinition>')\n  return context as TableColumnDefinitionContextType<T>\n}","import {\n  ChevronRight,\n  ChevronLeft,\n  CheckCircle2,\n  XCircle,\n  Equal,\n  EqualNot,\n  SearchCheck,\n  SearchX,\n  CircleDashed,\n  CircleDot\n} from 'lucide-react'\nimport type { DataType } from '@/src/components/user-interaction/data/data-types'\nimport type { ReactNode } from 'react'\n\nconst filterOperators = [\n  'equals', 'notEquals', 'contains', 'notContains', 'startsWith', 'endsWith',\n  'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'notBetween',\n  'isTrue', 'isFalse',\n  'isUndefined', 'isNotUndefined'\n] as const\n\nexport type FilterOperator = (typeof filterOperators)[number]\n\nconst filterOperatorsByCategory: Record<DataType, FilterOperator[]> = {\n  text: ['equals', 'notEquals', 'contains', 'notContains', 'startsWith', 'endsWith', 'isUndefined', 'isNotUndefined'],\n  number: ['equals', 'notEquals', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'notBetween', 'isUndefined', 'isNotUndefined'],\n  date: ['equals', 'notEquals', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'notBetween', 'isUndefined', 'isNotUndefined'],\n  dateTime: ['equals', 'notEquals', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'notBetween', 'isUndefined', 'isNotUndefined'],\n  boolean: ['isTrue', 'isFalse', 'isUndefined', 'isNotUndefined'],\n  multiTags: ['equals', 'notEquals', 'contains', 'notContains', 'isUndefined', 'isNotUndefined'],\n  singleTag: ['equals', 'notEquals', 'contains', 'notContains', 'isUndefined', 'isNotUndefined'],\n  unknownType: ['isUndefined', 'isNotUndefined'],\n} as const\n\nexport type FilterOperatorUnknownType = (typeof filterOperatorsByCategory.unknownType)[number]\nexport type FilterOperatorText = (typeof filterOperatorsByCategory.text)[number]\nexport type FilterOperatorNumber = (typeof filterOperatorsByCategory.number)[number]\nexport type FilterOperatorDate = (typeof filterOperatorsByCategory.date)[number]\nexport type FilterOperatorDatetime = (typeof filterOperatorsByCategory.dateTime)[number]\nexport type FilterOperatorBoolean = (typeof filterOperatorsByCategory.boolean)[number]\nexport type FilterOperatorTags = (typeof filterOperatorsByCategory.multiTags)[number]\nexport type FilterOperatorTagsSingle = (typeof filterOperatorsByCategory.singleTag)[number]\n\nfunction isFilterOperatorText(value: unknown): value is FilterOperatorText {\n  return typeof value === 'string' && filterOperatorsByCategory.text.some(o => o === value)\n}\n\nfunction isFilterOperatorNumber(value: unknown): value is FilterOperatorNumber {\n  return typeof value === 'string' && filterOperatorsByCategory.number.some(o => o === value)\n}\n\nfunction isFilterOperatorDate(value: unknown): value is FilterOperatorDate {\n  return typeof value === 'string' && filterOperatorsByCategory.date.some(o => o === value)\n}\n\nfunction isFilterOperatorDatetime(value: unknown): value is FilterOperatorDatetime {\n  return typeof value === 'string' && filterOperatorsByCategory.dateTime.some(o => o === value)\n}\n\nfunction isFilterOperatorBoolean(value: unknown): value is FilterOperatorBoolean {\n  return typeof value === 'string' && filterOperatorsByCategory.boolean.some(o => o === value)\n}\n\nfunction isFilterOperatorTags(value: unknown): value is FilterOperatorTags {\n  return typeof value === 'string' && filterOperatorsByCategory.multiTags.some(o => o === value)\n}\n\nfunction isFilterOperatorTagsSingle(value: unknown): value is FilterOperatorTagsSingle {\n  return typeof value === 'string' && filterOperatorsByCategory.singleTag.some(o => o === value)\n}\n\nfunction isFilterOperatorUnknownType(value: unknown): value is FilterOperatorUnknownType {\n  return typeof value === 'string' && filterOperatorsByCategory.unknownType.some(o => o === value)\n}\n\nfunction isFilterOperator(value: unknown): value is FilterOperator {\n  return typeof value === 'string' && filterOperators.some(o => o === value)\n}\n\ntype OperatorInfoResult = {\n  icon: ReactNode,\n  translationKey: string,\n  replacementTranslationKey: string,\n}\nconst getOperatorInfo = (operator: FilterOperator) : OperatorInfoResult  => {\n  switch (operator) {\n  case 'equals': return { icon: <Equal className=\"w-4 h-4\" />, translationKey: 'equals', replacementTranslationKey: 'rEquals' }\n  case 'notEquals': return { icon: <EqualNot className=\"w-4 h-4\" />, translationKey: 'notEquals', replacementTranslationKey: 'rNotEquals' }\n  case 'contains': return { icon: <SearchCheck className=\"w-4 h-4\" />, translationKey: 'contains', replacementTranslationKey: 'rContains' }\n  case 'notContains': return { icon: <SearchX className=\"w-4 h-4\" />, translationKey: 'notContains', replacementTranslationKey: 'rNotContains' }\n  case 'startsWith': return { icon: <SearchCheck className=\"w-4 h-4\" />, translationKey: 'startsWith', replacementTranslationKey: 'rStartsWith' }\n  case 'endsWith': return { icon: <SearchX className=\"w-4 h-4\" />, translationKey: 'endsWith', replacementTranslationKey: 'rEndsWith' }\n  case 'greaterThan': return {\n    icon: (<div className=\"flex-row-0 items-center\">\n      <ChevronRight className=\"w-4 h-4\" />\n      <Equal className=\"-ml-1 w-4 h-4\" />\n    </div>\n    ),\n    translationKey: 'greaterThanOrEqual',\n    replacementTranslationKey: 'rGreaterThanOrEqual'\n  }\n  case 'greaterThanOrEqual': return {\n    icon: (<div className=\"flex-row-0 items-center\">\n      <ChevronRight className=\"w-4 h-4\" />\n      <Equal className=\"-ml-1 w-4 h-4\" />\n    </div>\n    ),\n    translationKey: 'greaterThanOrEqual',\n    replacementTranslationKey: 'rGreaterThanOrEqual'\n  }\n  case 'lessThan': return {\n    icon: <ChevronLeft className=\"w-4 h-4\" />,\n    translationKey: 'lessThan',\n    replacementTranslationKey: 'rLessThan'\n  }\n  case 'lessThanOrEqual': return {\n    icon: (<div className=\"flex-row-0 items-center\">\n      <ChevronLeft className=\"w-4 h-4\" />\n      <Equal className=\"-ml-1 w-4 h-4\" />\n    </div>\n    ),\n    translationKey: 'lessThanOrEqual',\n    replacementTranslationKey: 'rLessThanOrEqual'\n  }\n  case 'between': return {\n    icon: (<div className=\"flex-row-0 items-center\">\n      <ChevronRight className=\"w-4 h-4\" />\n      <ChevronLeft className=\"-ml-1 w-4 h-4\" />\n    </div>\n    ),\n    translationKey: 'between',\n    replacementTranslationKey: 'rBetween'\n  }\n  case 'notBetween': return {\n    icon: (<div className=\"flex-row-0 items-center\">\n      <ChevronLeft className=\"w-4 h-4\" />\n      <ChevronRight className=\"-ml-1 w-4 h-4\" />\n    </div>\n    ),\n    translationKey: 'notBetween',\n    replacementTranslationKey: 'rNotBetween'\n  }\n  case 'isTrue': return { icon: <CheckCircle2 className=\"w-4 h-4\" />, translationKey: 'isTrue', replacementTranslationKey: 'isTrue' }\n  case 'isFalse': return { icon: <XCircle className=\"w-4 h-4\" />, translationKey: 'isFalse', replacementTranslationKey: 'isFalse' }\n  case 'isUndefined': return { icon: <CircleDashed className=\"w-4 h-4\" />, translationKey: 'isUndefined', replacementTranslationKey: 'isUndefined' }\n  case 'isNotUndefined': return { icon: <CircleDot className=\"w-4 h-4\" />, translationKey: 'isNotUndefined', replacementTranslationKey: 'isNotUndefined' }\n  default: return { icon: null, translationKey: 'unknown translation key', replacementTranslationKey: 'unknown' }\n  }\n}\n\nfunction getDefaultOperator(dataType: DataType): FilterOperator {\n  switch (dataType) {\n  case 'text': return 'contains'\n  case 'number': return 'between'\n  case 'date': return 'between'\n  case 'dateTime': return 'between'\n  case 'boolean': return 'isTrue'\n  case 'multiTags': return 'contains'\n  case 'singleTag': return 'contains'\n  case 'unknownType': return 'isNotUndefined'\n  }\n}\n\n\n\nexport const FilterOperatorUtils = {\n  operators: filterOperators,\n  operatorsByCategory: filterOperatorsByCategory,\n  getInfo: getOperatorInfo,\n  getDefaultOperator,\n  typeCheck: {\n    all: isFilterOperator,\n    text: isFilterOperatorText,\n    number: isFilterOperatorNumber,\n    date: isFilterOperatorDate,\n    datetime: isFilterOperatorDatetime,\n    boolean: isFilterOperatorBoolean,\n    tags: isFilterOperatorTags,\n    tagsSingle: isFilterOperatorTagsSingle,\n    unknownType: isFilterOperatorUnknownType,\n  },\n}\n","import { useCallback } from 'react'\nimport { DateUtils } from '@/src/utils/date'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { type FilterOperator } from './FilterOperator'\nimport type { DataType } from './data-types'\n\nexport type FilterParameter = {\n  stringValue?: string,\n  numberValue?: number,\n  numberMin?: number,\n  numberMax?: number,\n  booleanValue?: boolean,\n  dateValue?: Date,\n  dateMin?: Date,\n  dateMax?: Date,\n  uuidValue?: unknown,\n  uuidValues?: unknown[],\n}\n\nconst allowedOperatorsByDataType: Record<DataType, FilterOperator[]> = {\n  text: ['equals', 'notEquals', 'contains', 'notContains', 'startsWith', 'endsWith', 'isUndefined', 'isNotUndefined'],\n  number: ['equals', 'notEquals', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'notBetween', 'isUndefined', 'isNotUndefined'],\n  date: ['equals', 'notEquals', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'notBetween', 'isUndefined', 'isNotUndefined'],\n  dateTime: ['equals', 'notEquals', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'notBetween', 'isUndefined', 'isNotUndefined'],\n  boolean: ['isTrue', 'isFalse', 'isUndefined', 'isNotUndefined'],\n  multiTags: ['equals', 'notEquals', 'contains', 'notContains', 'isUndefined', 'isNotUndefined'],\n  singleTag: ['equals', 'notEquals', 'contains', 'notContains', 'isUndefined', 'isNotUndefined'],\n  unknownType: ['isUndefined', 'isNotUndefined'],\n}\n\nexport type FilterValue = {\n  dataType: DataType,\n  operator: FilterOperator,\n  parameter: FilterParameter,\n}\n\nconst OPERATORS_WITHOUT_PARAMETERS: FilterOperator[] = [\n  'isUndefined',\n  'isNotUndefined',\n  'isTrue',\n  'isFalse',\n]\n\nfunction isParameterValidForOperator(\n  dataType: DataType,\n  operator: FilterOperator,\n  parameter: FilterParameter\n): boolean {\n  if (OPERATORS_WITHOUT_PARAMETERS.includes(operator)) {\n    return true\n  }\n\n  switch (dataType) {\n  case 'text': {\n    return typeof parameter.stringValue === 'string'\n  }\n  case 'number': {\n    if (operator === 'between' || operator === 'notBetween') {\n      const min = parameter.numberMin\n      const max = parameter.numberMax\n      return (\n        typeof min === 'number' &&\n        !Number.isNaN(min) &&\n        typeof max === 'number' &&\n        !Number.isNaN(max) &&\n        min <= max\n      )\n    }\n    const v = parameter.numberValue\n    return typeof v === 'number' && !Number.isNaN(v)\n  }\n  case 'date':\n  case 'dateTime': {\n    if (operator === 'between' || operator === 'notBetween') {\n      const minDate = DateUtils.tryParseDate(parameter.dateMin)\n      const maxDate = DateUtils.tryParseDate(parameter.dateMax)\n      if (!minDate || !maxDate) return false\n      const minNorm = dataType === 'date'\n        ? DateUtils.toOnlyDate(minDate).getTime()\n        : DateUtils.toDateTimeOnly(minDate).getTime()\n      const maxNorm = dataType === 'date'\n        ? DateUtils.toOnlyDate(maxDate).getTime()\n        : DateUtils.toDateTimeOnly(maxDate).getTime()\n      return minNorm <= maxNorm\n    }\n    return DateUtils.tryParseDate(parameter.dateValue) != null\n  }\n  case 'boolean':\n    return true\n  case 'multiTags': {\n    return Array.isArray(parameter.uuidValues)\n  }\n  case 'singleTag': {\n    if (operator === 'contains' || operator === 'notContains') {\n      return Array.isArray(parameter.uuidValues)\n    }\n    if(operator === 'equals' || operator === 'notEquals') {\n      return typeof parameter.uuidValue === 'string'\n    }\n    return true\n  }\n  case 'unknownType':\n    return true\n  default:\n    return false\n  }\n}\n\nfunction isFilterValueValid(value: FilterValue): boolean {\n  const allowed = allowedOperatorsByDataType[value.dataType]\n  if (!allowed?.includes(value.operator)) {\n    return false\n  }\n  return isParameterValidForOperator(value.dataType, value.operator, value.parameter)\n}\n\nexport const FilterValueUtils = {\n  allowedOperatorsByDataType,\n  isValid: isFilterValueValid,\n}\n\n/**\n * Filters a text value based on the provided filter value.\n */\nfunction filterText(value: unknown, operator: FilterOperator, parameter: FilterParameter): boolean {\n  const searchText = parameter.stringValue ?? ''\n  const cellText = value?.toString() ?? ''\n\n  switch (operator) {\n  case 'equals':\n    return cellText === searchText\n  case 'notEquals':\n    return cellText !== searchText\n  case 'contains':\n    return cellText.includes(searchText)\n  case 'notContains':\n    return !cellText.includes(searchText)\n  case 'startsWith':\n    return cellText.startsWith(searchText)\n  case 'endsWith':\n    return cellText.endsWith(searchText)\n  case 'isUndefined':\n    return value === undefined || value === null\n  case 'isNotUndefined':\n    return value !== undefined && value !== null\n  default:\n    return false\n  }\n}\n\n/**\n   * Filters a number value based on the provided filter value.\n   */\nfunction filterNumber(value: unknown, operator: FilterOperator, parameter: FilterParameter): boolean {\n  if (typeof value !== 'number') {\n    if (operator === 'isUndefined') {\n      return value === undefined || value === null\n    }\n    if (operator === 'isNotUndefined') {\n      return value !== undefined && value !== null\n    }\n    return false\n  }\n\n  switch (operator) {\n  case 'equals':\n    return value === parameter.numberValue\n  case 'notEquals':\n    return value !== parameter.numberValue\n  case 'greaterThan':\n    return value > (parameter.numberValue ?? 0)\n  case 'greaterThanOrEqual':\n    return value >= (parameter.numberValue ?? 0)\n  case 'lessThan':\n    return value < (parameter.numberValue ?? 0)\n  case 'lessThanOrEqual':\n    return value <= (parameter.numberValue ?? 0)\n  case 'between':\n    return value >= (parameter.numberMin ?? -Infinity) && value <= (parameter.numberMax ?? Infinity)\n  case 'notBetween':\n    return value < (parameter.numberMin ?? -Infinity) || value > (parameter.numberMax ?? Infinity)\n  case 'isUndefined':\n    return value === undefined || value === null\n  case 'isNotUndefined':\n    return value !== undefined && value !== null\n  default:\n    return false\n  }\n}\n\n/**\n   * Filters a date value based on the provided filter value.\n   * Only compares dates, ignoring time components.\n   */\nfunction filterDate(value: unknown, operator: FilterOperator, parameter: FilterParameter): boolean {\n  const date = DateUtils.tryParseDate(value as Date | string | number | undefined | null)\n  if (!date) {\n    if (operator === 'isUndefined') {\n      return value === undefined || value === null\n    }\n    if (operator === 'isNotUndefined') {\n      return value !== undefined && value !== null\n    }\n    return false\n  }\n\n  const normalizedDate = DateUtils.toOnlyDate(date)\n\n  switch (operator) {\n  case 'equals': {\n    const filterDate = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDate) return false\n    return normalizedDate.getTime() === DateUtils.toOnlyDate(filterDate).getTime()\n  }\n  case 'notEquals': {\n    const filterDate = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDate) return false\n    return normalizedDate.getTime() !== DateUtils.toOnlyDate(filterDate).getTime()\n  }\n  case 'greaterThan': {\n    const filterDate = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDate) return false\n    return normalizedDate > DateUtils.toOnlyDate(filterDate)\n  }\n  case 'greaterThanOrEqual': {\n    const filterDate = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDate) return false\n    return normalizedDate >= DateUtils.toOnlyDate(filterDate)\n  }\n  case 'lessThan': {\n    const filterDate = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDate) return false\n    return normalizedDate < DateUtils.toOnlyDate(filterDate)\n  }\n  case 'lessThanOrEqual': {\n    const filterDate = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDate) return false\n    return normalizedDate <= DateUtils.toOnlyDate(filterDate)\n  }\n  case 'between': {\n    const minDate = DateUtils.tryParseDate(parameter.dateMin)\n    const maxDate = DateUtils.tryParseDate(parameter.dateMax)\n    if (!minDate || !maxDate) return false\n    return normalizedDate >= DateUtils.toOnlyDate(minDate) && normalizedDate <= DateUtils.toOnlyDate(maxDate)\n  }\n  case 'notBetween': {\n    const minDate = DateUtils.tryParseDate(parameter.dateMin)\n    const maxDate = DateUtils.tryParseDate(parameter.dateMax)\n    if (!minDate || !maxDate) return false\n    return normalizedDate < DateUtils.toOnlyDate(minDate) || normalizedDate > DateUtils.toOnlyDate(maxDate)\n  }\n  default:\n    return false\n  }\n}\n\n/**\n   * Filters a dateTime value based on the provided filter value.\n   */\nfunction filterDateTime(value: unknown, operator: FilterOperator, parameter: FilterParameter): boolean {\n  const dateTime = DateUtils.tryParseDate(value as Date | string | number | undefined | null)\n  if (!dateTime) {\n    if (operator === 'isUndefined') {\n      return value === undefined || value === null\n    }\n    if (operator === 'isNotUndefined') {\n      return value !== undefined && value !== null\n    }\n    return false\n  }\n\n  const normalizedDatetime = DateUtils.toDateTimeOnly(dateTime)\n\n  switch (operator) {\n  case 'equals': {\n    const filterDatetime = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDatetime) return false\n    return normalizedDatetime.getTime() === DateUtils.toDateTimeOnly(filterDatetime).getTime()\n  }\n  case 'notEquals': {\n    const filterDatetime = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDatetime) return false\n    return normalizedDatetime.getTime() !== DateUtils.toDateTimeOnly(filterDatetime).getTime()\n  }\n  case 'greaterThan': {\n    const filterDatetime = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDatetime) return false\n    return normalizedDatetime > DateUtils.toDateTimeOnly(filterDatetime)\n  }\n  case 'greaterThanOrEqual': {\n    const filterDatetime = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDatetime) return false\n    return normalizedDatetime >= DateUtils.toDateTimeOnly(filterDatetime)\n  }\n  case 'lessThan': {\n    const filterDatetime = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDatetime) return false\n    return normalizedDatetime < DateUtils.toDateTimeOnly(filterDatetime)\n  }\n  case 'lessThanOrEqual': {\n    const filterDatetime = DateUtils.tryParseDate(parameter.dateValue)\n    if (!filterDatetime) return false\n    return normalizedDatetime <= DateUtils.toDateTimeOnly(filterDatetime)\n  }\n  case 'between': {\n    const minDatetime = DateUtils.tryParseDate(parameter.dateMin)\n    const maxDatetime = DateUtils.tryParseDate(parameter.dateMax)\n    if (!minDatetime || !maxDatetime) return false\n    return normalizedDatetime >= DateUtils.toDateTimeOnly(minDatetime) && normalizedDatetime <= DateUtils.toDateTimeOnly(maxDatetime)\n  }\n  case 'notBetween': {\n    const minDatetime = DateUtils.tryParseDate(parameter.dateMin)\n    const maxDatetime = DateUtils.tryParseDate(parameter.dateMax)\n    if (!minDatetime || !maxDatetime) return false\n    return normalizedDatetime < DateUtils.toDateTimeOnly(minDatetime) || normalizedDatetime > DateUtils.toDateTimeOnly(maxDatetime)\n  }\n  default:\n    return false\n  }\n}\n\n/**\n   * Filters a boolean value based on the provided filter value.\n   */\nfunction filterBoolean(value: unknown, operator: FilterOperator): boolean {\n  switch (operator) {\n  case 'isTrue':\n    return value === true\n  case 'isFalse':\n    return value === false\n  case 'isUndefined':\n    return value === undefined || value === null\n  case 'isNotUndefined':\n    return value !== undefined && value !== null\n  default:\n    return false\n  }\n}\n\n/**\n   * Filters a tags array value based on the provided filter value.\n   */\nfunction filterMultiTags(value: unknown, operator: FilterOperator, parameter: FilterParameter): boolean {\n  switch (operator) {\n  case 'equals': {\n    if (!Array.isArray(value) || !Array.isArray(parameter.uuidValues)) return false\n    if (value.length !== parameter.uuidValues.length) return false\n    const valueSet = new Set(value)\n    const searchTagsSet = new Set(parameter.uuidValues)\n    if (valueSet.size !== searchTagsSet.size) return false\n    return Array.from(valueSet).every(tag => searchTagsSet.has(tag))\n  }\n  case 'notEquals': {\n    if (!Array.isArray(value) || !Array.isArray(parameter.uuidValues)) return true\n    if (value.length !== parameter.uuidValues.length) return true\n    const valueSet = new Set(value)\n    const searchTagsSet = new Set(parameter.uuidValues)\n    if (valueSet.size !== searchTagsSet.size) return true\n    return !Array.from(valueSet).every(tag => searchTagsSet.has(tag))\n  }\n  case 'contains': {\n    if (!Array.isArray(value) || !Array.isArray(parameter.uuidValues)) return false\n    return parameter.uuidValues.every(tag => value.includes(tag))\n  }\n  case 'notContains': {\n    if (!Array.isArray(value) || !Array.isArray(parameter.uuidValues)) return true\n    return !parameter.uuidValues.every(tag => value.includes(tag))\n  }\n  case 'isUndefined':\n    return value === undefined || value === null\n  case 'isNotUndefined':\n    return value !== undefined && value !== null\n  default:\n    return false\n  }\n}\n\n/**\n   * Filters a single tag value based on the provided filter value.\n   */\nfunction filterSingleTag(value: unknown, operator: FilterOperator, parameter: FilterParameter): boolean {\n  switch (operator) {\n  case 'equals':\n    return value === parameter.uuidValue\n  case 'notEquals':\n    return value !== parameter.uuidValue\n  case 'contains':\n    return parameter.uuidValues?.includes(value) ?? false\n  case 'notContains':\n    return !(parameter.uuidValues?.includes(value) ?? false)\n  case 'isUndefined':\n    return value === undefined || value === null\n  case 'isNotUndefined':\n    return value !== undefined && value !== null\n  default:\n    return false\n  }\n}\n\n/**\n * Filters a generic value based on the provided filter value.\n */\nfunction filterUnknownType(value: unknown, operator: FilterOperator): boolean {\n  switch (operator) {\n  case 'isUndefined':\n    return value === undefined || value === null\n  case 'isNotUndefined':\n    return value !== undefined && value !== null\n  default:\n    return false\n  }\n}\n\nexport const FilterFunctions: Record<DataType, (value: unknown, operator: FilterOperator, parameter: FilterParameter) => boolean> = {\n  text: filterText,\n  number: filterNumber,\n  date: filterDate,\n  dateTime: filterDateTime,\n  boolean: filterBoolean,\n  singleTag: filterSingleTag,\n  multiTags: filterMultiTags,\n  unknownType: filterUnknownType,\n}\n\nexport type FilterValueTranslationOptions = {\n  tags?: ReadonlyArray<{ tag: string, label: string }>,\n}\n\nfunction formatDateParam(\n  dateParam: Date | string | number | undefined | null,\n  locale: string,\n  format: 'date' | 'dateTime'\n): string {\n  const d = DateUtils.tryParseDate(dateParam)\n  return d ? DateUtils.formatAbsolute(d, locale, format) : ''\n}\n\nfunction tagToLabel(tags: ReadonlyArray<{ tag: string, label: string }> | undefined, value: unknown): string {\n  if (!tags) return String(value ?? '')\n  const entry = tags.find(t => t.tag === value || t.tag === String(value))\n  return entry?.label ?? String(value ?? '')\n}\n\nexport function useFilterValueTranslation(): (value: FilterValue, options?: FilterValueTranslationOptions) => string {\n  const translation = useHightideTranslation()\n  const { locale } = useLocale()\n\n  return useCallback((value: FilterValue, options?: FilterValueTranslationOptions): string => {\n    const p = value.parameter\n    const tags = options?.tags\n    const dateFormat = value.dataType === 'dateTime' ? 'dateTime' as const : 'date' as const\n\n    switch (value.operator) {\n    case 'equals':\n      if (value.dataType === 'date' || value.dataType === 'dateTime') {\n        return translation('rEquals', { value: formatDateParam(p.dateValue, locale, dateFormat) ?? '-' })\n      }\n      if (value.dataType === 'singleTag') {\n        return translation('rEquals', { value: tagToLabel(tags, p.uuidValue) })\n      }\n      if (value.dataType === 'multiTags') {\n        const valueStr = (p.uuidValues ?? []).map(v => tagToLabel(tags, v)).join(', ')\n        return translation('rEquals', { value: valueStr })\n      }\n      return translation('rEquals', { value: String(p.stringValue ?? p.numberValue ?? '') })\n    case 'notEquals':\n      if (value.dataType === 'date' || value.dataType === 'dateTime') {\n        return translation('rNotEquals', { value: formatDateParam(p.dateValue, locale, dateFormat) })\n      }\n      if (value.dataType === 'singleTag') {\n        return translation('rNotEquals', { value: tagToLabel(tags, p.uuidValue) })\n      }\n      if (value.dataType === 'multiTags') {\n        const valueStr = (p.uuidValues ?? []).map(v => tagToLabel(tags, v)).join(', ')\n        return translation('rNotEquals', { value: valueStr })\n      }\n      return translation('rNotEquals', { value: String(p.stringValue ?? p.numberValue ?? '') })\n    case 'contains':\n      if (value.dataType === 'multiTags' || value.dataType === 'singleTag') {\n        const valueStr = value.dataType === 'singleTag'\n          ? tagToLabel(tags, p.uuidValue)\n          : (p.uuidValues ?? []).map(v => tagToLabel(tags, v)).join(', ')\n        return translation('rContains', { value: valueStr })\n      }\n      return translation('rContains', { value: String(p.stringValue ?? '') })\n    case 'notContains':\n      if (value.dataType === 'multiTags' || value.dataType === 'singleTag') {\n        const valueStr = value.dataType === 'singleTag'\n          ? tagToLabel(tags, p.uuidValue)\n          : (p.uuidValues ?? []).map(v => tagToLabel(tags, v)).join(', ')\n        return translation('rNotContains', { value: valueStr })\n      }\n      return translation('rNotContains', { value: `\"${String(p.stringValue ?? '')}\"` })\n    case 'startsWith':\n      return translation('rStartsWith', { value: `\"${String(p.stringValue ?? '')}\"` })\n    case 'endsWith':\n      return translation('rEndsWith', { value: `\"${String(p.stringValue ?? '')}\"` })\n    case 'greaterThan':\n      return translation('rGreaterThan', {\n        value: value.dataType === 'date' || value.dataType === 'dateTime'\n          ? formatDateParam(p.dateValue, locale, dateFormat) ?? '-'\n          : String(p.numberValue ?? '-'),\n      })\n    case 'greaterThanOrEqual':\n      return translation('rGreaterThanOrEqual', {\n        value: value.dataType === 'date' || value.dataType === 'dateTime'\n          ? formatDateParam(p.dateValue, locale, dateFormat) ?? '-'\n          : String(p.numberValue ?? '-'),\n      })\n    case 'lessThan':\n      return translation('rLessThan', {\n        value: value.dataType === 'date' || value.dataType === 'dateTime'\n          ? formatDateParam(p.dateValue, locale, dateFormat) ?? '-'\n          : String(p.numberValue ?? '-'),\n      })\n    case 'lessThanOrEqual':\n      return translation('rLessThanOrEqual', {\n        value: value.dataType === 'date' || value.dataType === 'dateTime'\n          ? formatDateParam(p.dateValue, locale, dateFormat) ?? '-'\n          : String(p.numberValue ?? '-'),\n      })\n    case 'between':\n      if (value.dataType === 'date' || value.dataType === 'dateTime') {\n        return translation('rBetween', {\n          value1: formatDateParam(p.dateMin, locale, dateFormat) ?? '-',\n          value2: formatDateParam(p.dateMax, locale, dateFormat) ?? '-',\n        })\n      }\n      return translation('rBetween', {\n        value1: String(p.numberMin ?? '-'),\n        value2: String(p.numberMax ?? '-'),\n      })\n    case 'notBetween':\n      if (value.dataType === 'date' || value.dataType === 'dateTime') {\n        return translation('rNotBetween', {\n          value1: formatDateParam(p.dateMin, locale, dateFormat) ?? '-',\n          value2: formatDateParam(p.dateMax, locale, dateFormat) ?? '-',\n        })\n      }\n      return translation('rNotBetween', {\n        value1: String(p.numberMin ?? '-'),\n        value2: String(p.numberMax ?? '-'),\n      })\n    case 'isTrue':\n      return translation('isTrue')\n    case 'isFalse':\n      return translation('isFalse')\n    case 'isUndefined':\n      return translation('isUndefined')\n    case 'isNotUndefined':\n      return translation('isNotUndefined')\n    default:\n      return ''\n    }\n  }, [translation, locale])\n}","import { equalSizeGroups } from '@/src/utils/array'\nimport type { DurationJSON } from '@/src/utils/duration'\n\nconst DateTimeFormat = ['date', 'time', 'dateTime'] as const\nexport type DateTimeFormat = typeof DateTimeFormat[number]\n\nexport type DateTimePrecision = 'minute' | 'second' | 'millisecond'\n\nconst timesInSeconds = {\n  second: 1,\n  minute: 60,\n  hour: 3600,\n  day: 86400,\n  week: 604800,\n  monthImprecise: 2629800,\n  yearImprecise: 31557600,\n} as const\n\n\nconst monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nconst weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const\nexport type WeekDay = typeof weekDayList[number]\n\nconst changeDuration = (date: Date, duration: Partial<DurationJSON>, isAdding?: boolean): Date => {\n  const {\n    years = 0,\n    months = 0,\n    days = 0,\n    hours = 0,\n    minutes = 0,\n    seconds = 0,\n    milliseconds = 0,\n  } = duration\n\n  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\nconst addDuration = (date: Date, duration: Partial<DurationJSON>): Date => {\n  return changeDuration(date, duration, true)\n}\n\nconst subtractDuration = (date: Date, duration: Partial<DurationJSON>): Date => {\n  return changeDuration(date, duration, false)\n}\n\nconst between = (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\nconst equalDate = (date1: Date, date2: Date) => {\n  return date1.getFullYear() === date2.getFullYear()\n    && date1.getMonth() === date2.getMonth()\n    && date1.getDate() === date2.getDate()\n}\n\nconst isLastMillisecondOfDay = (date: Date): boolean => {\n  const next = new Date(date.getTime() + 1)\n  return !equalDate(date, next)\n}\n\nconst daysInMonth = (year: number, monthIndex: number): number => {\n  return new Date(year, monthIndex + 1, 0).getDate()\n}\n\n\nconst sameTime = (a: Date, b: Date, compareSeconds: boolean = false, compareMilliseconds: boolean = false): boolean => {\n  if (a.getHours() !== b.getHours() || a.getMinutes() !== b.getMinutes()) {\n    return false\n  }\n  if (compareSeconds && a.getSeconds() !== b.getSeconds()) {\n    return false\n  }\n  if (compareMilliseconds && a.getMilliseconds() !== b.getMilliseconds()) {\n    return false\n  }\n  return true\n}\n\nconst withTime = (datePart: Date, timePart: Date): Date => {\n  const out = new Date(datePart)\n  out.setHours(\n    timePart.getHours(),\n    timePart.getMinutes(),\n    timePart.getSeconds(),\n    timePart.getMilliseconds()\n  )\n  return out\n}\n\ntype ZonedParts = {\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n}\n\nconst zonedPartsFormatterCache = new Map<string, Intl.DateTimeFormat>()\n\nconst zonedPartsFormatter = (timeZone: string): Intl.DateTimeFormat => {\n  let formatter = zonedPartsFormatterCache.get(timeZone)\n  if (!formatter) {\n    formatter = new Intl.DateTimeFormat('en-US', {\n      timeZone,\n      hourCycle: 'h23',\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    })\n    zonedPartsFormatterCache.set(timeZone, formatter)\n  }\n  return formatter\n}\n\nconst zonedParts = (date: Date, timeZone: string): ZonedParts => {\n  const parts: Record<string, string> = {}\n  for (const part of zonedPartsFormatter(timeZone).formatToParts(date)) {\n    if (part.type !== 'literal') {\n      parts[part.type] = part.value\n    }\n  }\n  return {\n    year: Number(parts.year),\n    month: Number(parts.month),\n    day: Number(parts.day),\n    hour: Number(parts.hour) % 24,\n    minute: Number(parts.minute),\n    second: Number(parts.second),\n    millisecond: date.getMilliseconds(),\n  }\n}\n\nconst zoneOffsetMs = (date: Date, timeZone: string): number => {\n  const parts = zonedParts(date, timeZone)\n  const asUtc = Date.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second, parts.millisecond)\n  return asUtc - date.getTime()\n}\n\nfunction toZonedDate(date: Date, timeZone?: string): Date\nfunction toZonedDate(date: null, timeZone?: string): null\nfunction toZonedDate(date: Date | null, timeZone?: string): Date | null\nfunction toZonedDate(date: Date | null, timeZone?: string): Date | null {\n  if (!date || !timeZone) {\n    return date\n  }\n  const parts = zonedParts(date, timeZone)\n  return new Date(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second, parts.millisecond)\n}\n\nfunction fromZonedDate(date: Date, timeZone?: string): Date\nfunction fromZonedDate(date: null, timeZone?: string): null\nfunction fromZonedDate(date: Date | null, timeZone?: string): Date | null\nfunction fromZonedDate(date: Date | null, timeZone?: string): Date | null {\n  if (!date || !timeZone) {\n    return date\n  }\n  const asUtc = Date.UTC(\n    date.getFullYear(), date.getMonth(), date.getDate(),\n    date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()\n  )\n  let offset = zoneOffsetMs(new Date(asUtc), timeZone)\n  const refined = zoneOffsetMs(new Date(asUtc - offset), timeZone)\n  if (refined !== offset) {\n    offset = refined\n  }\n  return new Date(asUtc - offset)\n}\n\nconst weeksForCalenderMonth = (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)\n  const weekStartIndex = weekDayList.indexOf(weekStart)\n\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())\n    dayList.push(date)\n    currentDate = addDuration(currentDate, { days: 1 })\n  }\n\n  return equalSizeGroups(dayList, 7)\n}\n\ntype FormatAbsoluteOptions = {\n  timeZone?: string,\n  is24HourFormat?: boolean,\n}\n\nconst formatAbsolute = (date: Date, locale: string, format: DateTimeFormat, { timeZone, is24HourFormat = true }: FormatAbsoluteOptions = {}) => {\n  let options: Intl.DateTimeFormatOptions\n\n  const timeOptions: Intl.DateTimeFormatOptions = {\n    hour: '2-digit',\n    minute: '2-digit',\n    hourCycle: is24HourFormat ? 'h23' : 'h12',\n  }\n\n  switch (format) {\n  case 'date':\n    options = {\n      year: '2-digit',\n      month: '2-digit',\n      day: '2-digit',\n    }\n    break\n  case 'time':\n    options = {\n      ...timeOptions,\n    }\n    break\n  case 'dateTime':\n    options = {\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      ...timeOptions,\n    }\n    break\n  }\n\n  return new Intl.DateTimeFormat(locale, { ...options, timeZone }).format(date)\n}\n\nconst formatRelative = (date: Date, locale: string) => {\n  const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' })\n  const now = new Date()\n  const diffInSeconds = (date.getTime() - now.getTime()) / 1000\n\n  if (Math.abs(diffInSeconds) < timesInSeconds.minute) return rtf.format(Math.round(diffInSeconds), 'second')\n  if (Math.abs(diffInSeconds) < timesInSeconds.hour) return rtf.format(Math.round(diffInSeconds / timesInSeconds.minute), 'minute')\n  if (Math.abs(diffInSeconds) < timesInSeconds.day) return rtf.format(Math.round(diffInSeconds / timesInSeconds.hour), 'hour')\n  if (Math.abs(diffInSeconds) < timesInSeconds.week) return rtf.format(Math.round(diffInSeconds / timesInSeconds.day), 'day')\n  if (Math.abs(diffInSeconds) < timesInSeconds.monthImprecise) return rtf.format(Math.round(diffInSeconds / timesInSeconds.week), 'week')\n  if (Math.abs(diffInSeconds) < timesInSeconds.yearImprecise) return rtf.format(Math.round(diffInSeconds / timesInSeconds.monthImprecise), 'month')\n\n  return rtf.format(Math.round(diffInSeconds / timesInSeconds.yearImprecise), 'year')\n}\n\nconst toInputString = (date: Date, format: DateTimeFormat, precision: DateTimePrecision = 'minute', isLocalTime: boolean = true) => {\n  const pad = (n: number, l = 2) => String(n).padStart(l, '0')\n\n  const parts = isLocalTime\n    ? {\n      y: date.getFullYear(),\n      m: date.getMonth() + 1,\n      d: date.getDate(),\n      h: date.getHours(),\n      min: date.getMinutes(),\n      s: date.getSeconds(),\n      ms: date.getMilliseconds()\n    }\n    : {\n      y: date.getUTCFullYear(),\n      m: date.getUTCMonth() + 1,\n      d: date.getUTCDate(),\n      h: date.getUTCHours(),\n      min: date.getUTCMinutes(),\n      s: date.getUTCSeconds(),\n      ms: date.getUTCMilliseconds()\n    }\n\n  const dateStr = `${pad(parts.y, 4)}-${pad(parts.m)}-${pad(parts.d)}`\n\n  let timeStr = `${pad(parts.h)}:${pad(parts.min)}`\n\n  if (precision === 'second' || precision === 'millisecond') {\n    timeStr += `:${pad(parts.s)}`\n  }\n\n  if (precision === 'millisecond') {\n    timeStr += `.${pad(parts.ms, 3)}`\n  }\n\n  switch (format) {\n  case 'date':\n    return dateStr\n  case 'time':\n    return timeStr\n  case 'dateTime':\n    return `${dateStr}T${timeStr}`\n  }\n}\n\nfunction tryParseDate(dateValue: Date | string | number | undefined | null): Date | null {\n  if (!dateValue) return null\n  if (dateValue instanceof Date) return dateValue\n  if (typeof dateValue === 'string' || typeof dateValue === 'number') {\n    const parsed = new Date(dateValue)\n    return isNaN(parsed.getTime()) ? null : parsed\n  }\n  return null\n}\n\nfunction normalizeToDateOnly(date: Date): Date {\n  const normalized = new Date(date)\n  normalized.setHours(0, 0, 0, 0)\n  return normalized\n}\n\nfunction normalizeDatetime(dateTime: Date): Date {\n  const normalized = new Date(dateTime)\n  normalized.setSeconds(0, 0)\n  return normalized\n}\n\nexport const DateUtils = {\n  monthsList,\n  weekDayList,\n  equalDate,\n  isLastMillisecondOfDay,\n  daysInMonth,\n  sameTime,\n  withTime,\n  zonedParts,\n  toZonedDate,\n  fromZonedDate,\n  formatAbsolute,\n  formatRelative,\n  addDuration,\n  subtractDuration,\n  between,\n  weeksForCalenderMonth,\n  timesInSeconds,\n  toInputString,\n  tryParseDate,\n  toOnlyDate: normalizeToDateOnly,\n  toDateTimeOnly: normalizeDatetime,\n}","import type { FilterFn } from '@tanstack/react-table'\nimport { FilterOperatorUtils } from '../../user-interaction/data/FilterOperator'\nimport { FilterFunctions, type FilterValue } from '../../user-interaction/data/filter-function'\n\n\nconst textFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<string>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.text(operator)) {\n    return true\n  }\n  return FilterFunctions.text(value, operator, filterValue.parameter)\n}\n\nconst numberFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<number>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.number(operator)) {\n    return true\n  }\n  return FilterFunctions.number(value, operator, filterValue.parameter)\n}\n\nconst dateFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<Date>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.date(operator)) {\n    return true\n  }\n  return FilterFunctions.date(value, operator, filterValue.parameter)\n}\n\nconst dateTimeFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<Date>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.datetime(operator)) {\n    return true\n  }\n  return FilterFunctions.dateTime(value, operator, filterValue.parameter)\n}\n\nconst booleanFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<boolean>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.boolean(operator)) {\n    return true\n  }\n  return FilterFunctions.boolean(value, operator, filterValue.parameter)\n}\n\nconst multiTagsFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<unknown[]>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.tags(operator)) {\n    return true\n  }\n  return FilterFunctions.multiTags(value, operator, filterValue.parameter)\n}\n\nconst singleTagFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<unknown>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.tagsSingle(operator)) {\n    return true\n  }\n  return FilterFunctions.singleTag(value, operator, filterValue.parameter)\n}\n\nconst unknownTypeFilter: FilterFn<unknown> = (row, columnId, filterValue: FilterValue) => {\n  const value = row.getValue<unknown>(columnId)\n  const operator = filterValue.operator\n  if (!FilterOperatorUtils.typeCheck.unknownType(operator)) {\n    return true\n  }\n  return FilterFunctions.unknownType(value, operator, filterValue.parameter)\n}\n\nexport const TableFilter = {\n  text: textFilter,\n  number: numberFilter,\n  date: dateFilter,\n  dateTime: dateTimeFilter,\n  boolean: booleanFilter,\n  multiTags: multiTagsFilter,\n  singleTag: singleTagFilter,\n  unknownType: unknownTypeFilter,\n}\n","import 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 data-name=\"table-default-cell\" className={className}>\n      {children}\n    </span>\n  )\n}","import type { ColumnDef } from '@tanstack/react-table'\n\nexport const NO_COLUMN_ID = 'no-column'\n\nexport const createNoColumnPlaceholderColumn = <T>(\n  translation: (key: string) => string\n): ColumnDef<T> => ({\n    id: NO_COLUMN_ID,\n    accessorFn: () => '',\n    header: translation('noColumn'),\n    filterFn: 'text',\n    enableSorting: false,\n    enableColumnFilter: false,\n    enableHiding: false,\n    meta: {\n      columnLabel: translation('noColumn'),\n    },\n  })\n\nexport const hasNonExcludedColumns = <T>(\n  columns: ColumnDef<T>[],\n  excludeIds: string[]\n): boolean => columns.some(column => !excludeIds.includes(column.id ?? ''))\n","import type { TableHTMLAttributes } from 'react'\nimport { useRef } from 'react'\nimport './types'\nimport { TableBody } from './TableBody'\nimport type { TableHeaderProps } from './TableHeader'\nimport { TableHeader } from './TableHeader'\nimport { useTableContainerContext, useTableStateContext } from './TableContext'\nimport type { TableVirtualizationOptions } from './VirtualizedTableBody'\nimport { VirtualizedTableBody } from './VirtualizedTableBody'\nimport { useScrollbarState } from '@/src/hooks/useScrollbarState'\nimport { useNaturalColumnWidthLock } from './useNaturalColumnWidthLock'\n\nexport interface TableDisplayProps extends TableHTMLAttributes<HTMLTableElement> {\n  'containerProps'?: Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & { 'data-name'?: string },\n  'tableHeaderProps'?: Omit<TableHeaderProps, 'children' | 'table'>,\n  'virtualized'?: boolean | TableVirtualizationOptions,\n  'data-name'?: string,\n}\n\n\n/**\n * A display component for a table that requires a TableProvider for the table context\n */\nexport const TableDisplay = <T,>({\n  children,\n  containerProps,\n  tableHeaderProps,\n  virtualized = false,\n  ...props\n}: TableDisplayProps) => {\n  const { table, targetWidth, columnSizingMode } = useTableStateContext<T>()\n  const { containerRef } = useTableContainerContext<T>()\n  const tableRef = useRef<HTMLTableElement>(null)\n  const virtualizedScroll = typeof virtualized === 'object' ? virtualized.scroll : undefined\n  const usesPageScroll = virtualizedScroll === 'page' || virtualizedScroll === 'window'\n  const scrollbarState = useScrollbarState({\n    containerRef,\n    contentRef: tableRef,\n    isActive: !!virtualized && !usesPageScroll,\n  })\n  const isNaturalWidthLocked = useNaturalColumnWidthLock({\n    table,\n    tableRef,\n    enabled: columnSizingMode === 'natural' && !!virtualized,\n  })\n\n  return (\n    <div\n      {...containerProps}\n      ref={containerRef}\n      data-name={containerProps?.['data-name'] ?? 'table-container'}\n      data-scrollbar={scrollbarState}\n      data-page-scroll={usesPageScroll ? '' : undefined}\n    >\n      <table\n        {...props}\n        ref={tableRef}\n        data-name={props['data-name'] ?? 'table'}\n        data-column-sizing={columnSizingMode}\n        data-natural-locked={isNaturalWidthLocked ? '' : undefined}\n\n        style={{\n          ...(columnSizingMode === 'fill'\n            ? { width: Math.floor(Math.max(table.getTotalSize(), targetWidth ?? table.getTotalSize())) }\n            : {}),\n          ...props.style,\n        }}\n      >\n        {children}\n        <TableHeader {...tableHeaderProps} />\n        {virtualized\n          ? <VirtualizedTableBody {...(typeof virtualized === 'object' ? virtualized : {})} />\n          : <TableBody />}\n      </table>\n    </div>\n  )\n}\n","import { range } from '@/src/utils/array'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\nimport { flexRender } from '@tanstack/react-table'\nimport { FillerCell } from './FillerCell'\nimport React from 'react'\nimport { useTableStateWithoutSizingContext } from './TableContext'\nimport clsx from 'clsx'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { Visibility } from '../Visibility'\n\nexport const TableBody = React.memo(function TableBodyVisual() {\n  const { table, isUsingFillerRows, fillerRowCell, onRowClick, onFillerRowClick } = useTableStateWithoutSizingContext<unknown>()\n  const rows = table.getRowModel().rows\n  const columnOrder = table.getState().columnOrder\n  const columnVisibility = table.getState().columnVisibility\n  const pagination = table.getState().pagination\n  const allColumns = new Set(table.getAllColumns().map(col => col.id))\n\n  const columns = columnOrder\n    .filter(id => allColumns.has(id))\n    .map(id => table.getColumn(id))\n    .filter(Boolean)\n    .filter(col => !!col && columnVisibility?.[col.id] !== false)\n\n  const hasNoRows = rows.length === 0\n  const fillerRowCount = isUsingFillerRows ? pagination.pageSize - rows.length : (hasNoRows ? 1 : 0)\n\n  return (\n    <tbody>\n      {rows.map(row => {\n        return (\n          <tr\n            key={row.id}\n            onClick={() => onRowClick?.(row, table)}\n            data-clickable={PropsUtil.dataAttributes.bool(!!onRowClick)}\n            data-name=\"table-body-row\"\n            className={clsx(BagFunctionUtil.resolve(table.options.meta?.bodyRowClassName, row.original))}\n          >\n            {row.getVisibleCells().map(cell => {\n              return (\n                <td key={cell.id} data-name=\"table-body-cell\" className={clsx(cell.column.columnDef.meta?.className)}>\n                  {flexRender(\n                    cell.column.columnDef.cell,\n                    cell.getContext()\n                  )}\n                </td>\n              )\n            })}\n          </tr>\n        )\n      })}\n      <Visibility isVisible={fillerRowCount > 0}>\n        {range(fillerRowCount, { allowEmptyRange: true }).map((index) => {\n          return (\n            <tr\n              key={'filler-row-' + index}\n              className={clsx('table-body-filler-row')}\n              onClick={() => onFillerRowClick?.(index, table)}\n              data-clickable={PropsUtil.dataAttributes.bool(!!onFillerRowClick)}\n            >\n              {columns.map((column) => {\n                if(!column) return\n                return (\n                  <td key={column.id} data-name=\"table-body-filler-cell\" className={clsx(column.columnDef.meta?.className)}>\n                    {fillerRowCell ? fillerRowCell(column.id, table) : (<FillerCell />)}\n                  </td>\n                )\n              })}\n            </tr>\n          )\n        })}\n      </Visibility>\n    </tbody>\n  )\n})\n","import { PropsUtil } from '@/src/utils/propsUtil'\nimport { flexRender } from '@tanstack/react-table'\nimport clsx from 'clsx'\nimport { Visibility } from '../Visibility'\nimport { TableSortButton } from './TableSortButton'\nimport { TableFilterButton } from './TableFilterButton'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { TableStateContext, useTableStateWithoutSizingContext } from './TableContext'\nimport { DataTypeUtils, type DataType } from '../../user-interaction/data/data-types'\n\nexport type TableHeaderProps = {\n  isSticky?: boolean,\n}\n\nexport const TableHeader = ({ isSticky = false }: TableHeaderProps) => {\n  const { table, columnSizingMode } = useTableStateWithoutSizingContext<unknown>()\n  const isNaturalSizing = columnSizingMode === 'natural'\n  const resizeFrameRef = useRef<number | null>(null)\n  const resizePointerXRef = useRef(0)\n\n  const minColumnWidth = useCallback((columnId: string): number => {\n    const column = table.getColumn(columnId)\n    return column?.columnDef.minSize ?? table.options.defaultColumn?.minSize ?? 20\n  }, [table])\n\n  const applyResize = useCallback(() => {\n    const info = table.getState().columnSizingInfo\n    const columnId = info.isResizingColumn\n    if (!columnId) return\n    const deltaOffset = resizePointerXRef.current - (info.startOffset ?? 0)\n    const newWidth = Math.max(minColumnWidth(columnId), (info.startSize ?? 0) + deltaOffset)\n    table.setColumnSizing(prev => (prev[columnId] === newWidth ? prev : { ...prev, [columnId]: newWidth }))\n    table.setColumnSizingInfo(prev => ({ ...prev, deltaOffset }))\n  }, [table, minColumnWidth])\n\n  const handleResizeMove = useCallback((e: MouseEvent | TouchEvent) => {\n    if (!table.getState().columnSizingInfo.isResizingColumn) return\n    resizePointerXRef.current = 'touches' in e ? e.touches[0].clientX : e.clientX\n    if (resizeFrameRef.current !== null) return\n    resizeFrameRef.current = window.requestAnimationFrame(() => {\n      resizeFrameRef.current = null\n      applyResize()\n    })\n  }, [table, applyResize])\n\n  const handleResizeEnd = useCallback((e: PointerEvent) => {\n    if (!table.getState().columnSizingInfo.isResizingColumn) return\n    if (typeof e.clientX === 'number' && e.clientX !== 0) {\n      resizePointerXRef.current = e.clientX\n    }\n    if (resizeFrameRef.current !== null) {\n      window.cancelAnimationFrame(resizeFrameRef.current)\n      resizeFrameRef.current = null\n    }\n    applyResize()\n    table.setColumnSizingInfo({\n      columnSizingStart: [],\n      deltaOffset: null,\n      deltaPercentage: null,\n      isResizingColumn: false,\n      startOffset: null,\n      startSize: null,\n    })\n  }, [table, applyResize])\n\n  useEffect(() => {\n    window.addEventListener('pointermove', handleResizeMove)\n    window.addEventListener('pointerup', handleResizeEnd)\n    return () => {\n      window.removeEventListener('pointermove', handleResizeMove)\n      window.removeEventListener('pointerup', handleResizeEnd)\n      if (resizeFrameRef.current !== null) {\n        window.cancelAnimationFrame(resizeFrameRef.current)\n        resizeFrameRef.current = null\n      }\n    }\n  }, [handleResizeEnd, handleResizeMove, table])\n\n  return (\n    <>\n      {table.getHeaderGroups().map((headerGroup) => (\n        <TableStateContext.Consumer key={headerGroup.id}>\n          {(tableStateContext) => (\n            <colgroup style={tableStateContext?.sizeVars}>\n              {headerGroup.headers.map(header => (\n                <col\n                  key={header.id}\n                  style={isNaturalSizing\n                    ? (tableStateContext?.columnSizing?.[header.id] !== undefined\n                      ? { width: `calc(var(--header-${header?.id}-size) * 1px)` }\n                      : undefined)\n                    : {\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        </TableStateContext.Consumer>\n      ))}\n      <thead data-name=\"table-header\">\n        {table.getHeaderGroups().map(headerGroup => (\n          <tr key={headerGroup.id} data-name=\"table-header-row\" className={clsx(table.options.meta?.headerRowClassName)}>\n            {headerGroup.headers.map(header => {\n              return (\n                <th\n                  key={header.id}\n                  colSpan={header.colSpan}\n\n\n                  data-sticky={isSticky ? '' : undefined}\n                  data-name=\"table-header-cell\"\n                  className={clsx('group/table-header-cell', header.column.columnDef.meta?.className)}\n                  style={isNaturalSizing ? { minWidth: header.column.columnDef.minSize } : undefined}\n                >\n                  <Visibility isVisible={!header.isPlaceholder}>\n                    <div className=\"table-header-cell-content\">\n                      <Visibility isVisible={header.column.getCanSort()}>\n                        <TableSortButton\n                          sortDirection={header.column.getIsSorted()}\n                          sortingIndexDisplay={{\n                            index: header.column.getIsSorted() ? (header.column.getSortIndex() + 1) : -1,\n                            sortingsCount: table.getState().sorting.length,\n                          }}\n                          onClick={() => {\n                            const sorted = header.column.getIsSorted()\n                            const isMulti = header.column.getCanMultiSort()\n                            if (!isMulti) {\n                              table.resetSorting()\n                            }\n                            if (!sorted) {\n                              header.column.toggleSorting(true, isMulti)\n                              return\n                            } else if (sorted === 'desc') {\n                              header.column.toggleSorting(false, isMulti)\n                            }\n                            if (sorted === 'asc') {\n                              header.column.clearSorting()\n                            }\n                          }}\n                        />\n                      </Visibility>\n                      <Visibility isVisible={header.column.getCanFilter() && DataTypeUtils.types.includes(header.column.columnDef.filterFn as DataType)}>\n                        <TableFilterButton\n                          header={header}\n                          filterType={header.column.columnDef.filterFn as DataType}\n                        />\n                      </Visibility>\n                      {flexRender(\n                        header.column.columnDef.header,\n                        header.getContext()\n                      )}\n                    </div>\n                  </Visibility>\n                  <Visibility isVisible={header.column.getCanResize()}>\n                    <div\n                      onPointerDown={(e) => {\n                        e.preventDefault()\n                        e.currentTarget.setPointerCapture(e.pointerId)\n                        window.getSelection()?.removeAllRanges()\n                        const startX = e.clientX\n                        resizePointerXRef.current = startX\n                        const renderedWidth = (e.currentTarget as HTMLElement).closest('th')?.getBoundingClientRect().width\n                        table.setColumnSizingInfo({\n                          columnSizingStart: Object.entries(table.getState().columnSizing),\n                          startOffset: startX,\n                          startSize: table.getState().columnSizing[header.column.id]\n                            ?? (renderedWidth !== undefined ? Math.round(renderedWidth) : header.getSize()),\n                          deltaOffset: 0,\n                          deltaPercentage: null,\n                          isResizingColumn: header.column.id,\n                        })\n                      }}\n\n                      onDoubleClick={() => {\n                        header.column.resetSize()\n                      }}\n\n                      data-name=\"table-resize-indicator\"\n                      data-active={PropsUtil.dataAttributes.bool(header.column.getCanResize() && header.column?.getIsResizing())}\n                      data-disabled={PropsUtil.dataAttributes.bool(!header.column.getCanResize())}\n                    />\n                  </Visibility>\n                </th>\n              )\n            })}\n          </tr>\n        ))}\n      </thead>\n    </>\n  )\n}\n","import { ChevronDown, ChevronsUpDown, ChevronUp } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { SortDirection } from '@tanstack/react-table'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { IconButtonProps } from '@/src/components/user-interaction/IconButton'\nimport { IconButton } from '@/src/components/user-interaction/IconButton'\n\ntype SortingIndexDisplay = {\n  index: number,\n  sortingsCount: number,\n}\n\nexport type TableSortButtonProps = IconButtonProps & {\n  sortDirection: SortDirection | false,\n  sortingIndexDisplay?: SortingIndexDisplay,\n  invert?: boolean,\n}\n\n/**\n * An Extension of the normal button that displays the sorting state right of the content\n */\nexport const TableSortButton = ({\n  sortDirection,\n  invert = false,\n  color = 'neutral',\n  size = 'xs',\n  className,\n  sortingIndexDisplay,\n  ...props\n}: TableSortButtonProps) => {\n  const translation = useHightideTranslation()\n\n  let icon = <ChevronsUpDown className=\"size-4\"/>\n  if (sortDirection) {\n    let usedSortDirection = sortDirection\n    if (invert) {\n      usedSortDirection = usedSortDirection === 'desc' ? 'asc' : 'desc'\n    }\n    icon = usedSortDirection === 'asc' ?\n      (<ChevronUp className=\"size-4\"/>) : (<ChevronDown className=\"size-4\"/>)\n  }\n\n  const parsedIndex = sortingIndexDisplay?.index ?? -1\n  const hasSortingIndex = !!sortingIndexDisplay && parsedIndex > 0\n\n  return (\n    <IconButton\n      tooltip={(\n        <div className=\"flex-col-2\">\n          <span>{translation('sSortingState', { sortDirection: sortDirection || 'none' })}</span>\n          <Visibility isVisible={hasSortingIndex}>\n            <span>{translation('rSortingOrderAfter', { otherSortings: parsedIndex - 1  } )}</span>\n          </Visibility>\n        </div>\n      )}\n      color={color}\n      size={size}\n      className={clsx('relative', className)}\n      {...props}\n    >\n      <Visibility isVisible={hasSortingIndex}>\n        <div\n          className={clsx('absolute bottom-0 right-1/2 translate-x-1/2 translate-y-2/3 z-1 primary coloring-solid rounded-full h-4 w-5 text-sm')}\n        >\n          {`${parsedIndex}.`}\n        </div>\n      </Visibility>\n      {icon}\n    </IconButton>\n  )\n}","import { FilterIcon } from 'lucide-react'\nimport { useEffect, useId, useMemo, useRef, useState } from 'react'\nimport type { Header } from '@tanstack/react-table'\nimport { flexRender } from '@tanstack/react-table'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Visibility } from '../Visibility'\nimport { IconButton } from '../../user-interaction/IconButton'\nimport type { DataType } from '../../user-interaction/data/data-types'\nimport type { FilterValue } from '../../user-interaction/data/filter-function'\nimport { FilterPopUp } from '../../user-interaction/data/FilterPopUp'\n\nexport type TableFilterButtonProps = {\n  filterType: DataType,\n  header: Header<unknown, unknown>,\n}\n\nexport const TableFilterButton = ({\n  filterType,\n  header,\n}: TableFilterButtonProps) => {\n  const translation = useHightideTranslation()\n  const column = header.column\n  const columnFilterValue = column.getFilterValue()\n  const [filterValue, setFilterValue] = useState<FilterValue | undefined>(columnFilterValue as FilterValue | undefined)\n  const hasFilter = !!filterValue\n  const anchorRef = useRef<HTMLButtonElement>(null)\n  const containerRef = useRef<HTMLDivElement>(null)\n  const [isOpen, setIsOpen] = useState(false)\n  const id = useId()\n  const ids = useMemo(() => ({\n    button: `table-filter-button-${id}`,\n    popup: `table-filter-popup-${id}`,\n    label: `table-filter-label-${id}`,\n  }), [id])\n\n  useEffect(() => {\n    setFilterValue(columnFilterValue as FilterValue)\n  }, [columnFilterValue])\n\n  const isTagsFilter = filterType === 'multiTags' || filterType === 'singleTag'\n  const hasTagsMetaData = column.columnDef.meta?.filterData?.tags?.length && column.columnDef.meta.filterData.tags.length > 0\n  if (isTagsFilter && !hasTagsMetaData) {\n    return null\n  }\n\n  return (\n    <>\n      <IconButton\n        ref={anchorRef}\n        id={ids.button}\n        tooltip={translation(filterValue ? 'editFilter' : 'addFilter')}\n        color=\"neutral\"\n        size=\"xs\"\n\n        onClick={() => setIsOpen(!isOpen)}\n\n        role=\"combobox\"\n        aria-haspopup=\"dialog\"\n        aria-expanded={isOpen}\n        aria-controls={isOpen ? ids.popup : undefined}\n        aria-labelledby={ids.label}\n\n        className=\"relative\"\n      >\n        <FilterIcon className=\"size-4\"/>\n        <Visibility isVisible={hasFilter}>\n          <div className=\"absolute -top-1 -right-1 w-2 h-2 rounded-full bg-primary\" />\n        </Visibility>\n      </IconButton>\n      <FilterPopUp\n        ref={containerRef}\n        id={ids.popup}\n        isOpen={isOpen}\n        options={{\n          verticalAlignment: 'afterEnd',\n          horizontalAlignment: 'center',\n        }}\n        anchor={anchorRef}\n\n        onValueChange={setFilterValue}\n        onRemove={() => {\n          column.setFilterValue(undefined)\n          setIsOpen(false)\n        }}\n        onClose={() => {\n          column.setFilterValue(filterValue)\n          setIsOpen(false)\n        }}\n\n        className=\"flex-col-2 px-3 py-2 items-start\"\n        dataType={filterType}\n        value={filterValue}\n\n        name={flexRender(column.columnDef.header, header.getContext())}\n\n        tags={column.columnDef.meta?.filterData?.tags ?? []}\n      />\n    </>\n  )\n}","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { IconButton } from '@/src/components/user-interaction/IconButton'\nimport { Check, TrashIcon } from 'lucide-react'\nimport { PopUp, type PopUpProps } from '@/src/components/layout/popup/PopUp'\nimport type { FilterValue } from './filter-function'\nimport type { FilterOperator } from './FilterOperator'\nimport { FilterOperatorUtils } from './FilterOperator'\nimport type { ReactNode } from 'react'\nimport { forwardRef, useEffect, useId, useMemo, useState } from 'react'\nimport { Select } from '../Select/Select'\nimport { SelectOption } from '../Select/SelectOption'\nimport { Input } from '../input/Input'\nimport { DateTimeInput } from '../input/DateTimeInput'\nimport { MultiSelect } from '../MultiSelect/MultiSelect'\nimport { MultiSelectOption } from '../MultiSelect/MultiSelectOption'\nimport type { DataType } from './data-types'\nimport clsx from 'clsx'\nimport { FilterOperatorLabel } from './FilterOperatorLabel'\n\nexport interface FilterPopUpProps extends PopUpProps {\n  name?: ReactNode,\n  value?: FilterValue,\n  onValueChange: (value: FilterValue) => void,\n  onRemove: () => void,\n}\n\nexport interface FilterPopUpBaseProps extends PopUpProps {\n  /**\n   * The name of the object/column the filter is applied to\n   */\n  name?: ReactNode,\n  operator: FilterOperator,\n  onOperatorChange: (operator: FilterOperator) => void,\n  onRemove: () => void,\n  allowedOperators: FilterOperator[],\n  operatorOverrides?: FilterOperator[],\n  noParameterRequired?: boolean,\n}\n\nexport const FilterBasePopUp = forwardRef<HTMLDivElement, FilterPopUpBaseProps>(function FilterBasePopUp ({\n  children,\n  name,\n  operator,\n  onOperatorChange,\n  onRemove,\n  allowedOperators,\n  operatorOverrides,\n  noParameterRequired = false,\n  ...props\n}: FilterPopUpBaseProps, ref) {\n  const translation = useHightideTranslation()\n  const operators = useMemo(() => {\n    if(!operatorOverrides || operatorOverrides.length === 0) return allowedOperators\n    return allowedOperators.filter(op => operatorOverrides.includes(op))\n  }, [allowedOperators, operatorOverrides])\n\n  useEffect(() => {\n    if(operators.length === 0) {\n      onRemove()\n    }\n  }, [operators, onRemove])\n\n  return (\n    <PopUp\n      ref={ref}\n      {...props}\n      className={clsx('flex-col-3 p-3 relative min-w-64', props.className)}\n    >\n      <div className=\"flex-row-4 justify-between w-full\">\n        <div className=\"flex-row-0.5 items-center\">\n          <span className=\"typography-label-sm text-description\">{name ?? translation('filter')}</span>\n          <Select\n            value={operator}\n            onValueChange={(newOperator) => onOperatorChange(newOperator as FilterOperator)}\n            buttonProps={{\n              'data-name': 'filter-operator-select',\n              'className': 'w-fit coloring-text-hover neutral flex-row-1 items-center h-element-sm px-2 py-1 rounded-md hover:cursor-pointer font-bold',\n              'selectedDisplay': (option) => option ? translation(FilterOperatorUtils.getInfo(option.value as FilterOperator).translationKey) : ''\n            }}\n            iconAppearance=\"right\"\n          >\n            {operators.map((op) => (\n              <SelectOption key={op} value={op} label={translation(FilterOperatorUtils.getInfo(op).translationKey)}>\n                <FilterOperatorLabel operator={op} />\n              </SelectOption>\n            ))}\n          </Select>\n        </div>\n        <div className=\"flex-row-0 items-center\">\n          <IconButton\n            tooltip={translation('removeFilter')}\n            onClick={onRemove}\n            color=\"negative\"\n            coloringStyle=\"text\"\n            size=\"sm\"\n          >\n            <TrashIcon className=\"size-4\" />\n          </IconButton>\n          <IconButton\n            tooltip={translation('done')}\n            onClick={props.onClose}\n            color=\"neutral\"\n            coloringStyle=\"text\"\n            size=\"sm\"\n          >\n            <Check className=\"size-4\" />\n          </IconButton>\n        </div>\n      </div>\n      {children}\n      <Visibility isVisible={noParameterRequired}>\n        <div className=\"flex-row-0 items-center text-sm text-description h-element-sm\">\n          {translation('noParameterRequired')}\n        </div>\n      </Visibility>\n    </PopUp>\n  )\n})\n\n\nexport const TextFilterPopUp = forwardRef<HTMLDivElement, FilterPopUpProps>(function TextFilterPopUp ({\n  name, value, onValueChange, onRemove, ...props\n}: FilterPopUpProps, ref) {\n  const translation = useHightideTranslation()\n  const id = useId()\n  const ids = {\n    search: `text-filter-search-${id}`,\n    caseSensitive: `text-filter-case-sensitive-${id}`,\n  }\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'contains'\n    if(!FilterOperatorUtils.typeCheck.text(suggestion)) {\n      return 'contains'\n    }\n    return suggestion\n  }, [value])\n  const parameter = value?.parameter ?? {}\n\n  const needsParameterInput = operator !== 'isUndefined' && operator !== 'isNotUndefined'\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => onValueChange({ dataType: 'text', parameter, operator: newOperator })}\n      onRemove={onRemove}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.text}\n      noParameterRequired={!needsParameterInput}\n    >\n      <Visibility isVisible={needsParameterInput}>\n        <div className=\"flex-col-1\">\n          <label htmlFor={ids.search} className=\"typography-label-md\">{translation('search')}</label>\n          <Input\n            id={ids.search}\n            value={parameter.stringValue ?? ''}\n            placeholder={translation('value')}\n            onValueChange={searchText => {\n              onValueChange({\n                dataType: 'text',\n                operator,\n                parameter: { ...parameter, stringValue: searchText },\n              })\n            }}\n            className=\"min-w-64\"\n          />\n        </div>\n      </Visibility>\n    </FilterBasePopUp>\n  )\n})\n\nexport const NumberFilterPopUp = forwardRef<HTMLDivElement, FilterPopUpProps>(function NumberFilterPopUp ({\n  name, value, onValueChange, onRemove, ...props\n}: FilterPopUpProps, ref) {\n  const translation = useHightideTranslation()\n  const id = useId()\n  const ids = {\n    min: `number-filter-min-${id}`,\n    max: `number-filter-max-${id}`,\n    compareValue: `number-filter-compare-value-${id}`,\n  }\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'between'\n    if (!FilterOperatorUtils.typeCheck.number(suggestion)) {\n      return 'between'\n    }\n    return suggestion\n  }, [value])\n  const parameter = value?.parameter ?? {}\n\n  const needsRangeInput = operator === 'between' || operator === 'notBetween'\n  const needsParameterInput = operator !== 'isUndefined' && operator !== 'isNotUndefined'\n\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => {\n        onValueChange({ dataType: 'number', parameter, operator: newOperator })\n      }}\n      onRemove={onRemove}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.number}\n      noParameterRequired={!needsParameterInput}\n    >\n      <Visibility isVisible={needsRangeInput}>\n        <div className=\"flex-col-1\">\n          <label htmlFor={ids.min} className=\"typography-label-md\">{translation('min')}</label>\n          <Input\n            id={ids.min}\n            value={parameter.numberMin?.toString() ?? ''}\n            type=\"number\"\n            placeholder=\"0\"\n            onValueChange={text => {\n              const num = Number(text)\n              onValueChange({\n                dataType: 'number',\n                operator,\n                parameter: { ...parameter, numberMin: isNaN(num) ? undefined : num },\n              })\n            }}\n            className=\"min-w-64\"\n          />\n        </div>\n        <div className=\"flex-col-1\">\n          <label htmlFor={ids.max} className=\"typography-label-md\">{translation('max')}</label>\n          <Input\n            id={ids.max}\n            value={parameter.numberMax?.toString() ?? ''}\n            type=\"number\"\n            placeholder=\"1\"\n            onValueChange={text => {\n              const num = Number(text)\n              onValueChange({\n                dataType: 'number',\n                operator,\n                parameter: { ...parameter, numberMax: isNaN(num) ? undefined : num },\n              })\n            }}\n            className=\"min-w-64\"\n          />\n        </div>\n      </Visibility>\n      <Visibility isVisible={!needsRangeInput && needsParameterInput}>\n        <Input\n          value={parameter.numberValue?.toString() ?? ''}\n          type=\"number\"\n          placeholder=\"0\"\n          onValueChange={text => {\n            const num = Number(text)\n            onValueChange({\n              dataType: 'number',\n              operator,\n              parameter: { ...parameter, numberValue: isNaN(num) ? undefined : num },\n            })\n          }}\n          className=\"min-w-64\"\n        />\n      </Visibility>\n    </FilterBasePopUp>\n  )\n})\n\nexport const DateFilterPopUp = forwardRef<HTMLDivElement, FilterPopUpProps>(function DateFilterPopUp ({\n  name, value, onValueChange, onRemove, ...props\n}: FilterPopUpProps, ref) {\n  const translation = useHightideTranslation()\n  const id = useId()\n  const ids = {\n    startDate: `date-filter-start-date-${id}`,\n    endDate: `date-filter-end-date-${id}`,\n    compareDate: `date-filter-compare-date-${id}`,\n  }\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'between'\n    if (!FilterOperatorUtils.typeCheck.date(suggestion)) {\n      return 'between'\n    }\n    return suggestion\n  }, [value])\n  const parameter = value?.parameter ?? {}\n  const [temporaryMinDateValue, setTemporaryMinDateValue] = useState<Date | null>(null)\n  const [temporaryMaxDateValue, setTemporaryMaxDateValue] = useState<Date | null>(null)\n\n  const needsRangeInput = operator === 'between' || operator === 'notBetween'\n  const needsParameterInput = operator !== 'isUndefined' && operator !== 'isNotUndefined'\n\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => onValueChange({ dataType: 'date', parameter, operator: newOperator })}\n      onRemove={onRemove}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.date}\n      noParameterRequired={!needsParameterInput}\n    >\n      <Visibility isVisible={needsRangeInput}>\n        <div className=\"flex-col-1\">\n          <label htmlFor={ids.startDate} className=\"typography-label-md\">{translation('startDate')}</label>\n          <DateTimeInput\n            id={ids.startDate}\n            value={temporaryMinDateValue ?? parameter.dateMin ?? null}\n            onValueChange={setTemporaryMinDateValue}\n            onEditComplete={dateValue => {\n              if (dateValue && parameter.dateMax && dateValue > parameter.dateMax) {\n                if (!parameter.dateMin) {\n                  onValueChange({\n                    dataType: 'date',\n                    operator,\n                    parameter: { ...parameter, dateMin: parameter.dateMax, dateMax: dateValue },\n                  })\n                } else {\n                  const diff = parameter.dateMax.getTime() - parameter.dateMin.getTime()\n                  onValueChange({\n                    dataType: 'date',\n                    operator,\n                    parameter: { ...parameter, dateMin: dateValue, dateMax: new Date(dateValue.getTime() + diff) },\n                  })\n                }\n              } else {\n                onValueChange({\n                  dataType: 'date',\n                  operator,\n                  parameter: { ...parameter, dateMin: dateValue ?? undefined },\n                })\n              }\n              setTemporaryMinDateValue(null)\n            }}\n            allowRemove={true}\n            outsideClickCloses={false}\n            className=\"min-w-64\"\n          />\n        </div>\n        <div className=\"flex-col-1\">\n          <label htmlFor={ids.endDate} className=\"typography-label-md\">{translation('endDate')}</label>\n          <DateTimeInput\n            id={ids.endDate}\n            value={temporaryMaxDateValue ?? parameter.dateMax ?? null}\n            onValueChange={setTemporaryMaxDateValue}\n            onEditComplete={dateValue => {\n              if (dateValue && parameter.dateMin && dateValue < parameter.dateMin) {\n                if (!parameter.dateMax) {\n                  onValueChange({\n                    dataType: 'date',\n                    operator,\n                    parameter: { ...parameter, dateMin: dateValue, dateMax: parameter.dateMin },\n                  })\n                } else {\n                  const diff = parameter.dateMax.getTime() - parameter.dateMin.getTime()\n                  onValueChange({\n                    dataType: 'date',\n                    operator,\n                    parameter: { ...parameter, dateMin: new Date(dateValue.getTime() - diff), dateMax: dateValue },\n                  })\n                }\n              } else {\n                onValueChange({\n                  dataType: 'date',\n                  operator,\n                  parameter: { ...parameter, dateMax: dateValue ?? undefined },\n                })\n              }\n              setTemporaryMaxDateValue(null)\n            }}\n            allowRemove={true}\n            outsideClickCloses={false}\n            className=\"min-w-64\"\n          />\n        </div>\n      </Visibility>\n      <Visibility isVisible={!needsRangeInput && needsParameterInput}>\n        <label htmlFor={ids.compareDate} className=\"typography-label-md\">{translation('date')}</label>\n        <DateTimeInput\n          id={ids.compareDate}\n          value={parameter.dateValue ?? null}\n          onValueChange={compareDate => {\n            onValueChange({\n              dataType: 'date',\n              operator,\n              parameter: { ...parameter, dateValue: compareDate ?? undefined },\n            })\n          }}\n          allowRemove={true}\n          outsideClickCloses={false}\n          className=\"min-w-64\"\n        />\n      </Visibility>\n      <Visibility isVisible={!needsParameterInput}>\n        <span className=\"text-sm text-description h-10\">\n          {translation('noParameterRequired')}\n        </span>\n      </Visibility>\n    </FilterBasePopUp>\n  )\n})\n\nexport const DatetimeFilterPopUp = forwardRef<HTMLDivElement, FilterPopUpProps>(function DatetimeFilterPopUp ({\n  name, value, onValueChange, onRemove, ...props\n}: FilterPopUpProps, ref) {\n  const translation = useHightideTranslation()\n  const id = useId()\n  const ids = {\n    startDate: `datetime-filter-start-date-${id}`,\n    endDate: `datetime-filter-end-date-${id}`,\n    compareDate: `datetime-filter-compare-date-${id}`,\n  }\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'between'\n    if (!FilterOperatorUtils.typeCheck.datetime(suggestion)) {\n      return 'between'\n    }\n    return suggestion\n  }, [value])\n  const parameter = value?.parameter ?? {}\n  const [temporaryMinDateValue, setTemporaryMinDateValue] = useState<Date | null>(null)\n  const [temporaryMaxDateValue, setTemporaryMaxDateValue] = useState<Date | null>(null)\n\n  const needsRangeInput = operator === 'between' || operator === 'notBetween'\n  const needsParameterInput = operator !== 'isUndefined' && operator !== 'isNotUndefined'\n\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => onValueChange({ dataType: 'dateTime', parameter, operator: newOperator })}\n      onRemove={onRemove}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.dateTime}\n    >\n      <span className=\"typography-label-lg font-semibold\">{translation('parameter')}</span>\n      <Visibility isVisible={needsRangeInput}>\n        <div className=\"flex-col-2 gap-2\">\n          <label htmlFor={ids.startDate} className=\"typography-label-md\">{translation('startDate')}</label>\n          <DateTimeInput\n            id={ids.startDate}\n            mode=\"dateTime\"\n            value={temporaryMinDateValue ?? parameter.dateMin ?? null}\n            onValueChange={setTemporaryMinDateValue}\n            onEditComplete={dateValue => {\n              if (dateValue && parameter.dateMax && dateValue > parameter.dateMax) {\n                if (!parameter.dateMin) {\n                  onValueChange({\n                    dataType: 'dateTime',\n                    operator,\n                    parameter: { ...parameter, dateMin: parameter.dateMax, dateMax: dateValue },\n                  })\n                } else {\n                  const diff = parameter.dateMax.getTime() - parameter.dateMin.getTime()\n                  onValueChange({\n                    dataType: 'dateTime',\n                    operator,\n                    parameter: { ...parameter, dateMin: dateValue, dateMax: new Date(dateValue.getTime() + diff) },\n                  })\n                }\n              } else {\n                onValueChange({\n                  dataType: 'dateTime',\n                  operator,\n                  parameter: { ...parameter, dateMin: dateValue ?? undefined },\n                })\n              }\n              setTemporaryMinDateValue(null)\n            }}\n            allowRemove={true}\n            outsideClickCloses={false}\n            className=\"min-w-64\"\n          />\n          <label htmlFor={ids.endDate} className=\"typography-label-md\">{translation('endDate')}</label>\n          <DateTimeInput\n            id={ids.endDate}\n            mode=\"dateTime\"\n            value={temporaryMaxDateValue ?? parameter.dateMax ?? null}\n            onValueChange={setTemporaryMaxDateValue}\n            onEditComplete={dateValue => {\n              if (dateValue && parameter.dateMin && dateValue < parameter.dateMin) {\n                if (!parameter.dateMax) {\n                  onValueChange({\n                    dataType: 'dateTime',\n                    operator,\n                    parameter: { ...parameter, dateMin: dateValue, dateMax: parameter.dateMin },\n                  })\n                } else {\n                  const diff = parameter.dateMax.getTime() - parameter.dateMin.getTime()\n                  onValueChange({\n                    dataType: 'dateTime',\n                    operator,\n                    parameter: { ...parameter, dateMin: new Date(dateValue.getTime() - diff), dateMax: dateValue },\n                  })\n                }\n              } else {\n                onValueChange({\n                  dataType: 'dateTime',\n                  operator,\n                  parameter: { ...parameter, dateMax: dateValue ?? undefined },\n                })\n              }\n              setTemporaryMaxDateValue(null)\n            }}\n            allowRemove={true}\n            outsideClickCloses={false}\n            className=\"min-w-64\"\n          />\n        </div>\n      </Visibility>\n      <Visibility isVisible={!needsRangeInput && needsParameterInput}>\n        <label htmlFor={ids.compareDate} className=\"typography-label-md\">{translation('date')}</label>\n        <DateTimeInput\n          id={ids.compareDate}\n          mode=\"dateTime\"\n          value={parameter.dateValue ?? null}\n          onValueChange={compareDate => {\n            onValueChange({\n              dataType: 'dateTime',\n              operator,\n              parameter: { ...parameter, dateValue: compareDate ?? undefined },\n            })\n          }}\n          allowRemove={true}\n          outsideClickCloses={false}\n          className=\"min-w-64\"\n        />\n      </Visibility>\n      <Visibility isVisible={!needsParameterInput}>\n        <span className=\"text-sm text-description h-10\">\n          {translation('noParameterRequired')}\n        </span>\n      </Visibility>\n    </FilterBasePopUp>\n  )\n})\n\nexport const BooleanFilterPopUp = forwardRef<HTMLDivElement, FilterPopUpProps>(function BooleanFilterPopUp ({\n  name, value, onValueChange, onRemove, ...props\n}: FilterPopUpProps, ref) {\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'isTrue'\n    if (!FilterOperatorUtils.typeCheck.boolean(suggestion)) {\n      return 'isTrue'\n    }\n    return suggestion\n  }, [value])\n  const parameter = value?.parameter ?? {}\n\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => onValueChange({ dataType: 'boolean', parameter, operator: newOperator })}\n      onRemove={onRemove}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.boolean}\n    />\n  )\n})\n\nexport interface TagsFilterPopUpProps extends FilterPopUpProps {\n  tags: ReadonlyArray<{ tag: string, label: string, display?: ReactNode }>,\n}\n\nexport const TagsFilterPopUp = forwardRef<HTMLDivElement, TagsFilterPopUpProps>(function TagsFilterPopUp ({\n  name, value, onValueChange, onRemove, tags: availableTags, ...props\n}: TagsFilterPopUpProps, ref) {\n  const translation = useHightideTranslation()\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'contains'\n    if (!FilterOperatorUtils.typeCheck.tags(suggestion)) {\n      return 'contains'\n    }\n    return suggestion\n  }, [value])\n  const parameter = value?.parameter ?? {}\n  const selectedTags = (Array.isArray(parameter.uuidValues) ? parameter.uuidValues : []) as string[]\n\n  const needsParameterInput = operator !== 'isUndefined' && operator !== 'isNotUndefined'\n\n  if (availableTags.length === 0) {\n    return null\n  }\n\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => onValueChange({ dataType: 'multiTags', parameter, operator: newOperator })}\n      onRemove={onRemove}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.multiTags}\n    >\n      <span className=\"typography-label-lg font-semibold\">{translation('parameter')}</span>\n      <Visibility isVisible={needsParameterInput}>\n        <MultiSelect\n          value={selectedTags}\n          onValueChange={(selected) => {\n            onValueChange({\n              dataType: 'multiTags',\n              operator,\n              parameter: { ...parameter, uuidValues: selected.length > 0 ? selected : undefined },\n            })\n          }}\n          buttonProps={{ className: 'min-w-64' }}\n        >\n          {availableTags.map(({ tag, label }) => (\n            <MultiSelectOption key={tag} value={tag} label={label}>\n              {label}\n            </MultiSelectOption>\n          ))}\n        </MultiSelect>\n      </Visibility>\n      <Visibility isVisible={!needsParameterInput}>\n        <span className=\"text-sm text-description h-10\">\n          {translation('noParameterRequired')}\n        </span>\n      </Visibility>\n    </FilterBasePopUp>\n  )\n})\n\nexport interface TagsSingleFilterPopUpProps extends FilterPopUpProps {\n  tags: ReadonlyArray<{ tag: string, label: string, display?: ReactNode }>,\n}\n\nexport const TagsSingleFilterPopUp = forwardRef<HTMLDivElement, TagsSingleFilterPopUpProps>(function TagsSingleFilterPopUp ({\n  name, value, onValueChange, onRemove, tags: availableTags, ...props\n}: TagsSingleFilterPopUpProps, ref) {\n  const translation = useHightideTranslation()\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'contains'\n    if (!FilterOperatorUtils.typeCheck.tagsSingle(suggestion)) {\n      return 'contains'\n    }\n    return suggestion\n  }, [value])\n  const parameter = value?.parameter ?? {}\n  const selectedTagsMulti = (Array.isArray(parameter.uuidValues) ? parameter.uuidValues : []) as string[]\n  const selectedTagSingle = parameter.uuidValue != null ? String(parameter.uuidValue) : undefined\n\n  const needsParameterInput = operator !== 'isUndefined' && operator !== 'isNotUndefined'\n  const needsMultiSelect = operator === 'contains' || operator === 'notContains'\n\n  if (availableTags.length === 0) {\n    return null\n  }\n\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => onValueChange({ dataType: 'singleTag', parameter, operator: newOperator })}\n      onRemove={onRemove}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.singleTag}\n    >\n      <span className=\"typography-label-lg font-semibold\">{translation('parameter')}</span>\n      <Visibility isVisible={needsParameterInput && needsMultiSelect}>\n        <MultiSelect\n          value={selectedTagsMulti}\n          onValueChange={(selected) => {\n            onValueChange({\n              dataType: 'singleTag',\n              operator,\n              parameter: { ...parameter, uuidValues: selected.length > 0 ? selected : undefined },\n            })\n          }}\n          buttonProps={{ className: 'min-w-64' }}\n        >\n          {availableTags.map(({ tag, label }) => (\n            <MultiSelectOption key={tag} value={tag} label={label} />\n          ))}\n        </MultiSelect>\n      </Visibility>\n      <Visibility isVisible={needsParameterInput && !needsMultiSelect}>\n        <Select\n          value={selectedTagSingle}\n          onValueChange={(selectedTag) => {\n            onValueChange({\n              dataType: 'singleTag',\n              operator,\n              parameter: { ...parameter, uuidValue: selectedTag ?? undefined },\n            })\n          }}\n          buttonProps={{ className: 'min-w-64' }}\n        >\n          {availableTags.map(({ tag, label }) => (\n            <SelectOption key={tag} value={tag} label={label} />\n          ))}\n        </Select>\n      </Visibility>\n      <Visibility isVisible={!needsParameterInput}>\n        <span className=\"text-sm text-description h-10\">\n          {translation('noParameterRequired')}\n        </span>\n      </Visibility>\n    </FilterBasePopUp>\n  )\n})\n\nexport const GenericFilterPopUp = forwardRef<HTMLDivElement, FilterPopUpProps>(function GenericFilterPopUp ({\n  name,\n  value,\n  onValueChange,\n  ...props\n}: FilterPopUpProps, ref) {\n  const operator = useMemo(() => {\n    const suggestion = value?.operator ?? 'isNotUndefined'\n    if (!FilterOperatorUtils.typeCheck.unknownType(suggestion)) {\n      return 'isNotUndefined'\n    }\n    return suggestion\n  }, [value])\n\n  return (\n    <FilterBasePopUp ref={ref}\n      {...props}\n      name={name}\n      operator={operator}\n      onOperatorChange={(newOperator) => onValueChange({\n        dataType:'unknownType',\n        operator: newOperator,\n        parameter: {}\n      })}\n      allowedOperators={FilterOperatorUtils.operatorsByCategory.unknownType}\n    />\n  )\n})\n\nexport interface DataTypeFilterPopUpProps extends FilterPopUpProps {\n  dataType: DataType,\n  tags: ReadonlyArray<{ tag: string, label: string, display?: ReactNode }>,\n  operatorOverrides?: FilterOperator[],\n}\nexport const FilterPopUp = forwardRef<HTMLDivElement, DataTypeFilterPopUpProps>(function FilterPopUp ({\n  name,\n  value,\n  onValueChange,\n  dataType,\n  tags,\n  ...props\n}: DataTypeFilterPopUpProps, ref) {\n  switch (dataType) {\n  case 'text':\n    return <TextFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} {...props} />\n  case 'number':\n    return <NumberFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} {...props} />\n  case 'date':\n    return <DateFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} {...props} />\n  case 'dateTime':\n    return <DatetimeFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} {...props} />\n  case 'boolean':\n    return <BooleanFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} {...props} />\n  case 'multiTags':\n    return <TagsFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} tags={tags} {...props} />\n  case 'singleTag':\n    return <TagsSingleFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} tags={tags} {...props} />\n  case 'unknownType':\n    return <GenericFilterPopUp ref={ref} name={name} value={value} onValueChange={onValueChange} {...props} />\n  }\n})","import type { HTMLAttributes, ReactNode } from 'react'\nimport { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { CalendarIcon, X } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { DateTimePickerProps } from '@/src/components/user-interaction/date/DateTimePicker'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { DateTimePickerDialog } from '../date/DateTimePickerDialog'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport type { FormFieldInteractionStates } from '@/src/components/form/FieldLayout'\nimport { PopUp } from '../../layout/popup/PopUp'\nimport { IconButton } from '../IconButton'\nimport { DateUtils, type DateTimeFormat } from '@/src/utils/date'\nimport { DateTimeField } from './DateTimeField'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport interface DateTimeInputProps extends\n  Partial<FormFieldInteractionStates>,\n  Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'>,\n  Partial<FormFieldDataHandling<Date | null>>,\n  Pick<DateTimePickerProps, 'start' | 'end' | 'weekStart' | 'markToday' | 'is24HourFormat' | 'minuteIncrement' | 'secondIncrement' | 'millisecondIncrement' | 'precision'>\n{\n  initialValue?: Date | null,\n  allowRemove?: boolean,\n  allowClear?: boolean,\n  mode?: DateTimeFormat,\n  timeZone?: string,\n  containerProps?: HTMLAttributes<HTMLDivElement>,\n  pickerProps?: Omit<DateTimePickerProps, keyof FormFieldDataHandling<Date> | 'mode' | 'initialValue' | 'start' | 'end' | 'weekStart' | 'markToday' | 'is24HourFormat' | 'minuteIncrement' | 'secondIncrement' | 'millisecondIncrement' | 'precision'>,\n  outsideClickCloses?: boolean,\n  onDialogOpeningChange?: (isOpen: boolean) => void,\n  actions?: ReactNode[],\n}\n\nexport const DateTimeInput = forwardRef<HTMLDivElement, DateTimeInputProps>(function DateTimeInput({\n  id: inputId,\n  value,\n  initialValue = null,\n  onValueChange,\n  onEditComplete,\n  allowRemove = false,\n  allowClear = true,\n  containerProps,\n  mode = 'date',\n  timeZone: timeZoneOverride,\n  precision = 'minute',\n  pickerProps,\n  outsideClickCloses = true,\n  onDialogOpeningChange,\n  start,\n  end,\n  weekStart,\n  markToday,\n  is24HourFormat,\n  minuteIncrement,\n  secondIncrement,\n  millisecondIncrement,\n  disabled = false,\n  readOnly = false,\n  invalid = false,\n  required = false,\n  actions = [],\n  ...props\n}, forwardedRef) {\n  const translation = useHightideTranslation()\n  const { timeZone: contextTimeZone } = useLocale()\n  const timeZone = timeZoneOverride ?? contextTimeZone\n  const [isOpen, setIsOpen] = useState(false)\n  const [state, setState] = useControlledState<Date | null>({\n    value,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n  const [dialogValue, setDialogValue] = useState<Date | null>(state)\n\n  const changeOpenWrapper = useCallback((isOpen: boolean) => {\n    onDialogOpeningChange?.(isOpen)\n    setIsOpen(isOpen)\n  }, [onDialogOpeningChange])\n\n  const toZoned = useCallback((date: Date | null) => DateUtils.toZonedDate(date, timeZone), [timeZone])\n  const fromZoned = useCallback((date: Date | null) => DateUtils.fromZonedDate(date, timeZone), [timeZone])\n\n  const generatedId = useId()\n  const ids = useMemo(() => ({\n    input: inputId ?? `date-time-input-${generatedId}`,\n    popup: `date-time-input-popup-${generatedId}`,\n    label: `date-time-input-label-${generatedId}`,\n  }), [generatedId, inputId])\n\n  const controlRef = useRef<HTMLDivElement>(null)\n  const fieldRef = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (readOnly || disabled) {\n      changeOpenWrapper(false)\n    }\n  }, [changeOpenWrapper, readOnly, disabled])\n\n  useEffect(() => {\n    if (isOpen) {\n      setDialogValue(state)\n    }\n  }, [isOpen, state])\n\n  const focusField = () => {\n    fieldRef.current?.querySelector<HTMLElement>('[data-name=\"date-time-segment\"]')?.focus()\n  }\n\n  const hasClear = !required && allowClear && !readOnly && !disabled && state !== null\n  const hasTimePicker = !readOnly\n  const hasActions = hasClear || hasTimePicker || actions.length > 0\n\n  return (\n    <div {...containerProps} className={clsx('relative w-full', containerProps?.className)}>\n      <div\n        {...props}\n        ref={ReactRefsUtil.assingRefsBuilder([controlRef, forwardedRef])}\n        id={ids.input}\n\n        tabIndex={-1}\n\n        onFocus={(event) => {\n          props.onFocus?.(event)\n          if (event.target === event.currentTarget && !disabled) {\n            focusField()\n          }\n        }}\n\n        className={clsx('date-time-input', props.className)}\n        data-name=\"date-time-input\"\n        data-value={PropsUtil.dataAttributes.bool(!!state)}\n        data-has-actions={PropsUtil.dataAttributes.bool(hasActions)}\n        {...PropsUtil.dataAttributes.interactionStates({ disabled, readOnly, invalid, required })}\n        {...PropsUtil.aria.interactionStates({ disabled, readOnly, invalid, required }, props)}\n      >\n        <DateTimeField\n          ref={fieldRef}\n          value={toZoned(state)}\n          mode={mode}\n          precision={precision}\n          is24HourFormat={is24HourFormat}\n          disabled={disabled}\n          readOnly={readOnly}\n          invalid={invalid}\n          required={required}\n          onValueChange={(next) => setState(fromZoned(next))}\n          onEditComplete={(next) => onEditComplete?.(fromZoned(next))}\n          aria-labelledby={props['aria-labelledby']}\n          aria-describedby={props['aria-describedby']}\n        />\n        <div className=\"flex-row-1 items-center\">\n          {actions}\n          <Visibility isVisible={hasClear}>\n            <IconButton\n              tooltip={translation('clearValue')}\n              coloringStyle=\"text\" color=\"neutral\" size=\"sm\"\n              onClick={() => {\n                setState(null)\n                onEditComplete?.(null)\n              }}\n            >\n              <X className=\"size-5\"/>\n            </IconButton>\n          </Visibility>\n          <Visibility isVisible={hasTimePicker}>\n            <IconButton\n              tooltip={translation('sDateTimeSelect', { datetimeMode: mode })}\n              coloringStyle=\"text\" color=\"neutral\" size=\"sm\"\n              disabled={disabled}\n              onClick={() => {\n                changeOpenWrapper(true)\n              }}\n              aria-haspopup=\"dialog\"\n              aria-expanded={isOpen}\n              aria-controls={isOpen ? ids.popup : undefined}\n            >\n              <CalendarIcon className=\"size-5\"/>\n            </IconButton>\n          </Visibility>\n        </div>\n      </div>\n      <PopUp\n        id={ids.popup}\n        isOpen={isOpen}\n        anchor={controlRef}\n        options={{\n          verticalAlignment: 'afterEnd',\n          horizontalAlignment: 'center',\n          gap: 4,\n        }}\n        outsideClickOptions={{ refs: [controlRef], active: outsideClickCloses }}\n\n        onClose={() => {\n          changeOpenWrapper(false)\n          onEditComplete?.(state)\n        }}\n\n        role=\"dialog\"\n        aria-labelledby={ids.label}\n\n        data-mode={mode}\n\n        className=\"date-time-input-dialog-popup\"\n      >\n        <DateTimePickerDialog\n          value={toZoned(dialogValue)}\n          allowRemove={allowRemove}\n          onValueChange={(value) => setDialogValue(fromZoned(value))}\n          onEditComplete={(value) => {\n            const absolute = fromZoned(value)\n            setState(absolute)\n            onEditComplete?.(absolute)\n            changeOpenWrapper(false)\n          }}\n          pickerProps={{ ...(pickerProps ?? {}), className: 'date-time-input-date-time-picker' }}\n          mode={mode}\n          start={toZoned(start ?? null) ?? undefined}\n          end={toZoned(end ?? null) ?? undefined}\n          weekStart={weekStart}\n          markToday={markToday}\n          is24HourFormat={is24HourFormat}\n          minuteIncrement={minuteIncrement}\n          secondIncrement={secondIncrement}\n          millisecondIncrement={millisecondIncrement}\n          precision={precision}\n          className=\"date-time-input-dialog\"\n        />\n      </PopUp>\n    </div>\n  )\n})\n","import clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport type { FormFieldDataHandling } from '@/src/components/form/FormField'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport type { DateTimePrecision } from '@/src/utils/date'\nimport { useDateTimeFormat } from '@/src/global-contexts/LocaleContext'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { NumberStepperInput } from '@/src/components/user-interaction/input/NumberStepperInput'\nimport type {\n  TimePickerMillisecondIncrement,\n  TimePickerMinuteIncrement,\n  TimePickerSecondIncrement\n} from './TimePicker'\nimport type { StepperLoopEvent } from '@/src/hooks/useStepperHold'\n\nconst padTwoDigits = (value: number) => String(Math.round(value)).padStart(2, '0')\n\nconst minuteSteps: Record<TimePickerMinuteIncrement, number> = {\n  '1min': 1,\n  '5min': 5,\n  '10min': 10,\n  '15min': 15,\n  '30min': 30,\n}\n\nconst secondSteps: Record<TimePickerSecondIncrement, number> = {\n  '1s': 1,\n  '5s': 5,\n  '10s': 10,\n  '15s': 15,\n  '30s': 30,\n}\n\nconst millisecondSteps: Record<TimePickerMillisecondIncrement, number> = {\n  '1ms': 1,\n  '5ms': 5,\n  '10ms': 10,\n  '25ms': 25,\n  '50ms': 50,\n  '100ms': 100,\n  '250ms': 250,\n  '500ms': 500,\n}\n\nexport interface TimeInputProps extends Partial<FormFieldDataHandling<Date>> {\n  initialValue?: Date,\n  is24HourFormat?: boolean,\n  allowLooping?: boolean,\n  precision?: DateTimePrecision,\n  minuteIncrement?: TimePickerMinuteIncrement,\n  secondIncrement?: TimePickerSecondIncrement,\n  millisecondIncrement?: TimePickerMillisecondIncrement,\n  className?: string,\n}\n\nfunction to12HourDisplay(hours: number) {\n  return hours % 12 || 12\n}\n\nfunction set12HourDisplay(date: Date, displayHour: number) {\n  const isPM = date.getHours() >= 12\n  const normalizedHour = displayHour === 12 ? 0 : displayHour\n  date.setHours(normalizedHour + (isPM ? 12 : 0))\n}\n\n/**\n * A time input built from vertical number stepper fields\n */\nexport const TimeInput = ({\n  value: controlledValue,\n  initialValue = new Date(),\n  onValueChange,\n  onEditComplete,\n  is24HourFormat: is24HourFormatOverride,\n  minuteIncrement = '1min',\n  secondIncrement = '1s',\n  millisecondIncrement = '100ms',\n  precision = 'minute',\n  allowLooping = false,\n  className,\n}: TimeInputProps) => {\n  const { is24HourFormat: contextIs24HourFormat } = useDateTimeFormat()\n  const is24HourFormat = is24HourFormatOverride ?? contextIs24HourFormat\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n  const valueRef = useRef(value)\n  valueRef.current = value\n\n  const minuteStep = minuteSteps[minuteIncrement]\n  const secondStep = secondSteps[secondIncrement]\n  const millisecondStep = millisecondSteps[millisecondIncrement]\n\n  const updateValue = useCallback((transformer: (date: Date) => void, isEditComplete: boolean = false) => {\n    const nextDate = new Date(valueRef.current)\n    transformer(nextDate)\n    valueRef.current = nextDate\n    setValue(nextDate)\n    if(isEditComplete) onEditComplete?.(nextDate)\n  }, [onEditComplete, setValue])\n\n  const onHourLooped = ({ direction }: StepperLoopEvent) => {\n    updateValue((date) => {\n      date.setDate(date.getDate() + direction)\n      if(!is24HourFormat) {\n        date.setHours(date.getHours() - direction * 12)\n      }\n    })\n  }\n  const onMinuteLooped = ({ direction }: StepperLoopEvent) => {\n    updateValue((date) => date.setHours(date.getHours() + direction))\n  }\n  const onSecondLooped = ({ direction }: StepperLoopEvent) => {\n    updateValue((date) => date.setMinutes(date.getMinutes() + direction))\n  }\n  const onMillisecondLooped = ({ direction }: StepperLoopEvent) => {\n    updateValue((date) => date.setSeconds(date.getSeconds() + direction))\n  }\n\n  const hourValue = useMemo(() =>\n    is24HourFormat ? value.getHours() : to12HourDisplay(value.getHours())\n  , [is24HourFormat, value])\n  const isPM = value.getHours() >= 12\n\n  const setHourValue = useCallback((nextHour: number) => {\n    updateValue((date) => {\n      const roundedHour = Math.round(nextHour)\n      if (is24HourFormat) {\n        date.setHours(roundedHour)\n        return\n      }\n      set12HourDisplay(date, roundedHour)\n    })\n  }, [is24HourFormat, updateValue])\n\n  const setMinuteValue = useCallback((nextMinute: number) => {\n    updateValue((date) => date.setMinutes(Math.round(nextMinute)))\n  }, [updateValue])\n\n  const setSecondValue = useCallback((nextSecond: number) => {\n    updateValue((date) => date.setSeconds(Math.round(nextSecond)))\n  }, [updateValue])\n\n  const setMillisecondValue = useCallback((nextMillisecond: number) => {\n    updateValue((date) => date.setMilliseconds(Math.round(nextMillisecond)))\n  }, [updateValue])\n\n  const setPeriod = useCallback((targetPM: boolean) => {\n    updateValue((date) => {\n      const hours = date.getHours()\n      const currentlyPM = hours >= 12\n      if (currentlyPM === targetPM) {\n        return\n      }\n      date.setHours(hours + (targetPM ? 12 : -12))\n    })\n  }, [updateValue])\n\n  return (\n    <div data-name=\"time-input\" className={clsx('time-input', className)}>\n      <NumberStepperInput\n        layout=\"col\"\n        looping={allowLooping}\n        approximateMaxCharacters={2}\n        minimum={is24HourFormat ? 0 : 1}\n        maximum={allowLooping ?\n          (is24HourFormat ? 23.99 : 12.99) :\n          (is24HourFormat ? 23 : 12)}\n        value={hourValue}\n        onValueChange={setHourValue}\n        onEditComplete={setHourValue}\n        formatDisplayedValue={padTwoDigits}\n        onLooped={onHourLooped}\n        data-name=\"time-input-hour\"\n        className=\"time-input-segment\"\n      />\n      <span className=\"time-input-separator\">:</span>\n      <NumberStepperInput\n        layout=\"col\"\n        looping={allowLooping}\n        approximateMaxCharacters={2}\n        minimum={0}\n        maximum={59}\n        stepSize={minuteStep}\n        value={value.getMinutes()}\n        onValueChange={setMinuteValue}\n        onEditComplete={setMinuteValue}\n        formatDisplayedValue={padTwoDigits}\n        onLooped={onMinuteLooped}\n        data-name=\"time-input-minute\"\n        className=\"time-input-segment\"\n      />\n      <Visibility isVisible={precision === 'second' || precision === 'millisecond'}>\n        <span className=\"time-input-separator\">:</span>\n        <NumberStepperInput\n          layout=\"col\"\n          looping={allowLooping}\n          approximateMaxCharacters={2}\n          minimum={0}\n          maximum={59}\n          stepSize={secondStep}\n          value={value.getSeconds()}\n          onValueChange={setSecondValue}\n          onEditComplete={setSecondValue}\n          onLooped={onSecondLooped}\n          data-name=\"time-input-second\"\n          className=\"time-input-segment\"\n        />\n      </Visibility>\n      <Visibility isVisible={precision === 'millisecond'}>\n        <span className=\"time-input-separator\">.</span>\n        <NumberStepperInput\n          layout=\"col\"\n          looping={allowLooping}\n          approximateMaxCharacters={3}\n          minimum={0}\n          maximum={999}\n          stepSize={millisecondStep}\n          value={value.getMilliseconds()}\n          onValueChange={setMillisecondValue}\n          onEditComplete={setMillisecondValue}\n          onLooped={onMillisecondLooped}\n          data-name=\"time-input-millisecond\"\n          className=\"time-input-segment\"\n        />\n      </Visibility>\n      <Visibility isVisible={!is24HourFormat}>\n        <div data-name=\"time-input-period\" className=\"time-input-period\">\n          <Button\n            size=\"sm\"\n            color={!isPM ? 'primary' : 'neutral'}\n            onClick={() => setPeriod(false)}\n            className=\"min-w-16\"\n          >\n            AM\n          </Button>\n          <Button\n            size=\"sm\"\n            color={isPM ? 'primary' : 'neutral'}\n            onClick={() => setPeriod(true)}\n            className=\"min-w-16\"\n          >\n            PM\n          </Button>\n        </div>\n      </Visibility>\n    </div>\n  )\n}\n","import type { InputHTMLAttributes } from 'react'\nimport { forwardRef, useCallback, useRef } from 'react'\nimport clsx from 'clsx'\nimport { Minus, Plus } from 'lucide-react'\nimport { IconButton } from '@/src/components/user-interaction/IconButton'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { FormFieldInteractionStates } from '../../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport type { ChangeRateCurveProps, StepperLoopEvent } from '@/src/hooks/useStepperHold'\nimport { useStepperHold } from '@/src/hooks/useStepperHold'\nimport { NumberInput } from './NumberInput'\nimport type { DirectionNumber } from '@/src/utils/math'\n\nexport type NumberStepperInputLayout = 'row' | 'col'\n\ntype InputType = 'button' | 'keyboard'\n\ntype ActiveInputState = {\n  type: InputType | null,\n  direction: DirectionNumber,\n}\n\nexport type NumberStepperInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'type' | 'min' | 'max' | 'step'>\n  & Partial<FormFieldInteractionStates>\n  & Partial<FormFieldDataHandling<number>>\n  & {\n    initialValue?: number,\n    minimum?: number,\n    maximum?: number,\n    stepSize?: number,\n    layout?: NumberStepperInputLayout,\n    looping?: boolean,\n    approximateMaxCharacters?: number,\n    changeRateCurveProps?: ChangeRateCurveProps,\n    formatDisplayedValue?: (value: number) => string,\n    parseDisplayedValue?: (rawValue: string) => number | undefined,\n    onLooped?: (event: StepperLoopEvent) => void,\n    plusButtonClassName?: string,\n    minusButtonClassName?: string,\n  }\n\n/**\n * A number input with increment and decrement buttons\n *\n * Its state is managed by the parent\n */\nexport const NumberStepperInput = forwardRef<HTMLInputElement, NumberStepperInputProps>(function NumberStepperInput({\n  value: controlledValue,\n  initialValue = 0,\n  onValueChange,\n  onEditComplete,\n  minimum,\n  maximum,\n  stepSize: step = 1,\n  layout = 'row',\n  looping = false,\n  approximateMaxCharacters = 6,\n  changeRateCurveProps,\n  formatDisplayedValue,\n  parseDisplayedValue,\n  onLooped,\n  invalid = false,\n  disabled = false,\n  readOnly = false,\n  required = false,\n  plusButtonClassName,\n  minusButtonClassName,\n  className,\n  ...props\n}, forwardedRef) {\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n  const valueRef = useRef(value)\n  valueRef.current = value\n  const translation = useHightideTranslation()\n\n  const activeInputStateRef = useRef<ActiveInputState>({\n    type: null,\n    direction: 1\n  })\n\n  const { startHold, stopHold } = useStepperHold({\n    disabled: disabled || readOnly,\n    minimum,\n    maximum,\n    isLooping: looping,\n    value,\n    stepSize: step,\n    changeRateCurveProps,\n    onValueChange: setValue,\n    onLooped,\n  })\n\n  const start = useCallback((inputType: InputType, direction: DirectionNumber) => {\n    const activeInputState = activeInputStateRef.current\n\n    if(activeInputState.type !== null) return\n\n    activeInputState.type = inputType\n    activeInputState.direction = direction\n    startHold(direction)\n  }, [startHold])\n\n  const stop = useCallback((inputType: InputType, direction: DirectionNumber) => {\n    const activeInputState = activeInputStateRef.current\n    if(inputType !== activeInputState.type || direction !== activeInputState.direction) return\n    activeInputState.type = null\n    stopHold()\n  }, [stopHold])\n\n  const plusButton = (\n    <IconButton\n      type=\"button\"\n      size=\"sm\"\n      color=\"neutral\"\n      coloringStyle=\"tonal\"\n      disabled={disabled || readOnly}\n      tooltip={translation('increaseValue')}\n      tooltipProps={{ alignment: layout === 'row' ? 'bottom' : 'top', options: { avoidOverlap: false } }}\n      className={clsx('number-stepper-input-button', plusButtonClassName)}\n      onPointerDown={() => start('button', 1)}\n      onPointerUp={() => stop('button', 1)}\n      onPointerLeave={() => stop('button', 1)}\n      onPointerCancel={() => stop('button', 1)}\n    >\n      <Plus aria-hidden={true} />\n    </IconButton>\n  )\n\n  const minusButton = (\n    <IconButton\n      type=\"button\"\n      size=\"sm\"\n      color=\"neutral\"\n      coloringStyle=\"tonal\"\n      disabled={disabled || readOnly}\n      tooltip={translation('decreaseValue')}\n      tooltipProps={{ alignment: 'bottom', options: { avoidOverlap: false } }}\n      className={clsx('number-stepper-input-button', minusButtonClassName)}\n      onPointerDown={() => start('button', -1)}\n      onPointerUp={() => stop('button', -1)}\n      onPointerLeave={() => stop('button', -1)}\n      onPointerCancel={() => stop('button', -1)}\n    >\n      <Minus aria-hidden={true} />\n    </IconButton>\n  )\n\n  return (\n    <div\n      className={clsx('number-stepper-input', className)}\n      data-layout={layout}\n      data-disabled={PropsUtil.dataAttributes.bool(disabled)}\n      data-readonly={PropsUtil.dataAttributes.bool(readOnly)}\n    >\n      {layout === 'col' ? plusButton : minusButton}\n      <NumberInput\n        {...props}\n        ref={forwardedRef}\n        value={value}\n        onValueChange={setValue}\n        onEditComplete={onEditComplete}\n        minimum={minimum}\n        maximum={maximum}\n        approximateMaxCharacters={approximateMaxCharacters}\n        formatDisplayedValue={formatDisplayedValue}\n        parseDisplayedValue={parseDisplayedValue}\n        invalid={invalid}\n        disabled={disabled}\n        readOnly={readOnly}\n        required={required}\n        data-name=\"number-stepper-input-field\"\n        onKeyDown={(event) => {\n          props.onKeyDown?.(event)\n          if (event.key === 'ArrowUp') {\n            event.preventDefault()\n            start('keyboard', 1)\n          }\n          if (event.key === 'ArrowDown') {\n            event.preventDefault()\n            start('keyboard', -1)\n          }\n        }}\n        onKeyUp={(event) => {\n          props.onKeyDown?.(event)\n          if (event.key === 'ArrowUp') {\n            event.preventDefault()\n            stop('keyboard', 1)\n          }\n          if (event.key === 'ArrowDown') {\n            event.preventDefault()\n            stop('keyboard', -1)\n          }\n        }}\n      />\n      {layout === 'col' ? minusButton : plusButton}\n    </div>\n  )\n})\n","import type { RefObject } from 'react'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\nimport type { LoopingRangeResult } from '../utils/math'\nimport { MathUtil, type DirectionNumber } from '../utils/math'\nimport type { Curve, ExponentialCurveBuilderProps } from '../utils/curve'\nimport { CurveBuilderUtil } from '../utils/curve'\n\nexport interface StepperLoopEvent {\n  value: number,\n  direction: DirectionNumber,\n  loopedAround: 'maximum' | 'minimum',\n}\n\nexport type ChangeRateCurveProps = {\n  multiplier?: number,\n  minimum?: number,\n  maximum?: number,\n}\n\ntype UseResolveChangeRateCurveResult = RefObject<Curve>\n\nconst useResolveChangeRateCurve = (changeRateCurveProps?: ChangeRateCurveProps) => {\n  const maximum = changeRateCurveProps?.maximum ?? Infinity\n  const minimum = changeRateCurveProps?.minimum ?? 0\n\n  if(minimum !== undefined && maximum !== undefined && minimum > maximum) {\n    throw new Error(`Invalid minimum and maximum: ${minimum} > ${maximum}`)\n  }\n\n  const props: ExponentialCurveBuilderProps = useMemo(() => {\n    return {\n      basis: 1.5,\n      multiplier: changeRateCurveProps?.multiplier ?? 4,\n    }\n  }, [changeRateCurveProps?.multiplier])\n\n  const curve = useCallback((value: number) => {\n    const exponentialFunction = CurveBuilderUtil.ExponentialRateCurveBuilder(props)\n    const result = exponentialFunction(value)\n    return MathUtil.clamp(result, minimum, maximum)\n  }, [maximum, minimum, props])\n\n  const result: UseResolveChangeRateCurveResult = useRef(curve)\n\n  useEffect(() => {\n    result.current = curve\n  }, [curve, props])\n\n  return result\n}\n\ntype HoldState = {\n  direction: DirectionNumber,\n  value: number,\n  startTimestamp: number,\n  passedTime: number,\n  lastStep: number,\n}\n\ntype UseStepperHoldOptions = {\n  disabled?: boolean,\n  minimum?: number,\n  maximum?: number,\n  isLooping?: boolean,\n  value: number,\n  stepSize?: number,\n  stepTime?: number,\n  changeRateCurveProps?: ChangeRateCurveProps,\n  onValueChange: (value: number) => void,\n  onLooped?: (event: StepperLoopEvent) => void,\n}\n\nexport function useStepperHold({\n  disabled = false,\n  minimum,\n  maximum,\n  isLooping: looping = false,\n  value,\n  stepSize = 1,\n  stepTime = 1,\n  changeRateCurveProps,\n  onValueChange,\n  onLooped,\n}: UseStepperHoldOptions) {\n  const holdStateRef = useRef<HoldState | null>(null)\n  const animationFrameRef = useRef<number>(0)\n  const valueRef = useRef(value)\n  const onValueChangeRef = useRef(onValueChange)\n  const loopingRef = useRef(looping)\n  const onLoopedRef = useRef(onLooped)\n\n  const changeRateCurveRef = useResolveChangeRateCurve({\n    minimum: 0,\n    maximum: maximum !== undefined &&  minimum != undefined ? (maximum - minimum) * 0.2 : undefined,\n    multiplier: stepSize * 4,\n    ...changeRateCurveProps\n  })\n  valueRef.current = value\n  onValueChangeRef.current = onValueChange\n  loopingRef.current = looping\n  onLoopedRef.current = onLooped\n\n  const stopHold = useCallback(() => {\n    if (animationFrameRef.current) {\n      cancelAnimationFrame(animationFrameRef.current)\n      animationFrameRef.current = 0\n    }\n    holdStateRef.current = null\n  }, [])\n\n  const validationAndCallbacks = useCallback(() =>  {\n    const holdState = holdStateRef.current\n    if (!holdState) {\n      return\n    }\n\n    let shouldStop = false\n    let loopingRangeResult: LoopingRangeResult | null = null\n    let result = holdState.value\n\n    if (!loopingRef.current) {\n      if (holdState.direction > 0 && maximum !== undefined && holdState.value >= maximum) {\n        holdState.value = maximum\n        shouldStop = true\n      }\n      if (holdState.direction < 0 && minimum !== undefined && holdState.value <= minimum) {\n        holdState.value = minimum\n        shouldStop = true\n      }\n      result = MathUtil.toStepRange(holdState.value, stepSize, minimum, maximum)\n    } else {\n      if(minimum !== undefined && maximum !== undefined) {\n        loopingRangeResult = MathUtil.resolveLoopingRangeValue(holdState.value, minimum, maximum)\n      } else {\n        loopingRangeResult = { value: MathUtil.clamp(holdState.value, minimum, maximum), loopedOver: null }\n      }\n      loopingRangeResult.value = MathUtil.toStepRange(loopingRangeResult.value, stepSize, minimum, maximum)\n      result = loopingRangeResult.value\n    }\n\n    if(shouldStop) stopHold()\n\n    onValueChangeRef.current(result)\n\n    if (loopingRangeResult?.loopedOver) {\n      onLoopedRef.current?.({\n        direction: holdState.direction,\n        loopedAround: loopingRangeResult.loopedOver,\n        value: result,\n      })\n    }\n  }, [maximum, minimum, stepSize, stopHold])\n\n  const tick = useCallback((timestamp: number) => {\n    const holdState = holdStateRef.current\n    if (!holdState) {\n      return\n    }\n\n    const secondsSinceStart = (timestamp - holdState.startTimestamp) / 1000\n    const lastStep = holdState.lastStep\n    const step = Math.floor(secondsSinceStart / stepTime)\n\n    let time = holdState.passedTime\n    let currentStep = lastStep\n    let currentStepDelta = 0\n\n    while(currentStep < step) {\n      const currentStepTime = currentStep * stepTime\n      currentStepDelta = currentStepTime - time\n      const change = holdState.direction * currentStepDelta * changeRateCurveRef.current(currentStep)\n      holdState.value += change\n      time = currentStepTime\n      currentStep++\n    }\n\n    currentStepDelta = secondsSinceStart - time\n    holdState.value += holdState.direction * currentStepDelta * changeRateCurveRef.current(currentStep)\n    holdState.passedTime = secondsSinceStart\n    holdState.lastStep = step\n\n    validationAndCallbacks()\n\n    animationFrameRef.current = requestAnimationFrame(tick)\n  }, [changeRateCurveRef, stepTime, validationAndCallbacks])\n\n  const startHold = useCallback((direction: DirectionNumber) => {\n    if (disabled) {\n      return\n    }\n\n    stopHold()\n\n    const time = 0\n    const step = 0\n    const startValue = valueRef.current + direction * stepSize\n\n    holdStateRef.current = {\n      direction,\n      startTimestamp: performance.now(),\n      passedTime: time,\n      lastStep: step,\n      value: startValue\n    }\n\n    validationAndCallbacks()\n\n    animationFrameRef.current = requestAnimationFrame(tick)\n  }, [disabled, stepSize, stopHold, tick, validationAndCallbacks])\n\n  useEffect(() => stopHold, [stopHold])\n\n  return {\n    startHold,\n    stopHold,\n  }\n}\n\n","import type { CSSProperties, InputHTMLAttributes } from 'react'\nimport { forwardRef, useRef } from 'react'\nimport clsx from 'clsx'\nimport type { FormFieldInteractionStates } from '../../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\nimport { MathUtil } from '@/src/utils/math'\n\nexport type NumberInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'type' | 'min' | 'max' | 'step'>\n  & Partial<FormFieldInteractionStates>\n  & Partial<FormFieldDataHandling<number>>\n  & {\n    initialValue?: number,\n    minimum?: number,\n    maximum?: number,\n    approximateMaxCharacters?: number,\n    formatDisplayedValue?: (value: number) => string,\n    parseDisplayedValue?: (rawValue: string) => number | undefined,\n  }\n\n/**\n * A number input with configurable width and range validation\n *\n * Its state is managed by the parent\n */\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput({\n  value: controlledValue,\n  initialValue = 0,\n  onValueChange,\n  onEditComplete,\n  minimum,\n  maximum,\n  approximateMaxCharacters = 6,\n  formatDisplayedValue,\n  parseDisplayedValue,\n  invalid = false,\n  disabled = false,\n  readOnly = false,\n  required = false,\n  className,\n  style,\n  ...props\n}, forwardedRef) {\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n  const innerRef = useRef<HTMLInputElement>(null)\n\n  return (\n    <input\n      {...props}\n      ref={ReactRefsUtil.assingRefsBuilder([innerRef, forwardedRef])}\n      type=\"text\"\n      inputMode=\"numeric\"\n      value={Number.isFinite(value) ? (formatDisplayedValue?.(Math.round(value)) ?? String(Math.round(value))) : ''}\n      disabled={disabled}\n      readOnly={readOnly}\n      required={required}\n      min={minimum}\n      max={maximum}\n      onChange={(event) => {\n        props.onChange?.(event)\n        let normalized = parseDisplayedValue?.(event.target.value) ?? Number(event.target.value)\n        normalized = MathUtil.clamp(normalized, minimum, maximum)\n        setValue(normalized)\n      }}\n      onBlur={(event) => {\n        props.onBlur?.(event)\n        onEditComplete?.(value)\n      }}\n      data-name=\"number-input\"\n      data-value={PropsUtil.dataAttributes.bool(Number.isFinite(value))}\n      {...PropsUtil.dataAttributes.interactionStates({ disabled, invalid, readOnly, required })}\n      {...PropsUtil.aria.interactionStates({ disabled, invalid, readOnly, required }, props)}\n      className={clsx('number-input-field', className)}\n      style={{\n        ...style,\n        '--number-input-approximate-max-characters': approximateMaxCharacters,\n      } as CSSProperties}\n    />\n  )\n})\n","import { useState } from 'react'\nimport { ArrowDown, ArrowUp, Calendar, ChevronDown } from 'lucide-react'\nimport { DateUtils } from '@/src/utils/date'\nimport clsx from 'clsx'\nimport type { DayPickerProps } from '@/src/components/user-interaction/date/DayPicker'\nimport { DayPicker } from '@/src/components/user-interaction/date/DayPicker'\nimport type { YearMonthPickerProps } from '@/src/components/user-interaction/date/YearMonthPicker'\nimport { YearMonthPicker } from '@/src/components/user-interaction/date/YearMonthPicker'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport { LocalizationUtil } from '@/src/i18n/util'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { IconButton } from '../IconButton'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\ntype DisplayMode = 'yearMonth' | 'day'\n\nexport interface DatePickerProps extends\n Partial<FormFieldDataHandling<Date>>,\n Pick<DayPickerProps, 'markToday' | 'start' | 'end' | 'weekStart'>\n {\n  initialValue?: Date,\n  initialDisplay?: DisplayMode,\n  dayPickerProps?: Omit<DayPickerProps, 'displayedMonth' | 'onChange' | 'selected' | 'weekStart' | 'markToday' | 'start' | 'end'>,\n  yearMonthPickerProps?: Omit<YearMonthPickerProps, 'displayedYearMonth' | 'onChange' | 'start' | 'end'>,\n  className?: string,\n}\n\n/**\n * A Component for picking a date\n */\nexport const DatePicker = ({\n  value: controlledValue,\n  initialValue = new Date(),\n  start,\n  end,\n  initialDisplay = 'day',\n  weekStart,\n  onValueChange,\n  onEditComplete,\n  yearMonthPickerProps,\n  dayPickerProps,\n  className\n}: DatePickerProps) => {\n  const translation = useHightideTranslation()\n  const { locale } = useLocale()\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onValueChange,\n    defaultValue: initialValue,\n  })\n  const [displayedMonth, setDisplayedMonth] = useState<Date>(new Date(value.getFullYear(), value.getMonth(), 1))\n  const [displayMode, setDisplayMode] = useState<DisplayMode>(initialDisplay)\n\n  const isDayMode = displayMode === 'day'\n\n  return (\n    <div className={clsx('date-picker', className)}>\n      <div className=\"date-picker-header\">\n        <Button\n          size=\"sm\"\n          color=\"neutral\"\n          onClick={() => setDisplayMode(displayMode === 'day' ? 'yearMonth' : 'day')}\n        >\n          {`${new Intl.DateTimeFormat(LocalizationUtil.localToLanguage(locale), { month: 'short' }).format(displayedMonth)} ${displayedMonth.getFullYear()}`}\n          <ChevronDown size={16}/>\n        </Button>\n        <div className=\"flex-row-2 justify-end\">\n          <IconButton\n            tooltip={translation('time.today')}\n            size=\"sm\"\n            coloringStyle=\"tonal\"\n            disabled={!isDayMode}\n            onClick={() => {\n              const newDate = new Date()\n              newDate.setHours(value.getHours(), value.getMinutes())\n              setValue(newDate)\n              setDisplayedMonth(newDate)\n            }}\n          >\n            <Calendar className=\"size-5\"/>\n          </IconButton>\n          <IconButton\n            tooltip={translation('time.previousMonth')}\n            size=\"sm\"\n            disabled={!isDayMode || !DateUtils.between(DateUtils.subtractDuration(displayedMonth, { months: 1 }), start, end)}\n            onClick={() => {\n              setDisplayedMonth(DateUtils.subtractDuration(displayedMonth, { months: 1 }))\n            }}\n          >\n            <ArrowUp size={20}/>\n          </IconButton>\n          <IconButton\n            tooltip={translation('time.nextMonth')}\n            size=\"sm\"\n            disabled={!isDayMode || !DateUtils.between(DateUtils.addDuration(displayedMonth, { months: 1 }), start, end)}\n            onClick={() => {\n              setDisplayedMonth(DateUtils.addDuration(displayedMonth, { months: 1 }))\n            }}\n          >\n            <ArrowDown size={20}/>\n          </IconButton>\n        </div>\n      </div>\n      {displayMode === 'yearMonth' ? (\n        <YearMonthPicker\n          {...yearMonthPickerProps}\n          value={value}\n          start={start}\n          end={end}\n          onValueChange={newDate => {\n            setDisplayedMonth(newDate)\n            setDisplayMode('day')\n          }}\n          onEditComplete={newDate => {\n            setDisplayedMonth(newDate)\n            setDisplayMode('day')\n          }}\n          className=\"date-picker-content\"\n        />\n      ) : (\n        <DayPicker\n          {...dayPickerProps}\n          value={value}\n          displayedMonth={displayedMonth}\n          changeDisplayedMonth={setDisplayedMonth}\n          start={start}\n          end={end}\n          weekStart={weekStart}\n          onValueChange={setValue}\n          onEditComplete={onEditComplete}\n          className=\"date-picker-content\"\n        />\n      )}\n    </div>\n  )\n}\n","import type { KeyboardEvent } from 'react'\nimport type { WeekDay } from '@/src/utils/date'\nimport { DateUtils } from '@/src/utils/date'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useControlledState } from '@/src/hooks/useControlledState'\n\nexport type DayPickerProps = Partial<FormFieldDataHandling<Date>> & {\n  initialValue?: Date,\n  displayedMonth?: Date,\n  changeDisplayedMonth?: (date: Date) => void,\n  initialDisplayedMonth?: Date,\n  start?: Date,\n  end?: Date,\n  weekStart?: WeekDay,\n  markToday?: boolean,\n  className?: string,\n}\n\n/**\n * A component for selecting a day of a month\n */\nexport const DayPicker = ({\n  displayedMonth: controlledDisplayedMonth,\n  initialDisplayedMonth,\n  changeDisplayedMonth,\n  value: controlledValue,\n  initialValue = new Date(),\n  start: providedStart,\n  end: providedEnd,\n  onValueChange,\n  onEditComplete,\n  weekStart = 'monday',\n  markToday = true,\n  className,\n}: DayPickerProps) => {\n  const { locale } = useLocale()\n\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onValueChange,\n    defaultValue: initialValue,\n  })\n  const [displayedMonth, setDisplayedMonth] = useControlledState({\n    value: controlledDisplayedMonth,\n    onValueChange: changeDisplayedMonth,\n    defaultValue: initialDisplayedMonth ?? value,\n  })\n\n  const month = displayedMonth.getMonth()\n  const weeks = DateUtils.weeksForCalenderMonth(displayedMonth, weekStart)\n  const selectedButtonRef = useRef<HTMLDivElement>(null)\n\n  const isValueInDisplayedWeeks = useMemo(\n    () => !!value && weeks.some(week => week.some(d => DateUtils.equalDate(value, d))),\n    [value, weeks]\n  )\n\n  const firstDayOfMonth = useCallback((date: Date) =>\n    new Date(date.getFullYear(), date.getMonth(), 1),\n  [])\n\n  const focusTargetDate = (value && isValueInDisplayedWeeks) ? value : firstDayOfMonth(displayedMonth)\n\n  useEffect(() => {\n    selectedButtonRef.current?.focus()\n  }, [focusTargetDate])\n\n  const end = useMemo(() => {\n    if(!providedEnd) return\n    return new Date(providedEnd.getFullYear(), providedEnd.getMonth(), providedEnd.getDate())\n  }, [providedEnd])\n\n  const start = useMemo(() => {\n    if(!providedStart) return\n    return new Date(providedStart.getFullYear(), providedStart.getMonth(), providedStart.getDate())\n  }, [providedStart])\n\n  const clampToRange = useCallback((date: Date) => {\n    if (start && date < start) return start\n    if (end && date > end) return end\n    return date\n  }, [start, end])\n\n\n\n  const navigateTo = useCallback((candidate: Date) => {\n    const clamped = clampToRange(candidate)\n    if (!DateUtils.between(clamped, start, end)) return\n    setValue(clamped)\n    onEditComplete?.(clamped)\n    if (clamped.getMonth() !== displayedMonth.getMonth() || clamped.getFullYear() !== displayedMonth.getFullYear()) {\n      setDisplayedMonth(firstDayOfMonth(clamped))\n    }\n  }, [clampToRange, start, end, setValue, onEditComplete, displayedMonth, setDisplayedMonth, firstDayOfMonth])\n\n  const onKeyDown = useCallback(\n    (event: KeyboardEvent<HTMLDivElement>) => {\n      PropsUtil.aria.navigate<HTMLDivElement>({\n        left: () => focusTargetDate && navigateTo(DateUtils.subtractDuration(focusTargetDate, { days: 1 })),\n        right: () => focusTargetDate && navigateTo(DateUtils.addDuration(focusTargetDate, { days: 1 })),\n        up: () => focusTargetDate && navigateTo(DateUtils.subtractDuration(focusTargetDate, { days: 7 })),\n        down: () => focusTargetDate && navigateTo(DateUtils.addDuration(focusTargetDate, { days: 7 })),\n      })(event)\n    },\n    [focusTargetDate, navigateTo]\n  )\n\n\n  return (\n    <div data-name=\"day-picker-container\" className={className}>\n      <div data-name=\"day-picker-header-row\">\n        {weeks[0]!.map((weekDay, index) => (\n          <div key={index} data-name=\"day-picker-header-item\">\n            {new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(weekDay).substring(0, 2)}\n          </div>\n        ))}\n      </div>\n      {weeks.map((week, index) => (\n        <div key={index} data-name=\"day-picker-body-row\">\n          {week.map((date) => {\n            const isSelected = !!value && DateUtils.equalDate(value, date)\n            const isFocused = !!focusTargetDate && DateUtils.equalDate(focusTargetDate, date)\n            const isToday = DateUtils.equalDate(new Date(), date)\n            const isSameMonth = date.getMonth() === month\n            const isDayValid = DateUtils.between(date, start, end)\n            return (\n              <div\n                key={date.getDate()}\n                ref={isFocused ? selectedButtonRef : undefined}\n                data-name=\"day-picker-body-item\"\n                onClick={() => {\n                  if (!isDayValid) return\n                  const newDate = new Date(\n                    date.getFullYear(),\n                    date.getMonth(),\n                    date.getDate(),\n                    value.getHours(),\n                    value.getMinutes(),\n                    value.getSeconds(),\n                    value.getMilliseconds()\n                  )\n                  setValue(newDate)\n                  onEditComplete?.(newDate)\n                  if (newDate.getMonth() !== month) {\n                    setDisplayedMonth(firstDayOfMonth(newDate))\n                  }\n                }}\n                onKeyDown={onKeyDown}\n\n                role=\"button\"\n                tabIndex={isFocused ? 0 : -1}\n\n                data-selected={PropsUtil.dataAttributes.bool(isSelected)}\n                data-invalid={PropsUtil.dataAttributes.bool(!isDayValid)}\n                data-today={PropsUtil.dataAttributes.bool(isToday && markToday)}\n                data-samemonth={PropsUtil.dataAttributes.bool(isSameMonth)}\n              >\n                {date.getDate()}\n              </div>\n            )\n          })}\n        </div>\n      ))}\n    </div>\n  )\n}\n\n","import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { equalSizeGroups, range } from '@/src/utils/array'\nimport clsx from 'clsx'\nimport { ExpandableContent, ExpandableHeader, ExpandableRoot } from '@/src/components/layout/Expandable'\nimport { DateUtils } from '@/src/utils/date'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { InfiniteScroll } from '../../layout/InifiniteScroll'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\n\n// A performance optimized component for displayig the year rows\nconst YearRow = memo(function YearRow({\n  year,\n  selectedMonthIndex,\n  minTimestamp,\n  maxTimestamp,\n  monthNames,\n  onSelect\n}: {\n  year: number,\n  selectedMonthIndex?: number,\n  minTimestamp?: number,\n  maxTimestamp?: number,\n  monthNames: string[],\n  onSelect: (date: Date) => void,\n}) {\n  const ref = useRef<HTMLDivElement>(null)\n  const isSelectedYear = selectedMonthIndex !== undefined\n  const [isExpanded, setIsExpanded] = useState(false)\n\n  useEffect(() => {\n    if (isSelectedYear) {\n      ref.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n    }\n  }, [isSelectedYear])\n\n  const monthGrid = useMemo(() => equalSizeGroups([...DateUtils.monthsList], 3), [])\n\n  return (\n    <ExpandableRoot\n      ref={isSelectedYear ? ref : undefined}\n      isExpanded={isExpanded}\n      onExpandedChange={setIsExpanded}\n    >\n      <ExpandableHeader className={clsx('px-2', { 'text-primary font-bold': isSelectedYear })}>\n        {year}\n      </ExpandableHeader>\n      <ExpandableContent className=\"gap-y-1 px-2 expandable-content-h-43\">\n        {isExpanded && monthGrid.map((group, groupIdx) => (\n          <div key={groupIdx} className=\"flex-row-1\">\n            {group.map(month => {\n              const monthIndex = DateUtils.monthsList.indexOf(month)\n\n              const currentTimestamp = new Date(year, monthIndex).getTime()\n              const isAfterStart = minTimestamp === undefined || currentTimestamp >= minTimestamp\n              const isBeforeEnd = maxTimestamp === undefined || currentTimestamp <= maxTimestamp\n              const isValid = isAfterStart && isBeforeEnd\n              const isSelectedMonth = monthIndex === selectedMonthIndex\n\n              return (\n                <Button\n                  key={month}\n                  disabled={!isValid}\n                  color={isSelectedMonth && isValid ? 'primary' : 'neutral'}\n                  className=\"flex-1 min-w-auto\"\n                  size=\"sm\"\n                  onClick={() => {\n                    if (isValid) {\n                      onSelect(new Date(year, monthIndex))\n                    }\n                  }}\n                >\n                  {monthNames[monthIndex]}\n                </Button>\n              )\n            })}\n          </div>\n        ))}\n      </ExpandableContent>\n    </ExpandableRoot>\n  )\n})\n\nconst defaultStart = DateUtils.subtractDuration(new Date(), { years: 100 })\nconst defaultEnd = DateUtils.addDuration(new Date(), { years: 100 })\n\nexport type YearMonthPickerProps = Partial<FormFieldDataHandling<Date>> & {\n  initialValue?: Date,\n  start?: Date,\n  end?: Date,\n  className?: string,\n}\n\nexport const YearMonthPicker = ({\n  value: controlledValue,\n  initialValue = new Date(),\n  start = defaultStart,\n  end = defaultEnd,\n  onValueChange,\n  onEditComplete,\n  className,\n}: YearMonthPickerProps) => {\n  const { locale } = useLocale()\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onValueChange,\n    defaultValue: initialValue,\n  })\n\n  const onEditCompleteStable = useEventCallbackStabilizer(onEditComplete)\n\n  const monthNames = useMemo(() => {\n    const formatter = new Intl.DateTimeFormat(locale, { month: 'short' })\n    return Array.from({ length: 12 }, (_, i) => formatter.format(new Date(2000, i, 1)))\n  }, [locale])\n\n  const years = useMemo(() =>\n    range([start.getFullYear(), end.getFullYear()], { exclusiveEnd: false }),\n  [start, end])\n\n  const minTimestamp = useMemo(() =>{\n    if(!start) return\n    return new Date(start.getFullYear(), start.getMonth(), 1).getTime()\n  }, [start])\n  const maxTimestamp = useMemo(() => {\n    if(!end) return\n    return new Date(end.getFullYear(), end.getMonth() + 1, 0).getTime()\n  }, [end])\n\n  const handleSelect = useCallback((newDate: Date) => {\n    setValue(newDate)\n    onEditCompleteStable(newDate)\n  }, [onEditCompleteStable, setValue])\n\n  return (\n    <InfiniteScroll\n      itemCount={years.length}\n      className={clsx('flex-col-1 h-full select-none', className)}\n      initialIndex={years.findIndex(year => year === value.getFullYear())}\n    >\n      {(index => {\n        const year = years[index]\n        const isSelectedYear = value.getFullYear() === year\n        const selectedMonthIndex = isSelectedYear ? value.getMonth() : undefined\n\n        return (\n          <YearRow\n            key={year}\n            year={year}\n            selectedMonthIndex={selectedMonthIndex}\n            minTimestamp={minTimestamp}\n            maxTimestamp={maxTimestamp}\n            monthNames={monthNames}\n            onSelect={handleSelect}\n          />\n        )\n      })}\n    </InfiniteScroll>\n  )\n}\n","import type { HTMLAttributes } from 'react'\nimport { type ReactNode } from 'react'\nimport type { DateTimeFormat } from '@/src/utils/date'\nimport type { TimeInputProps } from './TimeInput'\nimport { TimeInput } from './TimeInput'\nimport type { DatePickerProps } from './DatePicker'\nimport { DatePicker } from './DatePicker'\nimport type { FormFieldDataHandling } from '../../form/FormField'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport clsx from 'clsx'\n\nexport interface DateTimePickerProps extends\nHTMLAttributes<HTMLDivElement>,\nPartial<FormFieldDataHandling<Date>>,\nPick<DatePickerProps, 'start' | 'end' | 'weekStart' | 'markToday'>,\nPick<TimeInputProps, 'is24HourFormat' | 'minuteIncrement' | 'secondIncrement' | 'millisecondIncrement' | 'precision'>\n{\n  initialValue?: Date,\n  mode?: DateTimeFormat,\n  datePickerProps?: Omit<DatePickerProps, 'onChange' | 'value' | 'start' | 'end' | 'markToday'>,\n  timeInputProps?: Omit<TimeInputProps, 'value' | 'onValueChange' | 'onEditComplete' | 'is24HourFormat' | 'minuteIncrement' | 'secondIncrement' | 'millisecondIncrement' | 'precision'>,\n}\n\n/**\n * A Component for picking a Date and Time\n */\nexport const DateTimePicker = ({\n  value: controlledValue,\n  initialValue = new Date(),\n  start,\n  end,\n  mode = 'dateTime',\n  is24HourFormat,\n  minuteIncrement,\n  weekStart,\n  secondIncrement,\n  millisecondIncrement,\n  precision,\n  onValueChange,\n  onEditComplete,\n  timeInputProps,\n  datePickerProps,\n  ...props\n}: DateTimePickerProps) => {\n  const useDate = mode === 'dateTime' || mode === 'date'\n  const useTime = mode === 'dateTime' || mode === 'time'\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onValueChange,\n    defaultValue: initialValue,\n  })\n  let dateDisplay: ReactNode\n  let timeDisplay: ReactNode\n\n  if (useDate) {\n    dateDisplay = (\n      <DatePicker\n        {...datePickerProps}\n        start={start}\n        end={end}\n        weekStart={weekStart}\n        value={value}\n        onValueChange={setValue}\n        onEditComplete={onEditComplete}\n      />\n    )\n  }\n  if (useTime) {\n    timeDisplay = (\n      <TimeInput\n        {...timeInputProps}\n        is24HourFormat={is24HourFormat}\n        minuteIncrement={minuteIncrement}\n        secondIncrement={secondIncrement}\n        millisecondIncrement={millisecondIncrement}\n        precision={precision}\n        value={value}\n        onValueChange={setValue}\n        onEditComplete={onEditComplete}\n      />\n    )\n  }\n\n  return (\n    <div {...props} className={clsx('date-time-picker', props.className)} data-mode={mode}>\n      {dateDisplay}\n      {timeDisplay}\n    </div>\n  )\n}\n","import { useControlledState } from '@/src/hooks/useControlledState'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { DateTimePicker, type DateTimePickerProps } from '@/src/components/user-interaction/date/DateTimePicker'\nimport type { HTMLAttributes } from 'react'\nimport { useEffect, useState, type ReactNode } from 'react'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { FormFieldDataHandling } from '@/src/components/form/FormField'\nimport type { DateTimeFormat } from '@/src/utils/date'\nimport clsx from 'clsx'\n\nexport interface DateTimePickerDialogProps extends\nHTMLAttributes<HTMLDivElement>,\nPartial<FormFieldDataHandling<Date | null>>,\nPick<DateTimePickerProps, 'start' | 'end' | 'weekStart' | 'markToday' | 'is24HourFormat' | 'minuteIncrement' | 'secondIncrement' | 'millisecondIncrement' | 'precision'>\n{\n  initialValue?: Date | null,\n  allowRemove?: boolean,\n  pickerProps?: Omit<DateTimePickerProps, 'value' | 'onValueChange' | 'onEditComplete' | 'start' | 'end' | 'weekStart' | 'markToday' | 'is24HourFormat' | 'minuteIncrement' | 'secondIncrement' | 'millisecondIncrement' | 'precision'>,\n  mode?: DateTimeFormat,\n  label?: ReactNode,\n  labelId?: string,\n}\n\nexport const DateTimePickerDialog = ({\n  initialValue = null,\n  value,\n  allowRemove = true,\n  onValueChange,\n  onEditComplete,\n  mode = 'date',\n  pickerProps = {},\n  start,\n  end,\n  weekStart,\n  markToday,\n  is24HourFormat,\n  minuteIncrement,\n  secondIncrement,\n  millisecondIncrement,\n  precision,\n  labelId,\n  label,\n  ...props\n}: DateTimePickerDialogProps) => {\n  const translation = useHightideTranslation()\n  const [state, setState] = useControlledState({\n    value,\n    onValueChange,\n    defaultValue: initialValue\n  })\n\n  const [pickerState, setPickerState] = useState(state ?? new Date())\n\n  useEffect(() => {\n    setPickerState(state ?? new Date())\n  }, [state])\n\n  return (\n    <div {...props} className={clsx('date-time-picker-dialog', props?.className)}>\n      <div className=\"date-time-picker-dialog-header\">\n        <span\n          id={labelId}\n          className=\"date-time-picker-dialog-label\"\n        >\n          {label ?? translation('sDateTimeSelect', { datetimeMode: mode })}\n        </span>\n      </div>\n      <DateTimePicker\n        {...pickerProps}\n        mode={mode}\n        value={pickerState}\n        onValueChange={setPickerState}\n        onEditComplete={setPickerState}\n        start={start}\n        end={end}\n        weekStart={weekStart}\n        markToday={markToday}\n        is24HourFormat={is24HourFormat}\n        minuteIncrement={minuteIncrement}\n        secondIncrement={secondIncrement}\n        millisecondIncrement={millisecondIncrement}\n        precision={precision}\n      />\n      <div className=\"date-time-picker-dialog-actions\">\n        <Visibility isVisible={allowRemove && !!state}>\n          <Button\n            size=\"md\"\n            color=\"negative\"\n            onClick={() => {\n              setState(null)\n              onEditComplete?.(null)\n            }}\n            className=\"date-time-picker-dialog-action\"\n          >\n            {translation('clear')}\n          </Button>\n        </Visibility>\n        <Visibility isVisible={!state}>\n          <Button\n            size=\"md\"\n            color=\"neutral\"\n            onClick={() => {\n              setState(state)\n              onEditComplete?.(state)\n            }}\n            className=\"date-time-picker-dialog-action\"\n          >\n            {translation('cancel')}\n          </Button>\n        </Visibility>\n        <Button\n          size=\"md\"\n          onClick={() => {\n            onEditComplete?.(pickerState)\n          }}\n          className=\"date-time-picker-dialog-action\"\n        >\n          {translation('done')}\n        </Button>\n      </div>\n    </div>\n  )\n}","import type { FocusEvent, HTMLAttributes, KeyboardEvent } from 'react'\nimport { forwardRef, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport type { FormFieldInteractionStates } from '@/src/components/form/FieldLayout'\nimport type { FormFieldDataHandling } from '@/src/components/form/FormField'\nimport type { DateTimeFormat, DateTimePrecision } from '@/src/utils/date'\nimport type { EditableSegmentType, SegmentEditState } from './dateTimeSegments'\nimport {\n  buildSegmentLayout,\n  clearSegment,\n  composeDate,\n  decomposeDate,\n  editableTypesOf,\n  formatSegment,\n  isEmpty,\n  segmentBounds,\n  setDayPeriod,\n  stepSegment,\n  timeUnitTranslationKey,\n  typeDigit\n} from './dateTimeSegments'\n\nconst advanceKeys = ['.', ':', '/', ',', '-', ' ']\n\nexport interface DateTimeFieldProps extends\n  Partial<FormFieldInteractionStates>,\n  Partial<FormFieldDataHandling<Date | null>>,\n  Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n  initialValue?: Date | null,\n  mode?: DateTimeFormat,\n  precision?: DateTimePrecision,\n  is24HourFormat?: boolean,\n  locale?: string,\n}\n\nexport const DateTimeField = forwardRef<HTMLDivElement, DateTimeFieldProps>(function DateTimeField({\n  value: controlledValue,\n  initialValue = null,\n  onValueChange,\n  onEditComplete,\n  mode = 'date',\n  precision = 'minute',\n  is24HourFormat,\n  locale: localeOverride,\n  disabled = false,\n  readOnly = false,\n  invalid = false,\n  required = false,\n  className,\n  ...props\n}, forwardedRef) {\n  const translation = useHightideTranslation()\n  const { locale: contextLocale, is24HourFormat: contextIs24HourFormat } = useLocale()\n  const locale = localeOverride ?? contextLocale\n\n  const [value, setValue] = useControlledState<Date | null>({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n\n  const is24Hour = is24HourFormat ?? contextIs24HourFormat ?? true\n\n  const layout = useMemo(\n    () => buildSegmentLayout({ locale, mode, precision, is24HourFormat: is24Hour }),\n    [locale, mode, precision, is24Hour]\n  )\n  const editableTypes = useMemo(() => editableTypesOf(layout), [layout])\n\n  const [editState, setEditState] = useState<SegmentEditState>(() => ({\n    values: value ? decomposeDate(value, layout, is24Hour) : {},\n    buffer: null,\n  }))\n  const [focusedType, setFocusedType] = useState<EditableSegmentType | null>(null)\n\n  const editStateRef = useRef(editState)\n  editStateRef.current = editState\n\n  const segmentRefs = useRef(new Map<EditableSegmentType, HTMLSpanElement>())\n  const segmentRefCallbacks = useRef(new Map<EditableSegmentType, (element: HTMLSpanElement | null) => void>())\n  const registerSegment = (type: EditableSegmentType) => {\n    const existing = segmentRefCallbacks.current.get(type)\n    if (existing) {\n      return existing\n    }\n    const callback = (element: HTMLSpanElement | null) => {\n      if (element) {\n        segmentRefs.current.set(type, element)\n      } else {\n        segmentRefs.current.delete(type)\n      }\n    }\n    segmentRefCallbacks.current.set(type, callback)\n    return callback\n  }\n\n  useEffect(() => {\n    if (editStateRef.current.buffer) {\n      return\n    }\n    const shown = composeDate(editStateRef.current.values, layout, mode, is24Hour, value ?? undefined)\n    if ((shown?.getTime() ?? null) === (value?.getTime() ?? null)) {\n      return\n    }\n    setEditState({\n      values: value ? decomposeDate(value, layout, is24Hour) : {},\n      buffer: null,\n    })\n  }, [value, layout, mode, is24Hour])\n\n  const apply = (next: SegmentEditState) => {\n    setEditState(next)\n    if (next.buffer?.type === 'year') {\n      return\n    }\n    const composed = composeDate(next.values, layout, mode, is24Hour, value ?? undefined)\n    if (composed) {\n      setValue(composed)\n    } else if (isEmpty(next.values, layout) && value !== null) {\n      setValue(null)\n    }\n  }\n\n  const focusType = (type: EditableSegmentType) => {\n    setFocusedType(type)\n  }\n\n  useLayoutEffect(() => {\n    if (focusedType === null) {\n      return\n    }\n    const element = segmentRefs.current.get(focusedType)\n    if (element && document.activeElement !== element) {\n      element.focus()\n    }\n  }, [focusedType])\n\n  const neighbour = (type: EditableSegmentType, offset: number) => editableTypes[editableTypes.indexOf(type) + offset]\n\n  const onSegmentKeyDown = (event: KeyboardEvent<HTMLSpanElement>, type: EditableSegmentType) => {\n    if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n      event.preventDefault()\n      const target = neighbour(type, event.key === 'ArrowLeft' ? -1 : 1)\n      if (target) {\n        focusType(target)\n      }\n      return\n    }\n    if (event.key === 'Home' || event.key === 'End') {\n      event.preventDefault()\n      focusType(event.key === 'Home' ? editableTypes[0] : editableTypes[editableTypes.length - 1])\n      return\n    }\n    if (event.key === 'Tab') {\n      const target = neighbour(type, event.shiftKey ? -1 : 1)\n      if (target) {\n        event.preventDefault()\n        focusType(target)\n      }\n      return\n    }\n\n    if (readOnly) {\n      return\n    }\n\n    if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n      event.preventDefault()\n      apply(stepSegment(editState, type, event.key === 'ArrowUp' ? 1 : -1, is24Hour))\n      return\n    }\n    if (event.key === 'Backspace' || event.key === 'Delete') {\n      event.preventDefault()\n      const hasContent = editState.values[type] !== undefined || editState.buffer?.type === type\n      if (hasContent) {\n        apply(clearSegment(editState, type))\n      } else if (event.key === 'Backspace') {\n        const target = neighbour(type, -1)\n        if (target) {\n          focusType(target)\n        }\n      }\n      return\n    }\n    if (type === 'dayPeriod') {\n      if (event.key.toLowerCase() === 'a') {\n        event.preventDefault()\n        apply(setDayPeriod(editState, 0))\n      } else if (event.key.toLowerCase() === 'p') {\n        event.preventDefault()\n        apply(setDayPeriod(editState, 1))\n      }\n      return\n    }\n    if (/^[0-9]$/.test(event.key)) {\n      event.preventDefault()\n      const result = typeDigit(editState, type, Number(event.key), is24Hour)\n      apply(result.state)\n      if (result.advance) {\n        const target = neighbour(type, 1)\n        if (target) {\n          focusType(target)\n        }\n      }\n      return\n    }\n    if (advanceKeys.includes(event.key)) {\n      event.preventDefault()\n      const target = neighbour(type, 1)\n      if (target) {\n        focusType(target)\n      }\n    }\n  }\n\n  const onFieldBlur = (event: FocusEvent<HTMLDivElement>) => {\n    props.onBlur?.(event)\n    const field = event.currentTarget\n    const nextFocus = event.relatedTarget\n    if (nextFocus instanceof Node && field.contains(nextFocus)) {\n      return\n    }\n    requestAnimationFrame(() => {\n      if (field.contains(document.activeElement)) {\n        return\n      }\n      setFocusedType(null)\n      const composed = composeDate(editStateRef.current.values, layout, mode, is24Hour, value ?? undefined)\n      if (composed) {\n        setEditState({ values: decomposeDate(composed, layout, is24Hour), buffer: null })\n        if (composed.getTime() !== (value?.getTime() ?? null)) {\n          setValue(composed)\n        }\n        onEditComplete?.(composed)\n      } else {\n        onEditComplete?.(value ?? null)\n      }\n    })\n  }\n\n  const activeType = focusedType ?? editableTypes[0]\n\n  return (\n    <div\n      {...props}\n      ref={forwardedRef}\n\n      role=\"group\"\n\n      onBlur={onFieldBlur}\n      onMouseDown={(event) => {\n        props.onMouseDown?.(event)\n        if (event.target === event.currentTarget && !disabled) {\n          event.preventDefault()\n          focusType(activeType)\n        }\n      }}\n\n      className={clsx(className)}\n      data-name=\"date-time-field\"\n      {...PropsUtil.dataAttributes.interactionStates({ disabled, readOnly, invalid, required })}\n      {...PropsUtil.aria.interactionStates({ disabled, readOnly, invalid, required })}\n    >\n      {layout.map((segment, index) => {\n        if (segment.kind === 'literal') {\n          return (\n            <span key={`literal-${index}`} aria-hidden={true} data-name=\"date-time-separator\">\n              {segment.text}\n            </span>\n          )\n        }\n\n        const type = segment.type\n        const bounds = segmentBounds(type, editState.values, is24Hour)\n        const numericValue = editState.values[type]\n        const display = formatSegment(type, editState.values, editState.buffer, locale)\n\n        return (\n          <span\n            key={type}\n            ref={registerSegment(type)}\n\n            role=\"spinbutton\"\n            tabIndex={disabled ? -1 : (type === activeType ? 0 : -1)}\n\n            onKeyDown={(event) => onSegmentKeyDown(event, type)}\n            onFocus={() => {\n              setFocusedType(type)\n              if (editState.buffer && editState.buffer.type !== type) {\n                setEditState(state => ({ ...state, buffer: null }))\n              }\n            }}\n\n            data-name=\"date-time-segment\"\n            data-placeholder={PropsUtil.dataAttributes.bool(numericValue === undefined && editState.buffer?.type !== type)}\n            aria-label={type === 'dayPeriod' ? translation('dayPeriod') : translation(timeUnitTranslationKey[type], { count: 1 })}\n            aria-valuemin={type === 'dayPeriod' ? undefined : bounds.min}\n            aria-valuemax={type === 'dayPeriod' ? undefined : bounds.max}\n            aria-valuenow={numericValue}\n            aria-valuetext={display}\n          >\n            {display}\n          </span>\n        )\n      })}\n    </div>\n  )\n})\n","import type { DateTimeFormat, DateTimePrecision } from '@/src/utils/date'\nimport { DateUtils } from '@/src/utils/date'\n\nexport const editableSegmentTypes = [\n  'day',\n  'month',\n  'year',\n  'hour',\n  'minute',\n  'second',\n  'millisecond',\n  'dayPeriod',\n] as const\n\nexport type EditableSegmentType = typeof editableSegmentTypes[number]\n\nexport type DateTimeSegment =\n  | { kind: 'literal', text: string }\n  | { kind: 'editable', type: EditableSegmentType }\n\nexport type SegmentValues = Partial<Record<EditableSegmentType, number>>\n\nexport type SegmentBuffer = {\n  type: EditableSegmentType,\n  text: string,\n}\n\nexport type SegmentEditState = {\n  values: SegmentValues,\n  buffer: SegmentBuffer | null,\n}\n\nexport type SegmentBounds = {\n  min: number,\n  max: number,\n}\n\nexport type SegmentLayoutOptions = {\n  locale: string,\n  mode: DateTimeFormat,\n  precision: DateTimePrecision,\n  is24HourFormat: boolean,\n}\n\nconst dayPeriodPm = 1\nconst dayPeriodAm = 0\n\nconst digitLength: Record<EditableSegmentType, number> = {\n  day: 2,\n  month: 2,\n  year: 4,\n  hour: 2,\n  minute: 2,\n  second: 2,\n  millisecond: 3,\n  dayPeriod: 0,\n}\n\nexport const timeUnitTranslationKey = {\n  day: 'time.day',\n  month: 'time.month',\n  year: 'time.year',\n  hour: 'time.hour',\n  minute: 'time.minute',\n  second: 'time.second',\n  millisecond: 'time.millisecond',\n} as const satisfies Record<Exclude<EditableSegmentType, 'dayPeriod'>, string>\n\nconst referenceDate = new Date(2024, 0, 1, 13, 5, 9, 123)\n\nconst maxDayFor = (values: SegmentValues): number => {\n  if (values.month === undefined) {\n    return 31\n  }\n  return DateUtils.daysInMonth(values.year ?? 2000, values.month - 1)\n}\n\nexport const segmentBounds = (type: EditableSegmentType, values: SegmentValues, is24HourFormat: boolean): SegmentBounds => {\n  switch (type) {\n  case 'day':\n    return { min: 1, max: maxDayFor(values) }\n  case 'month':\n    return { min: 1, max: 12 }\n  case 'year':\n    return { min: 1, max: 9999 }\n  case 'hour':\n    return is24HourFormat ? { min: 0, max: 23 } : { min: 1, max: 12 }\n  case 'minute':\n  case 'second':\n    return { min: 0, max: 59 }\n  case 'millisecond':\n    return { min: 0, max: 999 }\n  case 'dayPeriod':\n    return { min: dayPeriodAm, max: dayPeriodPm }\n  }\n}\n\nconst segmentsFromParts = (parts: Intl.DateTimeFormatPart[]): DateTimeSegment[] => {\n  return parts.map((part): DateTimeSegment => {\n    switch (part.type) {\n    case 'day':\n      return { kind: 'editable', type: 'day' }\n    case 'month':\n      return { kind: 'editable', type: 'month' }\n    case 'year':\n      return { kind: 'editable', type: 'year' }\n    case 'hour':\n      return { kind: 'editable', type: 'hour' }\n    case 'minute':\n      return { kind: 'editable', type: 'minute' }\n    case 'second':\n      return { kind: 'editable', type: 'second' }\n    case 'dayPeriod':\n      return { kind: 'editable', type: 'dayPeriod' }\n    default:\n      return { kind: 'literal', text: part.value }\n    }\n  })\n}\n\nconst buildDateSegments = (locale: string): DateTimeSegment[] => {\n  const parts = new Intl.DateTimeFormat(locale, {\n    day: '2-digit',\n    month: '2-digit',\n    year: 'numeric',\n  }).formatToParts(referenceDate)\n  return segmentsFromParts(parts)\n}\n\nconst buildTimeSegments = (locale: string, precision: DateTimePrecision, is24HourFormat: boolean): DateTimeSegment[] => {\n  const options: Intl.DateTimeFormatOptions = {\n    hour: '2-digit',\n    minute: '2-digit',\n    hourCycle: is24HourFormat ? 'h23' : 'h12',\n  }\n  if (precision === 'second' || precision === 'millisecond') {\n    options.second = '2-digit'\n  }\n  const parts = new Intl.DateTimeFormat(locale, options).formatToParts(referenceDate)\n  const segments = segmentsFromParts(parts)\n  if (precision !== 'millisecond') {\n    return segments\n  }\n  return segments.flatMap((segment): DateTimeSegment[] => {\n    if (segment.kind === 'editable' && segment.type === 'second') {\n      return [segment, { kind: 'literal', text: '.' }, { kind: 'editable', type: 'millisecond' }]\n    }\n    return [segment]\n  })\n}\n\nexport const buildSegmentLayout = ({ locale, mode, precision, is24HourFormat }: SegmentLayoutOptions): DateTimeSegment[] => {\n  switch (mode) {\n  case 'date':\n    return buildDateSegments(locale)\n  case 'time':\n    return buildTimeSegments(locale, precision, is24HourFormat)\n  case 'dateTime':\n    return [\n      ...buildDateSegments(locale),\n      { kind: 'literal', text: ' - ' },\n      ...buildTimeSegments(locale, precision, is24HourFormat),\n    ]\n  }\n}\n\nexport const editableTypesOf = (layout: DateTimeSegment[]): EditableSegmentType[] => {\n  return layout.flatMap(segment => segment.kind === 'editable' ? [segment.type] : [])\n}\n\nconst requiredTypesOf = (layout: DateTimeSegment[]): EditableSegmentType[] => {\n  return editableTypesOf(layout).filter(type => type !== 'dayPeriod')\n}\n\nexport const isComplete = (values: SegmentValues, layout: DateTimeSegment[]): boolean => {\n  return requiredTypesOf(layout).every(type => values[type] !== undefined)\n}\n\nexport const isEmpty = (values: SegmentValues, layout: DateTimeSegment[]): boolean => {\n  return requiredTypesOf(layout).every(type => values[type] === undefined)\n}\n\nconst readSegment = (date: Date, type: EditableSegmentType, is24HourFormat: boolean): number => {\n  switch (type) {\n  case 'day':\n    return date.getDate()\n  case 'month':\n    return date.getMonth() + 1\n  case 'year':\n    return date.getFullYear()\n  case 'hour':\n    return is24HourFormat ? date.getHours() : (date.getHours() % 12 || 12)\n  case 'minute':\n    return date.getMinutes()\n  case 'second':\n    return date.getSeconds()\n  case 'millisecond':\n    return date.getMilliseconds()\n  case 'dayPeriod':\n    return date.getHours() >= 12 ? dayPeriodPm : dayPeriodAm\n  }\n}\n\nexport const decomposeDate = (date: Date, layout: DateTimeSegment[], is24HourFormat: boolean): SegmentValues => {\n  const values: SegmentValues = {}\n  for (const type of editableTypesOf(layout)) {\n    values[type] = readSegment(date, type, is24HourFormat)\n  }\n  return values\n}\n\nexport const composeDate = (\n  values: SegmentValues,\n  layout: DateTimeSegment[],\n  mode: DateTimeFormat,\n  is24HourFormat: boolean,\n  reference: Date = new Date()\n): Date | null => {\n  if (!isComplete(values, layout)) {\n    return null\n  }\n\n  const hasDate = mode === 'date' || mode === 'dateTime'\n  const hasTime = mode === 'time' || mode === 'dateTime'\n\n  const year = hasDate ? values.year! : reference.getFullYear()\n  const monthIndex = (hasDate ? values.month! : reference.getMonth() + 1) - 1\n  const day = Math.min(hasDate ? values.day! : reference.getDate(), DateUtils.daysInMonth(year, monthIndex))\n\n  let hour = 0\n  if (hasTime) {\n    hour = is24HourFormat\n      ? values.hour!\n      : (values.hour! % 12) + (values.dayPeriod === dayPeriodPm ? 12 : 0)\n  }\n  const minute = hasTime ? values.minute! : 0\n  const second = hasTime ? values.second ?? 0 : 0\n  const millisecond = hasTime ? values.millisecond ?? 0 : 0\n\n  return new Date(year, monthIndex, day, hour, minute, second, millisecond)\n}\n\nconst setSegment = (values: SegmentValues, type: EditableSegmentType, value: number | undefined): SegmentValues => {\n  const next: SegmentValues = { ...values }\n  if (value === undefined) {\n    delete next[type]\n  } else {\n    next[type] = value\n  }\n  if (next.day !== undefined) {\n    const maxDay = maxDayFor(next)\n    if (next.day > maxDay) {\n      next.day = maxDay\n    }\n  }\n  return next\n}\n\nexport const typeDigit = (\n  state: SegmentEditState,\n  type: EditableSegmentType,\n  digit: number,\n  is24HourFormat: boolean\n): { state: SegmentEditState, advance: boolean } => {\n  const { min, max } = segmentBounds(type, state.values, is24HourFormat)\n  const continuing = state.buffer?.type === type\n\n  let text = (continuing ? state.buffer!.text : '') + String(digit)\n  if (Number(text) > max) {\n    text = String(digit)\n  }\n  const numeric = Number(text)\n\n  const values = setSegment(state.values, type, numeric >= min ? numeric : undefined)\n  const advance = text.length >= digitLength[type] || numeric * 10 > max\n\n  return {\n    state: { values, buffer: advance ? null : { type, text } },\n    advance,\n  }\n}\n\nexport const stepSegment = (\n  state: SegmentEditState,\n  type: EditableSegmentType,\n  delta: number,\n  is24HourFormat: boolean\n): SegmentEditState => {\n  const { min, max } = segmentBounds(type, state.values, is24HourFormat)\n  const current = state.values[type]\n\n  let next: number\n  if (current === undefined) {\n    next = delta > 0 ? min : max\n  } else {\n    next = current + delta\n    if (next > max) {\n      next = min\n    } else if (next < min) {\n      next = max\n    }\n  }\n\n  return { values: setSegment(state.values, type, next), buffer: null }\n}\n\nexport const clearSegment = (state: SegmentEditState, type: EditableSegmentType): SegmentEditState => {\n  return { values: setSegment(state.values, type, undefined), buffer: null }\n}\n\nexport const setDayPeriod = (state: SegmentEditState, period: number): SegmentEditState => {\n  return { values: setSegment(state.values, 'dayPeriod', period), buffer: null }\n}\n\nconst formatDayPeriod = (value: number, locale: string): string => {\n  const part = new Intl.DateTimeFormat(locale, { hour: 'numeric', hourCycle: 'h12' })\n    .formatToParts(new Date(2020, 0, 1, value === dayPeriodPm ? 13 : 1))\n    .find(entry => entry.type === 'dayPeriod')\n  return part?.value ?? (value === dayPeriodPm ? 'PM' : 'AM')\n}\n\nexport const segmentPlaceholder = (type: EditableSegmentType, locale: string): string => {\n  const german = locale.toLowerCase().startsWith('de')\n  switch (type) {\n  case 'day':\n    return german ? 'TT' : 'DD'\n  case 'month':\n    return 'MM'\n  case 'year':\n    return german ? 'JJJJ' : 'YYYY'\n  case 'hour':\n    return 'hh'\n  case 'minute':\n    return 'mm'\n  case 'second':\n    return 'ss'\n  case 'millisecond':\n    return 'sss'\n  case 'dayPeriod':\n    return formatDayPeriod(dayPeriodAm, locale)\n  }\n}\n\nexport const formatSegment = (\n  type: EditableSegmentType,\n  values: SegmentValues,\n  buffer: SegmentBuffer | null,\n  locale: string\n): string => {\n  if (buffer?.type === type) {\n    return buffer.text\n  }\n  const value = values[type]\n  if (value === undefined) {\n    return segmentPlaceholder(type, locale)\n  }\n  if (type === 'dayPeriod') {\n    return formatDayPeriod(value, locale)\n  }\n  return String(value).padStart(digitLength[type], '0')\n}\n","import type { ForwardedRef } from 'react'\nimport { forwardRef } from 'react'\nimport type { MultiSelectRootProps } from './MultiSelectRoot'\nimport { MultiSelectRoot } from './MultiSelectRoot'\nimport type { MultiSelectButtonProps } from './MultiSelectButton'\nimport { MultiSelectButton } from './MultiSelectButton'\nimport type { MultiSelectContentProps } from './MultiSelectContent'\nimport { MultiSelectContent } from './MultiSelectContent'\n\nexport interface MultiSelectProps<T = string> extends MultiSelectRootProps<T> {\n  contentPanelProps?: MultiSelectContentProps,\n  buttonProps?: MultiSelectButtonProps<T>,\n}\n\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps<unknown>>(\n  function MultiSelect<T = string>({ children, contentPanelProps, buttonProps, ...props }: MultiSelectProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n    return (\n      <MultiSelectRoot<T> {...props}>\n        <MultiSelectButton ref={ref} {...buttonProps} />\n        <MultiSelectContent {...contentPanelProps}>{children}</MultiSelectContent>\n      </MultiSelectRoot>\n    )\n  }\n) as <T = string>(props: MultiSelectProps<T> & { ref?: React.Ref<HTMLDivElement> }) => React.ReactElement\n","import type { ReactNode, RefObject } from 'react'\nimport { useCallback, useEffect, useId, useMemo, useState } from 'react'\nimport { MultiSelectContext } from './MultiSelectContext'\nimport type { MultiSelectContextType, MultiSelectIconAppearance, MultiSelectOptionType } from './MultiSelectContext'\nimport { useMultiSelect } from './useMultiSelect'\nimport { DOMUtils } from '@/src/utils/dom'\nimport type { FormFieldDataHandling } from '@/src/components/form/FormField'\nimport type { FormFieldInteractionStates } from '@/src/components/form/FieldLayout'\nimport { PopUpContext } from '@/src/components/layout/popup/PopUpContext'\n\nexport interface MultiSelectIds {\n  trigger: string,\n  content: string,\n  listbox: string,\n  searchInput: string,\n}\n\nexport interface MultiSelectRootProps<T> extends Partial<FormFieldDataHandling<T[]>>, Partial<FormFieldInteractionStates> {\n  initialValue?: T[],\n  compareFunction?: (a: T, b: T) => boolean,\n  initialIsOpen?: boolean,\n  onClose?: () => void,\n  showSearch?: boolean,\n  iconAppearance?: MultiSelectIconAppearance,\n  children: ReactNode,\n}\n\nexport function MultiSelectRoot<T>({\n  children,\n  value,\n  onValueChange,\n  onEditComplete,\n  initialValue,\n  compareFunction,\n  initialIsOpen = false,\n  onClose,\n  showSearch = true,\n  iconAppearance = 'right',\n  invalid = false,\n  disabled = false,\n  readOnly = false,\n  required = false,\n}: MultiSelectRootProps<T>) {\n  const [triggerRef, setTriggerRef] = useState<RefObject<HTMLElement> | null>(null)\n  const [options, setOptions] = useState<MultiSelectOptionType<T>[]>([])\n  const generatedId = useId()\n  const [ids, setIds] = useState<MultiSelectIds>({\n    trigger: 'multi-select-' + generatedId,\n    content: 'multi-select-content-' + generatedId,\n    listbox: 'multi-select-listbox-' + generatedId,\n    searchInput: 'multi-select-search-' + generatedId,\n  })\n\n  const registerOption = useCallback((item: MultiSelectOptionType<T>) => {\n    setOptions((prev) => {\n      const next = prev.filter((o) => o.id !== item.id)\n      next.push(item)\n      next.sort((a, b) =>\n        DOMUtils.compareDocumentPosition(a.ref.current, b.ref.current))\n      return next\n    })\n    return () => setOptions((prev) => prev.filter((o) => o.id !== item.id))\n  }, [])\n\n  const registerTrigger = useCallback((ref: RefObject<HTMLElement>) => {\n    setTriggerRef(ref)\n    return () => setTriggerRef(null)\n  }, [])\n\n  const compare = useMemo(() => compareFunction ?? Object.is, [compareFunction])\n\n  const idToOptionMap = useMemo(\n    () =>\n      options.reduce(\n        (acc, o) => {\n          acc[o.id] = o\n          return acc\n        },\n        {} as Record<string, MultiSelectOptionType<T>>\n      ),\n    [options]\n  )\n\n  const mappedValueIds = useMemo(() => {\n    if (value == null) return undefined\n    return value\n      .map((v) => options.find((o) => compare(o.value, v))?.id)\n      .filter((id) => id !== undefined)\n  }, [options, value, compare])\n\n  const mappedInitialValueIds = useMemo(() => {\n    if (initialValue == null) return []\n    return initialValue\n      .map((v) => options.find((o) => compare(o.value, v))?.id)\n      .filter((id) => id !== undefined)\n  }, [options, initialValue, compare])\n\n  const onValueChangeStable = useCallback(\n    (ids: string[]) => {\n      const values = ids\n        .map((id) => idToOptionMap[id]?.value)\n        .filter((v): v is T => v != null)\n      onValueChange?.(values)\n    },\n    [idToOptionMap, onValueChange]\n  )\n\n  const onEditCompleteStable = useCallback(\n    (ids: string[]) => {\n      const values = ids\n        .map((id) => idToOptionMap[id]?.value)\n        .filter((v): v is T => v != null)\n      onEditComplete?.(values)\n    },\n    [idToOptionMap, onEditComplete]\n  )\n\n  const state = useMultiSelect({\n    options: options.map((o) => ({ id: o.id, label: o.label, disabled: o.disabled })),\n    value: mappedValueIds,\n    onValueChange: onValueChangeStable,\n    onEditComplete: onEditCompleteStable,\n    initialValue: mappedInitialValueIds,\n    initialIsOpen,\n    onClose,\n  })\n  const { setSearchQuery } = state\n\n  useEffect(() => {\n    if (showSearch === false) {\n      setSearchQuery('')\n    }\n  }, [showSearch, setSearchQuery])\n\n  const contextValue = useMemo((): MultiSelectContextType<T> => {\n    const valueT = state.value\n      .map((id) => idToOptionMap[id]?.value)\n      .filter((v): v is T => v != null)\n    return {\n      invalid,\n      disabled,\n      readOnly,\n      required,\n      selectedIds: state.value,\n      highlightedId: state.highlightedId,\n      isOpen: state.isOpen,\n      options,\n      visibleOptionIds: state.visibleOptionIds,\n      idToOptionMap,\n      value: valueT,\n      registerOption,\n      toggleSelection: state.toggleSelection,\n      highlightFirst: state.highlightFirst,\n      highlightLast: state.highlightLast,\n      highlightNext: state.highlightNext,\n      highlightPrevious: state.highlightPrevious,\n      highlightItem: state.highlightItem,\n      handleTypeaheadKey: state.handleTypeaheadKey,\n      setIsOpen: state.setIsOpen,\n      toggleIsOpen: state.toggleOpen,\n      config: {\n        iconAppearance,\n        ids,\n        setIds,\n      },\n      layout: {\n        triggerRef,\n        registerTrigger,\n      },\n      search: {\n        hasSearch: showSearch,\n        searchQuery: state.searchQuery,\n        setSearchQuery: state.setSearchQuery,\n      },\n    }\n  }, [\n    invalid,\n    disabled,\n    readOnly,\n    required,\n    state,\n    options,\n    idToOptionMap,\n    registerOption,\n    iconAppearance,\n    ids,\n    triggerRef,\n    registerTrigger,\n    showSearch,\n  ])\n\n  return (\n    <MultiSelectContext.Provider value={contextValue as MultiSelectContextType<unknown>}>\n      <PopUpContext.Provider\n        value={{\n          isOpen: state.isOpen,\n          setIsOpen: state.setIsOpen,\n          popUpId: ids.content,\n          triggerId: ids.trigger,\n          triggerRef,\n          setTriggerRef,\n        }}\n      >\n        {children}\n      </PopUpContext.Provider>\n    </MultiSelectContext.Provider>\n  )\n}\n","import type { Dispatch, ReactNode, RefObject, SetStateAction } from 'react'\nimport { createContext, useContext } from 'react'\nimport type { FormFieldInteractionStates } from '@/src/components/form/FieldLayout'\nimport type { UseMultiSelectFirstHighlightBehavior } from './useMultiSelect'\n\nexport interface MultiSelectOptionType<T = string> {\n  id: string,\n  value: T,\n  label?: string,\n  display?: ReactNode,\n  disabled?: boolean,\n  ref: RefObject<HTMLElement | null>,\n}\n\nexport interface MultiSelectContextIds {\n  trigger: string,\n  content: string,\n  listbox: string,\n  searchInput: string,\n}\n\nexport interface MultiSelectContextState<T> extends FormFieldInteractionStates {\n  value: T[],\n  options: ReadonlyArray<MultiSelectOptionType<T>>,\n  selectedIds: string[],\n  highlightedId: string | null,\n  isOpen: boolean,\n}\n\nexport interface MultiSelectContextComputedState<T> {\n  visibleOptionIds: ReadonlyArray<string>,\n  idToOptionMap: Record<string, MultiSelectOptionType<T>>,\n}\n\nexport interface MultiSelectContextActions<T> {\n  registerOption(option: MultiSelectOptionType<T>): () => void,\n  toggleSelection(id: string, isSelected?: boolean): void,\n  highlightFirst(): void,\n  highlightLast(): void,\n  highlightNext(): void,\n  highlightPrevious(): void,\n  highlightItem(id: string): void,\n  handleTypeaheadKey(key: string): void,\n  setIsOpen(open: boolean, behavior?: UseMultiSelectFirstHighlightBehavior): void,\n  toggleIsOpen(behavior?: UseMultiSelectFirstHighlightBehavior): void,\n}\n\nexport interface MultiSelectContextLayout {\n  triggerRef: RefObject<HTMLElement | null>,\n  registerTrigger(element: RefObject<HTMLElement | null>): () => void,\n}\n\nexport interface MultiSelectContextSearch {\n  hasSearch: boolean,\n  searchQuery?: string,\n  setSearchQuery(query: string): void,\n}\n\nexport type MultiSelectIconAppearance = 'left' | 'right' | 'none';\n\nexport interface MultiSelectContextConfig {\n  iconAppearance: MultiSelectIconAppearance,\n  ids: MultiSelectContextIds,\n  setIds: Dispatch<SetStateAction<MultiSelectContextIds>>,\n}\n\nexport interface MultiSelectContextType<T> extends MultiSelectContextActions<T>, MultiSelectContextState<T>, MultiSelectContextComputedState<T> {\n  config: MultiSelectContextConfig,\n  layout: MultiSelectContextLayout,\n  search: MultiSelectContextSearch,\n}\n\nconst MultiSelectContext = createContext<MultiSelectContextType<unknown> | null>(null)\n\nexport function useMultiSelectContext<T>(): MultiSelectContextType<T> {\n  const ctx = useContext(MultiSelectContext)\n  if (!ctx) throw new Error('useMultiSelectContext must be used within MultiSelectRoot')\n  return ctx as MultiSelectContextType<T>\n}\n\nexport { MultiSelectContext }\n","import {\n  useCallback,\n  useEffect,\n  useMemo,\n  useState\n} from 'react'\nimport { useMultiSelection } from '@/src/hooks/useMultiSelection'\nimport { useListNavigation } from '@/src/hooks/useListNavigation'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport { useSearch } from '@/src/hooks/useSearch'\nimport { useTypeAheadSearch } from '@/src/hooks/useTypeAheadSearch'\n\nexport interface UseMultiSelectOption {\n  id: string,\n  label?: string,\n  disabled?: boolean,\n}\n\nexport interface UseMultiSelectOptions {\n  options: ReadonlyArray<UseMultiSelectOption>,\n  value?: ReadonlyArray<string>,\n  onValueChange?: (value: string[]) => void,\n  onEditComplete?: (value: string[]) => void,\n  initialValue?: string[],\n  initialIsOpen?: boolean,\n  onClose?: () => void,\n  typeAheadResetMs?: number,\n}\n\nexport type UseMultiSelectFirstHighlightBehavior = 'first' | 'last';\n\nexport interface UseMultiSelectState {\n  value: string[],\n  highlightedId: string | null,\n  isOpen: boolean,\n  searchQuery: string,\n  options: ReadonlyArray<UseMultiSelectOption>,\n}\n\nexport interface UseMultiSelectComputedState {\n  visibleOptionIds: ReadonlyArray<string>,\n}\n\nexport interface UseMultiSelectActions {\n  setIsOpen: (isOpen: boolean, behavior?: UseMultiSelectFirstHighlightBehavior) => void,\n  toggleOpen: (behavior?: UseMultiSelectFirstHighlightBehavior) => void,\n  setSearchQuery: (query: string) => void,\n  highlightFirst: () => void,\n  highlightLast: () => void,\n  highlightNext: () => void,\n  highlightPrevious: () => void,\n  highlightItem: (id: string) => void,\n  toggleSelection: (id: string, isSelected?: boolean) => void,\n  setSelection: (ids: string[]) => void,\n  isSelected: (id: string) => boolean,\n  handleTypeaheadKey: (key: string) => void,\n}\n\nexport interface UseMultiSelectReturn extends UseMultiSelectState, UseMultiSelectComputedState, UseMultiSelectActions {}\n\nexport function useMultiSelect({\n  options,\n  value: controlledValue,\n  onValueChange,\n  onEditComplete,\n  initialValue = [],\n  onClose,\n  initialIsOpen = false,\n  typeAheadResetMs = 500,\n}: UseMultiSelectOptions): UseMultiSelectReturn {\n  const [isOpen, setIsOpen] = useState(initialIsOpen)\n  const [searchQuery, setSearchQuery] = useState('')\n\n  const selectionOptions = useMemo(\n    () => options.map((o) => ({ id: o.id, disabled: o.disabled })),\n    [options]\n  )\n\n  const { selection, toggleSelection, setSelection, isSelected } = useMultiSelection({\n    options: selectionOptions,\n    value: controlledValue,\n    onSelectionChange: (ids) => onValueChange?.(Array.from(ids)),\n    initialSelection: initialValue ?? [],\n    isControlled: controlledValue !== undefined,\n  })\n\n  const editCompleteStable = useEventCallbackStabilizer(onEditComplete)\n  const onCloseStable = useEventCallbackStabilizer(onClose)\n\n  const { searchResult: visibleOptions } = useSearch({\n    items: options,\n    searchQuery,\n    toTags: useCallback((o: UseMultiSelectOption) => [o.label ?? ''], []),\n  })\n\n  const visibleOptionIds = useMemo(\n    () => visibleOptions.map((o) => o.id),\n    [visibleOptions]\n  )\n\n  const enabledOptions = useMemo(\n    () => visibleOptions.filter((o) => !o.disabled),\n    [visibleOptions]\n  )\n\n  const listNav = useListNavigation({\n    options: enabledOptions.map((o) => o.id),\n    initialValue: selection[0] ?? null,\n  })\n  const { highlight: listNavHighlight } = listNav\n\n  const typeAhead = useTypeAheadSearch({\n    options: enabledOptions,\n    resetTimer: typeAheadResetMs,\n    toString: (o) => o.label ?? '',\n    onResultChange: useCallback(\n      (option: UseMultiSelectOption | null) => {\n        if (option) listNav.highlight(option.id)\n      },\n      [listNav]\n    ),\n  })\n  const { reset: typeAheadReset, addToTypeAhead } = typeAhead\n\n  useEffect(() => {\n    if (!isOpen) typeAheadReset()\n  }, [isOpen, typeAheadReset])\n\n  const highlightItem = useCallback((id: string) => {\n    if (!enabledOptions.some((o) => o.id === id)) return\n    listNavHighlight(id)\n  }, [enabledOptions, listNavHighlight])\n\n  const toggleSelectionValue = useCallback((id: string, newIsSelected?: boolean) => {\n    const next = newIsSelected ?? !isSelected(id)\n    if (next) {\n      toggleSelection(id)\n    } else {\n      setSelection(selection.filter((s) => s !== id))\n    }\n    highlightItem(id)\n  }, [toggleSelection, setSelection, highlightItem, isSelected, selection])\n\n  const setIsOpenWrapper = useCallback(\n    (open: boolean, behavior?: UseMultiSelectFirstHighlightBehavior) => {\n      setIsOpen(open)\n      behavior = behavior ?? 'first'\n      if (open) {\n        if (enabledOptions.length > 0) {\n          let selected: UseMultiSelectOption | undefined\n          if (behavior === 'first') {\n            selected = enabledOptions.find((o) => isSelected(o.id))\n            selected ??= enabledOptions[0]\n          } else if (behavior === 'last') {\n            selected = [...enabledOptions]\n              .reverse()\n              .find((o) => isSelected(o.id))\n            selected ??= enabledOptions[enabledOptions.length - 1]\n          }\n          if (selected) highlightItem(selected.id)\n        }\n      } else {\n        setSearchQuery('')\n        onCloseStable?.()\n        editCompleteStable?.(Array.from(selection))\n      }\n    },\n    [\n      selection, isSelected,\n      highlightItem,\n      onCloseStable,\n      editCompleteStable,\n      enabledOptions,\n    ]\n  )\n\n  const toggleOpenWrapper = useCallback(\n    (behavior?: UseMultiSelectFirstHighlightBehavior) => {\n      setIsOpenWrapper(!isOpen, behavior)\n    },\n    [isOpen, setIsOpenWrapper]\n  )\n\n  const state: UseMultiSelectState = useMemo(\n    () => ({\n      value: [...selection],\n      highlightedId: listNav.highlightedId,\n      isOpen,\n      searchQuery,\n      options,\n    }),\n    [\n      selection,\n      listNav.highlightedId,\n      isOpen,\n      searchQuery,\n      options,\n    ]\n  )\n\n  const computedState: UseMultiSelectComputedState = useMemo(\n    () => ({ visibleOptionIds }),\n    [visibleOptionIds]\n  )\n\n  const actions: UseMultiSelectActions = useMemo(\n    () => ({\n      setIsOpen: setIsOpenWrapper,\n      toggleOpen: toggleOpenWrapper,\n      setSearchQuery,\n      highlightFirst: listNav.first,\n      highlightLast: listNav.last,\n      highlightNext: listNav.next,\n      highlightPrevious: listNav.previous,\n      highlightItem,\n      toggleSelection: toggleSelectionValue,\n      setSelection: setSelection,\n      isSelected,\n      handleTypeaheadKey: addToTypeAhead,\n    }),\n    [\n      setIsOpenWrapper,\n      toggleOpenWrapper,\n      listNav.first,\n      listNav.last,\n      listNav.next,\n      listNav.previous,\n      highlightItem,\n      toggleSelectionValue,\n      setSelection,\n      isSelected,\n      addToTypeAhead,\n    ]\n  )\n\n  return useMemo(\n    (): UseMultiSelectReturn => ({\n      ...state,\n      ...computedState,\n      ...actions,\n    }),\n    [state, computedState, actions]\n  )\n}\n","import { useControlledState } from '@/src/hooks/useControlledState'\nimport { useCallback, useMemo } from 'react'\n\nexport interface UseMultiSelectionOption {\n  id: string,\n  disabled?: boolean,\n}\n\nexport interface UseMultiSelectionOptions {\n  options: ReadonlyArray<UseMultiSelectionOption>,\n  value?: ReadonlyArray<string>,\n  onSelectionChange?: (selection: ReadonlyArray<string>) => void,\n  initialSelection?: ReadonlyArray<string>,\n  isControlled?: boolean,\n}\n\nexport interface UseMultiSelectionReturn {\n  selection: ReadonlyArray<string>,\n  setSelection: (selection: ReadonlyArray<string>) => void,\n  toggleSelection: (id: string) => void,\n  isSelected: (id: string) => boolean,\n}\n\nexport function useMultiSelection({\n  options: optionsList,\n  value,\n  onSelectionChange,\n  initialSelection = [],\n  isControlled,\n}: UseMultiSelectionOptions): UseMultiSelectionReturn {\n  const [selection, setSelection] = useControlledState({\n    value,\n    onValueChange: onSelectionChange,\n    defaultValue: [...initialSelection],\n    isControlled,\n  })\n\n  const isSelected = useCallback((id: string) => selection.includes(id), [selection])\n\n  const toggleSelection = useCallback(\n    (id: string) => {\n      const option = optionsList.find((o) => o.id === id)\n      if (!option || option.disabled) return\n      setSelection((prev) =>\n        prev.includes(id) ? prev.filter((s) => s !== id) : [...prev, id])\n    },\n    [optionsList, setSelection]\n  )\n\n  const setSelectionValue = useCallback(\n    (next: ReadonlyArray<string>) => setSelection(Array.from(next)),\n    [setSelection]\n  )\n\n  return useMemo(\n    () => ({\n      selection,\n      setSelection: setSelectionValue,\n      toggleSelection,\n      isSelected,\n    }),\n    [selection, setSelectionValue, toggleSelection, isSelected]\n  )\n}\n","import type { ComponentPropsWithoutRef, ForwardedRef, ReactNode } from 'react'\nimport { forwardRef, useEffect, useRef } from 'react'\nimport { useMultiSelectContext } from './MultiSelectContext'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { ExpansionIcon } from '@/src/components/display-and-visualization/ExpansionIcon'\nimport { MultiSelectOptionDisplayContext } from './MultiSelectOption'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport interface MultiSelectButtonProps<T = string>\n  extends ComponentPropsWithoutRef<'div'> {\n  'placeholder'?: ReactNode,\n  'disabled'?: boolean,\n  'selectedDisplay'?: (values: T[]) => ReactNode,\n  'hideExpansionIcon'?: boolean,\n  'data-name'?: string,\n}\n\nexport const MultiSelectButton = forwardRef<\n  HTMLDivElement,\n  MultiSelectButtonProps<unknown>\n>(function MultiSelectButton<T>(\n  {\n    id,\n    placeholder,\n    disabled: disabledOverride,\n    selectedDisplay,\n    hideExpansionIcon = false,\n    ...props\n  }: MultiSelectButtonProps<T>,\n  ref: ForwardedRef<HTMLDivElement>\n) {\n  const translation = useHightideTranslation()\n  const context = useMultiSelectContext<T>()\n  const { config, layout } = context\n  const { setIds } = config\n  const { registerTrigger } = layout\n\n  useEffect(() => {\n    if (id) setIds((prev) => ({ ...prev, trigger: id }))\n  }, [id, setIds])\n\n  const innerRef = useRef<HTMLDivElement | null>(null)\n\n  useEffect(() => {\n    const unregister = registerTrigger(innerRef)\n    return () => unregister()\n  }, [registerTrigger])\n\n  const disabled = !!disabledOverride || !!context.disabled\n  const readOnly = !!context.readOnly\n  const invalid = context.invalid\n  const hasValue = context.value.length > 0\n  const hasInteractions = !readOnly && !disabled\n  const selectedOptions = context.selectedIds\n    .map((id) => context.idToOptionMap[id])\n    .filter(Boolean)\n\n  return (\n    <div\n      {...props}\n      ref={ReactRefsUtil.assingRefsBuilder([innerRef, ref])}\n      id={context.config.ids.trigger}\n      onClick={(event) => {\n        if (!hasInteractions) return\n        props.onClick?.(event)\n        context.toggleIsOpen()\n      }}\n      onKeyDown={(event) => {\n        props.onKeyDown?.(event)\n        if (!hasInteractions) return\n        switch (event.key) {\n        case 'Enter':\n        case ' ':\n          context.toggleIsOpen()\n          event.preventDefault()\n          event.stopPropagation()\n          break\n        case 'ArrowDown':\n          context.setIsOpen(true, 'first')\n          event.preventDefault()\n          event.stopPropagation()\n          break\n        case 'ArrowUp':\n          context.setIsOpen(true, 'last')\n          event.preventDefault()\n          event.stopPropagation()\n          break\n        }\n      }}\n      data-name={props['data-name'] ?? 'multi-select-button'}\n      data-value={hasValue ? '' : undefined}\n      data-disabled={disabled ? '' : undefined}\n      data-readonly={readOnly ? '' : undefined}\n      data-invalid={invalid ? '' : undefined}\n      tabIndex={disabled ? -1 : 0}\n      role=\"button\"\n      aria-invalid={invalid}\n      aria-disabled={disabled}\n      aria-readonly={readOnly}\n      aria-haspopup=\"dialog\"\n      aria-expanded={context.isOpen}\n      aria-controls={context.isOpen ? context.config.ids.content : undefined}\n    >\n      <MultiSelectOptionDisplayContext.Provider value=\"trigger\">\n        {hasValue\n          ? selectedDisplay?.(context.value) ?? (\n            <div className=\"flex flex-wrap gap-x-1 gap-y-2\">\n              {selectedOptions.map((opt, index) => (\n                <span key={opt.id}>\n                  {opt.display}\n                  {index < selectedOptions.length - 1 && <span>,</span>}\n                </span>\n              ))}\n            </div>\n          )\n          : placeholder ?? translation('clickToSelect')}\n      </MultiSelectOptionDisplayContext.Provider>\n      {!hideExpansionIcon && <ExpansionIcon isExpanded={context.isOpen} />}\n    </div>\n  )\n})\n","import clsx from 'clsx'\nimport { CheckIcon } from 'lucide-react'\nimport type { HTMLAttributes, ReactNode, RefObject } from 'react'\nimport { createContext, forwardRef, useContext, useEffect, useId, useRef } from 'react'\nimport type { MultiSelectIconAppearance } from './MultiSelectContext'\nimport { useMultiSelectContext } from './MultiSelectContext'\n\nexport type MultiSelectOptionDisplayLocation = 'trigger' | 'list';\n\nexport const MultiSelectOptionDisplayContext =\n  createContext<MultiSelectOptionDisplayLocation | null>(null)\n\nexport function useMultiSelectOptionDisplayLocation(): MultiSelectOptionDisplayLocation {\n  const context = useContext(MultiSelectOptionDisplayContext)\n  if (!context) {\n    throw new Error(\n      'useMultiSelectOptionDisplayLocation must be used within a MultiSelectOptionDisplayContext'\n    )\n  }\n  return context\n}\n\nexport interface MultiSelectOptionProps<T = string> extends HTMLAttributes<HTMLLIElement> {\n  value: T,\n  label: string,\n  disabled?: boolean,\n  iconAppearance?: MultiSelectIconAppearance,\n}\n\nexport const MultiSelectOption = forwardRef<\n  HTMLLIElement,\n  MultiSelectOptionProps<unknown>\n>(function MultiSelectOption<T = string>(\n  {\n    children,\n    label,\n    value,\n    disabled = false,\n    iconAppearance,\n    ...props\n  }: MultiSelectOptionProps<T>,\n  ref\n) {\n  const context = useMultiSelectContext<T>()\n  const { registerOption } = context\n  const itemRef = useRef<HTMLLIElement>(null)\n\n  const display: ReactNode = children ?? label\n  const iconAppearanceResolved = iconAppearance ?? context.config.iconAppearance\n\n  const generatedId = useId()\n  const optionId = props?.id ?? 'multi-select-option-' + generatedId\n\n  useEffect(() => {\n    return registerOption({\n      id: optionId,\n      value,\n      label,\n      display,\n      disabled: Boolean(disabled),\n      ref: itemRef as React.RefObject<HTMLElement>,\n    })\n  }, [optionId, value, label, disabled, registerOption, display])\n\n  const isHighlighted = context.highlightedId === optionId\n  const isSelected = context.selectedIds.includes(optionId)\n  const isVisible = context.visibleOptionIds.includes(optionId)\n\n  return (\n    <li\n      {...props}\n      ref={(node) => {\n        itemRef.current = node\n        if (typeof ref === 'function') ref(node)\n        else if (ref) (ref as RefObject<HTMLLIElement | null>).current = node\n      }}\n      id={optionId}\n      hidden={!isVisible}\n      role=\"option\"\n      aria-disabled={disabled}\n      aria-selected={isSelected}\n      aria-hidden={!isVisible}\n\n      data-name=\"multi-select-list-option\"\n      data-highlighted={isHighlighted ? '' : undefined}\n      data-selected={isSelected ? '' : undefined}\n      data-disabled={disabled ? '' : undefined}\n      data-visible={isVisible ? '' : undefined}\n\n      onClick={(event) => {\n        if (!disabled) {\n          context.toggleSelection(optionId)\n          props.onClick?.(event)\n        }\n      }}\n      onMouseEnter={(event) => {\n        if (!disabled) {\n          context.highlightItem(optionId)\n          props.onMouseEnter?.(event)\n        }\n      }}\n    >\n      {iconAppearanceResolved === 'left' && (\n        <CheckIcon\n          className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n          aria-hidden={true}\n        />\n      )}\n      <MultiSelectOptionDisplayContext.Provider value=\"list\">\n        {display}\n      </MultiSelectOptionDisplayContext.Provider>\n      {iconAppearanceResolved === 'right' && (\n        <CheckIcon\n          className={clsx('w-4 h-4', { 'opacity-0': !isSelected || disabled })}\n          aria-hidden={true}\n        />\n      )}\n    </li>\n  )\n})\n","import type { ComponentProps, ForwardedRef } from 'react'\nimport { forwardRef, useCallback, useEffect, useRef } from 'react'\nimport { useMultiSelectContext } from './MultiSelectContext'\nimport clsx from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { PopUp, type PopUpProps } from '@/src/components/layout/popup/PopUp'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport interface MultiSelectContentProps extends PopUpProps {\n  showSearch?: boolean,\n  searchInputProps?: Omit<ComponentProps<typeof Input>, 'value' | 'onValueChange'>,\n}\n\nexport const MultiSelectContent = forwardRef<\n  HTMLUListElement,\n  MultiSelectContentProps\n>(function MultiSelectContent<T>(\n  { id, options, showSearch: showSearchOverride, searchInputProps, ...props } : MultiSelectContentProps,\n  ref: ForwardedRef<HTMLUListElement>\n) {\n  const translation = useHightideTranslation()\n  const innerRef = useRef<HTMLUListElement>(null)\n  const searchInputRef = useRef<HTMLInputElement>(null)\n\n  const context = useMultiSelectContext<T>()\n  const { config, highlightNext, highlightPrevious, highlightFirst, highlightLast, highlightedId, handleTypeaheadKey, toggleSelection } = context\n  const { setIds } = config\n\n  useEffect(() => {\n    if (id) setIds((prev) => ({ ...prev, content: id }))\n  }, [id, setIds])\n\n  const showSearch = showSearchOverride ?? context.search.hasSearch\n  const listboxAriaLabel = showSearch ? translation('searchResults') : undefined\n\n  const keyHandler = useCallback(\n    (event: React.KeyboardEvent) => {\n      switch (event.key) {\n      case 'ArrowDown':\n        highlightNext()\n        event.preventDefault()\n        break\n      case 'ArrowUp':\n        highlightPrevious()\n        event.preventDefault()\n        break\n      case 'Home':\n        event.preventDefault()\n        highlightFirst()\n        break\n      case 'End':\n        event.preventDefault()\n        highlightLast()\n        break\n      case 'Enter':\n      case ' ':\n        if (showSearch && event.key === ' ') return\n        if (highlightedId) {\n          toggleSelection(highlightedId)\n          event.preventDefault()\n        }\n        break\n      default:\n        if (\n          !showSearch &&\n            !event.ctrlKey &&\n            !event.metaKey &&\n            !event.altKey &&\n            event.key.length === 1\n        ) {\n          handleTypeaheadKey(event.key)\n          event.preventDefault()\n        }\n        break\n      }\n    },\n    [showSearch, handleTypeaheadKey, toggleSelection, highlightedId, highlightNext, highlightPrevious, highlightFirst, highlightLast]\n  )\n\n  return (\n    <PopUp\n      {...props}\n      id={context.config.ids.content}\n      isOpen={context.isOpen}\n      anchor={context.layout.triggerRef}\n      options={options}\n      forceMount={true}\n      onClose={() => {\n        context.setIsOpen(false)\n        props.onClose?.()\n      }}\n      aria-labelledby={context.config.ids.trigger}\n      className={clsx('multi-select-content', props.className)}\n    >\n      {showSearch && (\n        <Input\n          {...searchInputProps}\n          ref={searchInputRef}\n          id={context.config.ids.searchInput}\n          value={context.search.searchQuery ?? ''}\n          onValueChange={context.search.setSearchQuery}\n          onKeyDown={keyHandler}\n          placeholder={searchInputProps?.placeholder ?? translation('filterOptions')}\n          role=\"combobox\"\n          aria-autocomplete=\"list\"\n          aria-expanded={context.isOpen}\n          aria-controls={context.config.ids.listbox}\n          aria-activedescendant={\n            context.highlightedId ? context.highlightedId : undefined\n          }\n          aria-label={searchInputProps?.['aria-label'] ?? translation('filterOptions')}\n          className={clsx('mx-2 mt-2 shrink-0', searchInputProps?.className)}\n        />\n      )}\n      <ul\n        ref={ReactRefsUtil.assingRefsBuilder([innerRef, ref])}\n        id={context.config.ids.listbox}\n        onKeyDown={showSearch ? undefined : keyHandler}\n        role=\"listbox\"\n        data-name=\"multi-select-list\"\n        aria-multiselectable={true}\n        aria-orientation=\"vertical\"\n        aria-label={listboxAriaLabel}\n        tabIndex={showSearch ? undefined : 0}\n        className={clsx('flex-col-1 p-2 overflow-auto')}\n      >\n        {props.children}\n        <Visibility isVisible={showSearch}>\n          <li\n            role=\"option\"\n            aria-selected={false}\n            aria-disabled={true}\n            aria-live=\"polite\"\n            aria-atomic={true}\n            data-name=\"multi-select-list-status\"\n            className={clsx({\n              'sr-only': context.visibleOptionIds.length > 0,\n            })}\n          >\n            {translation('nResultsFound', {\n              count: context.visibleOptionIds.length,\n            })}\n          </li>\n        </Visibility>\n      </ul>\n    </PopUp>\n  )\n})\n","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { FilterOperator } from '@/src/components/user-interaction/data/FilterOperator'\nimport { FilterOperatorUtils } from '@/src/components/user-interaction/data/FilterOperator'\n\nexport type FilterOperatorLabelProps = {\n    operator: FilterOperator,\n  }\n\nexport const FilterOperatorLabel = ({ operator }: FilterOperatorLabelProps) => {\n  const translation = useHightideTranslation()\n  const { icon, translationKey } = FilterOperatorUtils.getInfo(operator)\n  const label = typeof translationKey === 'string' ? translation(translationKey) : translationKey\n\n  return (\n    <div className=\"flex-row-1 items-center gap-2\">\n      {icon}\n      {label}\n    </div>\n  )\n}","import { Binary, Calendar, CalendarClock, Check, Database, Tag, Tags, TextIcon } from 'lucide-react'\nimport type { ReactNode } from 'react'\n\nconst dataTypes = [\n  'text',\n  'number',\n  'date',\n  'dateTime',\n  'boolean',\n  'singleTag',\n  'multiTags',\n  'unknownType',\n] as const\nexport type DataType = (typeof dataTypes)[number]\n\nexport interface DataValue {\n  textValue?: string,\n  numberValue?: number,\n  booleanValue?: boolean,\n  dateValue?: Date,\n  singleSelectValue?: string,\n  multiSelectValue?: string[],\n}\n\nconst getDefaultValue = (type: DataType, selectOptions?: string[]): DataValue => {\n  switch (type) {\n  case 'text':\n    return { textValue: '' }\n  case 'number':\n    return { numberValue: 0 }\n  case 'boolean':\n    return { booleanValue: false }\n  case 'date':\n  case 'dateTime':\n    return { dateValue: new Date() }\n  case 'singleTag':\n    return { singleSelectValue: selectOptions?.[0] }\n  case 'multiTags':\n    return { multiSelectValue: [] }\n  default:\n    return {}\n  }\n}\n\nfunction toIcon(type: DataType): ReactNode {\n  switch (type) {\n  case 'text':\n    return <TextIcon className=\"size-4\" />\n  case 'number':\n    return <Binary className=\"size-4\" />\n  case 'boolean':\n    return <Check className=\"size-4\" />\n  case 'date':\n    return <Calendar className=\"size-4\" />\n  case 'dateTime':\n    return <CalendarClock className=\"size-4\" />\n  case 'singleTag':\n    return <Tag className=\"size-4\" />\n  case 'multiTags':\n    return <Tags className=\"size-4\" />\n  case 'unknownType':\n    return <Database className=\"size-4\" />\n  }\n}\n\nexport const DataTypeUtils = {\n  types: dataTypes,\n  getDefaultValue,\n  toIcon,\n}","import { memo, useRef } from 'react'\nimport type { Cell, Row, Table } from '@tanstack/react-table'\nimport { flexRender } from '@tanstack/react-table'\nimport clsx from 'clsx'\nimport { useTableContainerContext, useTableStateWithoutSizingContext } from './TableContext'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\nimport { range } from '@/src/utils/array'\nimport { FillerCell } from './FillerCell'\nimport { useVirtualizedRows } from '../virtualization/useVirtualizedRows'\nimport type { VirtualizationScroll } from '../virtualization/virtualizationScroll'\n\nexport type TableVirtualizationOptions = {\n  estimateRowHeight?: number,\n  overscan?: number,\n  scroll?: VirtualizationScroll,\n  /** Called for infinite scroll while nearing the bottom of the scroll region. */\n  onReachBottom?: () => void,\n  reachBottomThresholdPx?: number,\n}\n\nexport type VirtualizedTableBodyProps = TableVirtualizationOptions\n\ntype VirtualizedTableRowProps = {\n  row: Row<unknown>,\n  cells: Cell<unknown, unknown>[],\n  table: Table<unknown>,\n  dataIndex?: number,\n  measureRef?: (node: Element | null) => void,\n  onRowClick?: (row: Row<unknown>, table: Table<unknown>) => void,\n  className?: string,\n}\n\nconst VirtualizedTableRow = memo(({\n  row,\n  cells,\n  table,\n  dataIndex,\n  measureRef,\n  onRowClick,\n  className,\n}: VirtualizedTableRowProps) => (\n  <tr\n    data-index={dataIndex}\n    ref={measureRef}\n    onClick={onRowClick ? () => onRowClick(row, table) : undefined}\n    data-clickable={PropsUtil.dataAttributes.bool(!!onRowClick)}\n    data-name=\"table-body-row\"\n    className={className}\n  >\n    {cells.map(cell => (\n      <td key={cell.id} data-name=\"table-body-cell\" className={clsx(cell.column.columnDef.meta?.className)}>\n        {flexRender(cell.column.columnDef.cell, cell.getContext())}\n      </td>\n    ))}\n  </tr>\n))\nVirtualizedTableRow.displayName = 'VirtualizedTableRow'\n\nexport const VirtualizedTableBody = ({\n  estimateRowHeight = 48,\n  overscan = 8,\n  scroll = 'window',\n  onReachBottom,\n  reachBottomThresholdPx,\n}: VirtualizedTableBodyProps) => {\n  const { table, onRowClick, isUsingFillerRows, fillerRowCell } = useTableStateWithoutSizingContext<unknown>()\n  const { containerRef } = useTableContainerContext<unknown>()\n  const rows = table.getRowModel().rows\n\n  const bodyRef = useRef<HTMLTableSectionElement | null>(null)\n\n  const { virtualizer, offset, isMounted } = useVirtualizedRows({\n    scroll,\n    count: rows.length,\n    estimateRowHeight,\n    overscan,\n    getItemKey: (index: number) => rows[index]?.id ?? index,\n    contentRef: bodyRef,\n    containerRef,\n    onReachBottom,\n    reachBottomThresholdPx,\n  })\n\n  const bodyRowClassName = table.options.meta?.bodyRowClassName\n  const renderRow = (row: Row<unknown>, measured: boolean, dataIndex?: number) => (\n    <VirtualizedTableRow\n      key={row.id}\n      row={row}\n      cells={row.getVisibleCells()}\n      table={table}\n      dataIndex={dataIndex}\n      measureRef={measured ? virtualizer.measureElement : undefined}\n      onRowClick={onRowClick}\n      className={bodyRowClassName !== undefined ? clsx(BagFunctionUtil.resolve(bodyRowClassName, row.original)) : undefined}\n    />\n  )\n\n  const columnCount = Math.max(1, table.getVisibleLeafColumns().length)\n  const rowCount = containerRef.current && isUsingFillerRows\n    ? Math.max(1, Math.floor(containerRef.current.clientHeight / estimateRowHeight))\n    : 1\n\n  if (rows.length === 0) {\n    return (\n      <tbody ref={bodyRef}>\n        {range(rowCount).map((_, index) => (\n          <tr key={index} data-name=\"table-body-filler-row\">\n            {table.getVisibleLeafColumns().map((col, colIndex) => (\n              <td key={colIndex} data-name=\"table-body-filler-cell\">\n                {fillerRowCell(col.id, table) ?? <FillerCell/>}\n              </td>\n            ))}\n          </tr>\n        ))}\n      </tbody>\n    )\n  }\n\n  if (!isMounted) {\n    return (\n      <tbody ref={bodyRef}>\n        {rows.map(row => renderRow(row, false))}\n      </tbody>\n    )\n  }\n\n  const items = virtualizer.getVirtualItems()\n  const total = virtualizer.getTotalSize()\n  const paddingTop = items.length ? items[0].start - offset : 0\n  const paddingBottom = items.length ? total - (items[items.length - 1].end - offset) : 0\n\n  return (\n    <tbody ref={bodyRef}>\n      {paddingTop > 0 && (\n        <tr aria-hidden=\"true\">\n          <td colSpan={columnCount} style={{ height: paddingTop, padding: 0, border: 0 }}/>\n        </tr>\n      )}\n      {items.map(virtualRow => {\n        const row = rows[virtualRow.index]\n        if (!row) return null\n        return renderRow(row, true, virtualRow.index)\n      })}\n      {paddingBottom > 0 && (\n        <tr aria-hidden=\"true\">\n          <td colSpan={columnCount} style={{ height: paddingBottom, padding: 0, border: 0 }}/>\n        </tr>\n      )}\n    </tbody>\n  )\n}\n","import type { Key, RefObject } from 'react'\nimport { useEffect, useState } from 'react'\nimport type { Virtualizer } from '@tanstack/react-virtual'\nimport { useVirtualizer, useWindowVirtualizer } from '@tanstack/react-virtual'\nimport { findPageScrollContainer, type VirtualizationScroll } from './virtualizationScroll'\n\nexport type UseVirtualizedRowsOptions = {\n  scroll: VirtualizationScroll,\n  count: number,\n  estimateRowHeight: number,\n  overscan: number,\n  enabled?: boolean,\n  getItemKey?: (index: number) => Key,\n  /**\n   * The element whose top marks where the virtualized content starts (e.g. the\n   * `tbody` for a table, or the grid wrapper for a card grid). Used to measure\n   * the scroll offset for the `'window'` and `'page'` modes.\n   */\n  contentRef: RefObject<HTMLElement | null>,\n  /** The scroll container element for the `'container'` mode. */\n  containerRef?: RefObject<HTMLElement | null>,\n  /** Called while the rendered range is within `reachBottomThresholdPx` of the end. */\n  onReachBottom?: () => void,\n  reachBottomThresholdPx?: number,\n}\n\nexport type UseVirtualizedRowsResult = {\n  virtualizer: Virtualizer<Element, Element>,\n  /** Subtract from `virtualItem.start` to get a position relative to `contentRef`. */\n  offset: number,\n  /** The resolved scrollable ancestor for the `'page'` mode (else `null`). */\n  pageScrollElement: HTMLElement | null,\n  isMounted: boolean,\n}\n\n/**\n * Shared virtualization plumbing for the table and card grid. Selects the right\n * TanStack virtualizer for the requested {@link VirtualizationScroll} mode,\n * measures the content offset for outer-scroll modes, resolves the page scroll\n * container, and wires up \"reached the bottom\" callbacks for infinite scroll.\n */\nexport function useVirtualizedRows({\n  scroll,\n  count,\n  estimateRowHeight,\n  overscan,\n  enabled = true,\n  getItemKey,\n  contentRef,\n  containerRef,\n  onReachBottom,\n  reachBottomThresholdPx = 600,\n}: UseVirtualizedRowsOptions): UseVirtualizedRowsResult {\n  const [scrollMargin, setScrollMargin] = useState(0)\n  const [pageScrollElement, setPageScrollElement] = useState<HTMLElement | null>(null)\n  const [isMounted, setIsMounted] = useState(false)\n\n  useEffect(() => setIsMounted(true), [])\n\n  const usesOuterScroll = scroll === 'window' || scroll === 'page'\n\n  // Resolve the page scroll container and measure where the content sits inside\n  // the outer scroll region. Both quantities are scroll-invariant, so re-running\n  // on layout changes (content growing, resize) is enough.\n  useEffect(() => {\n    if (!usesOuterScroll) return\n    const content = contentRef.current\n    if (!content || typeof window === 'undefined') return\n\n    const measure = () => {\n      if (scroll === 'page') {\n        const container = findPageScrollContainer(content)\n        setPageScrollElement(prev => (prev === container ? prev : container))\n        const top = container\n          ? content.getBoundingClientRect().top - container.getBoundingClientRect().top + container.scrollTop\n          : content.getBoundingClientRect().top + window.scrollY\n        setScrollMargin(prev => (Math.abs(prev - top) < 1 ? prev : top))\n        return\n      }\n      const top = content.getBoundingClientRect().top + window.scrollY\n      setScrollMargin(prev => (Math.abs(prev - top) < 1 ? prev : top))\n    }\n\n    measure()\n    const resizeObserver = new ResizeObserver(measure)\n    resizeObserver.observe(content)\n    window.addEventListener('resize', measure)\n    return () => {\n      resizeObserver.disconnect()\n      window.removeEventListener('resize', measure)\n    }\n    // `count` is included so the scroll container is re-resolved and the offset\n    // re-measured once rows arrive (data often loads after the first mount).\n  }, [scroll, usesOuterScroll, contentRef, count])\n\n  const common = {\n    estimateSize: () => estimateRowHeight,\n    overscan,\n    useScrollendEvent: true,\n    useAnimationFrameWithResizeObserver: true,\n    ...(getItemKey ? { getItemKey } : {}),\n  }\n  const windowVirtualizer = useWindowVirtualizer({\n    ...common,\n    count: scroll === 'window' ? count : 0,\n    scrollMargin,\n    enabled: enabled && scroll === 'window',\n  })\n  const containerVirtualizer = useVirtualizer({\n    ...common,\n    count: scroll === 'container' ? count : 0,\n    getScrollElement: () => containerRef?.current ?? null,\n    enabled: enabled && scroll === 'container',\n  })\n  const pageVirtualizer = useVirtualizer({\n    ...common,\n    count: scroll === 'page' ? count : 0,\n    getScrollElement: () => pageScrollElement,\n    scrollMargin,\n    enabled: enabled && scroll === 'page',\n  })\n\n  const virtualizer = (\n    scroll === 'window'\n      ? windowVirtualizer\n      : scroll === 'page'\n        ? pageVirtualizer\n        : containerVirtualizer\n  ) as unknown as Virtualizer<Element, Element>\n  const offset = usesOuterScroll ? scrollMargin : 0\n\n  const endIndex = virtualizer.range?.endIndex ?? (enabled ? -1 : (isMounted ? count - 1 : -1))\n  const thresholdRows = Math.max(1, Math.ceil(reachBottomThresholdPx / Math.max(1, estimateRowHeight)))\n  useEffect(() => {\n    if (!onReachBottom) return\n    if (endIndex >= count - 1 - thresholdRows) onReachBottom()\n  }, [onReachBottom, endIndex, count, thresholdRows, isMounted])\n\n  return { virtualizer, offset, pageScrollElement, isMounted }\n}\n","/**\n * Determines which element a virtualized list scrolls inside of.\n *\n * - `'container'`: the list scrolls inside its own capped box (the list owns a\n *    `overflow-y-auto` element). Use when the list should keep a fixed height.\n * - `'window'`: the list scrolls together with the document/`window`.\n * - `'page'`: the list scrolls together with the nearest scrollable ancestor\n *    (e.g. the `AppPage` content area). Use when the surrounding page should\n *    expand and scroll as one, instead of the list scrolling inside a capped box.\n */\nexport type VirtualizationScroll = 'window' | 'container' | 'page'\n\nconst SCROLLABLE_OVERFLOW = new Set(['auto', 'scroll', 'overlay'])\n\n/**\n * Walks up the DOM from `element` and returns the nearest ancestor that is an\n * actual vertical scroll container. Backs the `'page'` virtualization mode so a\n * virtualized list can scroll together with the surrounding page instead of\n * inside its own capped box.\n */\nexport function findScrollableAncestor(element: HTMLElement | null): HTMLElement | null {\n  if (!element || typeof window === 'undefined') return null\n  let node: HTMLElement | null = element.parentElement\n  while (node) {\n    const { overflowY } = window.getComputedStyle(node)\n    if (SCROLLABLE_OVERFLOW.has(overflowY) && node.scrollHeight > node.clientHeight) {\n      return node\n    }\n    node = node.parentElement\n  }\n  return null\n}\n\n/** Marks the {@link AppPage} content area — the scroll container for `'page'` mode. */\nexport const APP_PAGE_CONTENT_SELECTOR = '[data-name=\"app-page-content\"]'\n\n/**\n * Resolves the scroll container for the `'page'` virtualization mode. Prefers the\n * {@link AppPage} content area, which is a real scroll container regardless of how\n * much content is currently loaded — resolving by overflow state alone would\n * deadlock a virtualized list whose data arrives after mount (empty content →\n * no overflow → no scroll element → no rows → still no overflow). Falls back to\n * the nearest scrollable ancestor for non-AppPage contexts.\n */\nexport function findPageScrollContainer(element: HTMLElement | null): HTMLElement | null {\n  if (!element || typeof window === 'undefined') return null\n  const appPageContent = element.closest(APP_PAGE_CONTENT_SELECTOR)\n  if (appPageContent instanceof HTMLElement) return appPageContent\n  return findScrollableAncestor(element)\n}\n\nexport type ScrollMetrics = {\n  scrollTop: number,\n  scrollHeight: number,\n  clientHeight: number,\n}\n\n/** Reads scroll metrics uniformly from either an element or the `window`. */\nexport function getScrollMetrics(target: HTMLElement | Window | null): ScrollMetrics {\n  if (!target || typeof window === 'undefined') {\n    return { scrollTop: 0, scrollHeight: 0, clientHeight: 0 }\n  }\n  if (target === window) {\n    const doc = document.scrollingElement ?? document.documentElement\n    return { scrollTop: window.scrollY, scrollHeight: doc.scrollHeight, clientHeight: window.innerHeight }\n  }\n  const element = target as HTMLElement\n  return { scrollTop: element.scrollTop, scrollHeight: element.scrollHeight, clientHeight: element.clientHeight }\n}\n\nexport function isNearBottom(metrics: ScrollMetrics, thresholdPx: number): boolean {\n  return metrics.scrollHeight - metrics.scrollTop - metrics.clientHeight <= thresholdPx\n}\n","import { useCallback, useLayoutEffect, useState, type RefObject } from 'react'\n\nexport type ScrollbarState = 'vertical' | 'horizontal' | 'both'\n\nconst getScrollbarState = (element: HTMLElement): ScrollbarState | undefined => {\n  const hasHorizontalScrollbar = element.scrollWidth > element.clientWidth\n  const hasVerticalScrollbar = element.scrollHeight > element.clientHeight\n\n  if (hasHorizontalScrollbar && hasVerticalScrollbar) {\n    return 'both'\n  }\n  if (hasHorizontalScrollbar) {\n    return 'horizontal'\n  }\n  if (hasVerticalScrollbar) {\n    return 'vertical'\n  }\n  return undefined\n}\n\nexport type UseScrollbarStateProps = {\n  containerRef: RefObject<HTMLElement | null>,\n  contentRef?: RefObject<HTMLElement | null>,\n  isActive?: boolean,\n}\n\nexport function useScrollbarState({\n  containerRef,\n  contentRef,\n  isActive = true\n}: UseScrollbarStateProps) {\n  const [scrollbarState, setScrollbarState] = useState<ScrollbarState | undefined>(undefined)\n\n  const updateScrollbarState = useCallback(() => {\n    const container = containerRef.current\n    if (!container) {\n      return\n    }\n    setScrollbarState(getScrollbarState(container))\n  }, [containerRef])\n\n  useLayoutEffect(() => {\n    const container = containerRef.current\n    if (!container || !isActive) {\n      setScrollbarState(undefined)\n      return\n    }\n\n    updateScrollbarState()\n\n    const observer = new ResizeObserver(updateScrollbarState)\n    observer.observe(container)\n\n    const content = contentRef?.current\n    if (content) {\n      observer.observe(content)\n    }\n\n    return () => {\n      observer.disconnect()\n    }\n  }, [containerRef, contentRef, updateScrollbarState, isActive])\n\n  return scrollbarState\n}\n","import type { RefObject } from 'react'\nimport { useLayoutEffect, useRef, useState } from 'react'\nimport type { Table } from '@tanstack/react-table'\n\nexport type UseNaturalColumnWidthLockOptions<T> = {\n  table: Table<T>,\n  tableRef: RefObject<HTMLTableElement | null>,\n  enabled: boolean,\n}\n\nexport function useNaturalColumnWidthLock<T>({\n  table,\n  tableRef,\n  enabled,\n}: UseNaturalColumnWidthLockOptions<T>): boolean {\n  const [isLocked, setIsLocked] = useState(false)\n  const autoLockedWidthsRef = useRef<Map<string, number>>(new Map())\n\n  useLayoutEffect(() => {\n    if (!enabled) {\n      setIsLocked(false)\n      return\n    }\n    const element = tableRef.current\n    if (!element) return\n\n    const columns = table.getVisibleLeafColumns()\n    const sizing = table.getState().columnSizing\n    const missing = columns.filter(column => sizing[column.id] === undefined)\n    if (missing.length === 0) {\n      setIsLocked(columns.length > 0)\n      return\n    }\n    setIsLocked(false)\n    if (table.getRowModel().rows.length === 0) return\n    if (element.getBoundingClientRect().width === 0) return\n    if (getComputedStyle(element).tableLayout !== 'auto') return\n\n    const headerCells = element.querySelectorAll<HTMLTableCellElement>('th[data-name=\"table-header-cell\"]')\n    if (headerCells.length !== columns.length) return\n    const measured: Record<string, number> = {}\n    columns.forEach((column, index) => {\n      const width = headerCells[index]?.getBoundingClientRect().width\n      if (width !== undefined && width > 0 && sizing[column.id] === undefined) {\n        measured[column.id] = Math.round(width)\n        autoLockedWidthsRef.current.set(column.id, measured[column.id])\n      }\n    })\n    if (Object.keys(measured).length === 0) return\n    table.setColumnSizing(prev => ({ ...measured, ...prev }))\n  })\n\n  useLayoutEffect(() => {\n    if (!enabled || typeof window === 'undefined') return\n    let frame: number | null = null\n    const handleResize = () => {\n      if (frame !== null) return\n      frame = window.requestAnimationFrame(() => {\n        frame = null\n        const autoLocked = autoLockedWidthsRef.current\n        if (autoLocked.size === 0) return\n        autoLockedWidthsRef.current = new Map()\n        setIsLocked(false)\n        table.setColumnSizing(prev => {\n          const next = { ...prev }\n          for (const [id, width] of autoLocked) {\n            if (next[id] === width) delete next[id]\n          }\n          return next\n        })\n      })\n    }\n    window.addEventListener('resize', handleResize)\n    return () => {\n      if (frame !== null) window.cancelAnimationFrame(frame)\n      window.removeEventListener('resize', handleResize)\n    }\n  }, [enabled, table])\n\n  return isLocked\n}\n","import { Pagination, type PaginationProps } from '@/src/components/layout/navigation/Pagination'\nimport type { HTMLAttributes } from 'react'\nimport { Select, type SelectProps } from '@/src/components/user-interaction/Select/Select'\nimport { SelectOption } from '@/src/components/user-interaction/Select/SelectOption'\nimport { Visibility } from '../Visibility'\nimport clsx from 'clsx'\nimport { useTableStateWithoutSizingContext } from './TableContext'\n\nexport type TablePaginationMenuProps = Omit<PaginationProps, 'pageIndex' | 'pageCount'>\n\nexport const TablePaginationMenu = ({ ...props }: TablePaginationMenuProps) => {\n  const { table } = useTableStateWithoutSizingContext()\n\n  return (\n    <Pagination\n      {...props}\n      pageIndex={table.getState().pagination.pageIndex}\n      pageCount={table.getPageCount()}\n      onPageIndexChanged={page => {\n        table.setPageIndex(page)\n        props.onPageIndexChanged?.(page)\n      }}\n    />\n  )\n}\n\n\nconst defaultPageSizeOptions: number[] = [10, 25, 50, 100, 500, 1000] as const\n\nexport interface TablePageSizeSelectProps extends Omit<SelectProps, 'children'> {\n  pageSizeOptions?: number[],\n}\n\nexport const TablePageSizeSelect = ({\n  pageSizeOptions = defaultPageSizeOptions,\n  ...props\n}: TablePageSizeSelectProps) => {\n  const { table } = useTableStateWithoutSizingContext()\n  const currentPageSize = table.getState().pagination.pageSize\n\n  return (\n    <Select\n      {...props}\n      value={currentPageSize.toString()}\n      onValueChange={(value) => table.setPageSize(Number(value))}\n    >\n      {pageSizeOptions.map(size => (\n        <SelectOption key={size} value={size.toString()} label={size.toString()}/>\n      ))}\n    </Select>\n  )\n}\n\nexport interface TablePaginationProps extends HTMLAttributes<HTMLDivElement> {\n  allowChangingPageSize?: boolean,\n  pageSizeOptions?: number[],\n}\n\n// TODO consider screens less than 450 px\nexport const TablePagination = ({ allowChangingPageSize = true, pageSizeOptions, ...props }: TablePaginationProps) => {\n  return (\n    <div {...props} className={clsx('container flex-col-2 sm:flex-row-8 items-center justify-center', props.className)}>\n      <TablePaginationMenu />\n      <Visibility isVisible={allowChangingPageSize}>\n        <TablePageSizeSelect pageSizeOptions={pageSizeOptions} buttonProps={{ className: 'h-10 min-w-24 max-w-24' }} />\n      </Visibility>\n    </div>\n  )\n}","import { Check, Minus } from 'lucide-react'\nimport { useCallback, type HTMLAttributes } from 'react'\nimport { Visibility } from '../layout/Visibility'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../form/FormField'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\n\ntype CheckBoxSize = 'sm' | 'md' | 'lg' | null\n\nexport type CheckboxProps = HTMLAttributes<HTMLDivElement>\n  & Partial<FormFieldInteractionStates>\n  & Partial<FormFieldDataHandling<boolean>>\n  & {\n    initialValue?: boolean,\n    indeterminate?: boolean,\n    size?: CheckBoxSize,\n    alwaysShowCheckIcon?: boolean,\n    isRounded?: boolean,\n    interactive?: boolean,\n  }\n\n/**\n * A Tristate checkbox\n *\n * The state is managed by the parent\n */\nexport const Checkbox = ({\n  value: controlledValue,\n  initialValue = false,\n  indeterminate,\n  required = false,\n  invalid = false,\n  disabled = false,\n  readOnly = false,\n  onValueChange,\n  onEditComplete,\n  size = 'md',\n  alwaysShowCheckIcon = false,\n  isRounded = false,\n  ...props\n}: CheckboxProps) => {\n  const onEditCompleteStable = useEventCallbackStabilizer(onEditComplete)\n  const onValueChangeStable = useEventCallbackStabilizer(onValueChange)\n  const onChangeWrapper = useCallback((value: boolean) => {\n    onValueChangeStable(value)\n    onEditCompleteStable(value)\n  }, [onValueChangeStable, onEditCompleteStable])\n\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onChangeWrapper,\n    defaultValue: initialValue,\n  })\n\n  const interactive = !disabled && !readOnly\n\n  return (\n    <div\n      {...props}\n\n      onClick={(event) => {\n        if (interactive) {\n          setValue(prev => !prev)\n        }\n        props.onClick?.(event)\n      }}\n      onKeyDown={(event) => {\n        if (!interactive) return\n        if (event.key === ' ' || event.key === 'Enter') {\n          event.preventDefault()\n          setValue(prev => !prev)\n        }\n        props.onKeyDown?.(event)\n      }}\n\n      data-checked={!indeterminate ? value : 'indeterminate'}\n      data-size={size ?? undefined}\n      data-rounded={isRounded ? '' : undefined}\n      {...PropsUtil.dataAttributes.interactionStates({ disabled, invalid, readOnly, required })}\n\n      role={interactive ? 'checkbox' : undefined}\n      tabIndex={interactive ? (disabled ? -1 : 0) : undefined}\n      aria-hidden={interactive ? undefined : true}\n\n      aria-checked={interactive ? (indeterminate ? 'mixed' : value) : undefined}\n      {...PropsUtil.aria.interactionStates({ disabled, invalid, readOnly, required }, props)}\n\n      data-name=\"checkbox\"\n    >\n      <Visibility isVisible={indeterminate}>\n        <Minus data-name=\"checkbox-indicator\" className=\"checkbox-indicator\" aria-hidden={true} />\n      </Visibility>\n      <Visibility isVisible={!indeterminate && (alwaysShowCheckIcon || value)}>\n        <Check data-name=\"checkbox-indicator\" className=\"checkbox-indicator\" aria-hidden={true} />\n      </Visibility>\n    </div>\n  )\n}","import { Checkbox } from '@/src/components/user-interaction/Checkbox'\nimport { FillerCell } from './FillerCell'\nimport type { TableProviderProps } from './TableProvider'\nimport { TableProvider } from './TableProvider'\nimport type { ColumnDef, Row, RowSelectionState, Table } from '@tanstack/react-table'\nimport { useCallback, useMemo } from 'react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { TableStateWithoutSizingContext } from './TableContext'\n\nexport interface TableWithSelectionProviderProps<T> extends TableProviderProps<T> {\n    rowSelection: RowSelectionState,\n    disableClickRowClickSelection?: boolean,\n    selectionRowId?: string,\n}\n\nexport const TableWithSelectionProvider = <T,>({\n  children,\n  state,\n  fillerRowCell,\n  rowSelection,\n  disableClickRowClickSelection = false,\n  selectionRowId = 'selection',\n  onRowClick,\n  ...props\n}: TableWithSelectionProviderProps<T>) => {\n  const translation = useHightideTranslation()\n  const columnDef: ColumnDef<T, unknown>[] = useMemo(() => [\n    {\n      id: selectionRowId,\n      header: () => {\n        return (\n          <TableStateWithoutSizingContext.Consumer>\n            {(context) => {\n              const table = context?.table\n              return (\n                <Checkbox\n                  value={table?.getIsAllRowsSelected()}\n                  indeterminate={table?.getIsSomeRowsSelected()}\n                  onValueChange={value => {\n                    const newValue = !!value\n                    table?.toggleAllRowsSelected(newValue)\n                  }}\n                  disabled={(table?.getRowCount() ?? 0) < 1}\n                />\n              )\n            }}\n          </TableStateWithoutSizingContext.Consumer>\n        )\n      },\n      cell: ({ row }) => {\n        return (\n          <Checkbox\n            disabled={!row.getCanSelect()}\n            value={row.getIsSelected()}\n            onValueChange={row.getToggleSelectedHandler()}\n          />\n        )\n      },\n      size: 60,\n      minSize: 60,\n      maxSize: 60,\n      enableResizing: false,\n      enableSorting: false,\n      enableHiding: false,\n      enableColumnFilter: false,\n      meta: {\n        columnLabel: translation('selection'),\n      },\n    },\n    ...(props.columns ?? []),\n  ], [selectionRowId, props.columns, translation])\n\n  const placeholderColumnExcludeIds = useMemo(() => [selectionRowId], [selectionRowId])\n\n  return (\n    <TableProvider\n      {...props}\n      placeholderColumnExcludeIds={placeholderColumnExcludeIds}\n      fillerRowCell={useCallback((columnId: string, table: Table<T>) => {\n        if (columnId === selectionRowId) {\n          return (<Checkbox value={false} disabled={true} />)\n        }\n        return fillerRowCell?.(columnId, table) ?? (<FillerCell />)\n      }, [fillerRowCell, selectionRowId])}\n      columns={columnDef}\n      initialState={{\n        ...props.initialState,\n        columnPinning: {\n          ...props.initialState?.columnPinning,\n          left: [selectionRowId, ...(props.initialState?.columnPinning?.left ?? [])],\n        },\n      }}\n      state={{\n        rowSelection,\n        ...state\n      }}\n      onRowClick={useCallback((row: Row<T>, table: Table<T>) => {\n        if (!disableClickRowClickSelection) {\n          row.toggleSelected()\n        }\n        onRowClick?.(row, table)\n      }, [disableClickRowClickSelection, onRowClick])}\n    >\n      {children}\n    </TableProvider>\n  )\n}","import type { TableProviderProps } from './TableProvider'\nimport { TableProvider } from './TableProvider'\nimport type { TableDisplayProps } from './TableDisplay'\nimport { TableDisplay } from './TableDisplay'\nimport type { TablePaginationProps } from './TablePagination'\nimport { TablePagination } from './TablePagination'\nimport { Visibility } from '../Visibility'\nimport type { TableWithSelectionProviderProps } from './TableWithSelectionProvider'\nimport { TableWithSelectionProvider } from './TableWithSelectionProvider'\nimport type { HTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport interface TableProps<T> extends HTMLAttributes<HTMLDivElement> {\n    table: TableProviderProps<T>,\n    paginationOptions?: TablePaginationProps & {\n        showPagination?: boolean,\n    },\n    displayProps?: Omit<TableDisplayProps, 'children'>,\n    header?: React.ReactNode,\n    footer?: React.ReactNode,\n}\n\nexport const Table = <T,>({ children, table, paginationOptions, displayProps, header, footer, ...props }: TableProps<T>) => {\n  const { showPagination = true, allowChangingPageSize, pageSizeOptions } = paginationOptions ?? {}\n  return (\n    <div {...props} className={clsx('flex-col-3', props.className)}>\n      <TableProvider {...table} >\n        {header}\n        <TableDisplay {...displayProps}>{children}</TableDisplay>\n        <Visibility isVisible={showPagination}>\n          <TablePagination allowChangingPageSize={allowChangingPageSize} pageSizeOptions={pageSizeOptions} />\n        </Visibility>\n        {footer}\n      </TableProvider>\n    </div>\n  )\n}\n\nexport interface TableWithSelectionProps<T> extends HTMLAttributes<HTMLDivElement> {\n    table: TableWithSelectionProviderProps<T>,\n    paginationOptions?: TablePaginationProps & {\n        showPagination?: boolean,\n    },\n    displayProps?: Omit<TableDisplayProps, 'children'>,\n    header?: React.ReactNode,\n    footer?: React.ReactNode,\n}\n\nexport const TableWithSelection = <T,>({\n  children,\n  table,\n  paginationOptions,\n  displayProps,\n  header,\n  footer,\n  ...props\n}: TableWithSelectionProps<T>) => {\n  const { showPagination = true, allowChangingPageSize, pageSizeOptions } = paginationOptions ?? {}\n\n  return (\n    <div {...props} className={clsx('flex-col-3', props.className)}>\n      <TableWithSelectionProvider {...table}>\n        {header}\n        <TableDisplay {...displayProps}>{children}</TableDisplay>\n        <Visibility isVisible={showPagination}>\n          <TablePagination allowChangingPageSize={allowChangingPageSize} pageSizeOptions={pageSizeOptions} />\n        </Visibility>\n        {footer}\n      </TableWithSelectionProvider>\n    </div>\n  )\n}","import type { ColumnDef } from '@tanstack/react-table'\nimport { memo,  useEffect,  useMemo, useState } from 'react'\nimport { useTableColumnDefinitionContext } from './TableContext'\nimport type { DataType } from '../../user-interaction/data/data-types'\nimport { useLogOnce } from '@/src/hooks/useLogOnce'\n\nexport type TableColumnProps<T> = ColumnDef<T> & {\n  filterType?: DataType,\n}\n\nconst TableColumnComponent = <T,>({\n  filterType,\n  ...props\n}: TableColumnProps<T>) => {\n  const { registerColumn } = useTableColumnDefinitionContext<T>()\n\n  const filterFn = filterType ?? props.filterFn\n\n  useLogOnce(\n    'TableColumn: For filterType === multiTags or singleTag, filterData.tags must be set.',\n    (filterType === 'multiTags' || filterType === 'singleTag') && props.meta?.filterData?.tags === undefined\n  )\n\n  const [column] = useState<ColumnDef<T>>({\n    ...props,\n    filterFn,\n  } as ColumnDef<T>)\n\n  useEffect(() => {\n    const unsubscribe =registerColumn(column)\n\n    return () => {\n      unsubscribe()\n    }\n  }, [registerColumn, column])\n\n  return null\n}\n\nconst TableColumnFactory = <T,>() => memo(\n  TableColumnComponent<T>,\n  (prevProps, nextProps) => {\n    return prevProps.filterType === nextProps.filterType &&\n    prevProps.id === nextProps.id &&\n    prevProps.enableColumnFilter === nextProps.enableColumnFilter &&\n    prevProps.enableGlobalFilter === nextProps.enableGlobalFilter &&\n    prevProps.enableGrouping === nextProps.enableGrouping &&\n    prevProps.enableHiding === nextProps.enableHiding &&\n    prevProps.enablePinning === nextProps.enablePinning &&\n    prevProps.enableResizing === nextProps.enableResizing &&\n    prevProps.enableSorting === nextProps.enableSorting &&\n    prevProps.meta === nextProps.meta,\n    prevProps.cell === nextProps.cell\n  }\n)\n\nexport const TableColumn = <T,>(props: TableColumnProps<T>) => {\n  const TableColumnComponent = useMemo(() => TableColumnFactory<T>(), [])\n  return <TableColumnComponent {...props} />\n}","import { useMemo, useRef, useId } from 'react'\nimport { ChevronUp, ChevronDown, ChevronLeft, ChevronRight, Eye, EyeOff, Pin, PinOff, Columns3Cog } from 'lucide-react'\nimport type { ButtonProps } from '@/src/components/user-interaction/Button'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { PopUpProps } from '../popup/PopUp'\nimport { PopUp } from '../popup/PopUp'\nimport { PopUpRoot } from '../popup/PopUpRoot'\nimport { PopUpOpener } from '../popup/PopUpOpener'\nimport { useTableStateWithoutSizingContext } from './TableContext'\nimport { IconButton } from '../../user-interaction/IconButton'\nimport { Visibility } from '../Visibility'\n\nexport type TableColumnSwitcherPopUpProps = PopUpProps\n\nexport const TableColumnSwitcherPopUp = ({ ...props }: TableColumnSwitcherPopUpProps) => {\n  const { table } = useTableStateWithoutSizingContext()\n  const translation = useHightideTranslation()\n  const containerRef = useRef<HTMLDivElement | null>(null)\n  const generatedId = useId()\n  const ids = useMemo(() => ({\n    popup: props.id ?? `table-column-picker-popup-${generatedId}`,\n    label: `table-column-picker-label-${generatedId}`,\n  }), [generatedId, props.id])\n\n  const enableHiding = table.options.enableHiding !== false\n  const enableColumnPinning = table.options.enableColumnPinning !== false\n\n  const tableState = table.getState()\n  const columnOrder = tableState.columnOrder\n  const columnPinning = tableState.columnPinning\n\n  const columns = useMemo(() => {\n    const allColumns = table.getAllColumns()\n\n    const leftPinned: typeof allColumns = []\n    const unpinned: typeof allColumns = []\n    const rightPinned: typeof allColumns = []\n\n    const columnMap = new Map(allColumns.map(col => [col.id, col]))\n\n    const processColumns = (columnIds: string[], targetArray: typeof allColumns) => {\n      for (const columnId of columnIds) {\n        const column = columnMap.get(columnId)\n        if (column) {\n          targetArray.push(column)\n          columnMap.delete(columnId)\n        }\n      }\n    }\n\n    if (columnOrder.length > 0) {\n      const leftPinnedIds = columnPinning?.left ?? []\n      const rightPinnedIds = columnPinning?.right ?? []\n\n      processColumns(leftPinnedIds, leftPinned)\n      processColumns(rightPinnedIds, rightPinned)\n\n      for (const columnId of columnOrder) {\n        if (!leftPinnedIds.includes(columnId) && !rightPinnedIds.includes(columnId)) {\n          const column = columnMap.get(columnId)\n          if (column) {\n            unpinned.push(column)\n            columnMap.delete(columnId)\n          }\n        }\n      }\n\n      for (const column of columnMap.values()) {\n        const pinState = column.getIsPinned()\n        if (pinState === 'left') {\n          leftPinned.push(column)\n        } else if (pinState === 'right') {\n          rightPinned.push(column)\n        } else {\n          unpinned.push(column)\n        }\n      }\n    } else {\n      for (const column of allColumns) {\n        const pinState = column.getIsPinned()\n        if (pinState === 'left') {\n          leftPinned.push(column)\n        } else if (pinState === 'right') {\n          rightPinned.push(column)\n        } else {\n          unpinned.push(column)\n        }\n      }\n    }\n\n    return [...leftPinned, ...unpinned, ...rightPinned]\n  }, [table, columnOrder, columnPinning])\n\n  const moveColumn = (columnId: string, direction: 'up' | 'down') => {\n    const currentColumns = columns.map(col => col.id)\n    const currentIndex = currentColumns.indexOf(columnId)\n    if (currentIndex === -1) return\n\n    const column = table.getColumn(columnId)\n    if (!column) return\n\n    const isPinned = column.getIsPinned()\n    if (isPinned) return\n\n    const newIndex = direction === 'up' ? currentIndex - 1 : currentIndex + 1\n    if (newIndex < 0 || newIndex >= currentColumns.length) return\n\n    const targetColumn = table.getColumn(currentColumns[newIndex])\n    if (!targetColumn) return\n\n    const targetIsPinned = targetColumn.getIsPinned()\n    if (targetIsPinned !== isPinned) return\n\n    const newOrder = [...currentColumns]\n    const temp = newOrder[currentIndex]\n    newOrder[currentIndex] = newOrder[newIndex]\n    newOrder[newIndex] = temp\n\n    table.setColumnOrder(newOrder)\n  }\n\n  const toggleColumnVisibility = (columnId: string) => {\n    const column = table.getColumn(columnId)\n    column?.toggleVisibility()\n  }\n\n  const hasHideableColumns = table.getAllLeafColumns().some(column => column.getCanHide())\n  const allColumnsVisible = table.getIsAllColumnsVisible()\n\n  const toggleAllColumnsVisibility = () => {\n    table.toggleAllColumnsVisible()\n  }\n\n  const pinColumn = (columnId: string, side: 'left' | 'right') => {\n    const column = table.getColumn(columnId)\n    if (!column || !column.getCanPin()) return\n    column.pin(side)\n  }\n\n  const unpinColumn = (columnId: string) => {\n    const column = table.getColumn(columnId)\n    if (!column || !column.getCanPin()) return\n\n    const pinState = column.getIsPinned()\n    if (!pinState) return\n\n    column.pin(false)\n\n    const currentOrder = table.getState().columnOrder\n    const unpinnedColumns = currentOrder.filter(id => {\n      const col = table.getColumn(id)\n      return col && !col.getIsPinned()\n    })\n\n    if (pinState === 'left') {\n      const newOrder = [columnId, ...unpinnedColumns]\n      table.setColumnOrder(newOrder)\n    } else if (pinState === 'right') {\n      const newOrder = [...unpinnedColumns, columnId]\n      table.setColumnOrder(newOrder)\n    }\n  }\n\n  const getColumnHeader = (columnId: string) => {\n    const column = table.getColumn(columnId)\n    const columnLabel = column?.columnDef.meta?.columnLabel\n    if (columnLabel) {\n      return columnLabel\n    }\n    const header = column?.columnDef.header\n    if (typeof header === 'string') {\n      return header\n    }\n    if (typeof header === 'function') {\n      return columnId\n    }\n    return columnId\n  }\n\n  return (\n    <PopUp\n      {...props}\n      ref={containerRef}\n      id={ids.popup}\n      options={{\n        verticalAlignment: 'afterEnd',\n        horizontalAlignment: 'center',\n        ...props.options,\n      }}\n\n      role=\"dialog\"\n      aria-labelledby={ids.label}\n      aria-describedby={ids.label}\n\n      className=\"flex-col-1 p-2 items-start min-w-72\"\n    >\n      <div className=\"flex-col-1 w-full mb-2\">\n        <div className=\"flex-row-2 items-center justify-between w-full\">\n          <span id={ids.label} className=\"typography-title-md font-semibold\">\n            {translation('columnPicker')}\n          </span>\n          <Visibility isVisible={enableHiding}>\n            <IconButton\n              tooltip={allColumnsVisible ? translation('hideAllColumns') : translation('showAllColumns')}\n              size=\"sm\"\n              color=\"neutral\"\n              coloringStyle=\"text\"\n              disabled={!hasHideableColumns}\n              onClick={toggleAllColumnsVisibility}\n              aria-label={allColumnsVisible ? translation('hideAllColumns') : translation('showAllColumns')}\n            >\n              {allColumnsVisible ? (\n                <Eye className=\"size-4\" />\n              ) : (\n                <EyeOff className=\"size-4\" />\n              )}\n            </IconButton>\n          </Visibility>\n        </div>\n        <span className=\"text-description typography-label-sm\">\n          {translation('columnPickerDescription')}\n        </span>\n      </div>\n      <div className=\"flex-col-1 overflow-y-auto w-full\">\n        {columns.map((column, index) => {\n          const columnId = column.id\n          const isVisible = column.getIsVisible()\n          const pinState = column.getIsPinned()\n          const isPinned = column.getCanPin() && !!pinState\n          const prevColumn = index > 0 ? columns[index - 1] : null\n          const nextColumn = index < columns.length - 1 ? columns[index + 1] : null\n          const prevIsPinned = prevColumn?.getCanPin() && !!prevColumn.getIsPinned()\n          const nextIsPinned = nextColumn?.getCanPin() && !!nextColumn.getIsPinned()\n          const canMoveUp = index > 0 && !isPinned && !prevIsPinned\n          const canMoveDown = index < columns.length - 1 && !isPinned && !nextIsPinned\n\n          return (\n            <div key={columnId} className=\"flex-row-2 items-center justify-between gap-2 w-full\">\n              <div className=\"flex-row-2 gap-1\">\n                {isPinned ? (\n                  <>\n                    <IconButton\n                      tooltip={translation('pinToLeft')}\n                      size=\"sm\"\n                      color=\"neutral\"\n                      coloringStyle=\"text\"\n                      disabled={pinState === 'left'}\n                      onClick={() => pinColumn(columnId, 'left')}\n                    >\n                      <ChevronLeft className=\"size-4\" />\n                    </IconButton>\n                    <IconButton\n                      tooltip={translation('pinToRight')}\n                      size=\"sm\"\n                      color=\"neutral\"\n                      coloringStyle=\"text\"\n                      disabled={pinState === 'right'}\n                      onClick={() => pinColumn(columnId, 'right')}\n                    >\n                      <ChevronRight className=\"size-4\" />\n                    </IconButton>\n                  </>\n                ) : (\n                  <>\n                    <IconButton\n                      tooltip={translation('increaseSortingPriority')}\n                      size=\"sm\"\n                      color=\"neutral\"\n                      coloringStyle=\"text\"\n                      disabled={!canMoveUp}\n                      onClick={() => moveColumn(columnId, 'up')}\n                    >\n                      <ChevronUp className=\"size-4\" />\n                    </IconButton>\n                    <IconButton\n                      tooltip={translation('decreaseSortingPriority')}\n                      size=\"sm\"\n                      color=\"neutral\"\n                      coloringStyle=\"text\"\n                      disabled={!canMoveDown}\n                      onClick={() => moveColumn(columnId, 'down')}\n                    >\n                      <ChevronDown className=\"size-4\" />\n                    </IconButton>\n                  </>\n                )}\n              </div>\n              <div className=\"flex-1 typography-label-lg\">\n                {getColumnHeader(columnId)}\n              </div>\n              <>\n                <Visibility isVisible={enableHiding}>\n                  <IconButton\n                    tooltip={translation('changeVisibility')}\n                    size=\"sm\"\n                    color=\"neutral\"\n                    coloringStyle=\"text\"\n                    disabled={!column.getCanHide()}\n                    onClick={() => toggleColumnVisibility(columnId)}\n                    aria-label={isVisible ? translation('hideColumn') : translation('showColumn')}\n                  >\n                    {isVisible ? (\n                      <Eye className=\"size-4\" />\n                    ) : (\n                      <EyeOff className=\"size-4\" />\n                    )}\n                  </IconButton>\n                </Visibility>\n                <Visibility isVisible={enableColumnPinning}>\n                  <IconButton\n                    tooltip={translation('changePinning')}\n                    size=\"sm\"\n                    color=\"neutral\"\n                    coloringStyle=\"text\"\n                    disabled={!column.getCanPin()}\n                    onClick={() => {\n                      if(isPinned) {\n                        unpinColumn(columnId)\n                      } else {\n                        pinColumn(columnId, 'left')\n                      }\n                    }}\n                    aria-label={isPinned ? translation('unpin') : translation('pinLeft')}\n                  >\n                    {!isPinned ? ( <PinOff className=\"size-4\" />) : ( <Pin className=\"size-4\" />)}\n                  </IconButton>\n                </Visibility>\n              </>\n            </div>\n          )\n        })}\n      </div>\n    </PopUp>\n  )\n}\n\nexport interface TableColumnSwitcherProps extends TableColumnSwitcherPopUpProps {\n  buttonProps?: ButtonProps,\n}\n\nexport const TableColumnSwitcher = ({ buttonProps, ...props }: TableColumnSwitcherProps) => {\n  const translation = useHightideTranslation()\n\n  return (\n    <PopUpRoot>\n      <PopUpOpener>\n        {({ props }) => (\n          <IconButton\n            {...props}\n            color=\"neutral\"\n            tooltip={translation('changeColumnDisplay')}\n            {...buttonProps}\n          >\n            <Columns3Cog className=\"size-5\" />\n          </IconButton>\n        )}\n      </PopUpOpener>\n      <TableColumnSwitcherPopUp {...props} />\n    </PopUpRoot>\n  )\n}","import type { CSSProperties, ReactNode } from 'react'\nimport { memo, useEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { columnsForWidth, chunkIntoRows, overscanRowsForBuffer } from './gridLayout'\nimport { useVirtualizedRows } from './useVirtualizedRows'\nimport type { VirtualizationScroll } from './virtualizationScroll'\n\nconst DEFAULT_GAP_PX = 12\nconst DEFAULT_ESTIMATE_ROW_HEIGHT_PX = 220\n// Render roughly a screenful of extra rows in each direction so a fast mobile\n// momentum scroll cannot outrun the render and reveal a blank list.\nconst DEFAULT_OVERSCAN_ROWS = overscanRowsForBuffer(800, DEFAULT_ESTIMATE_ROW_HEIGHT_PX)\nconst DEFAULT_VIRTUALIZE_THRESHOLD = 40\nconst DEFAULT_REACH_BOTTOM_THRESHOLD_PX = 600\n\nconst emptyRow: readonly unknown[] = []\n\nexport type VirtualizedCardGridProps<T> = {\n  items: readonly T[],\n  getItemKey: (item: T) => string,\n  renderItem: (item: T) => ReactNode,\n  /** Minimum width a card may shrink to before the column count drops. */\n  minCardWidthPx: number,\n  gapPx?: number,\n  estimateRowHeightPx?: number,\n  overscanRows?: number,\n  /** Below this item count the grid renders every card without virtualization. */\n  virtualizeThreshold?: number,\n  /** Where the grid scrolls. Defaults to `'container'` (its own capped box). */\n  scroll?: VirtualizationScroll,\n  containerClassName?: string,\n  /** Called for infinite scroll while nearing the bottom of the scroll region. */\n  onReachBottom?: () => void,\n  reachBottomThresholdPx?: number,\n}\n\ntype VirtualizedCardGridRowProps<T> = {\n  index: number,\n  translateY: number,\n  measureElement: (node: Element | null) => void,\n  rowStyle: CSSProperties,\n  items: readonly T[],\n  renderItem: (item: T) => ReactNode,\n}\n\nfunction VirtualizedCardGridRowBase<T>({\n  index,\n  translateY,\n  measureElement,\n  rowStyle,\n  items,\n  renderItem,\n}: VirtualizedCardGridRowProps<T>) {\n  return (\n    <div\n      data-index={index}\n      ref={measureElement}\n      style={{\n        position: 'absolute',\n        top: 0,\n        left: 0,\n        width: '100%',\n        transform: `translateY(${translateY}px)`,\n      }}\n    >\n      <div className=\"grid w-full\" style={rowStyle}>\n        {items.map(renderItem)}\n      </div>\n    </div>\n  )\n}\n\nconst VirtualizedCardGridRow = memo(VirtualizedCardGridRowBase) as typeof VirtualizedCardGridRowBase\n\n/**\n * A responsive, virtualized grid of cards backed by TanStack Virtual. Shares its\n * scroll handling ({@link VirtualizationScroll} modes + infinite scroll) with\n * the virtualized table via {@link useVirtualizedRows}, so a card grid and a\n * table can behave identically inside the same scroll region.\n */\nexport function VirtualizedCardGrid<T>({\n  items,\n  getItemKey,\n  renderItem,\n  minCardWidthPx,\n  gapPx = DEFAULT_GAP_PX,\n  estimateRowHeightPx = DEFAULT_ESTIMATE_ROW_HEIGHT_PX,\n  overscanRows = DEFAULT_OVERSCAN_ROWS,\n  virtualizeThreshold = DEFAULT_VIRTUALIZE_THRESHOLD,\n  scroll = 'container',\n  containerClassName,\n  onReachBottom,\n  reachBottomThresholdPx = DEFAULT_REACH_BOTTOM_THRESHOLD_PX,\n}: VirtualizedCardGridProps<T>) {\n  const containerRef = useRef<HTMLDivElement | null>(null)\n  const [columns, setColumns] = useState(1)\n\n  useEffect(() => {\n    const element = containerRef.current\n    if (!element || typeof window === 'undefined') return\n\n    const measure = () => {\n      const nextColumns = columnsForWidth(element.clientWidth, minCardWidthPx, gapPx)\n      setColumns((prev) => (prev === nextColumns ? prev : nextColumns))\n    }\n\n    measure()\n    const resizeObserver = new ResizeObserver(measure)\n    resizeObserver.observe(element)\n    window.addEventListener('resize', measure)\n    return () => {\n      resizeObserver.disconnect()\n      window.removeEventListener('resize', measure)\n    }\n  }, [minCardWidthPx, gapPx])\n\n  const rows = useMemo(() => chunkIntoRows(items, columns), [items, columns])\n\n  const { virtualizer, offset, isMounted } = useVirtualizedRows({\n    scroll,\n    count: rows.length,\n    estimateRowHeight: estimateRowHeightPx,\n    overscan: overscanRows,\n    enabled: items.length > virtualizeThreshold,\n    getItemKey: (index) => {\n      const first = rows[index]?.[0]\n      return first ? getItemKey(first) : index\n    },\n    contentRef: containerRef,\n    containerRef,\n    onReachBottom,\n    reachBottomThresholdPx,\n  })\n\n  useEffect(() => {\n    virtualizer.measure()\n  }, [columns, virtualizer])\n\n  const autoFillTemplate = `repeat(auto-fill, minmax(min(100%, ${minCardWidthPx}px), 1fr))`\n  const virtualizedRowStyle = useMemo((): CSSProperties => ({\n    gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n    gap: gapPx,\n    paddingBottom: gapPx,\n  }), [columns, gapPx])\n  const shouldVirtualize = isMounted && items.length > virtualizeThreshold\n\n  if (!shouldVirtualize) {\n    return (\n      <div ref={containerRef} className={clsx('w-full print:hidden', containerClassName)}>\n        <div className=\"grid w-full\" style={{ gridTemplateColumns: autoFillTemplate, gap: gapPx }}>\n          {items.map(renderItem)}\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div ref={containerRef} className={clsx('w-full print:hidden', containerClassName)}>\n      <div style={{ height: virtualizer.getTotalSize(), width: '100%', position: 'relative' }}>\n        {virtualizer.getVirtualItems().map((virtualRow) => (\n          <VirtualizedCardGridRow\n            key={virtualRow.key}\n            index={virtualRow.index}\n            translateY={virtualRow.start - offset}\n            measureElement={virtualizer.measureElement}\n            rowStyle={virtualizedRowStyle}\n            items={(rows[virtualRow.index] ?? emptyRow) as readonly T[]}\n            renderItem={renderItem}\n          />\n        ))}\n      </div>\n    </div>\n  )\n}\n","/** Number of columns that fit into `containerWidth` given a minimum card width. */\nexport function columnsForWidth(containerWidth: number, minCardWidthPx: number, gapPx: number): number {\n  if (!Number.isFinite(containerWidth) || containerWidth <= 0) return 1\n  if (!Number.isFinite(minCardWidthPx) || minCardWidthPx <= 0) return 1\n  const columns = Math.floor((containerWidth + gapPx) / (minCardWidthPx + gapPx))\n  return Math.max(1, columns)\n}\n\n/**\n * Number of rows to render outside the visible window so that a fast (e.g. mobile\n * momentum) scroll does not outrun React's render and reveal blank space. Derives\n * the row count from a target pixel buffer and the (estimated) row height, never\n * dropping below `minRows`.\n */\nexport function overscanRowsForBuffer(bufferPx: number, rowHeightPx: number, minRows = 6): number {\n  const floor = Math.max(1, Math.floor(minRows))\n  if (!Number.isFinite(bufferPx) || bufferPx <= 0) return floor\n  if (!Number.isFinite(rowHeightPx) || rowHeightPx <= 0) return floor\n  return Math.max(floor, Math.ceil(bufferPx / rowHeightPx))\n}\n\n/** Splits `items` into rows of at most `columns` entries each. */\nexport function chunkIntoRows<T>(items: readonly T[], columns: number): T[][] {\n  const safeColumns = Math.max(1, Math.floor(columns) || 1)\n  const rows: T[][] = []\n  for (let i = 0; i < items.length; i += safeColumns) {\n    rows.push(items.slice(i, i + safeColumns))\n  }\n  return rows\n}\n","import type { JSX } from 'react'\nimport { forwardRef, type ReactNode } from 'react'\nimport { ComboboxRoot } from './ComboboxRoot'\nimport { ComboboxInput } from './ComboboxInput'\nimport { ComboboxList } from './ComboboxList'\nimport type { ComboboxInputProps } from './ComboboxInput'\nimport type { ComboboxListProps } from './ComboboxList'\n\nexport interface ComboboxProps<T = string> {\n  children: ReactNode,\n  onItemClick?: (value: T) => void,\n  id?: string,\n  searchQuery?: string,\n  onSearchQueryChange?: (value: string) => void,\n  initialSearchQuery?: string,\n  inputProps?: ComboboxInputProps,\n  listProps?: ComboboxListProps,\n}\n\nexport const Combobox = forwardRef<HTMLInputElement, ComboboxProps<unknown>>(function Combobox<T = string> ({\n  children,\n  onItemClick,\n  searchQuery,\n  onSearchQueryChange,\n  initialSearchQuery,\n  inputProps,\n  listProps,\n}, ref) {\n  return (\n    <ComboboxRoot<T>\n      onItemClick={onItemClick}\n      searchQuery={searchQuery}\n      onSearchQueryChange={onSearchQueryChange}\n      initialSearchQuery={initialSearchQuery}\n    >\n      <ComboboxInput ref={ref} {...inputProps} />\n      <ComboboxList {...listProps}>{children}</ComboboxList>\n    </ComboboxRoot>\n  )\n}) as <T = string>(props: ComboboxProps<T> & React.RefAttributes<HTMLDivElement>) => JSX.Element\n","import type { ReactNode, RefObject } from 'react'\nimport { useCallback, useId, useMemo, useState } from 'react'\nimport { ComboboxContext } from './ComboboxContext'\nimport type { ComboboxContextConfig, ComboboxContextIds, ComboboxContextLayout, ComboboxContextType, ComboboxOptionType } from './ComboboxContext'\nimport type { UseComboboxOptions } from './useCombobox'\nimport { useCombobox } from './useCombobox'\nimport { DOMUtils } from '@/src/utils/dom'\n\nexport interface ComboboxRootProps<T = string> extends Omit<UseComboboxOptions, 'options'> {\n  children: ReactNode,\n  onItemClick?: (value: T) => void,\n}\n\nexport function ComboboxRoot<T = string>({\n  children,\n  onItemClick,\n  ...hookProps\n}: ComboboxRootProps<T>) {\n  const [options, setOptions] = useState<ComboboxOptionType<T>[]>([])\n  const [listRef, setListRef] = useState<RefObject<HTMLUListElement | null> | null>(null)\n  const generatedId = useId()\n  const [ids, setIds] = useState<ComboboxContextIds>({\n    trigger: `combobox-${generatedId}`,\n    listbox: `combobox-${generatedId}-listbox`,\n  })\n\n  const registerOption = useCallback(\n    (option: ComboboxOptionType<T>) => {\n      setOptions((prev) => {\n        const next = prev.filter((o) => o.id !== option.id)\n        next.push(option)\n        next.sort((a, b) =>\n          DOMUtils.compareDocumentPosition(a.ref.current, b.ref.current))\n        return next\n      })\n      return () =>\n        setOptions((prev) => prev.filter((o) => o.id !== option.id))\n    },\n    []\n  )\n\n  const registerList = useCallback((ref: RefObject<HTMLUListElement | null>) => {\n    setListRef(() => ref)\n    return () => setListRef(null)\n  }, [])\n\n  const hookOptions = useMemo(\n    () =>\n      options.map((o) => ({\n        id: o.id,\n        label: o.label,\n        disabled: o.disabled,\n      })),\n    [options]\n  )\n\n  const state = useCombobox({ ...hookProps, options: hookOptions })\n\n  const idToOptionMap = useMemo(() => {\n    return options.reduce((acc, o) => {\n      acc[o.id] = o\n      return acc\n    }, {} as Record<string, ComboboxOptionType<T>>)\n  }, [options])\n\n  const selectOption = useCallback(\n    (id: string) => {\n      const option = idToOptionMap[id]\n      if (option) onItemClick?.(option.value as T)\n    },\n    [idToOptionMap, onItemClick]\n  )\n\n  const config: ComboboxContextConfig = useMemo(\n    () => ({ ids, setIds }),\n    [ids, setIds]\n  )\n\n  const layout: ComboboxContextLayout = useMemo(\n    () => ({\n      listRef: listRef ?? { current: null },\n      registerList,\n    }),\n    [listRef, registerList]\n  )\n\n  const search = useMemo(\n    () => ({\n      searchQuery: state.searchQuery,\n      setSearchQuery: state.setSearchQuery,\n    }),\n    [state.searchQuery, state.setSearchQuery]\n  )\n\n  const contextValue = useMemo(\n    () => ({\n      highlightedId: state.highlightedId,\n      options,\n      visibleOptionIds: state.visibleOptionIds,\n      idToOptionMap,\n      registerOption,\n      selectOption,\n      highlightFirst: state.highlightFirst,\n      highlightLast: state.highlightLast,\n      highlightNext: state.highlightNext,\n      highlightPrevious: state.highlightPrevious,\n      highlightItem: state.highlightItem,\n      config,\n      layout,\n      search,\n    }),\n    [\n      state.highlightedId,\n      state.visibleOptionIds,\n      state.highlightFirst,\n      state.highlightLast,\n      state.highlightNext,\n      state.highlightPrevious,\n      state.highlightItem,\n      options,\n      idToOptionMap,\n      registerOption,\n      selectOption,\n      config,\n      layout,\n      search,\n    ]\n  )\n\n  return (\n    <ComboboxContext.Provider value={contextValue as ComboboxContextType<unknown>}>\n      {children}\n    </ComboboxContext.Provider>\n  )\n}\n","import type { Dispatch, ReactNode, RefObject, SetStateAction } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport interface ComboboxOptionType<T = string> {\n  id: string,\n  value: T,\n  label?: string,\n  display?: ReactNode,\n  disabled?: boolean,\n  ref: RefObject<HTMLElement>,\n}\n\nexport interface ComboboxContextIds {\n  trigger: string,\n  listbox: string,\n}\n\nexport interface ComboboxContextInternalState {\n  highlightedId: string | null,\n}\n\nexport interface ComboboxContextComputedState<T> {\n  options: ReadonlyArray<ComboboxOptionType<T>>,\n  visibleOptionIds: ReadonlyArray<string>,\n  idToOptionMap: Record<string, ComboboxOptionType<T>>,\n}\n\nexport interface ComboboxContextActions<T> {\n  registerOption(option: ComboboxOptionType<T>): () => void,\n  selectOption(id: string): void,\n  highlightFirst(): void,\n  highlightLast(): void,\n  highlightNext(): void,\n  highlightPrevious(): void,\n  highlightItem(id: string): void,\n}\n\nexport interface ComboboxContextLayout {\n  listRef: RefObject<HTMLUListElement | null>,\n  registerList(ref: RefObject<HTMLUListElement | null>): () => void,\n}\n\nexport interface ComboboxContextSearch {\n  searchQuery: string,\n  setSearchQuery(query: string): void,\n}\n\nexport interface ComboboxContextConfig {\n  ids: ComboboxContextIds,\n  setIds: Dispatch<SetStateAction<ComboboxContextIds>>,\n}\n\nexport interface ComboboxContextType<T> extends ComboboxContextInternalState, ComboboxContextComputedState<T>, ComboboxContextActions<T> {\n  config: ComboboxContextConfig,\n  layout: ComboboxContextLayout,\n  search: ComboboxContextSearch,\n}\n\nexport const ComboboxContext = createContext<ComboboxContextType<unknown> | null>(null)\n\nexport function useComboboxContext<T = string>(): ComboboxContextType<T> {\n  const ctx = useContext(ComboboxContext)\n  if (ctx == null) {\n    throw new Error('useComboboxContext must be used within ComboboxRoot')\n  }\n  return ctx as ComboboxContextType<T>\n}\n","import { useCallback, useMemo } from 'react'\nimport { useListNavigation } from '@/src/hooks/useListNavigation'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useSearch } from '@/src/hooks/useSearch'\n\nexport interface UseComboboxOption {\n  id: string,\n  label?: string,\n  disabled?: boolean,\n}\n\nexport interface UseComboboxOptions {\n  options: ReadonlyArray<UseComboboxOption>,\n  searchQuery?: string,\n  onSearchQueryChange?: (query: string) => void,\n  initialSearchQuery?: string,\n}\n\nexport interface UseComboboxState {\n  searchQuery: string,\n  highlightedId: string | null,\n}\n\nexport interface UseComboboxComputedState {\n  visibleOptionIds: ReadonlyArray<string>,\n}\n\nexport interface UseComboboxActions {\n  setSearchQuery: (query: string) => void,\n  highlightFirst: () => void,\n  highlightLast: () => void,\n  highlightNext: () => void,\n  highlightPrevious: () => void,\n  highlightItem: (id: string) => void,\n}\n\nexport interface UseComboboxReturn extends UseComboboxState, UseComboboxComputedState, UseComboboxActions {}\n\nexport function useCombobox({\n  options,\n  searchQuery: controlledSearchQuery,\n  onSearchQueryChange,\n  initialSearchQuery = '',\n}: UseComboboxOptions): UseComboboxReturn {\n  const [searchQuery, setSearchQuery] = useControlledState({\n    value: controlledSearchQuery,\n    onValueChange: onSearchQueryChange,\n    defaultValue: initialSearchQuery,\n  })\n\n  const { searchResult: visibleOptions } = useSearch({\n    items: options,\n    searchQuery: searchQuery ?? '',\n    toTags: useCallback((o: UseComboboxOption) => [o.label], []),\n  })\n\n  const visibleOptionIds = useMemo(\n    () => visibleOptions.map((o) => o.id),\n    [visibleOptions]\n  )\n\n  const enabledOptionIds = useMemo(\n    () => visibleOptions.filter((o) => !o.disabled).map((o) => o.id),\n    [visibleOptions]\n  )\n\n  const listNav = useListNavigation({ options: enabledOptionIds })\n\n  const highlightItem = useCallback(\n    (id: string) => {\n      if (!enabledOptionIds.includes(id)) return\n      listNav.highlight(id)\n    },\n    [enabledOptionIds, listNav]\n  )\n\n  const state: UseComboboxState = useMemo(\n    () => ({\n      searchQuery: searchQuery ?? '',\n      highlightedId: listNav.highlightedId,\n    }),\n    [searchQuery, listNav.highlightedId]\n  )\n\n  const computedState: UseComboboxComputedState = useMemo(\n    () => ({ visibleOptionIds }),\n    [visibleOptionIds]\n  )\n\n  const actions: UseComboboxActions = useMemo(\n    () => ({\n      setSearchQuery,\n      highlightFirst: listNav.first,\n      highlightLast: listNav.last,\n      highlightNext: listNav.next,\n      highlightPrevious: listNav.previous,\n      highlightItem,\n    }),\n    [setSearchQuery, listNav.first, listNav.last, listNav.next, listNav.previous, highlightItem]\n  )\n\n  return useMemo(\n    (): UseComboboxReturn => ({\n      ...state,\n      ...computedState,\n      ...actions,\n    }),\n    [state, computedState, actions]\n  )\n}\n","import { type ComponentProps, forwardRef, useCallback } from 'react'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useComboboxContext } from './ComboboxContext'\n\nexport type ComboboxInputProps = Omit<ComponentProps<typeof Input>, 'value'>\n\nexport const ComboboxInput = forwardRef<HTMLInputElement, ComboboxInputProps>(\n  function ComboboxInput(props, ref) {\n    const translation = useHightideTranslation()\n    const context = useComboboxContext()\n    const { highlightNext, highlightPrevious, highlightFirst, highlightLast, highlightedId, selectOption } = context\n\n    const handleKeyDown = useCallback(\n      (event: React.KeyboardEvent<HTMLInputElement>) => {\n        props.onKeyDown?.(event)\n        switch (event.key) {\n        case 'ArrowDown':\n          highlightNext()\n          event.preventDefault()\n          break\n        case 'ArrowUp':\n          highlightPrevious()\n          event.preventDefault()\n          break\n        case 'Home':\n          highlightFirst()\n          event.preventDefault()\n          break\n        case 'End':\n          highlightLast()\n          event.preventDefault()\n          break\n        case 'Enter':\n          if (highlightedId) {\n            selectOption(highlightedId)\n            event.preventDefault()\n          }\n          break\n        default:\n          break\n        }\n      },\n      [props, highlightedId, selectOption, highlightNext, highlightPrevious, highlightFirst, highlightLast]\n    )\n\n    return (\n      <Input\n        {...props}\n        ref={ref}\n        value={context.search.searchQuery}\n        onValueChange={context.search.setSearchQuery}\n        onKeyDown={handleKeyDown}\n        placeholder={props.placeholder ?? translation('search')}\n        role=\"combobox\"\n        aria-expanded={context.visibleOptionIds.length > 0}\n        aria-controls={context.config.ids.listbox}\n        aria-activedescendant={context.highlightedId ?? undefined}\n        aria-autocomplete=\"list\"\n      />\n    )\n  }\n)\n","import type { HTMLAttributes, RefObject } from 'react'\nimport { forwardRef, useEffect, useRef } from 'react'\nimport clsx from 'clsx'\nimport { useComboboxContext } from './ComboboxContext'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\n\nexport type ComboboxListProps = HTMLAttributes<HTMLUListElement>\n\nexport const ComboboxList = forwardRef<HTMLUListElement, ComboboxListProps>(\n  function ComboboxList({ children, ...props }, ref) {\n    const translation = useHightideTranslation()\n    const context = useComboboxContext()\n    const { layout } = context\n    const { registerList } = layout\n    const innerRef = useRef<HTMLUListElement>(null)\n\n    useEffect(() => {\n      return registerList(innerRef as RefObject<HTMLUListElement | null>)\n    }, [registerList])\n\n    const setRefs = (node: HTMLUListElement | null) => {\n      (innerRef as RefObject<HTMLUListElement | null>).current = node\n      if (typeof ref === 'function') ref(node)\n      else if (ref) (ref as RefObject<HTMLUListElement | null>).current = node\n    }\n\n    const count = context.visibleOptionIds.length\n\n    return (\n      <ul\n        {...props}\n        ref={setRefs}\n        id={context.config.ids.listbox}\n        role=\"listbox\"\n        aria-label={translation('filterOptions')}\n        tabIndex={-1}\n        data-name=\"combobox-list\"\n      >\n        {children}\n        <li\n          role=\"option\"\n          aria-selected={false}\n          aria-disabled={true}\n          aria-live=\"polite\"\n          aria-atomic={true}\n          data-name=\"combobox-list-status\"\n          className={clsx({ 'sr-only': count > 0 })}\n        >\n          {translation('nResultsFound', { count })}\n        </li>\n      </ul>\n    )\n  }\n)\n","import type { HTMLAttributes, ReactNode, RefObject } from 'react'\nimport { forwardRef, useEffect, useId, useRef } from 'react'\nimport clsx from 'clsx'\nimport { useComboboxContext } from './ComboboxContext'\n\nexport interface ComboboxOptionProps<T = string> extends HTMLAttributes<HTMLLIElement> {\n  value: T,\n  label: string,\n  disabled?: boolean,\n}\n\nexport const ComboboxOption = forwardRef<HTMLLIElement, ComboboxOptionProps<unknown>>(function ComboboxOption<T = string>({\n  children,\n  value,\n  label,\n  disabled = false,\n  id: idProp,\n  className,\n  ...restProps\n}, ref) {\n  const context = useComboboxContext<T>()\n  const { registerOption } = context\n  const itemRef = useRef<HTMLLIElement>(null)\n  const generatedId = useId()\n  const optionId = idProp ?? `combobox-option-${generatedId}`\n\n  const resolvedDisplay: ReactNode = children ?? label\n\n  useEffect(() => {\n    return registerOption({\n      id: optionId,\n      value,\n      label,\n      display: resolvedDisplay,\n      disabled,\n      ref: itemRef as React.RefObject<HTMLElement>,\n    })\n  }, [optionId, value, label, resolvedDisplay, disabled, registerOption])\n\n  useEffect(() => {\n    if (context.highlightedId === optionId) {\n      itemRef.current?.scrollIntoView?.({ behavior: 'smooth', block: 'nearest' })\n    }\n  }, [context.highlightedId, optionId])\n\n  const isVisible = context.visibleOptionIds.includes(optionId)\n  const isHighlighted = context.highlightedId === optionId\n\n  return (\n    <li\n      {...restProps}\n      ref={(node) => {\n        itemRef.current = node\n        if (typeof ref === 'function') ref(node)\n        else if (ref) (ref as RefObject<HTMLLIElement | null>).current = node\n      }}\n      id={optionId}\n      hidden={!isVisible}\n\n      role=\"option\"\n      aria-selected={isHighlighted}\n      aria-disabled={disabled}\n      aria-hidden={!isVisible}\n\n      data-name=\"combobox-option\"\n      data-highlighted={isHighlighted ? '' : undefined}\n      data-visible={isVisible ? '' : undefined}\n      data-disabled={disabled ? '' : undefined}\n      className={clsx(!isVisible && 'hidden', className)}\n      onClick={(event) => {\n        if (!disabled) {\n          context.selectOption(optionId)\n          restProps.onClick?.(event)\n        }\n      }}\n      onMouseEnter={(event) => {\n        if (!disabled) {\n          context.highlightItem(optionId)\n          restProps.onMouseEnter?.(event)\n        }\n      }}\n    >\n      {resolvedDisplay}\n    </li>\n  )\n})\n\nComboboxOption.displayName = 'ComboboxOption'\n","import { useState } from 'react'\nimport { clsx } from 'clsx'\nimport { writeToClipboard } from '@/src/utils/writeToClipboard'\nimport { CheckIcon, Copy } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { TooltipDisplay, TooltipRoot, TooltipTrigger, type TooltipProps } from './Tooltip'\n\nexport interface CopyToClipboardWrapperProps extends Omit<TooltipProps, 'tooltip'> {\n  textToCopy: string,\n}\n\n/**\n * A Component for showing a tooltip when hovering over Content\n */\nexport const CopyToClipboardWrapper = ({\n  children,\n  textToCopy,\n  isInitiallyShown = false,\n  appearDelay = 0,\n  disabled = false,\n  containerClassName,\n  alignment,\n  isAnimated,\n  ...props\n}: CopyToClipboardWrapperProps) => {\n  const translation = useHightideTranslation()\n  const [isShowingConfirmation, setIsShowingConfirmation] = useState(false)\n\n  return (\n    <TooltipRoot\n      isInitiallyShown={isInitiallyShown}\n      appearDelay={appearDelay}\n      disabled={disabled}\n      onIsShownChange={isShown => {\n        if(!isShown) {\n          setIsShowingConfirmation(false)\n        }\n      }}\n    >\n      <TooltipTrigger>\n        {({ props, callbackRef, disabled }) => (\n          <div\n            ref={callbackRef}\n            className={clsx('w-fit hover:cursor-copy', containerClassName)}\n            {...(disabled ? undefined : props)}\n            onClick={() => {\n              if(disabled) return\n              props.onClick?.()\n              writeToClipboard(textToCopy).catch(console.error)\n              setIsShowingConfirmation(true)\n            }}\n          >\n            {children}\n          </div>\n        )}\n      </TooltipTrigger>\n      <TooltipDisplay\n        alignment={alignment}\n        isAnimated={isAnimated}\n        {...props}\n      >\n        {isShowingConfirmation ? (\n          <div className=\"flex-row-1\">\n            <CheckIcon size={16} className=\"text-positive\"/>\n            {translation('copied')}\n          </div>\n        ) : (\n          <div className=\"flex-row-1 text-description\">\n            <Copy size={16}/>\n            {translation('clickToCopy')}\n          </div>\n        )}\n      </TooltipDisplay>\n    </TooltipRoot>\n  )\n}\n","'use client'\n\nexport const writeToClipboard = (text: string) => {\n  return navigator.clipboard.writeText(text)\n}","import clsx from 'clsx'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport { forwardRef, useCallback, useId } from 'react'\nimport { Checkbox, type CheckboxProps } from './Checkbox'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport type { FormFieldDataHandling } from '../form/FormField'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\n\ntype LabelledCheckboxCheckPosition = 'left' | 'right'\n\nexport type LabelledCheckboxProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'>\n  & Partial<FormFieldInteractionStates>\n  & Partial<FormFieldDataHandling<boolean>>\n  & Pick<CheckboxProps, 'indeterminate' | 'size' | 'alwaysShowCheckIcon' | 'isRounded'>\n  & {\n    initialValue?: boolean,\n    label: ReactNode,\n    checkPosition?: LabelledCheckboxCheckPosition,\n    checkboxClassName?: string,\n    labelClassName?: string,\n  }\n\n/**\n * A checkbox with a label that toggles the checkbox when the container is clicked\n */\nexport const LabelledCheckbox = forwardRef<HTMLDivElement, LabelledCheckboxProps>(function LabelledCheckbox({\n  value: controlledValue,\n  initialValue = false,\n  onValueChange,\n  onEditComplete,\n  indeterminate,\n  required = false,\n  invalid = false,\n  disabled = false,\n  readOnly = false,\n  size = 'md',\n  alwaysShowCheckIcon = false,\n  isRounded = false,\n  label,\n  checkPosition = 'left',\n  checkboxClassName,\n  labelClassName,\n  className,\n  id: customId,\n  ...props\n}, forwardedRef) {\n  const generatedId = useId()\n  const id = customId ?? generatedId\n  const labelId = `${id}-label`\n\n  const onEditCompleteStable = useEventCallbackStabilizer(onEditComplete)\n  const onValueChangeStable = useEventCallbackStabilizer(onValueChange)\n  const onChangeWrapper = useCallback((value: boolean) => {\n    onValueChangeStable(value)\n    onEditCompleteStable(value)\n  }, [onValueChangeStable, onEditCompleteStable])\n\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onChangeWrapper,\n    defaultValue: initialValue,\n  })\n\n  const toggle = useCallback(() => {\n    if (disabled || readOnly) {\n      return\n    }\n    setValue(prev => !prev)\n  }, [disabled, readOnly, setValue])\n\n  const checkbox = (\n    <Checkbox\n      value={value}\n      indeterminate={indeterminate}\n      required={required}\n      invalid={invalid}\n      disabled={disabled}\n      readOnly={readOnly}\n      size={size}\n      alwaysShowCheckIcon={alwaysShowCheckIcon}\n      isRounded={isRounded}\n      className={checkboxClassName}\n    />\n  )\n\n  const labelElement = (\n    <label\n      id={labelId}\n      className={clsx('labelled-checkbox-label', labelClassName)}\n    >\n      {label}\n    </label>\n  )\n\n  return (\n    <div\n      {...props}\n      ref={forwardedRef}\n\n      onClick={(event) => {\n        toggle()\n        props.onClick?.(event)\n      }}\n      onKeyDown={(event) => {\n        if (disabled || readOnly) {\n          return\n        }\n        if (event.key === ' ' || event.key === 'Enter') {\n          event.preventDefault()\n          toggle()\n        }\n        props.onKeyDown?.(event)\n      }}\n\n      className={clsx('labelled-checkbox-container', className)}\n      data-check-position={checkPosition}\n      data-checked={!indeterminate ? value : 'indeterminate'}\n      data-size={size ?? undefined}\n      {...PropsUtil.dataAttributes.interactionStates({ disabled, invalid, readOnly, required })}\n\n      id={id}\n      {...PropsUtil.aria.interactionStates({ disabled, invalid, readOnly, required }, props)}\n    >\n      {checkPosition === 'left' ? checkbox : labelElement}\n      {checkPosition === 'left' ? labelElement : checkbox}\n    </div>\n  )\n})\n","import { type PropsWithChildren, type ReactNode, useCallback, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\nimport type { PopUpProps } from '../layout/popup/PopUp'\nimport { PopUp } from '../layout/popup/PopUp'\n\nexport type MenuItemProps = {\n  onClick?: () => void,\n  isDisabled?: boolean,\n  className?: string,\n}\n// TODO differentiate between buttons, links and toggleable items here\nexport const MenuItem = ({\n  children,\n  onClick,\n  isDisabled = false,\n  className\n}: PropsWithChildren<MenuItemProps>) => (\n  <div\n    className={clsx('block px-3 py-1.5 first:rounded-t-md last:rounded-b-md text-sm font-semibold text-nowrap', {\n      'text-disabled cursor-not-allowed': isDisabled,\n      'text-menu-text hover:bg-primary/20': !isDisabled,\n      'cursor-pointer': !!onClick,\n    }, className)}\n    onClick={onClick}\n  >\n    {children}\n  </div>\n)\n\nexport type MenuBag = {\n  isOpen: boolean,\n  disabled: boolean,\n  toggleOpen: () => void,\n  close: () => void,\n}\n\nexport interface MenuProps extends Omit<PopUpProps, 'children' | 'anchor'> {\n  children: (bag: MenuBag) => ReactNode | ReactNode,\n  trigger: (bag: MenuBag, ref: (el: HTMLElement | null) => void) => ReactNode,\n  disabled?: boolean,\n}\n\n/**\n * A Menu Component to allow the user to see different functions\n */\nexport const Menu = ({\n  trigger,\n  children,\n  disabled = false,\n  ...props\n}: MenuProps) => {\n  const triggerRef = useRef<HTMLElement>(null)\n  const [isOpen, setIsOpen] = useState(false)\n\n  const bag: MenuBag = {\n    isOpen,\n    close: () => setIsOpen(false),\n    toggleOpen: () => setIsOpen(prevState => !prevState),\n    disabled,\n  }\n\n  return (\n    <>\n      {trigger(bag, useCallback((el) => triggerRef.current = el, []))}\n      <PopUp\n        {...props}\n        isOpen={isOpen && !disabled}\n        anchor={triggerRef}\n\n        outsideClickOptions={{\n          refs: [triggerRef, ...(props.outsideClickOptions?.refs ?? [])],\n          active: isOpen && !disabled && (props.outsideClickOptions?.active ?? true),\n        }}\n\n        onOutsideClick={(event) => {\n          props.onOutsideClick?.(event)\n          setIsOpen(false)\n        }}\n      >\n        {BagFunctionUtil.resolve<MenuBag>(children, bag)}\n      </PopUp>\n    </>\n  )\n}\n\n","import type { ForwardedRef, HTMLAttributes, ReactNode } from 'react'\nimport { forwardRef, useEffect, useRef } from 'react'\nimport { useMultiSelectContext } from './MultiSelectContext'\nimport type { MultiSelectRootProps } from './MultiSelectRoot'\nimport { MultiSelectRoot } from './MultiSelectRoot'\nimport type { MultiSelectContentProps } from './MultiSelectContent'\nimport { MultiSelectContent } from './MultiSelectContent'\nimport { IconButton } from '@/src/components/user-interaction/IconButton'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { XIcon, Plus } from 'lucide-react'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\nexport type MultiSelectChipDisplayButtonProps = HTMLAttributes<HTMLDivElement> & {\n  'disabled'?: boolean,\n  'placeholder'?: ReactNode,\n  'data-name'?: string,\n}\n\nexport const MultiSelectChipDisplayButton = forwardRef<\n  HTMLDivElement,\n  MultiSelectChipDisplayButtonProps\n>(function MultiSelectChipDisplayButton({ id, ...props }, ref: ForwardedRef<HTMLDivElement>) {\n  const translation = useHightideTranslation()\n  const context = useMultiSelectContext<unknown>()\n  const { config, layout } = context\n  const { setIds } = config\n  const { registerTrigger } = layout\n\n  useEffect(() => {\n    if (id) setIds((prev) => ({ ...prev, trigger: id }))\n  }, [id, setIds])\n\n  const innerRef = useRef<HTMLDivElement | null>(null)\n\n  useEffect(() => {\n    const unregister = registerTrigger(innerRef)\n    return () => unregister()\n  }, [registerTrigger])\n\n  const disabled = !!props?.disabled || !!context.disabled\n  const readOnly = !!context.readOnly\n  const invalid = context.invalid\n  const hasInteractions = !readOnly && !disabled\n  const selectedOptions = context.selectedIds\n    .map((oid) => context.idToOptionMap[oid])\n    .filter(Boolean)\n\n  return (\n    <div\n      {...props}\n      ref={ReactRefsUtil.assingRefsBuilder([innerRef, ref])}\n      onClick={(event) => {\n        props.onClick?.(event)\n        if (event.defaultPrevented) return\n        if (!hasInteractions) return\n        context.toggleIsOpen()\n      }}\n      data-name={props['data-name'] ?? 'multi-select-chip-display-button'}\n      data-value={context.value.length > 0 ? '' : undefined}\n      data-disabled={disabled ? '' : undefined}\n      data-readonly={readOnly ? '' : undefined}\n      data-invalid={invalid ? '' : undefined}\n      aria-invalid={invalid}\n      aria-disabled={disabled}\n      aria-readonly={readOnly}\n    >\n      {selectedOptions.map((opt) => (\n        <div key={opt.id} data-name=\"multi-select-chip-display-chip\">\n          {opt.display}\n          <IconButton\n            tooltip={translation('remove')}\n            disabled={!hasInteractions}\n            onClick={(e) => {\n              context.toggleSelection(opt.id, false)\n              e.preventDefault()\n            }}\n            size=\"sm\"\n            color=\"negative\"\n            coloringStyle=\"text\"\n            className=\"flex-row-0 items-center size-7 p-1\"\n          >\n            <XIcon className=\"size-5\" />\n          </IconButton>\n        </div>\n      ))}\n      <IconButton\n        id={context.config.ids.trigger}\n        disabled={!hasInteractions}\n        onClick={(event) => {\n          event.stopPropagation()\n          if (!hasInteractions) return\n          context.toggleIsOpen()\n        }}\n        onKeyDown={(event) => {\n          if (!hasInteractions) return\n          switch (event.key) {\n          case 'ArrowDown':\n            context.setIsOpen(true, 'first')\n            break\n          case 'ArrowUp':\n            context.setIsOpen(true, 'last')\n          }\n        }}\n        tooltip={translation('changeSelection')}\n        size=\"md\"\n        color=\"neutral\"\n        aria-invalid={invalid}\n        aria-disabled={disabled}\n        aria-haspopup=\"dialog\"\n        aria-expanded={context.isOpen}\n        aria-controls={\n          context.isOpen ? context.config.ids.content : undefined\n        }\n        className=\"size-9\"\n      >\n        <Plus />\n      </IconButton>\n    </div>\n  )\n})\n\nexport type MultiSelectChipDisplayProps<T = string> = MultiSelectRootProps<T> & {\n  contentPanelProps?: MultiSelectContentProps,\n  chipDisplayProps?: MultiSelectChipDisplayButtonProps,\n};\n\nexport const MultiSelectChipDisplay = forwardRef(\n  function MultiSelectChipDisplay<T = string>(\n    {\n      children,\n      contentPanelProps,\n      chipDisplayProps,\n      ...props\n    }: MultiSelectChipDisplayProps<T>,\n    ref: React.ForwardedRef<HTMLDivElement>\n  ) {\n    return (\n      <MultiSelectRoot<T> {...props}>\n        <MultiSelectChipDisplayButton ref={ref} {...chipDisplayProps} />\n        <MultiSelectContent {...contentPanelProps}>{children}</MultiSelectContent>\n      </MultiSelectRoot>\n    )\n  }\n)\n","import { useCallback, useEffect, useState } from 'react'\nimport clsx from 'clsx'\nimport { getNeighbours, range } from '@/src/utils/array'\nimport type { DirectionNumber } from '@/src/utils/math'\nimport { MathUtil } from '@/src/utils/math'\n\nexport type ScrollPickerProps<T> = {\n  options: T[],\n  mapping: (value: T) => string,\n  selected?: T,\n  onChange?: (value: T) => void,\n  disabled?: boolean,\n}\n\ntype AnimationData<T> = {\n  /** The index we scroll to */\n  targetIndex: number,\n  /** The index we are currently showing centered */\n  currentIndex: number,\n  items: T[],\n  /** From -0.5 to 0.5 */\n  transition: number,\n  velocity: number,\n  animationVelocity: number,\n  lastTimeStamp?: number,\n  lastScrollTimeStamp?: number,\n}\n\nconst up = 1\nconst down = -1\n\n/**\n * A component for picking an option by scrolling\n */\nexport const ScrollPicker = <T, >({\n  options,\n  mapping,\n  selected,\n  onChange,\n  disabled = false,\n}: ScrollPickerProps<T>) => {\n  let selectedIndex = 0\n  if (selected && options.indexOf(selected) !== -1) {\n    selectedIndex = options.indexOf(selected)\n  }\n  const [{\n    currentIndex,\n    transition,\n    items,\n    lastTimeStamp\n  }, setAnimation] = useState<AnimationData<T>>({\n    targetIndex: selectedIndex,\n    currentIndex: disabled ? selectedIndex : 0,\n    velocity: 0,\n    animationVelocity: Math.floor(options.length / 2),\n    transition: 0,\n    items: options,\n  })\n\n  const itemsShownCount = 5\n  const shownItems = getNeighbours(range(items.length), currentIndex).map(index => ({\n    name: mapping(items[index]!), index\n  }))\n\n  const itemHeight = 40\n  const distance = 8\n\n  const containerHeight = itemHeight * (itemsShownCount - 2) + distance * (itemsShownCount - 2 + 1)\n\n  const getDirection = useCallback((targetIndex: number, currentIndex: number, transition: number, length: number): DirectionNumber => {\n    if (targetIndex === currentIndex) {\n      return transition > 0 ? up : down\n    }\n    let distanceForward = targetIndex - currentIndex\n    if (distanceForward < 0) {\n      distanceForward += length\n    }\n    return distanceForward >= length / 2 ? down : up\n  }, [])\n\n  const animate = useCallback((timestamp: number, startTime: number | undefined) => {\n    setAnimation((prevState) => {\n      const {\n        targetIndex,\n        currentIndex,\n        transition,\n        animationVelocity,\n        velocity,\n        items,\n        lastScrollTimeStamp\n      } = prevState\n      if (disabled) {\n        return { ...prevState, currentIndex: targetIndex, velocity: 0, lastTimeStamp: timestamp }\n      }\n      if ((targetIndex === currentIndex && velocity === 0 && transition === 0) || !startTime) {\n        return { ...prevState, lastTimeStamp: timestamp }\n      }\n      const progress = (timestamp - startTime) / 1000 // to seconds\n      const direction = getDirection(targetIndex, currentIndex, transition, items.length)\n\n      let newVelocity = velocity\n      let usedVelocity\n      let newCurrentIndex = currentIndex\n      const isAutoScrolling = velocity <= 10 && (!lastScrollTimeStamp || timestamp - lastScrollTimeStamp > 50)\n\n      const newLastScrollTimeStamp = velocity !== 0 ? timestamp : lastScrollTimeStamp\n\n      // manual scrolling\n      if (isAutoScrolling) {\n        usedVelocity = direction * animationVelocity\n      } else {\n        usedVelocity = velocity\n        newVelocity = velocity * 0.5 // drag loss\n        if (Math.abs(newVelocity) <= 0.05) {\n          newVelocity = 0\n        }\n      }\n\n      let newTransition = transition + usedVelocity * progress\n      const changeThreshold = 0.5\n\n      while (newTransition >= changeThreshold) {\n        if (newCurrentIndex === targetIndex && newTransition >= changeThreshold && isAutoScrolling) {\n          newTransition = 0\n          break\n        }\n        newCurrentIndex = (currentIndex + 1) % items.length\n        newTransition -= 1\n      }\n      if (newTransition >= changeThreshold) {\n        newTransition = 0\n      }\n      while (newTransition <= -changeThreshold) {\n        if (newCurrentIndex === targetIndex && newTransition <= -changeThreshold && isAutoScrolling) {\n          newTransition = 0\n          break\n        }\n        newCurrentIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1\n        newTransition += 1\n      }\n      let newTargetIndex = targetIndex\n      if (!isAutoScrolling) {\n        newTargetIndex = newCurrentIndex\n      }\n\n      if ((currentIndex !== newTargetIndex || newTargetIndex !== targetIndex) && newTargetIndex === newCurrentIndex) {\n        onChange?.(items[newCurrentIndex]!)\n      }\n      return {\n        targetIndex: newTargetIndex,\n        currentIndex: newCurrentIndex,\n        animationVelocity,\n        transition: newTransition,\n        velocity: newVelocity,\n        items,\n        lastTimeStamp: timestamp,\n        lastScrollTimeStamp: newLastScrollTimeStamp\n      }\n    })\n  }, [disabled, getDirection, onChange])\n\n  useEffect(() => {\n    // constant update\n    requestAnimationFrame((timestamp) => animate(timestamp, lastTimeStamp))\n  })\n\n  const opacity = (transition: number, index: number, itemsCount: number) => {\n    const max = 100\n    const min = 0\n    const distance = max - min\n\n    let opacityValue = min\n    const unitTransition = MathUtil.clamp(transition / 0.5, 0, 1)\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 MathUtil.clamp(1 - (opacityValue / max), 0, 1)\n  }\n\n  return (\n    <div\n      className=\"relative overflow-hidden\"\n      style={{ height: containerHeight }}\n      onWheel={event => {\n        if (event.deltaY !== 0) {\n          const deltaY = MathUtil.clamp(event.deltaY, -itemHeight * 2 / 3, itemHeight * 2 / 3)\n          // TODO slower increase\n          setAnimation(({ velocity, ...animationData }) =>\n            ({ ...animationData, velocity: velocity + deltaY }))\n        }\n      }}\n    >\n      <div className=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2\">\n        <div\n          className=\"absolute z-[1] top-1/2 -translate-y-1/2 -translate-x-1/2 left-1/2 w-full min-w-[40px] border border-divider/50 border-y-2 border-x-0 \"\n          style={{ height: `${itemHeight}px` }}\n        />\n        <div\n          className=\"flex-col-2 select-none\"\n          style={{\n            transform: `translateY(${-transition * (distance + itemHeight)}px)`,\n            columnGap: `${distance}px`,\n          }}\n        >\n          {shownItems.map(({ name, index }, arrayIndex) => (\n            <div\n              key={index}\n              className={clsx(\n                `flex-col-2 items-center justify-center rounded-md`,\n                {\n                  'text-primary font-bold': currentIndex === index,\n                  'text-on-background': currentIndex === index,\n                  'cursor-pointer': !disabled,\n                  'cursor-not-allowed': disabled,\n                }\n              )}\n              style={{\n                opacity: currentIndex !== index ? opacity(transition, arrayIndex, shownItems.length) : undefined,\n                height: `${itemHeight}px`,\n                maxHeight: `${itemHeight}px`,\n              }}\n              onClick={() => !disabled && setAnimation(prevState => ({ ...prevState, targetIndex: index }))}\n            >\n              {name}\n            </div>\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import { type HTMLAttributes, useCallback } from 'react'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../form/FormField'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type SwitchProps = HTMLAttributes<HTMLDivElement>\n  & Partial<FormFieldInteractionStates>\n  & Partial<FormFieldDataHandling<boolean>>\n  & {\n    initialValue?: boolean,\n  }\n\n/**\n * A binary on/off switch\n *\n * The state is managed by the parent.\n */\nexport const Switch = ({\n  value: controlledValue,\n  initialValue = false,\n  required = false,\n  invalid = false,\n  disabled = false,\n  readOnly = false,\n  onValueChange,\n  onEditComplete,\n  ...props\n}: SwitchProps) => {\n  const onEditCompleteStable = useEventCallbackStabilizer(onEditComplete)\n  const onValueChangeStable = useEventCallbackStabilizer(onValueChange)\n\n  const onChangeWrapper = useCallback((value: boolean) => {\n    onValueChangeStable(!value)\n    onEditCompleteStable(!value)\n  }, [onValueChangeStable, onEditCompleteStable])\n\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onChangeWrapper,\n    defaultValue: initialValue,\n  })\n\n  return (\n    <div\n      {...props}\n\n      onClick={(event) => {\n        if (!disabled && !readOnly) {\n          setValue(prev => !prev)\n          props.onClick?.(event)\n        }\n      }}\n      onKeyDown={(event) => {\n        if (disabled || readOnly) return\n        if (event.key === ' ' || event.key === 'Enter') {\n          event.preventDefault()\n          setValue(prev => !prev)\n          props.onKeyDown?.(event)\n        }\n      }}\n\n      role=\"switch\"\n      tabIndex={disabled ? -1 : 0}\n      aria-checked={value}\n      {...PropsUtil.aria.interactionStates({ disabled, invalid, readOnly, required }, props)}\n\n      data-name={props['data-name'] ?? 'switch'}\n      data-active={PropsUtil.dataAttributes.bool(value)}\n      {...PropsUtil.dataAttributes.interactionStates({ disabled, invalid, readOnly, required })}\n    >\n      <div data-name=\"switch-track\" className=\"switch-track\">\n        <div data-name=\"switch-thumb\" data-active={PropsUtil.dataAttributes.bool(value)} className=\"switch-thumb\" />\n      </div>\n    </div>\n  )\n}\n\n\n","import type { LabelHTMLAttributes, ReactNode, TextareaHTMLAttributes } from 'react'\nimport { forwardRef, useCallback, useId } from 'react'\nimport clsx from 'clsx'\nimport { useDelay, type UseDelayOptions } from '@/src/hooks/useDelay'\nimport type { FormFieldInteractionStates } from '../form/FieldLayout'\nimport type { FormFieldDataHandling } from '../form/FormField'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { useEventCallbackStabilizer } from '@/src/hooks/useEventCallbackStabelizer'\n\nexport type TextareaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value'>\n  & Partial<FormFieldDataHandling<string>>\n  & Partial<FormFieldInteractionStates>\n  & {\n    initialValue?: string,\n    saveDelayOptions?: UseDelayOptions,\n}\n\n/**\n * A Textarea component for inputting longer texts\n *\n * The State is managed by the parent\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea({\n  value: controlledValue,\n  initialValue,\n  invalid = false,\n  onValueChange,\n  onEditComplete,\n  saveDelayOptions,\n  ...props\n}, ref) {\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onValueChange,\n    defaultValue: initialValue,\n  })\n  const { restartTimer, clearTimer } = useDelay(saveDelayOptions)\n\n  const onEditCompleteStable = useEventCallbackStabilizer(onEditComplete)\n  const onEditCompleteWrapper = useCallback((text: string) => {\n    onEditCompleteStable(text)\n    clearTimer()\n  }, [onEditCompleteStable, clearTimer])\n\n  return (\n    <textarea\n      {...props}\n      ref={ref}\n      value={value}\n\n      onChange={(event) => {\n        const value = event.target.value\n        restartTimer(() => {\n          onEditCompleteWrapper(value)\n        })\n        props.onChange?.(event)\n        setValue(value)\n      }}\n      onBlur={(event) => {\n        props.onBlur?.(event)\n        onEditCompleteWrapper(event.target.value)\n      }}\n\n      data-name={props['data-name'] ?? 'textarea'}\n      data-value={PropsUtil.dataAttributes.bool(!!value)}\n      {...PropsUtil.dataAttributes.interactionStates({ ...props, invalid })}\n\n      {...PropsUtil.aria.interactionStates({ ...props, invalid }, props)}\n    />\n  )\n})\n\n\nexport type TextareaWithHeadlineProps = Omit<TextareaProps, 'defaultStyle'> & {\n  headline: ReactNode,\n  headlineProps: Omit<LabelHTMLAttributes<HTMLLabelElement>, 'children'>,\n  containerClassName?: string,\n}\n\nexport const TextareaWithHeadline = ({\n  id,\n  headline,\n  headlineProps,\n  disabled,\n  className,\n  containerClassName,\n  ...props\n}: TextareaWithHeadlineProps) => {\n  const genId = useId()\n  const usedId = id ?? genId\n\n  return (\n    <div\n      className={clsx(\n        'group flex-col-3 border-2 rounded-lg',\n        {\n          'bg-input-background text-input-text hover:border-primary focus-within:border-primary': !disabled,\n          'border-disabled-border bg-disabled-background cursor-not-allowed': disabled,\n        },\n        containerClassName\n      )}\n    >\n      {headline && (\n        <label {...headlineProps} htmlFor={usedId} className={clsx('typography-lable-md text-label', headlineProps.className)}>\n          {headline}\n        </label>\n      )}\n      <Textarea\n        {...props}\n        id={usedId}\n        className={clsx(\n          'border-transparent focus:ring-0 focus-visible:ring-0 resize-none h-32',\n          className\n        )}\n      />\n    </div>\n  )\n}","import type { PropsWithChildren } from 'react'\nimport { useMemo, useState, type ReactNode } from 'react'\nimport type { FilterValue } from './filter-function'\nimport { FilterValueUtils, useFilterValueTranslation } from './filter-function'\nimport { DataTypeUtils, type DataType } from './data-types'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { PlusIcon } from 'lucide-react'\nimport { PopUpRoot } from '../../layout/popup/PopUpRoot'\nimport { PopUp } from '../../layout/popup/PopUp'\nimport { PopUpOpener } from '../../layout/popup/PopUpOpener'\nimport { Button } from '../Button'\nimport { FilterPopUp } from './FilterPopUp'\nimport { Combobox } from '@/src/components/user-interaction/Combobox/Combobox'\nimport { ComboboxOption } from '@/src/components/user-interaction/Combobox/ComboboxOption'\nimport { PopUpContext } from '../../layout/popup/PopUpContext'\nimport type { FilterOperator } from './FilterOperator'\nimport { FilterOperatorUtils } from './FilterOperator'\nimport type { ColumnFilter } from '@tanstack/react-table'\n\nexport interface IdentifierFilterValue extends ColumnFilter {\n  value: FilterValue,\n}\n\nexport interface FilterListPopUpBuilderProps {\n  value: FilterValue,\n  onValueChange: (value: FilterValue) => void,\n  onRemove: () => void,\n  operatorOverrides?: FilterOperator[],\n  dataType: DataType,\n  tags: ReadonlyArray<{ tag: string, label: string, display?: ReactNode }>,\n  name: string,\n  isOpen: boolean,\n  onClose: () => void,\n}\n\nexport interface FilterListItem {\n  id: string,\n  label: string,\n  dataType: DataType,\n  tags: ReadonlyArray<{ tag: string, label: string, display?: ReactNode }>,\n  operatorOverrides?: FilterOperator[],\n  popUpBuilder?: (props: FilterListPopUpBuilderProps) => ReactNode,\n  activeLabelBuilder?: (value: FilterValue) => ReactNode,\n}\n\nexport interface FilterListProps extends PropsWithChildren {\n  value: IdentifierFilterValue[],\n  onValueChange: (value: IdentifierFilterValue[]) => void,\n  availableItems: FilterListItem[],\n}\n\nexport const FilterList = ({ value, onValueChange, availableItems }: FilterListProps) => {\n  const translation = useHightideTranslation()\n  const filterValueToLabel = useFilterValueTranslation()\n  const activeIds = useMemo(() => value.map((item) => item.id), [value])\n  const inactiveItems = useMemo(() => availableItems.filter((item) => !activeIds.includes(item.id)).sort((a, b) => a.label.localeCompare(b.label)), [availableItems, activeIds])\n  const itemRecord = useMemo(() => availableItems.reduce((acc, item) => {\n    acc[item.id] = item\n    return acc\n  }, {} as Record<string, FilterListItem>), [availableItems])\n  const [editState, setEditState] = useState<IdentifierFilterValue | undefined>(undefined)\n\n  const valueWithEditState = useMemo(() => {\n    let foundEditValue = false\n    for (const item of value) {\n      if (item.id === editState?.id) {\n        foundEditValue = true\n        break\n      }\n    }\n    if (!foundEditValue && editState) {\n      return [...value, editState]\n    }\n    return value\n  }, [value, editState])\n\n  return (\n    <div className=\"flex-row-2 flex-wrap gap-y-2\">\n      <PopUpRoot>\n        <PopUpOpener>\n          {({ toggleOpen, props }) => (\n            <Button {...props} onClick={toggleOpen} color=\"neutral\" size=\"sm\" className=\"min-w-36\">\n              {translation('addFilter')}\n              <PlusIcon className=\"size-4\" />\n            </Button>\n          )}\n        </PopUpOpener>\n        <PopUp className=\"flex-col-2 p-2\">\n          <PopUpContext.Consumer>\n            {({ setIsOpen }) => (\n              <Combobox\n                onItemClick={(id) => {\n                  const item = itemRecord[id]\n                  if (!item) return\n                  const newValue: IdentifierFilterValue = {\n                    id: item.id,\n                    value: {\n                      dataType: item.dataType,\n                      operator: FilterOperatorUtils.getDefaultOperator(item.dataType),\n                      parameter: {}\n                    },\n                  }\n                  setEditState(newValue)\n                  setIsOpen(false)\n                }}\n              >\n                {inactiveItems.map(item => (\n                  <ComboboxOption key={item.id} value={item.id} label={item.label}>\n                    {DataTypeUtils.toIcon(item.dataType)}\n                    {item.label}\n                  </ComboboxOption>\n                ))}\n              </Combobox>\n            )}\n          </PopUpContext.Consumer>\n        </PopUp>\n      </PopUpRoot>\n      {valueWithEditState.map(columnFilter => {\n        const item = itemRecord[columnFilter.id]\n        if (!item) return null\n        return (\n          <PopUpRoot\n            key={columnFilter.id}\n            isOpen={editState?.id === columnFilter.id}\n            onIsOpenChange={isOpen => {\n              if (!isOpen) {\n                const isEditStateValid = editState ? FilterValueUtils.isValid(editState.value) : false\n                if (isEditStateValid) {\n                  onValueChange(valueWithEditState.map(prevItem => prevItem.id === columnFilter.id ? { ...prevItem, ...editState } : prevItem))\n                }\n                setEditState(undefined)\n              } else {\n                const valueItem = value.find(prevItem => prevItem.id === columnFilter.id)\n                if (!valueItem) return\n                setEditState({ ...valueItem })\n              }\n            }}\n          >\n            <PopUpOpener>\n              {({ toggleOpen, props }) => (\n                <Button {...props} onClick={toggleOpen} color=\"primary\" coloringStyle=\"tonal-outline\" size=\"sm\">\n                  {item.activeLabelBuilder ?\n                    item.activeLabelBuilder(columnFilter.value) : (\n                      <>\n                        <span className=\"font-bold\">{item.label}</span>\n                        {filterValueToLabel(columnFilter.value, { tags: item.tags })}\n                      </>\n                    )\n                  }\n                </Button>\n              )}\n            </PopUpOpener>\n            <PopUpContext.Consumer>\n              {({ isOpen, setIsOpen }) => item.popUpBuilder ? (\n                item.popUpBuilder({\n                  value: editState?.id === columnFilter.id ? editState.value : columnFilter.value,\n                  onValueChange: value => setEditState({ ...columnFilter, value }),\n                  onRemove: () => {\n                    onValueChange(value.filter(prevItem => prevItem.id !== columnFilter.id))\n                    setEditState(undefined)\n                  },\n                  operatorOverrides: item.operatorOverrides,\n                  dataType: item.dataType,\n                  tags: item.tags,\n                  name: item.label,\n                  isOpen,\n                  onClose: () => setIsOpen(false),\n                })\n              ) : (\n                <FilterPopUp\n                  name={item.label}\n                  value={editState?.id === columnFilter.id ? editState.value : columnFilter.value}\n                  dataType={item.dataType}\n                  tags={item.tags}\n                  operatorOverrides={item.operatorOverrides}\n                  onValueChange={value => {\n                    setEditState({ ...columnFilter, value })\n                  }}\n                  onRemove={() => {\n                    onValueChange(value.filter(prevItem => prevItem.id !== columnFilter.id))\n                    setEditState(undefined)\n                  }}\n                  onClose={() => setIsOpen(false)}\n                />\n              )}\n            </PopUpContext.Consumer>\n          </PopUpRoot>\n        )\n      })}\n    </div>\n  )\n}","import { useMemo } from 'react'\nimport type { ColumnSort } from '@tanstack/react-table'\nimport { DataTypeUtils, type DataType } from './data-types'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { ArrowDownWideNarrow, ArrowUpNarrowWide, PlusIcon, TrashIcon, XIcon } from 'lucide-react'\nimport { PopUpRoot } from '../../layout/popup/PopUpRoot'\nimport { PopUp } from '../../layout/popup/PopUp'\nimport { PopUpOpener } from '../../layout/popup/PopUpOpener'\nimport { Button } from '../Button'\nimport { Combobox } from '@/src/components/user-interaction/Combobox/Combobox'\nimport { ComboboxOption } from '@/src/components/user-interaction/Combobox/ComboboxOption'\nimport { PopUpContext } from '../../layout/popup/PopUpContext'\nimport { IconButton } from '../IconButton'\nimport clsx from 'clsx'\n\nexport interface SortingListItem {\n  id: string,\n  label: string,\n  dataType: DataType,\n}\n\nexport interface SortingListProps {\n  sorting: ColumnSort[],\n  onSortingChange: (sorting: ColumnSort[]) => void,\n  availableItems: SortingListItem[],\n}\n\nexport const SortingList = ({ sorting, onSortingChange, availableItems }: SortingListProps) => {\n  const translation = useHightideTranslation()\n  const activeIds = useMemo(() => sorting.map((item) => item.id), [sorting])\n  const inactiveItems = useMemo(\n    () =>\n      availableItems.filter((item) => !activeIds.includes(item.id)).sort((a, b) => a.label.localeCompare(b.label)),\n    [availableItems, activeIds]\n  )\n  const itemRecord = useMemo(\n    () =>\n      availableItems.reduce(\n        (acc, item) => {\n          acc[item.id] = item\n          return acc\n        },\n        {} as Record<string, SortingListItem>\n      ),\n    [availableItems]\n  )\n\n  const setSortDirection = (columnId: string, desc: boolean) => {\n    onSortingChange(sorting.map((s) => (s.id === columnId ? { ...s, desc } : s)))\n  }\n\n  const removeSort = (columnId: string) => {\n    onSortingChange(sorting.filter((s) => s.id !== columnId))\n  }\n\n  return (\n    <div className=\"flex-row-2 flex-wrap gap-y-2\">\n      <PopUpRoot>\n        <PopUpOpener>\n          {({ toggleOpen, props }) => (\n            <Button {...props} onClick={toggleOpen} color=\"neutral\" size=\"sm\" className=\"min-w-36\">\n              {translation('addSorting')}\n              <PlusIcon className=\"size-4\" />\n            </Button>\n          )}\n        </PopUpOpener>\n        <PopUp className=\"flex-col-2 p-2\">\n          <PopUpContext.Consumer>\n            {({ setIsOpen }) => (\n              <Combobox\n                onItemClick={(id) => {\n                  const item = itemRecord[id]\n                  if (!item) return\n                  onSortingChange([...sorting, { id: item.id, desc: false }])\n                  setIsOpen(false)\n                }}\n              >\n                {inactiveItems.map((item) => (\n                  <ComboboxOption key={item.id} value={item.id} label={item.label}>\n                    {DataTypeUtils.toIcon(item.dataType)}\n                    {item.label}\n                  </ComboboxOption>\n                ))}\n              </Combobox>\n            )}\n          </PopUpContext.Consumer>\n        </PopUp>\n      </PopUpRoot>\n      {sorting.map((columnSort) => {\n        const item = itemRecord[columnSort.id]\n        if (!item) return null\n        return (\n          <PopUpRoot key={columnSort.id}>\n            <PopUpOpener>\n              {({ toggleOpen, props }) => (\n                <Button {...props} onClick={toggleOpen} color=\"secondary\" coloringStyle=\"tonal-outline\" size=\"sm\">\n                  <span className=\"font-bold\">{item.label}</span>\n                  {columnSort.desc ? <ArrowDownWideNarrow className=\"size-5\"/> : <ArrowUpNarrowWide className=\"size-5\"/>}\n                </Button>\n              )}\n            </PopUpOpener>\n            <PopUpContext.Consumer>\n              {({ setIsOpen }) => (\n                <PopUp\n                  className={clsx('flex-col-3 p-3 min-w-64')}\n                  onClose={() => setIsOpen(false)}\n                >\n                  <div className=\"flex-row-4 justify-between w-full items-center gap-2\">\n                    <span className=\"typography-title-sm font-semibold\">{item.label}</span>\n                    <div className=\"flex-row-0 shrink-0 items-center\">\n                      <IconButton\n                        tooltip={translation('removeFilter')}\n                        onClick={() => {\n                          removeSort(columnSort.id)\n                          setIsOpen(false)\n                        }}\n                        color=\"negative\"\n                        coloringStyle=\"text\"\n                        size=\"sm\"\n                      >\n                        <TrashIcon className=\"size-4\" />\n                      </IconButton>\n                      <IconButton\n                        tooltip={translation('close')}\n                        onClick={() => setIsOpen(false)}\n                        color=\"neutral\"\n                        coloringStyle=\"text\"\n                        size=\"sm\"\n                      >\n                        <XIcon className=\"size-4\" />\n                      </IconButton>\n                    </div>\n                  </div>\n                  <div className=\"flex-row-1 w-full gap-2\">\n                    <Button\n                      type=\"button\"\n                      className=\"flex-1 flex-row-1 items-center justify-center gap-2\"\n                      color={columnSort.desc ? 'neutral' : 'primary'}\n                      coloringStyle=\"solid\"\n                      size=\"md\"\n                      onClick={() => setSortDirection(columnSort.id, false)}\n                    >\n                      <ArrowUpNarrowWide className=\"size-4\" />\n                      {translation('sortAsc')}\n                    </Button>\n                    <Button\n                      type=\"button\"\n                      className=\"flex-1 flex-row-1 items-center justify-center gap-2\"\n                      color={columnSort.desc ? 'primary' : 'neutral'}\n                      coloringStyle=\"solid\"\n                      size=\"md\"\n                      onClick={() => setSortDirection(columnSort.id, true)}\n                    >\n                      <ArrowDownWideNarrow className=\"size-4\" />\n                      {translation('sortDesc')}\n                    </Button>\n                  </div>\n                </PopUp>\n              )}\n            </PopUpContext.Consumer>\n          </PopUpRoot>\n        )\n      })}\n    </div>\n  )\n}\n","import { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useDateTimeFormat, useLocale } from '@/src/global-contexts/LocaleContext'\nimport { DateUtils } from '@/src/utils/date'\n\ntype TimeDisplayMode = 'daysFromToday' | 'date' | 'time'\n\ntype TimeDisplayProps = {\n  date: Date,\n  mode?: TimeDisplayMode,\n  is24HourFormat?: boolean,\n  timeZone?: string,\n}\n\nexport const TimeDisplay = ({\n  date,\n  mode = 'daysFromToday',\n  is24HourFormat: is24HourFormatOverride,\n  timeZone: timeZoneOverride,\n}: TimeDisplayProps) => {\n  const translation = useHightideTranslation()\n  const { locale } = useLocale()\n  const { is24HourFormat: contextIs24HourFormat, timeZone: contextTimeZone } = useDateTimeFormat()\n  const is24HourFormat = is24HourFormatOverride ?? contextIs24HourFormat\n  const timeZone = timeZoneOverride ?? contextTimeZone\n\n  const zonedDate = DateUtils.toZonedDate(date, timeZone)\n  const zonedNow = DateUtils.toZonedDate(new Date(), timeZone)\n  const difference = new Date(zonedNow).setHours(0, 0, 0, 0).valueOf() - new Date(zonedDate).setHours(0, 0, 0, 0).valueOf()\n  const isBefore = difference > 0\n  const differenceInDays = Math.floor(Math.abs(difference) / (1000 * 3600 * 24))\n\n  let displayString\n  if (differenceInDays === 0) {\n    displayString = translation('time.today')\n  } else if (differenceInDays === 1) {\n    displayString = isBefore ? translation('time.yesterday') : translation('time.tomorrow')\n  } else {\n    displayString = isBefore ? translation('time.agoDays', { days: differenceInDays }) : translation('time.inDays', { days: differenceInDays })\n  }\n  const monthToTranslation: { [key: number]: string } = {\n    0: translation('time.january'),\n    1: translation('time.february'),\n    2: translation('time.march'),\n    3: translation('time.april'),\n    4: translation('time.may'),\n    5: translation('time.june'),\n    6: translation('time.july'),\n    7: translation('time.august'),\n    8: translation('time.september'),\n    9: translation('time.october'),\n    10: translation('time.november'),\n    11: translation('time.december')\n  } as const\n\n  const timeString = new Intl.DateTimeFormat(locale, {\n    hour: '2-digit',\n    minute: '2-digit',\n    hourCycle: is24HourFormat ? 'h23' : 'h12',\n    timeZone,\n  }).format(date)\n\n  let fullString\n  if (mode === 'daysFromToday') {\n    fullString = `${timeString} - ${displayString}`\n  } else if (mode === 'time') {\n    fullString = timeString\n  } else {\n    fullString = `${zonedDate.getDate()}. ${monthToTranslation[zonedDate.getMonth()]} ${zonedDate.getFullYear()}`\n  }\n\n  return (<span>{fullString}</span>)\n}\n","import { useEffect, useMemo, useRef } from 'react'\nimport { closestMatch, range } from '@/src/utils/array'\nimport { Button } from '@/src/components/user-interaction/Button'\nimport type { FormFieldDataHandling } from '@/src/components/form/FormField'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport type { DateTimePrecision } from '@/src/utils/date'\nimport { Visibility } from '@/src/components/layout/Visibility'\nimport { useDateTimeFormat } from '@/src/global-contexts/LocaleContext'\n\nexport type TimePickerMinuteIncrement = '1min' | '5min' | '10min' | '15min' | '30min'\n\nexport type TimePickerSecondIncrement = '1s' | '5s' | '10s' | '15s' | '30s'\n\nexport type TimePickerMillisecondIncrement = '1ms' | '5ms' | '10ms' | '25ms' | '50ms' | '100ms' | '250ms' | '500ms'\n\nexport interface TimePickerProps extends Partial<FormFieldDataHandling<Date>> {\n  initialValue?: Date,\n  is24HourFormat?: boolean,\n  precision?: DateTimePrecision,\n  minuteIncrement?: TimePickerMinuteIncrement,\n  secondIncrement?: TimePickerSecondIncrement,\n  millisecondIncrement?: TimePickerMillisecondIncrement,\n  className?: string,\n}\n\nexport const TimePicker = ({\n  value: controlledValue,\n  initialValue = new Date(),\n  onValueChange,\n  onEditComplete,\n  is24HourFormat: is24HourFormatOverride,\n  minuteIncrement = '5min',\n  secondIncrement = '5s',\n  millisecondIncrement = '100ms',\n  precision = 'minute',\n  className,\n}: TimePickerProps) => {\n  const { is24HourFormat: contextIs24HourFormat } = useDateTimeFormat()\n  const is24HourFormat = is24HourFormatOverride ?? contextIs24HourFormat\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange: onValueChange,\n    defaultValue: initialValue,\n  })\n  const minuteRef = useRef<HTMLButtonElement>(null)\n  const hourRef = useRef<HTMLButtonElement>(null)\n\n  const isPM = value.getHours() > 11\n  const hours = is24HourFormat ? range(24) : range(12)\n  const minutes = useMemo(() => {\n    const full = range(60)\n    switch (minuteIncrement) {\n    case '5min':\n      return full.filter(value => value % 5 === 0)\n    case '10min':\n      return full.filter(value => value % 10 === 0)\n    case '15min':\n      return full.filter(value => value % 15 === 0)\n    case '30min':\n      return full.filter(value => value % 30 === 0)\n    }\n  }, [minuteIncrement])\n\n  const seconds = useMemo(() => {\n    const full = range(60)\n    switch (secondIncrement) {\n    case '1s':\n      return full.filter(value => value % 1 === 0)\n    case '5s':\n      return full.filter(value => value % 5 === 0)\n    case '10s':\n      return full.filter(value => value % 10 === 0)\n    case '15s':\n      return full.filter(value => value % 15 === 0)\n    case '30s':\n      return full.filter(value => value % 30 === 0)\n    }\n  }, [secondIncrement])\n\n  const milliseconds = useMemo(() => {\n    const full = range(1000)\n    switch (millisecondIncrement) {\n    case '1ms':\n      return full.filter(value => value % 1 === 0)\n    case '5ms':\n      return full.filter(value => value % 5 === 0)\n    case '10ms':\n      return full.filter(value => value % 10 === 0)\n    case '25ms':\n      return full.filter(value => value % 25 === 0)\n    case '50ms':\n      return full.filter(value => value % 50 === 0)\n    case '100ms':\n      return full.filter(value => value % 100 === 0)\n    case '250ms':\n      return full.filter(value => value % 250 === 0)\n    case '500ms':\n      return full.filter(value => value % 500 === 0)\n    }\n  }, [millisecondIncrement])\n\n  const closestMinute = useMemo(() => closestMatch(minutes, (item1, item2) => Math.abs(item1 - value.getMinutes()) < Math.abs(item2 - value.getMinutes())), [minutes, value])\n  const closestSecond = useMemo(() => closestMatch(seconds, (item1, item2) => Math.abs(item1 - value.getSeconds()) < Math.abs(item2 - value.getSeconds())), [seconds, value])\n  const closestMillisecond = useMemo(() => closestMatch(milliseconds, (item1, item2) => Math.abs(item1 - value.getMilliseconds()) < Math.abs(item2 - value.getMilliseconds())), [milliseconds, value])\n  const hour = value.getHours()\n\n  useEffect(() => {\n    minuteRef.current?.scrollIntoView({\n      behavior: 'smooth',\n      block: 'nearest',\n    })\n  }, [closestMinute])\n\n  useEffect(() => {\n    hourRef.current?.scrollIntoView({\n      behavior: 'smooth',\n      block: 'nearest',\n    })\n  }, [hour])\n\n  const onChangeWrapper = (transformer: (newDate: Date) => void) => {\n    const newDate = new Date(value)\n    transformer(newDate)\n    setValue(newDate)\n    onEditComplete?.(newDate)\n  }\n\n  return (\n    <div data-name=\"time-picker-container\" className={className}>\n      <div data-name=\"time-picker-value-column\">\n        {hours.map(hour => {\n          const isSelected = hour === value.getHours() - (!is24HourFormat && isPM ? 12 : 0)\n          return (\n            <Button\n              size=\"sm\"\n              color={isSelected ? 'primary' : 'neutral'}\n              key={hour}\n              ref={isSelected ? hourRef : undefined}\n              onClick={() => onChangeWrapper(newDate => newDate.setHours(hour + (!is24HourFormat && isPM ? 12 : 0)))}\n              className=\"min-w-16\"\n            >\n              {hour.toString().padStart(2, '0')}\n            </Button>\n          )\n        })}\n      </div>\n      <div data-name=\"time-picker-value-column\">\n        {minutes.map(minute => {\n          const isSelected = minute === closestMinute\n          return (\n            <Button\n              size=\"sm\"\n              color={isSelected ? 'primary' : 'neutral'}\n              key={minute + minuteIncrement}\n              ref={isSelected ? minuteRef : undefined}\n              onClick={() => onChangeWrapper(newDate => newDate.setMinutes(minute))}\n              className=\"min-w-16\"\n            >\n              {minute.toString().padStart(2, '0')}\n            </Button>\n          )\n        })}\n      </div>\n      <Visibility isVisible={precision === 'second' || precision === 'millisecond'}>\n        <div data-name=\"time-picker-value-column\">\n          {seconds.map(second => {\n            const isSelected = second === closestSecond\n            return (\n              <Button\n                size=\"sm\"\n                color={isSelected ? 'primary' : 'neutral'}\n                key={second + secondIncrement}\n                ref={isSelected ? minuteRef : undefined}\n                onClick={() => onChangeWrapper(newDate => newDate.setSeconds(second))}\n                className=\"min-w-16\"\n              >\n                {second.toString().padStart(2, '0')}\n              </Button>\n            )\n          })}\n        </div>\n      </Visibility>\n      <Visibility isVisible={precision === 'millisecond'}>\n        <div data-name=\"time-picker-value-column\">\n          {milliseconds.map(millisecond => {\n            const isSelected = millisecond === closestMillisecond\n            return (\n              <Button\n                size=\"sm\"\n                color={isSelected ? 'primary' : 'neutral'}\n                key={millisecond + millisecondIncrement}\n                ref={isSelected ? minuteRef : undefined}\n                onClick={() => onChangeWrapper(newDate => newDate.setMilliseconds(millisecond))}\n                className=\"min-w-16\"\n              >\n                {millisecond.toString().padStart(2, '0')}\n              </Button>\n            )\n          })}\n        </div>\n      </Visibility>\n      {!is24HourFormat && (\n        <div data-name=\"time-picker-value-column\">\n          <Button\n            size=\"sm\"\n            color={!isPM ? 'primary' : 'neutral'}\n            onClick={() => onChangeWrapper(newDate => isPM && newDate.setHours(newDate.getHours() - 12))}\n            className=\"min-w-16\"\n          >\n            AM\n          </Button>\n          <Button\n            size=\"sm\"\n            color={isPM ? 'primary' : 'neutral'}\n            onClick={() => onChangeWrapper(newDate => !isPM && newDate.setHours(newDate.getHours() + 12))}\n            className=\"min-w-16\"\n          >\n            PM\n          </Button>\n        </div>\n      )}\n    </div>\n  )\n}\n","import { forwardRef, useState } from 'react'\nimport { ClockFading, ClockPlus } from 'lucide-react'\nimport { DateUtils, type DateTimeFormat } from '@/src/utils/date'\nimport { DateTimeInput, type DateTimeInputProps } from './DateTimeInput'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { IconButton } from '../IconButton'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useLocale } from '@/src/global-contexts/LocaleContext'\n\nexport interface FlexibleDateTimeInputProps extends Omit<DateTimeInputProps, 'mode'> {\n  defaultMode: Exclude<DateTimeFormat, 'time'>,\n  fixedTime?: Date | null,\n}\n\nexport const FlexibleDateTimeInput = forwardRef<HTMLDivElement, FlexibleDateTimeInputProps>(function FlexibleDateTimeInput({\n  defaultMode = 'date',\n  value: controlledValue,\n  initialValue,\n  onValueChange,\n  fixedTime: fixedTimeOverride,\n  timeZone: timeZoneOverride,\n  actions = [],\n  ...props\n}, forwardedRef) {\n  const translation = useHightideTranslation()\n  const { timeZone: contextTimeZone } = useLocale()\n  const timeZone = timeZoneOverride ?? contextTimeZone\n  const fixedTime = fixedTimeOverride ?? new Date(1970, 0, 1, 23, 59, 59, 999)\n  const [value, setValue] = useControlledState<Date | null>({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n\n  const zoned = (date: Date) => DateUtils.toZonedDate(date, timeZone)\n  const unzoned = (date: Date) => DateUtils.fromZonedDate(date, timeZone)\n  const hasFixedTime = (date: Date) => DateUtils.sameTime(zoned(date), fixedTime, true, true)\n\n  const [mode, setMode] = useState<Exclude<DateTimeFormat, 'time'>>(() => {\n    if (value && !hasFixedTime(value)) {\n      return 'dateTime'\n    }\n    return defaultMode\n  })\n\n  const toDate = (date: Date) => unzoned(DateUtils.withTime(zoned(date), fixedTime))\n  const toDateTime = (date: Date) => hasFixedTime(date) ? unzoned(DateUtils.withTime(zoned(date), zoned(new Date()))) : date\n\n  return (\n    <DateTimeInput\n      {...props}\n      ref={forwardedRef}\n      timeZone={timeZone}\n      mode={mode}\n      value={value}\n      onValueChange={(next) => {\n        setValue(next === null ? null : (mode === 'date' ? toDate(next) : next))\n      }}\n      actions={[\n        ...actions,\n        <IconButton\n          key=\"flexible-date-time-mode\"\n          size=\"sm\"\n          coloringStyle=\"text\"\n          color=\"neutral\"\n          tooltip={mode === 'date' ? translation('addTime') : translation('withoutTime')}\n          onClick={() => {\n            const nextMode = mode === 'date' ? 'dateTime' : 'date'\n            if (value) {\n              setValue(nextMode === 'date' ? toDate(value) : toDateTime(value))\n            }\n            setMode(nextMode)\n          }}\n        >\n          {mode === 'date' ? <ClockPlus className=\"size-5\"/> : <ClockFading className=\"size-5\"/>}\n        </IconButton>,\n      ]}\n    />\n  )\n})\n","import type { ReactNode } from 'react'\nimport { useId } from 'react'\nimport { forwardRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useControlledState } from '@/src/hooks/useControlledState'\n\ntype InsideLabelInputProps = Omit<InputProps, 'aria-label' | 'aria-labelledby' | 'placeholder'> & {\n  label: ReactNode,\n}\n\n/**\n * Text input component with a label inside the input that moves up when editing\n *\n * The State is managed by the parent\n */\nexport const InsideLabelInput = forwardRef<HTMLInputElement, InsideLabelInputProps>(function InsideLabelInput({\n  id: customId,\n  value: controlledValue,\n  initialValue,\n  onValueChange,\n  label,\n  ...props\n}, forwardedRef) {\n  const [value, setValue] = useControlledState<string>({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n  const [isFocused, setIsFocused] = useState(false)\n  const generatedId = useId()\n  const id = customId ?? generatedId\n\n  return (\n    <div className={clsx('relative')}>\n      <Input\n        {...props}\n        id={id}\n        ref={forwardedRef}\n\n        value={value}\n        onValueChange={setValue}\n\n        onFocus={event => {\n          props.onFocus?.(event)\n          setIsFocused(true)\n        }}\n        onBlur={event => {\n          props.onBlur?.(event)\n          setIsFocused(false)\n        }}\n\n        aria-labelledby={id+ '-label'}\n\n        className={clsx('h-14 px-4 pb-2 py-6.5', props.className)}\n      />\n      <label\n        id={id+ '-label'}\n        aria-hidden={true}\n        data-display={isFocused || !!value ? 'small' : 'full'}\n        className={clsx(\n          // margin left to account for the border which is ignored for absolute positions\n          'absolute left-4 ml-0.5 top-2 transition-all delay-25 pointer-events-none touch-none',\n          'data-[display=small]:top-2 data-[display=small]:h-force-4.5 data-[display=small]:typography-caption-sm data-[display=small]:overflow-y-hidden',\n          'data-[display=full]:top-1/2 data-[display=full]:-translate-y-1/2 data-[display=full]:typography-body-md'\n        )}\n      >\n        {label}\n      </label>\n    </div>\n  )\n})\n","import type { InputProps } from './Input'\nimport { Input } from './Input'\nimport { Search } from 'lucide-react'\nimport { clsx } from 'clsx'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { HTMLAttributes } from 'react'\nimport type { IconButtonProps } from '../IconButton'\nimport { IconButton } from '../IconButton'\nimport { useControlledState } from '@/src/hooks/useControlledState'\n\nexport type SearchBarProps = Omit<InputProps, 'onValueChange' | 'onEditComplete'> & {\n  onValueChange?: (value: string) => void,\n  onSearch: (value: string) => void,\n  searchButtonProps?: Omit<IconButtonProps, 'onClick'>,\n  containerProps?: HTMLAttributes<HTMLDivElement>,\n}\n\nexport const SearchBar = ({\n  value: controlledValue,\n  initialValue,\n  onValueChange,\n  onSearch,\n  searchButtonProps,\n  containerProps,\n  ...inputProps\n}: SearchBarProps) => {\n  const translation = useHightideTranslation()\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n  return (\n    <div {...containerProps} className={clsx('search-bar-container group/search-bar', containerProps?.className)}>\n      <Input\n        {...inputProps}\n        value={value}\n        onValueChange={setValue}\n        onEditComplete={onSearch}\n        placeholder={inputProps.placeholder ?? translation('search')}\n        className={clsx('search-bar-input', inputProps.className)}\n      />\n      <IconButton\n        {...searchButtonProps}\n        tooltip={translation('search')}\n        size=\"sm\"\n        color=\"neutral\"\n        coloringStyle=\"text\"\n        onClick={() => onSearch(value)}\n        className={clsx('search-bar-icon-button', searchButtonProps?.className)}\n      >\n        <Search className=\"search-bar-icon\"/>\n      </IconButton>\n    </div>\n  )\n}","import { forwardRef, useEffect, useRef, useState } from 'react'\nimport { Pencil } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { EditCompleteOptions, InputProps } from '@/src/components/user-interaction/input/Input'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport { ReactRefsUtil } from '@/src/utils/reactRefs'\n\ntype ToggleableInputProps = InputProps & {\n  initialState?: 'editing' | 'display',\n  editCompleteOptions?: Omit<EditCompleteOptions, 'allowEnterComplete'>,\n}\n\n/**\n * A Text input component for inputting text. It changes appearance upon entering the edit mode and switches\n * back to display mode on loss of focus or on enter\n *\n * The State is managed by the parent\n */\nexport const ToggleableInput = forwardRef<HTMLInputElement, ToggleableInputProps>(function ToggleableInput({\n  value: controlledValue,\n  initialValue,\n  onValueChange,\n  initialState = 'display',\n  editCompleteOptions,\n  ...props\n}, forwardedRef) {\n  const [value, setValue] = useControlledState({\n    value: controlledValue,\n    onValueChange,\n    defaultValue: initialValue,\n  })\n  const [isEditing, setIsEditing] = useState(initialState !== 'display')\n\n  const innerRef = useRef<HTMLInputElement>(null)\n\n  useEffect(() => {\n    if (isEditing) {\n      innerRef.current?.focus()\n    }\n  }, [isEditing])\n\n  return (\n    <div className={clsx('relative flex-row-2', { 'flex-1': isEditing })}>\n      <Input\n        {...props}\n        ref={ReactRefsUtil.assingRefsBuilder([innerRef, forwardedRef])}\n        value={value}\n        onValueChange={setValue}\n        onEditComplete={(text) => {\n          props.onEditComplete?.(text)\n          setIsEditing(false)\n        }}\n        onFocus={event => {\n          props.onFocus?.(event)\n          setIsEditing(true)\n          event.target.select()\n        }}\n        editCompleteOptions={{\n          ...editCompleteOptions,\n          allowEnterComplete: true\n        }}\n\n        data-isediting={isEditing ? '' : undefined}\n        data-name={props['data-name'] ?? 'togglable-input'}\n      />\n      {!isEditing && (\n        <div className=\"absolute left-0 flex-row-2 items-center pointer-events-none touch-none w-full overflow-hidden\">\n          <span className={clsx(' truncate')}>\n            {value}\n          </span>\n          <Pencil className={clsx(`size-force-4`, { 'text-transparent': isEditing })} />\n        </div>\n      )}\n    </div>\n  )\n})\n","import { Check } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from './PropertyBase'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Button } from '@/src/components/user-interaction/Button'\n\n\nexport type CheckboxPropertyProps = PropertyField<boolean>\n\n/**\n * An Input component for a boolean values\n */\nexport const CheckboxProperty = ({\n  value,\n  onValueChange,\n  onEditComplete,\n  readOnly,\n  ...baseProps\n}: CheckboxPropertyProps) => {\n  const translation = useHightideTranslation()\n\n  return (\n    <PropertyBase\n      {...baseProps}\n      hasValue={value !== undefined}\n      readOnly={readOnly}\n      icon={<Check size={24}/>}\n    >\n      {() => (\n        <div className=\"flex-row-2 items-center\">\n          <Button\n            color={value ? 'positive' : 'neutral'} size=\"sm\"\n            onClick={() => {\n              onValueChange(true)\n              onEditComplete(true)\n            }}\n            className=\"min-w-20\"\n          >\n            {translation('yes')}\n          </Button>\n          <Button\n            color={!value && value !== undefined ? 'negative' : 'neutral'} size=\"sm\"\n            onClick={() => {\n              onValueChange(false)\n              onEditComplete(false)\n            }}\n            className=\"min-w-20\"\n          >\n            {translation('no')}\n          </Button>\n        </div>\n      )}\n    </PropertyBase>\n  )\n}\n","import type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport { AlertTriangle, Trash, X } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Tooltip } from '../Tooltip'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { IconButton } from '../IconButton'\n\nexport type PropertyField<T> = {\n  name: string,\n  required?: boolean,\n  readOnly?: boolean,\n  allowClear?: boolean,\n  value?: T,\n  onRemove?: () => void,\n  onValueClear?: () => void,\n  onValueChange?: (value: T) => void,\n  onEditComplete?: (value: T) => void,\n}\n\n\nexport type PropertyBaseProps = {\n  children: (props: { required: boolean, hasValue: boolean, invalid: boolean }) => ReactNode,\n  name: string,\n  required?: boolean,\n  readOnly?: boolean,\n  allowClear?: boolean,\n  allowRemove?: boolean,\n  hasValue: boolean,\n  onRemove?: () => void,\n  onValueClear?: () => void,\n  icon?: ReactNode,\n  className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n  name,\n  children,\n  required = false,\n  hasValue,\n  icon,\n  readOnly,\n  allowClear = true,\n  allowRemove = true,\n  onRemove,\n  onValueClear,\n  className,\n}: PropertyBaseProps) => {\n  const translation = useHightideTranslation()\n  const invalid = required && !hasValue\n\n  const isClearEnabled = allowClear && !readOnly\n  const isRemoveEnabled = allowRemove && !readOnly\n  const showActionsContainer = isClearEnabled || isRemoveEnabled\n\n  const renderActionButtons = () => (\n    <>\n      {isClearEnabled && (\n        <IconButton\n          tooltip={translation('clearValue')}\n          onClick={onValueClear}\n          disabled={!hasValue}\n          color=\"negative\"\n          coloringStyle=\"text\"\n          size=\"sm\"\n        >\n          <X className=\"size-force-5\" />\n        </IconButton>\n      )}\n      {isRemoveEnabled && (\n        <IconButton\n          tooltip={translation('removeProperty')}\n          onClick={onRemove}\n          color=\"negative\"\n          coloringStyle=\"text\"\n          size=\"sm\"\n        >\n          <Trash className=\"size-force-5\" />\n        </IconButton>\n      )}\n    </>\n  )\n\n  return (\n    <div\n      className={clsx('group/property min-w-0 w-full', className)}\n      data-name=\"property-root\"\n      data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n    >\n      <div data-name=\"property-inner\">\n        <div\n          data-name=\"property-title\"\n          data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n        >\n          <div className=\"flex min-w-0 flex-1 flex-row items-center justify-between gap-2\">\n            <Tooltip tooltip={name} containerClassName=\"min-w-0\">\n              <div className=\"flex-row-1 items-center\">\n                <div data-name=\"property-title-icon\">{icon}</div>\n                <span data-name=\"property-title-text\">{name}</span>\n              </div>\n            </Tooltip>\n            {invalid && (\n              <AlertTriangle className=\"size-force-6 shrink-0\"/>\n            )}\n          </div>\n          {showActionsContainer && (\n            <div data-name=\"property-title-actions\">\n              {renderActionButtons()}\n            </div>\n          )}\n        </div>\n        <div\n          data-name=\"property-content\"\n          data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n        >\n          {children({ required, hasValue, invalid })}\n          {showActionsContainer && (\n            <div data-name=\"property-actions\">\n              {renderActionButtons()}\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import { CalendarDays } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from './PropertyBase'\nimport { DateTimeInput, type DateTimeInputProps } from '../input/DateTimeInput'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type DatePropertyProps =\n  Pick<PropertyField<Date | null>, 'name' | 'onRemove' | 'onValueClear'>\n  & Omit<DateTimeInputProps, 'mode' | 'allowRemove'>\n  & {\n    type?: 'dateTime' | 'date',\n    allowRemove?: boolean,\n  }\n\nexport const DateProperty = ({\n  name,\n  value,\n  onValueChange,\n  onEditComplete,\n  onRemove,\n  onValueClear,\n  required,\n  readOnly,\n  allowClear = true,\n  allowRemove = true,\n  type = 'dateTime',\n  className,\n  ...inputProps\n}: DatePropertyProps) => {\n  const hasValue = !!value\n\n  return (\n    <PropertyBase\n      name={name}\n      required={required}\n      readOnly={readOnly}\n      allowClear={allowClear}\n      allowRemove={allowRemove}\n      onRemove={onRemove}\n      onValueClear={onValueClear ?? (() => {\n        onValueChange?.(null)\n        onEditComplete?.(null)\n      })}\n      hasValue={hasValue}\n      icon={<CalendarDays size={24}/>}\n      className={className}\n    >\n      {({ invalid }) => (\n        <DateTimeInput\n          {...inputProps}\n          value={value}\n          mode={type}\n          required={required}\n          readOnly={readOnly}\n          allowClear={false}\n          onValueChange={onValueChange}\n          onEditComplete={onEditComplete}\n          data-name=\"property-input\"\n          className=\"flex-row-4 pr-0\"\n          data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n        />\n      )}\n    </PropertyBase>\n  )\n}\n","import { List } from 'lucide-react'\nimport { PropertyBase, type PropertyField } from '@/src/components/user-interaction/properties/PropertyBase'\nimport type { PropsWithChildren } from 'react'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { MultiSelectChipDisplay } from '@/src/components/user-interaction/MultiSelect/MultiSelectChipDisplay'\n\nexport interface MultiSelectPropertyProps extends PropertyField<string[]>, PropsWithChildren {}\n/**\n * An Input for MultiSelect properties\n */\nexport const MultiSelectProperty = ({\n  children,\n  value,\n  onValueChange,\n  onEditComplete,\n  ...props\n}: MultiSelectPropertyProps) => {\n  const hasValue = value.length > 0\n\n  return (\n    <PropertyBase\n      {...props}\n      hasValue={hasValue}\n      icon={<List size={24}/>}\n    >\n      {({ invalid }) => (\n        <div\n          data-name=\"property-input-wrapper\"\n          data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n        >\n          <MultiSelectChipDisplay\n            value={value}\n            onValueChange={(val) => {\n              const arr = val as string[]\n              onValueChange?.(arr)\n              onEditComplete?.(arr)\n            }}\n            disabled={props.readOnly}\n            contentPanelProps={{\n              className: '!border-none !min-h-10'\n            }}\n            chipDisplayProps={{\n              className: 'flex flex-wrap gap-x-2 gap-y-2 p-0 items-center hover:cursor-pointer border-0',\n            }}\n          >\n            {children}\n          </MultiSelectChipDisplay>\n        </div>\n      )}\n    </PropertyBase>\n  )\n}\n","import { Binary } from 'lucide-react'\nimport { Input } from '@/src/components/user-interaction/input/Input'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport type { PropertyField } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type NumberPropertyProps = PropertyField<number>\n& { suffix?: string }\n\n/**\n * An Input for number properties\n */\nexport const NumberProperty = ({\n  value,\n  onValueChange,\n  onEditComplete,\n  onValueClear,\n  readOnly,\n  suffix,\n  ...baseProps\n}: NumberPropertyProps) => {\n  const translation = useHightideTranslation()\n  const hasValue = value !== undefined\n\n  return (\n    <PropertyBase\n      {...baseProps}\n      onValueClear={onValueClear}\n      hasValue={hasValue}\n      icon={<Binary size={24}/>}\n    >\n      {({ invalid }) => (\n        <div\n          data-name=\"property-input-wrapper\"\n          data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n        >\n          <Input\n            data-name=\"property-input\"\n            className=\"w-full pr-8\"\n            data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n            value={value?.toString() ?? ''}\n            type=\"number\"\n            readOnly={readOnly}\n            placeholder={translation('value')}\n            onValueChange={(value) => {\n              const numberValue = parseFloat(value)\n              if (isNaN(numberValue)) {\n                onValueClear()\n              } else {\n                onValueChange?.(numberValue)\n              }\n            }}\n            onEditComplete={(value) => {\n              const numberValue = parseFloat(value)\n              if (isNaN(numberValue)) {\n                onValueClear()\n              } else {\n                onEditComplete?.(numberValue)\n              }\n            }}\n          />\n          {suffix && (\n            <span\n              data-name=\"property-suffix\"\n              data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n            >\n              {suffix}\n            </span>\n          )}\n        </div>\n      )}\n    </PropertyBase>\n  )\n}\n","import { List } from 'lucide-react'\nimport type { PropsWithChildren } from 'react'\nimport type { PropertyField } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { PropertyBase } from '@/src/components/user-interaction/properties/PropertyBase'\nimport { PropsUtil } from '@/src/utils/propsUtil'\nimport { SelectRoot } from '@/src/components/user-interaction/Select/SelectRoot'\nimport { SelectButton } from '@/src/components/user-interaction/Select/SelectButton'\nimport { SelectContent } from '@/src/components/user-interaction/Select/SelectContent'\n\nexport interface SingleSelectPropertyProps extends PropertyField<string>, PropsWithChildren {}\n\n/**\n * An Input for SingleSelect properties\n */\nexport const SingleSelectProperty = ({\n  children,\n  value,\n  onValueChange,\n  onEditComplete,\n  ...props\n}: SingleSelectPropertyProps) => {\n  const hasValue = value !== undefined\n\n  return (\n    <PropertyBase\n      {...props}\n      hasValue={hasValue}\n      icon={<List size={24}/>}\n    >\n      {({ invalid }) => (\n        <div\n          data-name=\"property-input-wrapper\"\n          data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n        >\n          <SelectRoot\n            value={value}\n            onValueChange={(value) => {\n              onValueChange?.(value)\n              onEditComplete?.(value)\n            }}\n            disabled={props.readOnly}\n          >\n            <SelectButton\n              className=\"flex-row-2 w-full items-center justify-between\"\n              hideExpansionIcon={true} data-name=\"property-input\"\n            />\n            <SelectContent>{children}</SelectContent>\n          </SelectRoot>\n        </div>\n      )}\n    </PropertyBase>\n  )\n}\n","import { Text } from 'lucide-react'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { Textarea } from '@/src/components/user-interaction/Textarea'\nimport type { PropertyField } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\nimport { PropsUtil } from '@/src/utils/propsUtil'\n\nexport type TextPropertyProps = PropertyField<string>\n\n/**\n * An Input for Text properties\n */\nexport const TextProperty = ({\n  value,\n  readOnly,\n  onValueChange,\n  onEditComplete,\n  ...baseProps\n}: TextPropertyProps) => {\n  const translation = useHightideTranslation()\n  const hasValue = value !== undefined\n\n  return (\n    <PropertyBase\n      {...baseProps}\n      hasValue={hasValue}\n      icon={<Text size={24}/>}\n    >\n      {({ invalid }) => (\n        <Textarea\n          data-name=\"property-input\"\n          className=\"w-full\"\n          data-invalid={PropsUtil.dataAttributes.bool(invalid)}\n          rows={5}\n          value={value ?? ''}\n          readOnly={readOnly}\n          placeholder={translation('text')}\n          onValueChange={(value) => onValueChange?.(value)}\n          onEditComplete={(value) => onEditComplete?.(value)}\n        />\n      )}\n    </PropertyBase>\n  )\n}\n","import { useEffect, useState } from 'react'\nimport type { PropsWithBagFunctionOrChildren } from '@/src/utils/bagFunctions'\nimport { BagFunctionUtil } from '@/src/utils/bagFunctions'\n\ntype TransitionBag = {\n  isOpen: boolean,\n  isTransitioning: boolean,\n  isUsingReducedMotion: boolean,\n  data: { [key: `data-${string}`]: string | undefined },\n  handlers: {\n    onTransitionEnd?: () => void,\n    onAnimationEnd?: () => void,\n    onTransitionCancel?: () => void,\n  },\n}\n\nexport type TransitionWrapperProps = PropsWithBagFunctionOrChildren<TransitionBag> & {\n  show: boolean,\n  includeAnimation?: boolean,\n}\n\n/**\n * Only use when you have a transition happening\n */\nexport function Transition({\n  children,\n  show,\n  includeAnimation = true,\n}: TransitionWrapperProps) {\n  const [isOpen, setIsOpen] = useState<boolean>(show)\n  const [isTransitioning, setIsTransitioning] = useState<boolean>(!isOpen)\n\n  const isUsingReducedMotion = typeof window !== 'undefined' && typeof window.matchMedia === 'function' ?\n    window.matchMedia('(prefers-reduced-motion: reduce)').matches : true\n\n  useEffect(() => {\n    setIsOpen(show)\n    setIsTransitioning(true)\n  }, [show])\n\n  const onAnimationEnd = () => setIsTransitioning(false)\n\n  const bag: TransitionBag = {\n    isOpen,\n    isTransitioning,\n    isUsingReducedMotion,\n    data: {\n      'data-open': (isOpen && !isTransitioning) ? '' : undefined,\n      'data-opening': (isOpen && isTransitioning) ? '' : undefined,\n      'data-closing': (!isOpen && isTransitioning) ? '' : undefined,\n      'data-closed': (!isOpen && !isTransitioning) ? '' : undefined,\n    },\n    handlers: {\n      onTransitionEnd: () => setIsTransitioning(false),\n      onTransitionCancel: () => setIsTransitioning(false),\n      onAnimationEnd: includeAnimation ? onAnimationEnd : undefined,\n    }\n  }\n\n  return BagFunctionUtil.resolve(children, bag)\n}","import type { PropsWithChildren } from 'react'\nimport type { HightideConfigProviderProps } from '@/src/global-contexts/HightideConfigContext'\nimport { HightideConfigProvider } from '@/src/global-contexts/HightideConfigContext'\nimport type { LocaleProviderProps } from '@/src/global-contexts/LocaleContext'\nimport { LocaleProvider } from '@/src/global-contexts/LocaleContext'\nimport type { ThemeProviderProps } from '@/src/global-contexts/ThemeContext'\nimport { ThemeProvider } from '@/src/global-contexts/ThemeContext'\n\ntype HightideProviderProps = PropsWithChildren & {\n  theme?: Omit<ThemeProviderProps, 'children'>,\n  locale?: Omit<LocaleProviderProps, 'children'>,\n  config?: Omit<HightideConfigProviderProps, 'children'>,\n}\n\nexport const HightideProvider = ({\n  children,\n  theme,\n  locale,\n  config,\n}: HightideProviderProps) => {\n  return (\n    <LocaleProvider {...locale}>\n      <ThemeProvider {...theme}>\n        <HightideConfigProvider {...config}>\n          {children}\n        </HightideConfigProvider>\n      </ThemeProvider>\n    </LocaleProvider>\n  )\n}\n","import { useEffect } from 'react'\n\nconst selectorName = 'data-hw-focus-guard'\n\nfunction FocusGuard() {\n  const element = document.createElement('div')\n  element.setAttribute(selectorName, '')\n  element.tabIndex = 0\n  element.style.border = 'none'\n  element.style.outline = 'none'\n  element.style.boxShadow = 'none'\n  element.style.opacity = '0'\n  element.style.position = 'fixed'\n  element.style.pointerEvents = 'none'\n  return element\n}\n\nclass FocusGuardsService {\n  private count: number = 0\n\n  private static instance: FocusGuardsService\n\n  private constructor() {}\n\n  static getInstance(): FocusGuardsService {\n    if (!FocusGuardsService.instance) {\n      FocusGuardsService.instance = new FocusGuardsService()\n    }\n    return FocusGuardsService.instance\n  }\n\n  add() {\n    const edgeGuards = document.querySelectorAll(`[${selectorName}]`)\n    document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? FocusGuard())\n    document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? FocusGuard())\n    this.count++\n  }\n\n  remove() {\n    if (this.count === 1) {\n      document.querySelectorAll(`[${selectorName}]`)\n        .forEach((node) => node.remove())\n    }\n    this.count--\n  }\n}\n\nexport const useFocusGuards = () => {\n  useEffect(() => {\n    FocusGuardsService.getInstance().add()\n    return () => {\n      FocusGuardsService.getInstance().remove()\n    }\n  }, [])\n}","import type { RefObject } from 'react'\nimport React, { useEffect } from 'react'\n\nexport const useFocusOnceVisible = (\n  ref: RefObject<HTMLElement>,\n  disable: boolean = false\n) => {\n  const [hasUsedFocus, setHasUsedFocus] = React.useState(false)\n\n  useEffect(() => {\n    if (disable || hasUsedFocus) {\n      return\n    }\n    const observer = new IntersectionObserver(([entry]) => {\n      if (entry.isIntersecting && !hasUsedFocus) {\n        ref.current?.focus()\n        setHasUsedFocus(hasUsedFocus)\n      }\n    }, {\n      threshold: 0.1,\n    })\n\n    if (ref.current) {\n      observer.observe(ref.current)\n    }\n\n    return () => observer.disconnect()\n  }, [disable, hasUsedFocus, ref])\n}","import { useCallback, useMemo } from 'react'\nimport { useControlledState } from '@/src/hooks/useControlledState'\nimport type { TreeItem, TreeNode } from './types'\nimport { TreeUtilities } from './treeUtilities'\n\nexport interface TreeFocusNavigationOptions {\n  nodes: ReadonlyArray<TreeNode>,\n  visibleItems: ReadonlyArray<TreeItem>,\n  focusedId?: string | null,\n  onFocusedIdChange?: (focusedId: string | null) => void,\n  initialFocusedId?: string | null,\n  onNavigate?: (id: string, path: ReadonlyArray<string>) => void,\n}\n\nexport interface TreeFocusNavigationReturn {\n  focusedId: string | null,\n  focusedItem: TreeItem | null,\n  setFocusedId: (focusedId: string | null) => void,\n  navigateTo: (id: string) => void,\n  next: () => void,\n  previous: () => void,\n  first: () => void,\n  last: () => void,\n}\n\nexport function useTreeFocusNavigation({\n  nodes,\n  visibleItems,\n  focusedId: controlledFocusedId,\n  onFocusedIdChange,\n  initialFocusedId,\n  onNavigate,\n}: TreeFocusNavigationOptions): TreeFocusNavigationReturn {\n  const index = useMemo(() => TreeUtilities.buildTreeIndex(nodes), [nodes])\n\n  const [focusedId, setFocusedId] = useControlledState<string | null>({\n    value: controlledFocusedId,\n    onValueChange: onFocusedIdChange,\n    defaultValue: initialFocusedId ?? null,\n  })\n\n  const resolvedFocusedId = useMemo(() => {\n    if (focusedId == null) return null\n    if (index.byId.has(focusedId)) return focusedId\n    return null\n  }, [focusedId, index])\n\n  const focusedItem = useMemo(() => {\n    if (resolvedFocusedId == null) return null\n    return visibleItems.find((item) => item.id === resolvedFocusedId)\n      ?? { id: resolvedFocusedId, path: index.byId.get(resolvedFocusedId)?.path ?? [], expanded: false }\n  }, [visibleItems, resolvedFocusedId, index])\n\n  const navigateTo = useCallback((id: string) => {\n    const entry = index.byId.get(id)\n    if (entry == null) {\n      console.warn(`Attempted to navigate to node ${id} that does not exist`)\n      return\n    }\n    setFocusedId(id)\n    onNavigate?.(id, entry.path)\n  }, [index, onNavigate, setFocusedId])\n\n  const next = useCallback(() => {\n    if (visibleItems.length === 0) return\n\n    if (resolvedFocusedId == null) {\n      navigateTo(visibleItems[0].id)\n      return\n    }\n\n    const currentIndex = visibleItems.findIndex((item) => item.id === resolvedFocusedId)\n    const startIndex = currentIndex < 0 ? 0 : currentIndex\n\n    if (startIndex < visibleItems.length - 1) {\n      navigateTo(visibleItems[startIndex + 1].id)\n    }\n  }, [visibleItems, resolvedFocusedId, navigateTo])\n\n  const previous = useCallback(() => {\n    if (visibleItems.length === 0) return\n\n    if (resolvedFocusedId == null) {\n      navigateTo(visibleItems[visibleItems.length - 1].id)\n      return\n    }\n\n    const currentIndex = visibleItems.findIndex((item) => item.id === resolvedFocusedId)\n    const startIndex = currentIndex < 0 ? visibleItems.length - 1 : currentIndex\n\n    if (startIndex > 0) {\n      navigateTo(visibleItems[startIndex - 1].id)\n    }\n  }, [visibleItems, resolvedFocusedId, navigateTo])\n\n  const first = useCallback(() => {\n    if (visibleItems.length === 0) return\n    navigateTo(visibleItems[0].id)\n  }, [visibleItems, navigateTo])\n\n  const last = useCallback(() => {\n    if (visibleItems.length === 0) return\n    navigateTo(visibleItems[visibleItems.length - 1].id)\n  }, [visibleItems, navigateTo])\n\n  return useMemo((): TreeFocusNavigationReturn => ({\n    focusedId: resolvedFocusedId,\n    focusedItem,\n    setFocusedId,\n    navigateTo,\n    next,\n    previous,\n    first,\n    last,\n  }), [resolvedFocusedId, focusedItem, setFocusedId, navigateTo, next, previous, first, last])\n}\n","import { useCallback, useEffect, useMemo } from 'react'\nimport { useTreeExpansion, type TreeExpansionOptions, type TreeExpansionReturn } from './useTreeExpansion'\nimport { useTreeFocusNavigation, type TreeFocusNavigationReturn } from './useTreeFocusNavigation'\nimport { TreeUtilities } from './treeUtilities'\n\nexport interface TreeNavigationOptions extends TreeExpansionOptions {\n  focusedId?: string | null,\n  onFocusedIdChange?: (focusedId: string | null) => void,\n  initialFocusedId?: string | null,\n}\n\nexport interface TreeNavigationActionOptions {\n  isFocusing?: boolean,\n}\n\nexport interface TreeNavigationReturn extends\n  Omit<TreeExpansionReturn, 'expand'|'collapse'|'toggleExpansion'>,\n  Omit<TreeFocusNavigationReturn, 'setFocusedId'> {\n    expand: (id: string, options?: TreeNavigationActionOptions) => void,\n    collapse: (id: string, options?: TreeNavigationActionOptions) => void,\n    toggleExpansion: (id: string, options?: TreeNavigationActionOptions) => void,\n  }\n\n\nexport function useTreeNavigation({\n  nodes,\n  focusedId: controlledFocusedId,\n  onFocusedIdChange,\n  initialFocusedId,\n  onlyOneExpandedTree = false,\n  ...expansionOptions\n}: TreeNavigationOptions): TreeNavigationReturn {\n  const index = useMemo(() => TreeUtilities.buildTreeIndex(nodes), [nodes])\n  const expansion = useTreeExpansion({ nodes, onlyOneExpandedTree, ...expansionOptions })\n\n  const { expandForPath } = expansion\n\n  const handleNavigate = useCallback((_id: string, path: ReadonlyArray<string>) => {\n    expandForPath(path)\n  }, [expandForPath])\n\n  const focus = useTreeFocusNavigation({\n    nodes,\n    visibleItems: expansion.visibleItems,\n    focusedId: controlledFocusedId,\n    onFocusedIdChange,\n    initialFocusedId,\n    onNavigate: handleNavigate,\n  })\n\n  useEffect(() => {\n    if (focus.focusedId == null) return\n    const entry = index.byId.get(focus.focusedId)\n    if (entry == null) return\n    expandForPath(entry.path)\n  }, [focus.focusedId, index, expandForPath])\n\n  const getFocusedPath = useCallback(() => {\n    if (focus.focusedId == null) return null\n    return index.byId.get(focus.focusedId)?.path ?? null\n  }, [focus.focusedId, index])\n\n  const expand = useCallback((id: string, options?: TreeNavigationActionOptions | undefined) => {\n    const entry = index.byId.get(id)\n    if (entry == null || entry.node.items.length === 0) return\n\n    if (options?.isFocusing) {\n      focus.setFocusedId(id)\n    }\n\n    expansion.expand(id, {\n      focusedPath: options?.isFocusing\n        ? entry.path\n        : getFocusedPath(),\n      focusedId: focus.focusedId,\n    })\n  }, [index, expansion, focus, getFocusedPath])\n\n  const collapse = useCallback((id: string, options?: TreeNavigationActionOptions | undefined) => {\n    if (options?.isFocusing) {\n      focus.setFocusedId(id)\n    }\n\n    expansion.collapse(id, {\n      focusedId: options?.isFocusing ? null : focus.focusedId,\n    })\n  }, [expansion, focus])\n\n  const toggleExpansion = useCallback((id: string, options?: TreeNavigationActionOptions | undefined) => {\n    const entry = index.byId.get(id)\n    if (entry == null || entry.node.items.length === 0) return\n\n    if (options?.isFocusing) {\n      focus.setFocusedId(id)\n      expansion.toggleExpansion(id, { focusedPath: entry.path })\n      return\n    }\n\n    const isExpanded = expansion.expandedIds.has(id)\n    if (isExpanded) {\n      expansion.collapse(id, { focusedId: focus.focusedId })\n    } else {\n      expansion.expand(id, {\n        focusedPath: getFocusedPath(),\n        focusedId: focus.focusedId,\n      })\n    }\n  }, [index, expansion, focus, getFocusedPath])\n\n  return useMemo((): TreeNavigationReturn => ({\n    visibleItems: expansion.visibleItems,\n    allItems: expansion.allItems,\n    expandedIds: expansion.expandedIds,\n    setExpandedIds: expansion.setExpandedIds,\n    expand,\n    collapse,\n    toggleExpansion,\n    expandForPath: expansion.expandForPath,\n    focusedId: focus.focusedId,\n    focusedItem: focus.focusedItem,\n    navigateTo: focus.navigateTo,\n    next: focus.next,\n    previous: focus.previous,\n    first: focus.first,\n    last: focus.last,\n  }), [expansion, expand, collapse, toggleExpansion, focus])\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nexport function useDebouncer(debounceMs = 300) {\n  const timerRef = useRef<number | null>(null)\n\n  useEffect(() => {\n    return () => {\n      if (timerRef.current !== null) {\n        window.clearTimeout(timerRef.current)\n      }\n    }\n  }, [])\n\n  const withDebounce = useCallback((callback: () => void, debounceMsOverride?: number) => {\n    if (timerRef.current !== null) {\n      window.clearTimeout(timerRef.current)\n    }\n    timerRef.current = window.setTimeout(() => {\n      timerRef.current = null\n      callback()\n    }, debounceMsOverride ?? debounceMs)\n  }, [debounceMs])\n\n  return withDebounce\n}\n","import type { RefObject } from 'react'\nimport { useEffect, useRef } from 'react'\n\nexport type ElementHandle = Record<string, HTMLElement | null>\n\nexport function useHandleRefs<T extends ElementHandle>(\n  handleRef: RefObject<T>\n): RefObject<HTMLElement | null>[] {\n  const refs = useRef<RefObject<HTMLElement | null>[]>([])\n\n  useEffect(() => {\n    refs.current = Object.keys(handleRef?.current ?? {}).map(\n      () => ({ current: null })\n    )\n    const values = Object.values(handleRef?.current ?? {})\n    values.forEach((el, i) => {\n      refs.current[i].current = el\n    })\n  })\n\n  return refs.current\n}\n","'use client'\n\nimport { useEffect, useLayoutEffect, useState } from 'react'\n\nconst isClient = typeof window !== 'undefined' && typeof document !== 'undefined'\nconst useIsomorphicEffect = isClient ? useLayoutEffect : useEffect\n\nexport const useIsMounted = () => {\n  const [isMounted, setIsMounted] = useState(false)\n\n  useIsomorphicEffect(() => {\n    setIsMounted(true)\n    return () => {\n      setIsMounted(false)\n    }\n  }, [])\n  return isMounted\n}","import React from 'react'\n\nexport function useLogUnstableDependencies<T extends Record<string, unknown>>(name: string, value: T) {\n  const prev = React.useRef<T | null>(null)\n\n  React.useEffect(() => {\n    if (!prev.current) {\n      prev.current = value\n      return\n    }\n\n    const changes: Record<string, { prev: unknown, next: unknown }> = {}\n\n    for (const key of Object.keys(value)) {\n      if (prev.current[key] !== value[key]) {\n        changes[key] = {\n          prev: prev.current[key],\n          next: value[key],\n        }\n      }\n    }\n\n    if (Object.keys(changes).length > 0) {\n      console.info(`[${name}] changed`, changes)\n    }\n\n    prev.current = value\n  })\n}\n","import type React from 'react'\nimport { useEffect, useState } from 'react'\nimport { resolveSetState } from '@/src/utils/resolveSetState'\n\n// TODO replace all usages of this hook with `useControlledState`\nexport const useOverwritableState = <T>(overwriteValue?: T, onChange?: (value: T) => void): [T, React.Dispatch<React.SetStateAction<T>>] => {\n  const [state, setState] = useState<T>(overwriteValue)\n\n  useEffect(() => {\n    setState(overwriteValue)\n  }, [overwriteValue])\n\n  const onChangeWrapper: React.Dispatch<React.SetStateAction<T>> = (action) => {\n    const resolved = resolveSetState(action, state)\n    setState(resolved)\n    onChange?.(resolved)\n  }\n\n  return [state, onChangeWrapper]\n}","import { useReducer } from 'react'\n\nexport const useRerender = () => {\n  return useReducer(() => ({}), {})[1]\n}","'use client'\n\nimport type { RefObject } from 'react'\nimport { useEffect, useRef } from 'react'\n\nexport type SwipeInputMode = 'touch' | 'mouse' | 'both'\n\nexport type SwipeDirection =\n  | 'leftToRight'\n  | 'rightToLeft'\n  | 'topToBottom'\n  | 'bottomToTop'\n\nexport interface SwipeEventData {\n  direction: SwipeDirection,\n}\n\nexport interface SwipeStartRegion {\n  minX?: number,\n  maxX?: number,\n  minY?: number,\n  maxY?: number,\n}\n\ninterface GesturePoint {\n  x: number,\n  y: number,\n  scrollY: number,\n  time: number,\n}\n\ninterface UseSwipeGestureOptions {\n  elementRef?: RefObject<HTMLElement | null>,\n  inputMode?: SwipeInputMode,\n  onSwipe?: (data: SwipeEventData) => void,\n  startRegion?: SwipeStartRegion,\n  threshold?: number,\n  crossAxisThreshold?: number,\n  maxSwipeTime?: number,\n}\n\nexport const useSwipeGesture = ({\n  elementRef,\n  inputMode = 'touch',\n  onSwipe,\n  startRegion,\n  threshold = 50,\n  crossAxisThreshold = 100,\n  maxSwipeTime = 100,\n}: UseSwipeGestureOptions) => {\n  const onSwipeRef = useRef(onSwipe)\n  const startRegionRef = useRef(startRegion)\n  const thresholdRef = useRef(threshold)\n  const crossAxisThresholdRef = useRef(crossAxisThreshold)\n  const maxSwipeTimeRef = useRef(maxSwipeTime)\n  const gestureStartRef = useRef<GesturePoint | null>(null)\n  const gestureEndRef = useRef<GesturePoint | null>(null)\n  const isScrollingRef = useRef(false)\n  const isMouseDownRef = useRef(false)\n\n  useEffect(() => {\n    onSwipeRef.current = onSwipe\n    startRegionRef.current = startRegion\n    thresholdRef.current = threshold\n    crossAxisThresholdRef.current = crossAxisThreshold\n    maxSwipeTimeRef.current = maxSwipeTime\n  }, [onSwipe, startRegion, threshold, crossAxisThreshold, maxSwipeTime])\n\n  const isWithinStartRegion = (x: number, y: number): boolean => {\n    const region = startRegionRef.current\n    if (!region) return true\n    if (region.minX !== undefined && x < region.minX) return false\n    if (region.maxX !== undefined && x > region.maxX) return false\n    if (region.minY !== undefined && y < region.minY) return false\n    if (region.maxY !== undefined && y > region.maxY) return false\n    return true\n  }\n\n  const findScrollableParent = (element: HTMLElement | null): HTMLElement | null => {\n    if (!element) return null\n\n    const table = element.closest('table') || element.closest('[role=\"table\"]')\n    if (table) {\n      let parent = table.parentElement\n      while (parent) {\n        const style = window.getComputedStyle(parent)\n        if (style.overflow === 'auto' || style.overflow === 'scroll' ||\n            style.overflowY === 'auto' || style.overflowY === 'scroll' ||\n            style.overflowX === 'auto' || style.overflowX === 'scroll') {\n          return parent\n        }\n        parent = parent.parentElement\n      }\n      return table as HTMLElement\n    }\n\n    let current: HTMLElement | null = element\n    while (current) {\n      const style = window.getComputedStyle(current)\n      if (style.overflow === 'auto' || style.overflow === 'scroll' ||\n          style.overflowY === 'auto' || style.overflowY === 'scroll' ||\n          style.overflowX === 'auto' || style.overflowX === 'scroll') {\n        return current\n      }\n      current = current.parentElement\n    }\n\n    return null\n  }\n\n  useEffect(() => {\n    const element = elementRef?.current ?? null\n    const target: HTMLElement | Window = element ?? window\n    const listenTouch = inputMode === 'touch' || inputMode === 'both'\n    const listenMouse = inputMode === 'mouse' || inputMode === 'both'\n\n    const onGestureStart = (x: number, y: number, eventTarget: HTMLElement) => {\n      if (!isWithinStartRegion(x, y)) return\n\n      const scrollableParent = findScrollableParent(eventTarget)\n\n      gestureEndRef.current = null\n      gestureStartRef.current = {\n        x,\n        y,\n        scrollY: scrollableParent?.scrollTop ?? window.scrollY,\n        time: performance.now(),\n      }\n      isScrollingRef.current = !!scrollableParent\n    }\n\n    const onGestureMove = (x: number, y: number, eventTarget: HTMLElement) => {\n      const scrollableParent = findScrollableParent(eventTarget)\n      const currentScrollY = scrollableParent?.scrollTop ?? window.scrollY\n\n      gestureEndRef.current = {\n        x,\n        y,\n        scrollY: currentScrollY,\n        time: performance.now(),\n      }\n\n      if (gestureStartRef.current && Math.abs(currentScrollY - gestureStartRef.current.scrollY) > 5) {\n        isScrollingRef.current = true\n      }\n    }\n\n    const resolveSwipeDirection = (start: GesturePoint, end: GesturePoint): SwipeDirection | null => {\n      const deltaX = end.x - start.x\n      const deltaY = end.y - start.y\n      const absX = Math.abs(deltaX)\n      const absY = Math.abs(deltaY)\n      const minDistance = thresholdRef.current\n      const maxCrossAxis = crossAxisThresholdRef.current\n\n      if (absX < minDistance && absY < minDistance) {\n        return null\n      }\n\n      if (absX >= absY && absX >= minDistance && absY <= maxCrossAxis) {\n        return deltaX > 0 ? 'leftToRight' : 'rightToLeft'\n      }\n\n      if (absY > absX && absY >= minDistance && absX <= maxCrossAxis) {\n        return deltaY > 0 ? 'topToBottom' : 'bottomToTop'\n      }\n\n      return null\n    }\n\n    const onGestureEnd = () => {\n      const start = gestureStartRef.current\n      const end = gestureEndRef.current\n\n      if (!start || !end) {\n        gestureStartRef.current = null\n        gestureEndRef.current = null\n        isScrollingRef.current = false\n        return\n      }\n\n      if (isScrollingRef.current || Math.abs(start.scrollY - end.scrollY) > 5) {\n        gestureStartRef.current = null\n        gestureEndRef.current = null\n        isScrollingRef.current = false\n        return\n      }\n\n      const maxSwipeTime = maxSwipeTimeRef.current\n      if (maxSwipeTime !== undefined && end.time - start.time > maxSwipeTime) {\n        gestureStartRef.current = null\n        gestureEndRef.current = null\n        isScrollingRef.current = false\n        return\n      }\n\n      const direction = resolveSwipeDirection(start, end)\n\n      if (direction && onSwipeRef.current) {\n        onSwipeRef.current({ direction })\n      }\n\n      gestureStartRef.current = null\n      gestureEndRef.current = null\n      isScrollingRef.current = false\n    }\n\n    const onTouchStart = (e: TouchEvent) => {\n      if (!e.touches[0]) return\n      onGestureStart(e.touches[0].clientX, e.touches[0].clientY, e.target as HTMLElement)\n    }\n\n    const onTouchMove = (e: TouchEvent) => {\n      if (!e.touches[0]) return\n      onGestureMove(e.touches[0].clientX, e.touches[0].clientY, e.target as HTMLElement)\n    }\n\n    const onTouchEnd = () => {\n      onGestureEnd()\n    }\n\n    const onMouseMove = (e: MouseEvent) => {\n      if (!isMouseDownRef.current) return\n      onGestureMove(e.clientX, e.clientY, e.target as HTMLElement)\n    }\n\n    const onMouseUp = () => {\n      if (!isMouseDownRef.current) return\n      isMouseDownRef.current = false\n      window.removeEventListener('mousemove', onMouseMove)\n      window.removeEventListener('mouseup', onMouseUp)\n      onGestureEnd()\n    }\n\n    const onMouseDown = (e: MouseEvent) => {\n      if (e.button !== 0) return\n      if (!isWithinStartRegion(e.clientX, e.clientY)) return\n      isMouseDownRef.current = true\n      onGestureStart(e.clientX, e.clientY, e.target as HTMLElement)\n      window.addEventListener('mousemove', onMouseMove)\n      window.addEventListener('mouseup', onMouseUp)\n    }\n\n    const passiveOptions: AddEventListenerOptions = { passive: true }\n\n    if (listenTouch) {\n      target.addEventListener('touchstart', onTouchStart, passiveOptions)\n      target.addEventListener('touchmove', onTouchMove, passiveOptions)\n      target.addEventListener('touchend', onTouchEnd, passiveOptions)\n    }\n\n    if (listenMouse) {\n      target.addEventListener('mousedown', onMouseDown)\n    }\n\n    return () => {\n      if (listenTouch) {\n        target.removeEventListener('touchstart', onTouchStart)\n        target.removeEventListener('touchmove', onTouchMove)\n        target.removeEventListener('touchend', onTouchEnd)\n      }\n\n      if (listenMouse) {\n        target.removeEventListener('mousedown', onMouseDown)\n        window.removeEventListener('mousemove', onMouseMove)\n        window.removeEventListener('mouseup', onMouseUp)\n      }\n    }\n  }, [elementRef, inputMode])\n\n  return elementRef\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nexport function useThrottle(throttleMs = 300) {\n  const lastRunRef = useRef<number | null>(null)\n  const timerRef = useRef<number | null>(null)\n  const pendingCallbackRef = useRef<(() => void) | null>(null)\n\n  useEffect(() => {\n    return () => {\n      if (timerRef.current !== null) {\n        window.clearTimeout(timerRef.current)\n      }\n    }\n  }, [])\n\n  const withThrottle = useCallback((callback: () => void, throttleMsOverride?: number) => {\n    const ms = throttleMsOverride ?? throttleMs\n    const now = performance.now()\n    const timeSinceLastRun = lastRunRef.current !== null ? now - lastRunRef.current : Infinity\n\n    const run = (fn: () => void) => {\n      lastRunRef.current = performance.now()\n      pendingCallbackRef.current = null\n      fn()\n    }\n\n    if (timeSinceLastRun >= ms) {\n      if (timerRef.current !== null) {\n        window.clearTimeout(timerRef.current)\n        timerRef.current = null\n      }\n      run(callback)\n      return\n    }\n\n    pendingCallbackRef.current = callback\n\n    if (timerRef.current !== null) {\n      return\n    }\n\n    timerRef.current = window.setTimeout(() => {\n      timerRef.current = null\n      const pending = pendingCallbackRef.current\n      if (pending !== null) {\n        run(pending)\n      }\n    }, ms - timeSinceLastRun)\n  }, [throttleMs])\n\n  return withThrottle\n}\n","import { useEffect, useState } from 'react'\nimport { DateUtils, type DateTimeFormat } from '../utils/date'\nimport type { HightideTranslationLocales } from '../i18n/translations'\nimport { useLocale } from '../global-contexts/LocaleContext'\n\nexport interface UseUpdatingDateStringProps {\n  date: Date,\n  absoluteFormat?: DateTimeFormat,\n  localeOverride?: HightideTranslationLocales,\n  is24HourFormat?: boolean,\n  timeZone?: string,\n}\n\ntype DateAndTimeStrings = {\n  compareDate: Date,\n  absolute: string,\n  relative: string,\n}\n\nexport const useUpdatingDateString = ({ absoluteFormat = 'dateTime', localeOverride, is24HourFormat: is24HourFormatOverride, timeZone: timeZoneOverride, date }: UseUpdatingDateStringProps) => {\n  const { locale: contextLocale, is24HourFormat: contextIs24HourFormat, timeZone: contextTimeZone } = useLocale()\n  const locale = localeOverride ?? contextLocale\n  const is24HourFormat = is24HourFormatOverride ?? contextIs24HourFormat ?? true\n  const timeZone = timeZoneOverride ?? contextTimeZone\n  const [dateAndTimeStrings, setDateAndTimeStrings] = useState<DateAndTimeStrings>({\n    compareDate: date,\n    absolute: DateUtils.formatAbsolute(date, locale, absoluteFormat, { is24HourFormat, timeZone }),\n    relative: DateUtils.formatRelative(date, locale),\n  })\n\n  useEffect(() => {\n    setDateAndTimeStrings({\n      compareDate: date,\n      absolute: DateUtils.formatAbsolute(date, locale, absoluteFormat, { is24HourFormat, timeZone }),\n      relative: DateUtils.formatRelative(date, locale),\n    })\n  }, [date, absoluteFormat, locale, is24HourFormat, timeZone])\n\n  useEffect(() => {\n    let timeoutId: NodeJS.Timeout\n\n    const startTimer = () => {\n      const now = new Date()\n      const diff = Math.abs((date.getTime() - now.getTime()) / 1000)\n\n      let delayInSeconds: number\n\n      if(diff < DateUtils.timesInSeconds.minute) {\n        delayInSeconds = DateUtils.timesInSeconds.second\n      } else if(diff < DateUtils.timesInSeconds.hour) {\n        delayInSeconds = DateUtils.timesInSeconds.minute\n      } else {\n        delayInSeconds = DateUtils.timesInSeconds.hour\n      }\n\n      timeoutId = setInterval(() => {\n        setDateAndTimeStrings({\n          compareDate: date,\n          absolute: DateUtils.formatAbsolute(date, locale, absoluteFormat, { is24HourFormat, timeZone }),\n          relative: DateUtils.formatRelative(date, locale),\n        })\n      }, delayInSeconds * 1000 / 2)\n    }\n\n    startTimer()\n\n    return () => clearInterval(timeoutId)\n  }, [absoluteFormat, date, locale, is24HourFormat, timeZone])\n\n  return {\n    absolute: dateAndTimeStrings.absolute,\n    relative: dateAndTimeStrings.relative,\n  }\n}","export const validateEmail = (email: string): boolean => {\n  return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(email)\n}\n","import { validateEmail } from '@/src/utils/emailValidation'\nimport { useHightideTranslation } from '@/src/i18n/useHightideTranslation'\nimport { useMemo } from 'react'\n\nexport type ValidatorError =\n  'notEmpty'\n  | 'invalidEmail'\n  | 'tooLong'\n  | 'tooShort'\n  | 'outOfRangeString'\n  | 'outOfRangeNumber'\n  | 'outOfRangeSelectionItems'\n  | 'tooFewSelectionItems'\n  | 'tooManySelectionItems'\nexport type ValidatorResult = ValidatorError | undefined\n\nconst notEmpty = (value: unknown): ValidatorResult => {\n  if (!value) {\n    return 'notEmpty'\n  }\n}\n\ntype BoundsValidatorResult = 'lower' | 'upper' | 'range' | 'none'\nconst boundsValidator = (length: number | undefined, bounds: [number | undefined, number | undefined]): BoundsValidatorResult => {\n  const [min, max] = bounds\n\n  if (min !== undefined && max !== undefined && (length === undefined || length < min || length > max)) {\n    return 'range'\n  }\n\n  if (min !== undefined && (length === undefined || length < min)) {\n    return 'lower'\n  }\n\n  if (max !== undefined && length !== undefined && length > max) {\n    return 'upper'\n  }\n\n  return 'none'\n}\n\nconst lengthValidator = (value: string | undefined, bounds: [number | undefined, number | undefined]): ValidatorResult => {\n  const mapping: Record<BoundsValidatorResult, ValidatorResult> = {\n    range: 'outOfRangeString',\n    lower: 'tooShort',\n    upper: 'tooLong',\n    none: undefined\n  }\n  return mapping[boundsValidator(value?.length, bounds)]\n}\n\nconst selectionValidator = (value: unknown[], bounds: [number | undefined, number | undefined]): ValidatorResult => {\n  const mapping: Record<BoundsValidatorResult, ValidatorResult> = {\n    range: 'outOfRangeSelectionItems',\n    lower: 'tooFewSelectionItems',\n    upper: 'tooManySelectionItems',\n    none: undefined\n  }\n  return mapping[boundsValidator(value?.length, bounds)]\n}\n\nconst emailValidator = (value: string | undefined) => {\n  if (!value || !validateEmail(value)) {\n    return 'invalidEmail'\n  }\n}\n\n\nexport const UseValidators = {\n  notEmpty: notEmpty,\n  length: lengthValidator,\n  email: emailValidator,\n  selection: selectionValidator,\n}\n\nexport const useTranslatedValidators = () => {\n  const translation = useHightideTranslation()\n\n  return useMemo(() => ({\n    notEmpty: (value: unknown) => {\n      const result = notEmpty(value)\n      if (result) {\n        return translation(result)\n      }\n    },\n    length: (value: string | undefined, length: [number | undefined, number | undefined]) => {\n      const [min, max] = length\n      const result = lengthValidator(value, length)\n      if (result) {\n        return translation(result as 'outOfRangeString' | 'tooShort' | 'tooLong', { min, max })\n      }\n    },\n    email: (value: string | undefined) => {\n      const result = emailValidator(value ?? '')\n      if (result) {\n        return translation(result as 'invalidEmail')\n      }\n    },\n    selection: (value: unknown[] | undefined, length: [number | undefined, number | undefined]) => {\n      const [min, max] = length\n      const result = selectionValidator(value, length)\n      if (result) {\n        return translation(result as\n            'outOfRangeSelectionItems' | 'tooFewSelectionItems' | 'tooManySelectionItems',\n        { min, max })\n      }\n    }\n  }), [translation])\n}","/**\n * A simple function that implements the builder pattern\n * @param value The value to update which gets return with the same reference\n * @param update The updates to apply on the object\n */\nexport const builder = <T>(value: T, update: (value: T) => void): T => {\n  update(value)\n  return value\n}\n","export type DurationJSON = {\n  years: number,\n  months: number,\n  days: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n}\n\nexport class Duration {\n  readonly years: number\n  readonly months: number\n  readonly days: number\n  readonly hours: number\n  readonly minutes: number\n  readonly seconds: number\n  readonly milliseconds: number\n\n  constructor({\n    years = 0,\n    months = 0,\n    days = 0,\n    hours = 0,\n    minutes = 0,\n    seconds = 0,\n    milliseconds = 0,\n  }: Partial<DurationJSON> = {}) {\n    this.assertRanges({ years, months, days, hours, minutes, seconds, milliseconds })\n\n    this.years = years\n    this.months = months\n    this.days = days\n    this.hours = hours\n    this.minutes = minutes\n    this.seconds = seconds\n    this.milliseconds = milliseconds\n  }\n\n  /** Date arithmetic */\n  addTo(date: Date): Date {\n    return this.applyTo(date, 1)\n  }\n\n  subtractFrom(date: Date): Date {\n    return this.applyTo(date, -1)\n  }\n\n  /** Duration arithmetic */\n  add(other: Duration): Duration {\n    return new Duration({\n      years: this.years + other.years,\n      months: this.months + other.months,\n      days: this.days + other.days,\n      hours: this.hours + other.hours,\n      minutes: this.minutes + other.minutes,\n      seconds: this.seconds + other.seconds,\n      milliseconds: this.milliseconds + other.milliseconds,\n    })\n  }\n\n  subtract(other: Duration): Duration {\n    return new Duration({\n      years: this.years - other.years,\n      months: this.months - other.months,\n      days: this.days - other.days,\n      hours: this.hours - other.hours,\n      minutes: this.minutes - other.minutes,\n      seconds: this.seconds - other.seconds,\n      milliseconds: this.milliseconds - other.milliseconds,\n    })\n  }\n\n  equals(other: Duration): boolean {\n    return (\n      this.years === other.years &&\n      this.months === other.months &&\n      this.days === other.days &&\n      this.hours === other.hours &&\n      this.minutes === other.minutes &&\n      this.seconds === other.seconds &&\n      this.milliseconds === other.milliseconds\n    )\n  }\n\n  toJSON(): DurationJSON {\n    return { ...this }\n  }\n\n  /** Static difference */\n  static difference(start: Date, end: Date): Duration {\n    const diff = end.getTime() - start.getTime()\n\n    const ms = 1000\n    const min = 60 * ms\n    const hr = 60 * min\n    const day = 24 * hr\n    const month = 30 * day\n    const year = 365.25 * day\n\n    return new Duration({\n      years: Math.floor(diff / year),\n      months: Math.floor(diff / month),\n      days: Math.floor(diff / day),\n      hours: Math.floor((diff % day) / hr),\n      minutes: Math.floor((diff % hr) / min),\n      seconds: Math.floor((diff % min) / ms),\n      milliseconds: diff % ms,\n    })\n  }\n\n  private applyTo(date: Date, multiplier: 1 | -1): Date {\n    const d = new Date(date)\n\n    d.setFullYear(d.getFullYear() + multiplier * this.years)\n    d.setMonth(d.getMonth() + multiplier * this.months)\n    d.setDate(d.getDate() + multiplier * this.days)\n    d.setHours(d.getHours() + multiplier * this.hours)\n    d.setMinutes(d.getMinutes() + multiplier * this.minutes)\n    d.setSeconds(d.getSeconds() + multiplier * this.seconds)\n    d.setMilliseconds(d.getMilliseconds() + multiplier * this.milliseconds)\n\n    return d\n  }\n\n  private assertRanges(d: DurationJSON): void {\n    if (d.years < 0) throw new RangeError('years >= 0')\n    if (d.months < 0 || d.months > 11) throw new RangeError('months: 0–11')\n    if (d.days < 0) throw new RangeError('days >= 0')\n    if (d.hours < 0 || d.hours > 23) throw new RangeError('hours: 0–23')\n    if (d.minutes < 0 || d.minutes > 59) throw new RangeError('minutes: 0–59')\n    if (d.seconds < 0 || d.seconds > 59) throw new RangeError('seconds: 0–59')\n    if (d.milliseconds < 0) throw new RangeError('milliseconds >= 0')\n  }\n\n  valueOf(): number {\n    return (\n      this.milliseconds +\n      this.seconds * 1e3 +\n      this.minutes * 6e4 +\n      this.hours * 3.6e6 +\n      this.days * 8.64e7\n    )\n  }\n}\n","import type { DirectionNumber } from './math'\n\n/**\n *  1 is forwards\n *\n * -1 is backwards\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: DirectionNumber): 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): DirectionNumber {\n    const forwardDistance = this.getDistanceForward(position, target)\n    const backwardDistance = this.getDistanceBackward(position, target)\n    return forwardDistance < backwardDistance ? 1 : -1\n  }\n}\n","export const match = <K extends string | number | symbol, V>(key: K, values: Record<K, V>) => {\n  return values[key]\n}","export const noop = () => undefined\n","async function sleep(ms: number): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nasync function delayed<T>(value: T, ms: number): Promise<T> {\n  await sleep(ms)\n  return value\n}\n\nexport const PromiseUtils = {\n  sleep,\n  delayed\n}"],"mappings":"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","names":["clsx","jsx","jsxs","clsx","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","forwardRef","forwardRef","useContext","useEffect","useId","useCallback","useMemo","useRef","useState","useId","value","useEffect","useState","useState","jsx","useRef","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","range","useEffect","useLayoutEffect","useLayoutEffect","useState","useRef","useMemo","calculate","useCallback","useLayoutEffect","useEffect","jsx","forwardRef","useRef","createContext","jsx","jsxs","createContext","useContext","useId","useState","useRef","useMemo","useEffect","useCallback","close","forwardRef","disabled","Fragment","jsx","useEffect","useState","clsx","jsx","jsxs","forwardRef","IconButtonBase","IconButtonTooltipTrigger","IconButton","jsx","jsxs","clsx","clsx","clsx","jsx","jsxs","jsx","clsx","clsx","useEffect","useMemo","useState","clsx","jsx","jsxs","useState","useMemo","useEffect","clsx","up","down","jsx","jsxs","clsx","clsx","jsx","clsx","CheckCheck","jsx","jsxs","clsx","jsx","jsxs","useCallback","useLayoutEffect","useRef","clsx","useCallback","useEffect","useRef","useState","useCallback","useEffect","useRef","useState","useRef","useEffect","useCallback","jsx","jsxs","useRef","useCallback","useLayoutEffect","clsx","useEffect","useRef","clsx","jsx","clsx","jsx","clsx","clsx","CheckCheck","jsx","jsxs","clsx","jsx","jsxs","clsx","forwardRef","useId","clsx","Fragment","jsx","jsxs","clsx","forwardRef","ActionCard","NavigationCard","useId","useEffect","useRef","useState","useState","useRef","useEffect","forwardRef","jsx","jsx","jsx","jsx","jsxs","clsx","jsx","jsxs","clsx","useId","useMemo","clsx","Check","labelPt","pathD","jsx","jsxs","Fragment","jsx","jsxs","Check","useId","useMemo","clsx","useCallback","useEffect","useId","useRef","useState","clsx","createContext","useContext","useEffect","useMemo","useState","useCallback","useEffect","useMemo","useRef","useState","useRef","useMemo","useCallback","value","useState","useEffect","jsx","createContext","useState","useMemo","useEffect","locale","useContext","useMemo","forwardRef","useCallback","useEffect","useId","useMemo","useState","createContext","useContext","useCallback","useEffect","useMemo","useState","useCallback","useMemo","useMemo","useCallback","useCallback","useMemo","useMemo","useCallback","useMemo","useMemo","useCallback","useEffect","useRef","useRef","useCallback","useEffect","useState","useCallback","useMemo","useEffect","isOpen","createContext","useContext","jsx","useState","useId","useCallback","useMemo","value","useEffect","forwardRef","useEffect","useRef","clsx","createContext","forwardRef","useContext","useEffect","useId","useRef","jsx","jsxs","createContext","useContext","forwardRef","SelectOption","useRef","useId","useEffect","clsx","jsx","jsxs","forwardRef","SelectButton","useEffect","useRef","forwardRef","useCallback","useEffect","useRef","clsx","forwardRef","useCallback","useContext","useMemo","useRef","useRef","forwardRef","useCallback","useEffect","useId","useRef","useState","listener","active","jsx","forwardRef","FocusTrap","useRef","useEffect","useCallback","useEffect","useRef","useState","jsx","forwardRef","PopUp","useContext","useRef","useCallback","useMemo","forwardRef","useRef","useEffect","useState","defaultOptions","useCallback","jsx","forwardRef","Input","useRef","value","jsx","jsxs","forwardRef","SelectContent","useRef","useEffect","useCallback","clsx","jsx","jsxs","forwardRef","Select","jsx","jsxs","resolve","useId","useRef","useState","useCallback","useEffect","clsx","useId","useMemo","forwardRef","jsx","jsxs","FormFieldLayout","createContext","useCallback","useContext","jsx","jsx","useCallback","useEffect","useMemo","useRef","useRef","useEffect","useCallback","useMemo","createContext","forwardRef","useCallback","useContext","useEffect","useId","useMemo","useRef","useState","clsx","ChevronRight","Fragment","jsx","jsxs","createContext","useContext","useRef","clsx","forwardRef","CarouselSlide","useState","useMemo","useId","useEffect","useCallback","ChevronRight","jsx","useEffect","useRef","useState","createContext","forwardRef","useCallback","useContext","useId","useMemo","clsx","jsx","jsxs","createContext","useContext","forwardRef","ExpandableRoot","useId","useState","useCallback","useMemo","ExpandableHeader","useEffect","ExpandableContent","useRef","Expandable","clsx","jsx","jsxs","useRef","useState","useLayoutEffect","useMemo","useCallback","clsx","ChevronDown","jsx","jsxs","useMemo","useRef","useState","useCallback","useLayoutEffect","clsx","ChevronDown","Fragment","jsx","close","useCallback","useId","useState","createContext","useContext","useEffect","useRef","clsx","createPortal","jsx","createContext","useContext","useState","useCallback","useEffect","useRef","useId","clsx","createPortal","clsx","jsx","jsxs","clsx","jsx","jsxs","clsx","useCallback","useMemo","useRef","useState","useCallback","useMemo","useMemo","useCallback","createContext","useCallback","useContext","useEffect","useMemo","useState","jsx","useId","useRef","ExternalLink","jsx","jsxs","useRef","useId","ExternalLink","jsx","Fragment","jsx","jsxs","useRef","clsx","useState","useMemo","useCallback","forwardRef","useCallback","useContext","useId","useMemo","useRef","X","createContext","useContext","jsx","jsxs","forwardRef","Dialog","useId","useMemo","useRef","useContext","useCallback","X","useMemo","useMemo","jsx","clsx","jsx","jsxs","clsx","jsx","jsx","clsx","jsx","jsxs","clsx","createContext","useCallback","useContext","useEffect","useMemo","useState","jsx","createContext","useState","useMemo","useEffect","useCallback","useContext","jsx","jsxs","clsx","theme","forwardRef","forwardRef","useId","useMemo","useRef","createContext","useContext","clsx","jsx","jsxs","forwardRef","useId","useMemo","useRef","X","jsx","X","jsx","Fragment","jsx","jsxs","forwardRef","Drawer","clsx","jsx","jsxs","clsx","useState","clsx","jsx","clsx","Fragment","jsx","useState","clsx","jsx","jsxs","clsx","clsx","jsx","jsxs","MenuIcon","useEffect","useCallback","useId","useRef","useState","clsx","Fragment","jsx","jsxs","DefaultLink","useState","useRef","useId","useCallback","clsx","label","useEffect","MenuIcon","ChevronLeft","ChevronRight","clsx","useEffect","useState","jsx","jsxs","useState","useEffect","clsx","ChevronLeft","value","ChevronRight","Check","ChevronLeft","ChevronRight","clsx","jsx","jsxs","clsx","ChevronLeft","ChevronRight","Check","useEffect","useMemo","useRef","useRef","useEffect","useMemo","useId","useMemo","useState","jsx","useId","useState","useMemo","jsx","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","createContext","useContext","ChevronRight","ChevronLeft","jsx","jsxs","useCallback","date","filterDate","useCallback","jsx","jsx","useState","useRef","useCallback","useLayoutEffect","useMemo","useEffect","columnSizing","columnSizingInfo","table","useRef","React","clsx","jsx","jsxs","React","clsx","flexRender","clsx","ChevronDown","ChevronUp","clsx","jsx","jsxs","ChevronUp","ChevronDown","clsx","useEffect","useId","useMemo","useRef","useState","flexRender","Check","forwardRef","useEffect","useId","useMemo","useState","forwardRef","useCallback","useEffect","useId","useMemo","useRef","useState","X","clsx","clsx","useCallback","useMemo","useRef","forwardRef","useCallback","useRef","clsx","Minus","Plus","useCallback","useEffect","useMemo","useRef","useMemo","useCallback","result","useRef","useEffect","forwardRef","useRef","clsx","jsx","forwardRef","NumberInput","useRef","clsx","jsx","jsxs","forwardRef","NumberStepperInput","useRef","useCallback","clsx","Plus","Minus","jsx","jsxs","useRef","useCallback","useMemo","clsx","useState","ChevronDown","clsx","useCallback","useEffect","useMemo","useRef","jsx","jsxs","useRef","useMemo","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","clsx","jsx","jsxs","YearRow","useRef","useState","useEffect","useMemo","clsx","useCallback","jsx","jsxs","useState","clsx","ChevronDown","clsx","jsx","jsxs","useEffect","useState","clsx","jsx","jsxs","useState","useEffect","forwardRef","useEffect","useLayoutEffect","useMemo","useRef","useState","clsx","jsx","forwardRef","DateTimeField","useMemo","useState","useRef","useEffect","useLayoutEffect","clsx","jsx","jsxs","forwardRef","DateTimeInput","useState","useCallback","isOpen","useId","useMemo","useRef","useEffect","clsx","X","value","forwardRef","useCallback","useEffect","useId","useMemo","useState","createContext","useContext","useCallback","useEffect","useMemo","useState","useCallback","useMemo","useState","useMemo","useCallback","useEffect","jsx","useState","useId","useCallback","useMemo","ids","useEffect","forwardRef","useEffect","useRef","clsx","CheckIcon","createContext","forwardRef","useContext","useEffect","useId","useRef","jsx","jsxs","createContext","useContext","forwardRef","MultiSelectOption","useRef","useId","useEffect","CheckIcon","clsx","jsx","jsxs","forwardRef","MultiSelectButton","useEffect","useRef","id","forwardRef","useCallback","useEffect","useRef","clsx","jsx","jsxs","forwardRef","MultiSelectContent","useRef","useEffect","useCallback","clsx","jsx","jsxs","forwardRef","MultiSelect","clsx","jsxs","jsx","jsxs","forwardRef","FilterBasePopUp","useMemo","useEffect","clsx","Check","TextFilterPopUp","useId","NumberFilterPopUp","DateFilterPopUp","useState","DatetimeFilterPopUp","BooleanFilterPopUp","TagsFilterPopUp","TagsSingleFilterPopUp","GenericFilterPopUp","FilterPopUp","Fragment","jsx","jsxs","useState","useRef","useId","useMemo","useEffect","flexRender","useCallback","useEffect","useRef","Calendar","Check","jsx","Fragment","jsx","jsxs","useRef","useCallback","useEffect","clsx","flexRender","memo","useRef","flexRender","clsx","useEffect","useState","useState","useEffect","top","jsx","jsxs","memo","clsx","flexRender","useRef","useCallback","useLayoutEffect","useState","useLayoutEffect","useRef","useState","jsx","jsxs","useRef","clsx","jsx","jsxs","clsx","Check","Minus","useCallback","jsx","jsxs","useCallback","value","Minus","Check","useCallback","useMemo","jsx","useMemo","useCallback","clsx","jsx","jsxs","memo","useEffect","useMemo","useState","jsx","useState","useEffect","memo","TableColumnComponent","useMemo","useMemo","useRef","useId","ChevronUp","ChevronDown","ChevronLeft","ChevronRight","Fragment","jsx","jsxs","useRef","useId","useMemo","ChevronLeft","ChevronRight","ChevronUp","ChevronDown","props","memo","useEffect","useMemo","useRef","useState","clsx","jsx","memo","useRef","useState","useEffect","useMemo","clsx","forwardRef","useCallback","useId","useMemo","useState","createContext","useContext","useCallback","useMemo","useCallback","useMemo","jsx","useState","useId","useCallback","useMemo","forwardRef","useCallback","jsx","forwardRef","ComboboxInput","useCallback","forwardRef","useEffect","useRef","clsx","jsx","jsxs","forwardRef","ComboboxList","useRef","useEffect","clsx","jsx","jsxs","forwardRef","Combobox","forwardRef","useEffect","useId","useRef","clsx","jsx","forwardRef","ComboboxOption","useRef","useId","useEffect","clsx","useState","clsx","CheckIcon","jsx","jsxs","useState","props","disabled","clsx","CheckIcon","clsx","forwardRef","useCallback","useId","jsx","jsxs","forwardRef","LabelledCheckbox","useId","useCallback","value","clsx","useCallback","useRef","useState","clsx","Fragment","jsx","jsxs","clsx","useRef","useState","useCallback","forwardRef","useEffect","useRef","XIcon","Plus","jsx","jsxs","forwardRef","MultiSelectChipDisplayButton","useEffect","useRef","XIcon","Plus","MultiSelectChipDisplay","useCallback","useEffect","useState","clsx","jsx","jsxs","useState","useCallback","currentIndex","transition","items","useEffect","distance","clsx","useCallback","jsx","useCallback","value","forwardRef","useCallback","useId","clsx","jsx","jsxs","forwardRef","Textarea","useCallback","value","useId","clsx","useMemo","useState","Fragment","jsx","jsxs","useMemo","useState","value","useMemo","PlusIcon","TrashIcon","XIcon","clsx","jsx","jsxs","useMemo","PlusIcon","TrashIcon","XIcon","jsx","useEffect","useMemo","useRef","jsx","jsxs","useRef","useMemo","value","useEffect","hour","forwardRef","useState","jsx","forwardRef","FlexibleDateTimeInput","useState","useId","forwardRef","useState","clsx","jsx","jsxs","forwardRef","InsideLabelInput","useState","useId","clsx","clsx","jsx","jsxs","clsx","forwardRef","useEffect","useRef","useState","clsx","jsx","jsxs","forwardRef","ToggleableInput","useState","useRef","useEffect","clsx","Check","clsx","X","Fragment","jsx","jsxs","X","clsx","jsx","jsxs","Check","jsx","jsx","Binary","jsx","jsxs","Binary","value","List","jsx","jsxs","List","value","jsx","value","useEffect","useState","useState","useEffect","jsx","useEffect","React","useEffect","useCallback","useMemo","useMemo","useCallback","useCallback","useEffect","useMemo","useMemo","useCallback","useEffect","useCallback","useEffect","useRef","useEffect","useRef","useEffect","useLayoutEffect","useState","React","useEffect","useState","useState","useEffect","useReducer","useEffect","useRef","maxSwipeTime","useCallback","useEffect","useRef","useEffect","useState","useState","useEffect","useMemo","sleep","resolve"]}