@conuti-das/prince-ui 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +18 -0
- package/dist/index.css +4328 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +1466 -0
- package/dist/index.js +3439 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/icons/icons.tsx","../src/primitives/forms.tsx","../src/primitives/overlays.tsx","../src/primitives/navigation.tsx","../src/composites/composites.tsx","../src/composites/appshell.tsx","../src/charts/charts.tsx","../src/launchpad/launchpad.tsx","../src/data/table.tsx","../src/data/filterbar.tsx","../src/data/objectpage.tsx","../src/data/use-filter-state.ts","../src/primitives/choice.tsx","../src/primitives/numeric.tsx","../src/primitives/combobox.tsx","../src/primitives/form.tsx","../src/primitives/collections.tsx","../src/primitives/breadcrumbs.tsx","../src/primitives/disclosure.tsx","../src/primitives/tree.tsx","../src/primitives/table-aria.tsx","../src/primitives/datefields.tsx","../src/primitives/calendar.tsx","../src/primitives/datepicker.tsx","../src/primitives/color.tsx","../src/primitives/color-pickers.tsx","../src/primitives/status.tsx","../src/primitives/toast.tsx","../src/primitives/dropzone.tsx","../src/surfaces/glass.tsx","../src/index.ts"],"names":["jsx","RACButton","jsxs","RACTextField","RACSearchField","RACCheckbox","RACSwitch","RACSelect","RACModal","RACDialog","RACPopover","RACMenu","RACMenuItem","Popover","RACTooltip","RACTabs","RACTab","RACTabPanel","Fragment","useState","useId","RACGridList","RACGridListItem","useCallback","useMemo","table","DialogTrigger","ObjectPage","useEffect","useRef","RACRadioGroup","Label","Text","FieldError","RACRadio","RACCheckboxGroup","RACNumberField","Input","RACSlider","RACComboBox","ListBox","ListBoxItem","RACForm","RACFieldError","RACListBox","RACListBoxItem","RACTagGroup","RACTagList","RACTag","RACBreadcrumbs","RACBreadcrumb","RACLink","RACDisclosure","Heading","RACDisclosurePanel","RACDisclosureGroup","RACTree","RACTreeItem","RACTreeItemContent","RACTable","RACTableHeader","RACColumn","RACTableBody","RACRow","RACCell","RACDateField","RACTimeField","RACCalendar","RACRangeCalendar","CalendarGrid","CalendarGridHeader","CalendarHeaderCell","CalendarGridBody","CalendarCell","RACDatePicker","Group","DateInput","DateSegment","Calendar","RACDateRangePicker","RangeCalendar","RACColorField","RACColorSwatch","RACColorSwatchPicker","RACColorSwatchPickerItem","RACColorArea","RACColorSlider","SliderOutput","SliderTrack","RACColorWheel","RACColorPicker","ColorSwatch","Dialog","RACProgressBar","RACMeter","RACSeparator","RACGroup","RACToastQueue","RACToastRegion","RACToast","RACToastContent","RACDropZone","RACFileTrigger"],"mappings":"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","file":"index.js","sourcesContent":["/** Klassen-Helper: filtert Falsy-Werte und joint mit Space. */\nexport function cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(\" \");\n}\n","import type { ReactNode, SVGProps } from \"react\";\n\n/**\n * Monochrome Linien-Icons (SVG, `currentColor`) — bewusst KEINE Emoji.\n *\n * Stil: 24×24-Grid, `fill: none`, `stroke: currentColor`, 2px, runde Enden\n * (lucide-kompatible Optik). Die Icons erben die Textfarbe und sind damit\n * theme-fähig (Light/Dark/CU). Kein externer Dependency.\n *\n * Wer mehr Icons braucht, kann jedes monochrome `currentColor`-SVG (z. B.\n * `lucide-react`) direkt in die `icon`/`leading`-Slots der Komponenten geben.\n */\nexport type IconName =\n | \"heart\"\n | \"flame\"\n | \"moon\"\n | \"chart\"\n | \"settings\"\n | \"menu\"\n | \"pin\"\n | \"pin-off\"\n | \"user\"\n | \"building\"\n | \"search\"\n | \"plus\"\n | \"bolt\"\n | \"alert\"\n | \"inbox\"\n | \"compass\"\n | \"mail\"\n | \"bell\"\n | \"grid\"\n | \"more\"\n | \"maximize\"\n | \"check\"\n | \"x\"\n | \"chevron-right\"\n | \"chevron-down\"\n | \"chevron-up\"\n | \"phone\"\n | \"clock\"\n | \"link\"\n | \"arrow-down-right\"\n | \"arrow-up-right\"\n | \"droplet\"\n | \"file-text\";\n\nconst PATHS: Record<IconName, ReactNode> = {\n heart: <path d=\"M19 14c1.5-1.6 3-3.4 3-5.6A4.4 4.4 0 0 0 12 5 4.4 4.4 0 0 0 2 8.4c0 2.2 1.5 4 3 5.6l7 7Z\" />,\n flame: (\n <path d=\"M8.5 14.5A4 4 0 1 0 16 17c0-1.5-.6-2.6-1.6-3.6-.5 1-1.1 1.5-2.1 1.5 1-2 .4-4.2-1.6-6.2-.4 2-1.4 3-2.8 4.4-.9 1-1.4 2.4-1.4 3.4Z\" />\n ),\n moon: <path d=\"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z\" />,\n chart: (\n <>\n <path d=\"M3 3v18h18\" />\n <path d=\"M7 16v-4M12 16V9M17 16V6\" />\n </>\n ),\n settings: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1\" />\n </>\n ),\n menu: <path d=\"M3 6h18M3 12h18M3 18h18\" />,\n pin: (\n <>\n <path d=\"M12 17v5\" />\n <path d=\"M9 3h6l-1 7 2.5 4h-9L10 10 9 3Z\" />\n </>\n ),\n \"pin-off\": (\n <>\n <path d=\"M12 17v5\" />\n <path d=\"M9 3h6l-1 7 2.5 4h-9L10 10 9 3Z\" />\n <path d=\"M3 3l18 18\" />\n </>\n ),\n user: (\n <>\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 21a8 8 0 0 1 16 0\" />\n </>\n ),\n building: (\n <>\n <rect x=\"5\" y=\"3\" width=\"14\" height=\"18\" rx=\"1\" />\n <path d=\"M9 7h2M13 7h2M9 11h2M13 11h2M10 21v-3h4v3\" />\n </>\n ),\n search: (\n <>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"M21 21l-4.3-4.3\" />\n </>\n ),\n plus: <path d=\"M12 5v14M5 12h14\" />,\n bolt: <path d=\"M13 2 4 14h7l-1 8 9-12h-7l1-8Z\" />,\n alert: (\n <>\n <path d=\"M12 3 2 20h20L12 3Z\" />\n <path d=\"M12 9v5M12 17h.01\" />\n </>\n ),\n inbox: (\n <>\n <path d=\"M4 4h16l2 8v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-6Z\" />\n <path d=\"M2 12h6l2 3h4l2-3h6\" />\n </>\n ),\n compass: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m16 8-2.5 5.5L8 16l2.5-5.5L16 8Z\" />\n </>\n ),\n mail: (\n <>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <path d=\"m3 7 9 6 9-6\" />\n </>\n ),\n bell: (\n <>\n <path d=\"M18 8a6 6 0 1 0-12 0c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.7 21a2 2 0 0 1-3.4 0\" />\n </>\n ),\n grid: (\n <>\n <circle cx=\"6\" cy=\"6\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"6\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"18\" cy=\"6\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"6\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"18\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"6\" cy=\"18\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"18\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"18\" cy=\"18\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n more: (\n <>\n <circle cx=\"5\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n maximize: (\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3\" />\n ),\n check: <path d=\"M20 6 9 17l-5-5\" />,\n x: <path d=\"M18 6 6 18M6 6l12 12\" />,\n \"chevron-right\": <path d=\"m9 6 6 6-6 6\" />,\n \"chevron-down\": <path d=\"m6 9 6 6 6-6\" />,\n \"chevron-up\": <path d=\"m18 15-6-6-6 6\" />,\n phone: (\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92Z\" />\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </>\n ),\n link: (\n <>\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </>\n ),\n \"arrow-down-right\": (\n <>\n <path d=\"M7 7l10 10\" />\n <path d=\"M17 7v10H7\" />\n </>\n ),\n \"arrow-up-right\": (\n <>\n <path d=\"M7 17 17 7\" />\n <path d=\"M7 7h10v10\" />\n </>\n ),\n droplet: <path d=\"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5S12.5 5 12 2.5C11.5 5 10 7 8 8.5S5 13 5 15a7 7 0 0 0 7 7Z\" />,\n \"file-text\": (\n <>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6M16 13H8M16 17H8M10 9H8\" />\n </>\n ),\n};\n\nexport interface IconProps extends Omit<SVGProps<SVGSVGElement>, \"name\"> {\n /** Name des monochromen Icons. */\n name: IconName;\n /** Kantenlänge in px (Default 20). */\n size?: number | string;\n /** Wenn gesetzt: zugängliches Label (sonst `aria-hidden`, rein dekorativ). */\n title?: string;\n}\n\n/** Monochromes Linien-Icon (erbt `currentColor`). */\nexport function Icon({ name, size = 20, title, ...rest }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n role={title ? \"img\" : undefined}\n aria-label={title}\n aria-hidden={title ? undefined : true}\n {...rest}\n >\n {title && <title>{title}</title>}\n {PATHS[name]}\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n Button as RACButton,\n type ButtonProps as RACButtonProps,\n TextField as RACTextField,\n type TextFieldProps as RACTextFieldProps,\n Label,\n Input,\n Text,\n FieldError,\n SearchField as RACSearchField,\n type SearchFieldProps as RACSearchFieldProps,\n Checkbox as RACCheckbox,\n type CheckboxProps as RACCheckboxProps,\n Switch as RACSwitch,\n type SwitchProps as RACSwitchProps,\n Select as RACSelect,\n type SelectProps as RACSelectProps,\n SelectValue,\n ListBox,\n ListBoxItem,\n type ListBoxItemProps,\n Popover,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\n\n/* ---------------- Button ---------------- */\n\nexport interface ButtonProps extends Omit<RACButtonProps, \"className\"> {\n /** Prince-Varianten: gefüllt (Akzent), getönt (soft) oder schlicht. */\n variant?: \"filled\" | \"tinted\" | \"plain\";\n className?: string;\n}\n\nexport function Button({ variant = \"filled\", className, ...props }: ButtonProps) {\n return <RACButton {...props} data-variant={variant} className={cx(\"prn-button\", className)} />;\n}\n\n/* ---------------- TextField ---------------- */\n\nexport interface TextFieldProps extends Omit<RACTextFieldProps, \"className\"> {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode;\n placeholder?: string;\n className?: string;\n}\n\nexport function TextField({ label, description, errorMessage, placeholder, className, ...props }: TextFieldProps) {\n return (\n <RACTextField {...props} className={cx(\"prn-field\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <Input className=\"prn-input\" placeholder={placeholder} />\n {description && <Text slot=\"description\" className=\"prn-field-desc\">{description}</Text>}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n </RACTextField>\n );\n}\n\n/* ---------------- SearchField ---------------- */\n\nexport interface SearchFieldProps extends Omit<RACSearchFieldProps, \"className\"> {\n label?: ReactNode;\n placeholder?: string;\n className?: string;\n}\n\nexport function SearchField({ label, placeholder, className, ...props }: SearchFieldProps) {\n return (\n <RACSearchField {...props} className={cx(\"prn-field prn-searchfield\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <Input className=\"prn-input\" placeholder={placeholder} />\n </RACSearchField>\n );\n}\n\n/* ---------------- Checkbox ---------------- */\n\nexport interface CheckboxProps extends Omit<RACCheckboxProps, \"className\"> {\n children?: ReactNode;\n className?: string;\n}\n\nexport function Checkbox({ children, className, ...props }: CheckboxProps) {\n return (\n <RACCheckbox {...props} className={cx(\"prn-checkbox\", className)}>\n <span className=\"prn-checkbox-box\" aria-hidden>\n <svg viewBox=\"0 0 18 18\" className=\"prn-checkbox-check\" width=\"14\" height=\"14\"\n fill=\"none\" stroke=\"currentColor\">\n <polyline points=\"4,9 8,13 14,5\" />\n </svg>\n </span>\n {children && <span className=\"prn-checkbox-label\">{children}</span>}\n </RACCheckbox>\n );\n}\n\n/* ---------------- Switch ---------------- */\n\nexport interface SwitchProps extends Omit<RACSwitchProps, \"className\"> {\n children?: ReactNode;\n className?: string;\n}\n\nexport function Switch({ children, className, ...props }: SwitchProps) {\n return (\n <RACSwitch {...props} className={cx(\"prn-switch\", className)}>\n {children && <span className=\"prn-switch-label\">{children}</span>}\n <span className=\"prn-switch-track\" aria-hidden>\n <span className=\"prn-switch-handle\" />\n </span>\n </RACSwitch>\n );\n}\n\n/* ---------------- Select ---------------- */\n\nexport interface SelectProps<T extends object> extends Omit<RACSelectProps<T>, \"className\" | \"children\"> {\n label?: ReactNode;\n placeholder?: string;\n children: ReactNode | ((item: T) => ReactNode);\n className?: string;\n}\n\nexport function Select<T extends object>({ label, placeholder, children, className, ...props }: SelectProps<T>) {\n return (\n <RACSelect {...props} className={cx(\"prn-field prn-select\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <RACButton className=\"prn-select-button\">\n <SelectValue className=\"prn-select-value\">{placeholder}</SelectValue>\n <svg className=\"prn-select-chevron\" viewBox=\"0 0 12 12\" width=\"12\" height=\"12\" aria-hidden\n fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2.75 4.5 6 7.75 9.25 4.5\" />\n </svg>\n </RACButton>\n <Popover className=\"prn-popover prn-select-popover\">\n <ListBox className=\"prn-listbox\">{children}</ListBox>\n </Popover>\n </RACSelect>\n );\n}\n\nexport interface SelectItemProps extends Omit<ListBoxItemProps, \"className\"> {\n className?: string;\n}\n\nexport function SelectItem({ className, ...props }: SelectItemProps) {\n return <ListBoxItem {...props} className={cx(\"prn-option\", className)} />;\n}\n","import type { ReactNode } from \"react\";\nimport {\n ModalOverlay,\n Modal as RACModal,\n Dialog as RACDialog,\n Heading,\n DialogTrigger,\n MenuTrigger,\n Menu as RACMenu,\n MenuItem as RACMenuItem,\n type MenuItemProps,\n Popover as RACPopover,\n type PopoverProps,\n TooltipTrigger,\n Tooltip as RACTooltip,\n OverlayArrow,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./overlays.css\";\n\n/* ---------------- Modal / Dialog ----------------\n * Fokus-Trap, Escape-Schließen und Fokus-Rückgabe übernimmt React Aria\n * (FocusScope) — kein handgeschriebener Trap mehr nötig. */\n\nexport interface ModalProps {\n isOpen?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n /** Titel als Überschrift mit slot=\"title\" (für aria-labelledby). */\n title?: ReactNode;\n children?: ReactNode;\n /** Klick auf Scrim schließt (Default true). */\n isDismissable?: boolean;\n /** „Liquid Glass\"-Optik (transluzent + Blur) statt opaker Fläche. */\n glass?: boolean;\n className?: string;\n}\n\nexport function Modal({ title, children, className, isDismissable = true, glass, ...props }: ModalProps) {\n return (\n <ModalOverlay {...props} isDismissable={isDismissable} className=\"prn-modal-overlay\">\n <RACModal className={cx(\"prn-modal\", glass && \"prn-glass prn-glass-overlay\")}>\n <RACDialog className={cx(\"prn-dialog\", className)}>\n {title && <Heading slot=\"title\" className=\"prn-dialog-title\">{title}</Heading>}\n {children}\n </RACDialog>\n </RACModal>\n </ModalOverlay>\n );\n}\n\nexport { DialogTrigger };\n\n/* ---------------- Menu ---------------- */\n\nexport interface MenuProps {\n /** Trigger-Element (z. B. <Button>). */\n trigger: ReactNode;\n children: ReactNode;\n /** „Liquid Glass\"-Optik (transluzent + Blur) statt opaker Fläche. */\n glass?: boolean;\n className?: string;\n}\n\nexport function Menu({ trigger, children, glass, className }: MenuProps) {\n return (\n <MenuTrigger>\n {trigger}\n <RACPopover className={cx(\"prn-popover\", glass && \"prn-glass prn-glass-overlay\")}>\n <RACMenu className={cx(\"prn-menu\", className)}>{children}</RACMenu>\n </RACPopover>\n </MenuTrigger>\n );\n}\n\nexport interface MenuItemPropsExt extends Omit<MenuItemProps, \"className\"> {\n className?: string;\n}\n\nexport function MenuItem({ className, ...props }: MenuItemPropsExt) {\n return <RACMenuItem {...props} className={cx(\"prn-menu-item\", className)} />;\n}\n\n/* ---------------- Popover (frei) ---------------- */\n\nexport interface AplPopoverProps extends Omit<PopoverProps, \"className\"> {\n /** „Liquid Glass\"-Optik (transluzent + Blur) statt opaker Fläche. */\n glass?: boolean;\n className?: string;\n}\n\nexport function Popover({ glass, className, children, ...props }: AplPopoverProps) {\n return (\n <RACPopover\n {...props}\n className={cx(\"prn-popover\", glass && \"prn-glass prn-glass-overlay\", className)}\n >\n {children}\n </RACPopover>\n );\n}\n\n/* ---------------- Tooltip ---------------- */\n\nexport interface TooltipProps {\n /** Element, das den Tooltip auslöst. */\n trigger: ReactNode;\n children: ReactNode;\n delay?: number;\n className?: string;\n}\n\nexport function Tooltip({ trigger, children, delay = 600, className }: TooltipProps) {\n return (\n <TooltipTrigger delay={delay}>\n {trigger}\n <RACTooltip className={cx(\"prn-tooltip\", className)}>\n <OverlayArrow className=\"prn-tooltip-arrow\">\n <svg width={8} height={8} viewBox=\"0 0 8 8\"><path d=\"M0 0 L4 4 L8 0\" /></svg>\n </OverlayArrow>\n {children}\n </RACTooltip>\n </TooltipTrigger>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n ToggleButtonGroup,\n type ToggleButtonGroupProps,\n ToggleButton,\n type ToggleButtonProps,\n Tabs as RACTabs,\n type TabsProps as RACTabsProps,\n TabList,\n type TabListProps,\n Tab as RACTab,\n type TabProps,\n TabPanel as RACTabPanel,\n type TabPanelProps,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./navigation.css\";\n\n/* ---------------- SegmentedControl ----------------\n * Einfachauswahl (Prince-Segmented). Auf ToggleButtonGroup. */\n\nexport interface SegmentedControlProps extends Omit<ToggleButtonGroupProps, \"className\" | \"selectionMode\"> {\n className?: string;\n}\n\nexport function SegmentedControl({ className, disallowEmptySelection = true, ...props }: SegmentedControlProps) {\n return (\n <ToggleButtonGroup\n {...props}\n selectionMode=\"single\"\n disallowEmptySelection={disallowEmptySelection}\n className={cx(\"prn-segmented\", className)}\n />\n );\n}\n\nexport interface SegmentProps extends Omit<ToggleButtonProps, \"className\"> {\n className?: string;\n}\n\nexport function Segment({ className, ...props }: SegmentProps) {\n return <ToggleButton {...props} className={cx(\"prn-segment\", className)} />;\n}\n\n/* ---------------- Tabs ---------------- */\n\nexport interface TabsProps extends Omit<RACTabsProps, \"className\"> {\n className?: string;\n}\nexport function Tabs({ className, ...props }: TabsProps) {\n return <RACTabs {...props} className={cx(\"prn-tabs\", className)} />;\n}\n\nexport function TabBar({ className, ...props }: Omit<TabListProps<object>, \"className\"> & { className?: string }) {\n return <TabList {...props} className={cx(\"prn-tablist\", className)} />;\n}\n\nexport function Tab({ className, ...props }: Omit<TabProps, \"className\"> & { className?: string }) {\n return <RACTab {...props} className={cx(\"prn-tab\", className)} />;\n}\n\nexport function TabPanel({ className, ...props }: Omit<TabPanelProps, \"className\"> & { className?: string; children?: ReactNode }) {\n return <RACTabPanel {...props} className={cx(\"prn-tabpanel\", className)} />;\n}\n","import { useState, type CSSProperties, type ReactNode } from \"react\";\nimport { Button as RACButton } from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./composites.css\";\n\n/* ============================================================\n * L2-Komposita — Prince-Look. Aufbauend auf Tokens + L1-Primitives.\n * Tokens: prince-ui-tokens (immer var(--prn-*), nie Hex/rgb).\n * ============================================================ */\n\n/* ---------------- Card ---------------- */\n\nexport interface CardProps {\n /** Optionaler Titel oben links (alternativ via `header` voll überschreibbar). */\n title?: ReactNode;\n /** Freier Header-Slot rechts (z. B. Aktionen) — neben dem Titel. */\n header?: ReactNode;\n /** Innenabstand-Variante. */\n padding?: \"none\" | \"compact\" | \"regular\" | \"spacious\";\n /** Glas-Optik: halbtransparenter Hintergrund + Blur (Light & Dark). */\n translucent?: boolean;\n /** Macht die Karte klickbar (react-aria Button) mit Hover-Lift — wie KpiCard. */\n onPress?: () => void;\n /** Inline-Styles (z. B. App-lokale Maße/Status-Border) auf das Card-Element. */\n style?: CSSProperties;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Card({\n title,\n header,\n padding = \"regular\",\n translucent = false,\n onPress,\n style,\n children,\n className,\n}: CardProps) {\n const hasHeader = title != null || header != null;\n const inner = (\n <>\n {hasHeader && (\n <header className=\"prn-card-head\">\n {title != null && <h3 className=\"prn-card-title\">{title}</h3>}\n {header != null && <div className=\"prn-card-head-slot\">{header}</div>}\n </header>\n )}\n {children}\n </>\n );\n\n if (onPress) {\n return (\n <RACButton\n className={cx(\"prn-card\", \"prn-card-pressable\", className)}\n style={style}\n data-padding={padding}\n data-translucent={translucent ? \"\" : undefined}\n onPress={onPress}\n >\n {inner}\n </RACButton>\n );\n }\n\n return (\n <section\n className={cx(\"prn-card\", className)}\n style={style}\n data-padding={padding}\n data-translucent={translucent ? \"\" : undefined}\n >\n {inner}\n </section>\n );\n}\n\n/* ---------------- KpiCard ---------------- */\n\nexport type Trend = \"up\" | \"down\" | \"flat\";\n\n/** Färbung des KPI-Werts (Drill-down-Semantik). */\nexport type KpiTone = \"positive\" | \"critical\" | \"negative\";\n\nexport interface KpiCardProps {\n label: ReactNode;\n value: ReactNode;\n /** Delta-Text, z. B. \"+12 %\". */\n delta?: ReactNode;\n /** Richtung der Färbung. Wird `delta` ohne `trend` gesetzt, bleibt es neutral. */\n trend?: Trend;\n /** Färbt den Wert semantisch (grün/orange/rot). */\n tone?: KpiTone;\n /** Macht die Kachel klickbar (react-aria Button) mit Hover-Lift. */\n onPress?: () => void;\n /** Akzent-„Hero\"-Kachel: Vollflächen-Akzent mit dunkler Schrift. */\n accent?: boolean;\n /** Optionales Leading-Icon (z. B. SVG/Emoji). */\n icon?: ReactNode;\n className?: string;\n}\n\nconst TREND_GLYPH: Record<Trend, string> = { up: \"↑\", down: \"↓\", flat: \"→\" };\n\nexport function KpiCard({\n label,\n value,\n delta,\n trend,\n tone,\n onPress,\n accent = false,\n icon,\n className,\n}: KpiCardProps) {\n const inner = (\n <>\n <div className=\"prn-kpi-top\">\n {icon != null && (\n <span className=\"prn-kpi-icon\" aria-hidden>\n {icon}\n </span>\n )}\n <span className=\"prn-kpi-label\">{label}</span>\n </div>\n <div className=\"prn-kpi-value prn-tnum\" data-tone={tone}>\n {value}\n </div>\n {delta != null && (\n <div className=\"prn-kpi-delta\" data-trend={trend ?? \"flat\"}>\n {trend != null && (\n <span className=\"prn-kpi-arrow\" aria-hidden>\n {TREND_GLYPH[trend] ?? \"\"}\n </span>\n )}\n <span>{delta}</span>\n </div>\n )}\n </>\n );\n\n if (onPress) {\n return (\n <RACButton\n className={cx(\"prn-kpi prn-kpi-pressable\", className)}\n data-accent={accent ? \"\" : undefined}\n onPress={onPress}\n >\n {inner}\n </RACButton>\n );\n }\n\n return (\n <section className={cx(\"prn-kpi\", className)} data-accent={accent ? \"\" : undefined}>\n {inner}\n </section>\n );\n}\n\n/* ---------------- Badge ---------------- */\n\nexport type BadgeTone =\n | \"neutral\"\n | \"green\"\n | \"red\"\n | \"orange\"\n | \"blue\"\n | \"teal\"\n | \"gray\";\n\nexport interface BadgeProps {\n tone?: BadgeTone;\n /** Soft = getönt (Default), solid = vollflächig gefüllt. */\n variant?: \"soft\" | \"solid\";\n /** Optionales Leading-Icon (SVG/Emoji/ReactNode), links vom Text. */\n icon?: ReactNode;\n /** Beliebige Markenfarbe (überschreibt `tone`). Z. B. Team-Farbe. */\n color?: string;\n /** Textfarbe bei `color` (Default: Weiß für solid, `color` selbst für soft). */\n textColor?: string;\n /** Escape-Hatch: Inline-Styles (z. B. fixe Größe/Radius/Font für Tabellen-Chips). */\n style?: CSSProperties;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Badge({\n tone = \"neutral\",\n variant = \"soft\",\n icon,\n color,\n textColor,\n style,\n children,\n className,\n}: BadgeProps) {\n const mergedStyle = {\n ...(color != null ? { \"--prn-badge-color\": color } : {}),\n ...(textColor != null ? { \"--prn-badge-text-color\": textColor } : {}),\n ...style,\n } as CSSProperties;\n return (\n <span\n className={cx(\"prn-badge\", className)}\n data-tone={tone}\n data-variant={variant}\n data-custom-color={color != null ? \"\" : undefined}\n style={mergedStyle}\n >\n {icon != null && (\n <span className=\"prn-badge-icon\" aria-hidden>\n {icon}\n </span>\n )}\n {children}\n </span>\n );\n}\n\n/* ---------------- Amount ---------------- */\n\nexport interface AmountProps {\n /**\n * Zahl → wird i18n-formatiert. Bereits formatierter String → wird unverändert\n * angezeigt (String-Modus; `currency`/`locale`/`fractionDigits` werden ignoriert).\n */\n value: number | string;\n /** ISO-Währungscode, z. B. \"EUR\". Ohne → reine Zahl. (Nur Zahl-Modus.) */\n currency?: string;\n /** BCP-47-Locale für Formatierung (Default \"de-DE\"). (Nur Zahl-Modus.) */\n locale?: string;\n /** Min/Max Nachkommastellen. (Nur Zahl-Modus.) */\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n /** Negativ rot / positiv grün einfärben. */\n colored?: boolean;\n /** Immer Vorzeichen anzeigen (auch +). (Nur Zahl-Modus.) */\n signed?: boolean;\n /**\n * Optische Abschwächung der Nachkommastellen (Tail leiser/kleiner).\n * Erkennt das Dezimaltrennzeichen der Ausgabe und dämpft alles dahinter.\n */\n dimDecimals?: boolean;\n className?: string;\n}\n\n/** Trennt eine formatierte Zahl in Integer-Kopf + Dezimal-Tail (inkl. Trenner). */\nfunction splitDecimals(text: string): { head: string; tail: string | null } {\n // letztes \",\" oder \".\" gefolgt von Ziffern bis Stringende (lässt Währungssuffix zu)\n const match = text.match(/^(.*[\\d\\s])([.,]\\d+)(\\D*)$/);\n if (!match) return { head: text, tail: null };\n const [, head = \"\", dec = \"\", suffix = \"\"] = match;\n return { head, tail: dec + suffix };\n}\n\nexport function Amount({\n value,\n currency,\n locale = \"de-DE\",\n minimumFractionDigits,\n maximumFractionDigits,\n colored = false,\n signed = false,\n dimDecimals = false,\n className,\n}: AmountProps) {\n const isString = typeof value === \"string\";\n\n const formatted = isString\n ? value\n : new Intl.NumberFormat(locale, {\n ...(currency ? { style: \"currency\", currency } : {}),\n ...(minimumFractionDigits != null ? { minimumFractionDigits } : {}),\n ...(maximumFractionDigits != null ? { maximumFractionDigits } : {}),\n signDisplay: signed ? \"exceptZero\" : \"auto\",\n }).format(value);\n\n const sign: \"pos\" | \"neg\" | \"zero\" = isString\n ? value.trimStart().startsWith(\"-\")\n ? \"neg\"\n : \"pos\"\n : value > 0\n ? \"pos\"\n : value < 0\n ? \"neg\"\n : \"zero\";\n\n const { head, tail } = dimDecimals\n ? splitDecimals(formatted)\n : { head: formatted, tail: null };\n\n return (\n <span\n className={cx(\"prn-amount prn-tnum\", className)}\n data-colored={colored ? \"\" : undefined}\n data-sign={sign}\n >\n {tail != null ? (\n <>\n {head}\n <span className=\"prn-amount-dec\" aria-hidden={false}>\n {tail}\n </span>\n </>\n ) : (\n formatted\n )}\n </span>\n );\n}\n\n/* ---------------- List + ListRow ---------------- */\n\nexport interface ListProps {\n children?: ReactNode;\n /** Header-Beschriftung über der Liste (macOS-Gruppentitel). */\n label?: ReactNode;\n /** Eingerückte Trennlinien (wie iOS-Listen). */\n inset?: boolean;\n className?: string;\n}\n\nexport function List({ children, label, inset = false, className }: ListProps) {\n return (\n <div className={cx(\"prn-list\", className)} data-inset={inset ? \"\" : undefined}>\n {label != null && <div className=\"prn-list-label\">{label}</div>}\n <div className=\"prn-list-rows\" role=\"list\">\n {children}\n </div>\n </div>\n );\n}\n\nexport interface ListRowProps {\n /** Linkes Element (Icon/Avatar). */\n leading?: ReactNode;\n title?: ReactNode;\n subtitle?: ReactNode;\n /** Rechtes Element (Wert, Badge, Chevron). */\n trailing?: ReactNode;\n /** Macht die Zeile pressbar (react-aria Button). */\n onPress?: () => void;\n /** Aktiver/ausgewählter Zustand. */\n isActive?: boolean;\n isDisabled?: boolean;\n className?: string;\n}\n\nexport function ListRow({\n leading,\n title,\n subtitle,\n trailing,\n onPress,\n isActive,\n isDisabled,\n className,\n}: ListRowProps) {\n const inner = (\n <>\n {leading != null && <span className=\"prn-row-leading\">{leading}</span>}\n <span className=\"prn-row-main\">\n {title != null && <span className=\"prn-row-title\">{title}</span>}\n {subtitle != null && <span className=\"prn-row-subtitle\">{subtitle}</span>}\n </span>\n {trailing != null && <span className=\"prn-row-trailing\">{trailing}</span>}\n </>\n );\n\n if (onPress) {\n return (\n <RACButton\n className={cx(\"prn-row prn-row-pressable\", className)}\n onPress={onPress}\n isDisabled={isDisabled}\n data-active={isActive ? \"\" : undefined}\n >\n {inner}\n </RACButton>\n );\n }\n\n return (\n <div\n className={cx(\"prn-row\", className)}\n role=\"listitem\"\n data-active={isActive ? \"\" : undefined}\n aria-disabled={isDisabled || undefined}\n >\n {inner}\n </div>\n );\n}\n\n/* ---------------- Sidebar ---------------- */\n\nexport interface SidebarItem {\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n /** Optionales Badge/Counter rechts. */\n trailing?: ReactNode;\n}\n\nexport interface SidebarGroup {\n /** Gruppentitel (optional). */\n label?: ReactNode;\n items: SidebarItem[];\n /** Macht die Gruppe auf-/zuklappbar (Chevron, klickbarer Titel). Braucht `label`. */\n collapsible?: boolean;\n /** Startzustand zugeklappt (nur bei `collapsible`). */\n defaultCollapsed?: boolean;\n}\n\n/** Eine Sidebar-Gruppe; verwaltet bei `collapsible` ihren Auf-/Zuklapp-Zustand. */\nfunction SidebarGroupView({\n group,\n selectedKey,\n onSelect,\n}: {\n group: SidebarGroup;\n selectedKey?: string;\n onSelect?: (id: string) => void;\n}) {\n const collapsible = group.collapsible === true && group.label != null;\n const [collapsed, setCollapsed] = useState(\n collapsible ? group.defaultCollapsed === true : false,\n );\n\n const items = (\n <div className=\"prn-sidebar-group-items\" role={collapsible ? \"group\" : undefined} hidden={collapsed}>\n {group.items.map((item) => (\n <RACButton\n key={item.id}\n className=\"prn-sidebar-item\"\n data-active={item.id === selectedKey ? \"\" : undefined}\n onPress={() => onSelect?.(item.id)}\n >\n {item.icon != null && (\n <span className=\"prn-sidebar-item-icon\" aria-hidden>\n {item.icon}\n </span>\n )}\n <span className=\"prn-sidebar-item-label\">{item.label}</span>\n {item.trailing != null && (\n <span className=\"prn-sidebar-item-trailing\">{item.trailing}</span>\n )}\n </RACButton>\n ))}\n </div>\n );\n\n return (\n <div className=\"prn-sidebar-group\" data-collapsible={collapsible ? \"\" : undefined}>\n {group.label != null &&\n (collapsible ? (\n <RACButton\n className=\"prn-sidebar-group-label prn-sidebar-group-toggle\"\n aria-expanded={!collapsed}\n data-collapsed={collapsed ? \"\" : undefined}\n onPress={() => setCollapsed((c) => !c)}\n >\n <span className=\"prn-sidebar-group-chevron\" aria-hidden>\n ›\n </span>\n <span className=\"prn-sidebar-group-label-text\">{group.label}</span>\n </RACButton>\n ) : (\n <div className=\"prn-sidebar-group-label\">{group.label}</div>\n ))}\n {items}\n </div>\n );\n}\n\nexport interface SidebarProps {\n groups: SidebarGroup[];\n /** Aktive Item-ID. */\n selectedKey?: string;\n onSelect?: (id: string) => void;\n /** Kopfbereich (z. B. App-Titel/Logo). */\n header?: ReactNode;\n /** Fußbereich (z. B. Account). */\n footer?: ReactNode;\n /** „Liquid Glass\"-Optik (transluzent + Blur). Nur über Content sinnvoll. */\n glass?: boolean;\n className?: string;\n}\n\nexport function Sidebar({\n groups,\n selectedKey,\n onSelect,\n header,\n footer,\n glass,\n className,\n}: SidebarProps) {\n return (\n <nav\n className={cx(\"prn-sidebar\", glass && \"prn-glass prn-glass-sidebar\", className)}\n aria-label=\"Seitenleiste\"\n >\n {header != null && <div className=\"prn-sidebar-header\">{header}</div>}\n <div className=\"prn-sidebar-scroll\">\n {groups.map((group, gi) => (\n <SidebarGroupView\n key={gi}\n group={group}\n selectedKey={selectedKey}\n onSelect={onSelect}\n />\n ))}\n </div>\n {footer != null && <div className=\"prn-sidebar-footer\">{footer}</div>}\n </nav>\n );\n}\n\n/* ---------------- Toolbar ---------------- */\n\nexport interface ToolbarProps {\n title?: ReactNode;\n /** Untertitel unter dem Titel. */\n subtitle?: ReactNode;\n /** Linker Slot (z. B. Zurück-Button) vor dem Titel. */\n leading?: ReactNode;\n /** Aktionen rechts. */\n actions?: ReactNode;\n /** „Liquid Glass\"-Optik (transluzent + Blur). Nur über Content sinnvoll. */\n glass?: boolean;\n className?: string;\n}\n\nexport function Toolbar({ title, subtitle, leading, actions, glass, className }: ToolbarProps) {\n return (\n <header className={cx(\"prn-toolbar\", glass && \"prn-glass prn-glass-bar\", className)}>\n {leading != null && <div className=\"prn-toolbar-leading\">{leading}</div>}\n <div className=\"prn-toolbar-titles\">\n {title != null && <span className=\"prn-toolbar-title\">{title}</span>}\n {subtitle != null && <span className=\"prn-toolbar-subtitle\">{subtitle}</span>}\n </div>\n {actions != null && <div className=\"prn-toolbar-actions\">{actions}</div>}\n </header>\n );\n}\n\n/* ---------------- EmptyState ---------------- */\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n /** Aktions-Slot (z. B. <Button>). */\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cx(\"prn-empty\", className)}>\n {icon != null && (\n <div className=\"prn-empty-icon\" aria-hidden>\n {icon}\n </div>\n )}\n <div className=\"prn-empty-title\">{title}</div>\n {description != null && <div className=\"prn-empty-desc\">{description}</div>}\n {action != null && <div className=\"prn-empty-action\">{action}</div>}\n </div>\n );\n}\n\n/* ---------------- Notice ---------------- */\n\nexport type NoticeTone = \"info\" | \"positive\" | \"critical\" | \"negative\";\n\nexport interface NoticeProps {\n tone?: NoticeTone;\n title?: ReactNode;\n /** Optionales Leading-Icon (überschreibt Default-Glyph). */\n icon?: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nconst NOTICE_GLYPH: Record<NoticeTone, string> = {\n info: \"ℹ\",\n positive: \"✓\",\n critical: \"!\",\n negative: \"✕\",\n};\n\nexport function Notice({ tone = \"info\", title, icon, children, className }: NoticeProps) {\n return (\n <div className={cx(\"prn-notice\", className)} data-tone={tone} role=\"status\">\n <span className=\"prn-notice-icon\" aria-hidden>\n {icon ?? NOTICE_GLYPH[tone] ?? \"\"}\n </span>\n <div className=\"prn-notice-body\">\n {title != null && <div className=\"prn-notice-title\">{title}</div>}\n {children != null && <div className=\"prn-notice-text\">{children}</div>}\n </div>\n </div>\n );\n}\n\n/* ---------------- DescriptionList + Field ---------------- */\n\nexport interface DescriptionListProps {\n children?: ReactNode;\n /**\n * Layout der Label/Wert-Paare:\n * - `stacked` (Default): Label über dem Wert.\n * - `inline`: Label links, Wert rechts (zweispaltig).\n */\n layout?: \"stacked\" | \"inline\";\n className?: string;\n}\n\n/** Schlanke read-only Label/Wert-Liste (semantisches `<dl>`). */\nexport function DescriptionList({\n children,\n layout = \"stacked\",\n className,\n}: DescriptionListProps) {\n return (\n <dl className={cx(\"prn-dl\", className)} data-layout={layout}>\n {children}\n </dl>\n );\n}\n\nexport interface FieldProps {\n label: ReactNode;\n /** Anzuzeigender Wert (read-only). */\n value?: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\n/** Ein read-only Label/Wert-Paar (`<dt>`/`<dd>`) für `DescriptionList`. */\nexport function Field({ label, value, children, className }: FieldProps) {\n return (\n <div className={cx(\"prn-field\", className)}>\n <dt className=\"prn-field-label\">{label}</dt>\n <dd className=\"prn-field-value\">{value ?? children}</dd>\n </div>\n );\n}\n","import { useCallback, useId, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../utils\";\nimport { Icon } from \"../icons/icons\";\nimport { Button } from \"../primitives/forms\";\nimport { Menu, MenuItem } from \"../primitives/overlays\";\nimport \"./appshell.css\";\n\n/** Eintrag im Titel-Dropdown (analog UI5 `menuItems`). */\nexport interface AppShellMenuItem {\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n}\n\n/** Aktions-Item in der Shell-Bar (analog UI5 `ShellBarItem`). */\nexport interface AppShellItem {\n id: string;\n /** Monochromes Icon (z. B. `<Icon name=\"bell\" />`). */\n icon: ReactNode;\n /** Zugängliches Label (Tooltip/aria-label, Overflow-Text). */\n label: string;\n /** Optionaler Zähler-Badge. */\n count?: ReactNode;\n onClick?: () => void;\n}\n\nexport interface AppShellProps {\n /** App-Titel (Primärtitel). */\n title?: ReactNode;\n /** Untertitel — blendet auf schmalen Screens aus. */\n subtitle?: ReactNode;\n /** Marken-/Logo-Slot ganz links. */\n logo?: ReactNode;\n onLogoClick?: () => void;\n /** Macht den Titel zu einem Dropdown (analog UI5 `menuItems`). */\n menuItems?: AppShellMenuItem[];\n onMenuItemClick?: (id: string) => void;\n /** Globale Suche; kollabiert auf Mobile zu einem Icon (aufklappbar). */\n search?: ReactNode;\n /** Freie Aktionen rechts (Buttons o. Ä.). */\n actions?: ReactNode;\n /** Aktions-Items mit Icon/Count; wandern auf schmalen Screens ins „…\"-Overflow-Menü. */\n items?: AppShellItem[];\n /** Benachrichtigungs-Glocke mit optionalem Zähler. */\n notifications?: boolean;\n notificationsCount?: ReactNode;\n onNotificationsClick?: () => void;\n /** Produkt-Wechsler (Grid-Icon). */\n productSwitch?: boolean;\n onProductSwitchClick?: () => void;\n /** User-/Account-Slot ganz rechts (Avatar). */\n user?: ReactNode;\n onProfileClick?: () => void;\n /** Slot ganz am Anfang der Bar (vor dem Menü-Toggle). */\n startButton?: ReactNode;\n /** Seitennavigation — typischerweise ein `<Sidebar/>` (ohne eigenes `glass`). */\n sidebar?: ReactNode;\n sidebarCollapsed?: boolean;\n defaultSidebarCollapsed?: boolean;\n onSidebarCollapsedChange?: (collapsed: boolean) => void;\n /** „Liquid Glass\"-Optik auf Shell-Bar + Sidebar (Default: true). */\n glass?: boolean;\n toggleLabel?: string;\n children?: ReactNode;\n className?: string;\n}\n\n/** Icon-Button in der Shell-Bar (kein Menü-Trigger). */\nfunction BarButton({\n label,\n count,\n onClick,\n className,\n children,\n}: {\n label: string;\n count?: ReactNode;\n onClick?: () => void;\n className?: string;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n className={cx(\"prn-shellbar-btn\", className)}\n aria-label={label}\n title={label}\n onClick={onClick}\n >\n {children}\n {count != null && count !== \"\" && <span className=\"prn-shellbar-badge\">{count}</span>}\n </button>\n );\n}\n\n/**\n * AppShell — Apple-orientierte App-Hülle mit voller ShellBar-Funktion\n * (vgl. SAP UI5 ShellBar): Logo, Titel + Untertitel + Titel-Dropdown, Suche\n * (auf Mobile kollabierbar), Aktions-Items mit Overflow, Benachrichtigungen,\n * Produkt-Wechsler, Profil — plus Sidebar (Off-canvas auf Mobile) und Content.\n *\n * Reine Optik/Layout/Komposition; Verhalten von Menüs/Overlays kommt aus den\n * React-Aria-Primitiven (`Menu`). Glas (Default) liegt auf Shell-Bar + Sidebar.\n * Responsives Verhalten über CSS-Breakpoints (Phone ≤767, Tablet ≤1024).\n */\nexport function AppShell({\n title,\n subtitle,\n logo,\n onLogoClick,\n menuItems,\n onMenuItemClick,\n search,\n actions,\n items,\n notifications,\n notificationsCount,\n onNotificationsClick,\n productSwitch,\n onProductSwitchClick,\n user,\n onProfileClick,\n startButton,\n sidebar,\n sidebarCollapsed,\n defaultSidebarCollapsed = false,\n onSidebarCollapsedChange,\n glass = true,\n toggleLabel = \"Navigation umschalten\",\n children,\n className,\n}: AppShellProps) {\n const isControlled = sidebarCollapsed !== undefined;\n // Auf Phone (≤767px) standardmäßig eingeklappt starten — sonst läge die\n // Off-canvas-Sidebar beim Laden über dem Content. Flash-frei via Lazy-Init.\n const [internal, setInternal] = useState(() => {\n if (defaultSidebarCollapsed) return true;\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(max-width: 767px)\").matches\n ) {\n return true;\n }\n return false;\n });\n const collapsed = isControlled ? sidebarCollapsed : internal;\n const [searchOpen, setSearchOpen] = useState(false);\n const sidebarId = useId();\n\n const setCollapsed = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternal(next);\n onSidebarCollapsedChange?.(next);\n },\n [isControlled, onSidebarCollapsedChange],\n );\n\n const hasItems = items != null && items.length > 0;\n\n const titleNode =\n menuItems != null && menuItems.length > 0 ? (\n <Menu\n trigger={\n <Button variant=\"plain\" className=\"prn-shellbar-titlebtn\">\n <span className=\"prn-shellbar-title\">{title}</span>\n <Icon name=\"chevron-down\" size={16} />\n </Button>\n }\n >\n {menuItems.map((mi) => (\n <MenuItem key={mi.id} onAction={() => onMenuItemClick?.(mi.id)}>\n {mi.icon}\n {mi.label}\n </MenuItem>\n ))}\n </Menu>\n ) : (\n title != null && <span className=\"prn-shellbar-title\">{title}</span>\n );\n\n return (\n <div\n className={cx(\"prn-appshell\", className)}\n data-collapsed={collapsed ? \"\" : undefined}\n data-search-open={searchOpen ? \"\" : undefined}\n >\n <header className={cx(\"prn-shellbar\", glass && \"prn-glass prn-glass-bar\")}>\n {startButton}\n {sidebar != null && (\n <button\n type=\"button\"\n className=\"prn-shellbar-toggle\"\n aria-label={toggleLabel}\n aria-expanded={!collapsed}\n aria-controls={sidebarId}\n onClick={() => setCollapsed(!collapsed)}\n >\n <Icon name=\"menu\" size={20} />\n </button>\n )}\n {logo != null &&\n (onLogoClick ? (\n <button type=\"button\" className=\"prn-shellbar-logo prn-shellbar-logobtn\" aria-label=\"Startseite\" onClick={onLogoClick}>\n {logo}\n </button>\n ) : (\n <div className=\"prn-shellbar-logo\">{logo}</div>\n ))}\n\n <div className=\"prn-shellbar-titles\">\n {titleNode}\n {subtitle != null && <span className=\"prn-shellbar-subtitle\">{subtitle}</span>}\n </div>\n\n {search != null && <div className=\"prn-shellbar-search\">{search}</div>}\n\n <div className=\"prn-shellbar-spacer\" />\n\n {hasItems && (\n <>\n <div className=\"prn-shellbar-items\">\n {items!.map((it) => (\n <BarButton key={it.id} label={it.label} count={it.count} onClick={it.onClick}>\n {it.icon}\n </BarButton>\n ))}\n </div>\n <div className=\"prn-shellbar-overflow\">\n <Menu\n trigger={\n <Button variant=\"plain\" className=\"prn-shellbar-btn\" aria-label=\"Weitere Aktionen\">\n <Icon name=\"more\" size={20} />\n </Button>\n }\n >\n {items!.map((it) => (\n <MenuItem key={it.id} onAction={it.onClick}>\n {it.icon}\n {it.label}\n {it.count != null && it.count !== \"\" ? ` (${it.count})` : \"\"}\n </MenuItem>\n ))}\n </Menu>\n </div>\n </>\n )}\n\n {search != null && (\n <button\n type=\"button\"\n className=\"prn-shellbar-searchtoggle\"\n aria-label=\"Suche umschalten\"\n aria-expanded={searchOpen}\n onClick={() => setSearchOpen((o) => !o)}\n >\n <Icon name={searchOpen ? \"x\" : \"search\"} size={20} />\n </button>\n )}\n\n {notifications && (\n <BarButton label=\"Benachrichtigungen\" count={notificationsCount} onClick={onNotificationsClick}>\n <Icon name=\"bell\" size={20} />\n </BarButton>\n )}\n {productSwitch && (\n <BarButton label=\"Produkte\" className=\"prn-shellbar-productswitch\" onClick={onProductSwitchClick}>\n <Icon name=\"grid\" size={20} />\n </BarButton>\n )}\n\n {user != null &&\n (onProfileClick ? (\n <button type=\"button\" className=\"prn-shellbar-user prn-shellbar-userbtn\" aria-label=\"Konto\" onClick={onProfileClick}>\n {user}\n </button>\n ) : (\n <div className=\"prn-shellbar-user\">{user}</div>\n ))}\n\n {actions != null && <div className=\"prn-shellbar-actions\">{actions}</div>}\n </header>\n\n {/* Mobile: aufgeklappte Suche als volle Zeile unter der Bar (nur wenn offen). */}\n {search != null && searchOpen && <div className=\"prn-shellbar-searchrow\">{search}</div>}\n\n <div className=\"prn-appshell-body\">\n {sidebar != null && (\n <>\n <div\n id={sidebarId}\n className={cx(\"prn-appshell-sidebar\", glass && \"prn-glass prn-glass-sidebar\")}\n >\n {sidebar}\n </div>\n <div className=\"prn-appshell-scrim\" onClick={() => setCollapsed(true)} aria-hidden />\n </>\n )}\n <main className=\"prn-appshell-content\">{children}</main>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useId } from \"react\";\nimport { cx } from \"../utils\";\nimport \"./charts.css\";\n\n/* ============================================================================\n * Prince-UI Charts — reine SVG, keine Chart-Library, keine Abhängigkeiten.\n * Serienfarben aus --prn-chart-1..8, Text aus --prn-label-*, Linien aus --prn-separator.\n * Responsiv über viewBox (preserveAspectRatio); kein fixes px-Layout erzwungen.\n * ========================================================================== */\n\n/** Ein normalisierter (x,y)-Punkt im Koordinatenraum des viewBox. */\ninterface Pt {\n x: number;\n y: number;\n}\n\n/** Token-Referenz auf eine Serienfarbe (1..8). */\nfunction seriesColor(index: number): string {\n // 1-basiert auf die 8 Palette-Tokens abbilden, sicher umlaufen lassen.\n const n = (((index % 8) + 8) % 8) + 1;\n return `var(--prn-chart-${n})`;\n}\n\n/**\n * Catmull-Rom → kubische Bézier-Glättung.\n * Erzeugt ein weiches `d`-Pfad-Fragment (ohne führendes `M`) durch alle Punkte.\n * Bei < 2 Punkten bleibt der Pfad leer; bei genau 2 Punkten eine gerade Linie.\n */\nexport function smoothPath(points: Pt[], tension = 0.5): string {\n if (points.length < 2) return \"\";\n\n const first = points[0];\n if (!first) return \"\";\n if (points.length === 2) {\n const second = points[1];\n if (!second) return \"\";\n return `M ${first.x},${first.y} L ${second.x},${second.y}`;\n }\n\n let d = `M ${first.x},${first.y}`;\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[i - 1] ?? points[i];\n const p1 = points[i];\n const p2 = points[i + 1];\n const p3 = points[i + 2] ?? points[i + 1];\n if (!p0 || !p1 || !p2 || !p3) continue;\n\n const cp1x = p1.x + ((p2.x - p0.x) / 6) * tension * 2;\n const cp1y = p1.y + ((p2.y - p0.y) / 6) * tension * 2;\n const cp2x = p2.x - ((p3.x - p1.x) / 6) * tension * 2;\n const cp2y = p2.y - ((p3.y - p1.y) / 6) * tension * 2;\n\n d += ` C ${cp1x},${cp1y} ${cp2x},${cp2y} ${p2.x},${p2.y}`;\n }\n return d;\n}\n\n/** Werte auf eine Höhe abbilden (y-invertiert: hoher Wert = oben). */\nfunction scaleY(values: number[], height: number, pad: number): (v: number) => number {\n const min = Math.min(...values);\n const max = Math.max(...values);\n const span = max - min || 1;\n const usable = height - pad * 2;\n return (v) => pad + usable - ((v - min) / span) * usable;\n}\n\n/* ---------------- Sparkline ---------------- */\n\nexport interface SparklineProps {\n data: number[];\n /** viewBox-Breite (interne Einheiten); skaliert responsiv. */\n width?: number;\n /** viewBox-Höhe (interne Einheiten). */\n height?: number;\n /** Linienfarbe; Default --prn-chart-1. */\n color?: string;\n className?: string;\n}\n\n/** Kompakte, geglättete Trendlinie ohne Achsen — für KPI-Kacheln. */\nexport function Sparkline({ data, width = 120, height = 36, color, className }: SparklineProps) {\n if (data.length === 0) {\n return <ChartEmpty className={cx(\"prn-chart-sparkline\", className)} compact />;\n }\n\n const pad = 3;\n const stroke = color ?? seriesColor(0);\n const yOf = scaleY(data, height, pad);\n const stepX = data.length > 1 ? (width - pad * 2) / (data.length - 1) : 0;\n const points: Pt[] = data.map((v, i) => ({ x: pad + i * stepX, y: yOf(v) }));\n\n const line = data.length === 1\n ? \"\"\n : smoothPath(points);\n const last = points[points.length - 1];\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className={cx(\"prn-chart\", \"prn-chart-sparkline\", className)}\n role=\"img\"\n aria-hidden\n >\n {line && (\n <path d={line} fill=\"none\" stroke={stroke} strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n )}\n {last && <circle cx={last.x} cy={last.y} r={2.5} fill={stroke} vectorEffect=\"non-scaling-stroke\" />}\n </svg>\n );\n}\n\n/* ---------------- AreaChart ---------------- */\n\nexport interface AreaChartProps {\n /** Entweder reine Werte (gleichmäßig verteilt) oder explizite (x,y)-Punkte. */\n data: number[] | Pt[];\n width?: number;\n height?: number;\n color?: string;\n /** Achsen + horizontale Gridlinien anzeigen. */\n showAxes?: boolean;\n className?: string;\n}\n\n/** Flächenchart mit Gradient-Füllung unter geglätteter Linie, optionale Achsen/Grid. */\nexport function AreaChart({ data, width = 320, height = 160, color, showAxes = false, className }: AreaChartProps) {\n const gid = useId().replace(/[:]/g, \"\");\n if (data.length === 0) {\n return <ChartEmpty className={className} />;\n }\n\n const values = typeof data[0] === \"number\"\n ? (data as number[])\n : (data as Pt[]).map((p) => p.y);\n\n const pad = showAxes ? 8 : 4;\n const padBottom = showAxes ? 20 : pad;\n const padLeft = showAxes ? 28 : pad;\n\n const yOf = scaleY(values, height - (padBottom - pad), pad);\n const stroke = color ?? seriesColor(0);\n\n let points: Pt[];\n if (typeof data[0] === \"number\") {\n const stepX = values.length > 1 ? (width - padLeft - pad) / (values.length - 1) : 0;\n points = values.map((v, i) => ({ x: padLeft + i * stepX, y: yOf(v) }));\n } else {\n const xs = (data as Pt[]).map((p) => p.x);\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs);\n const spanX = maxX - minX || 1;\n points = (data as Pt[]).map((p) => ({\n x: padLeft + ((p.x - minX) / spanX) * (width - padLeft - pad),\n y: yOf(p.y),\n }));\n }\n\n const line = points.length === 1 ? \"\" : smoothPath(points);\n const baseY = height - padBottom;\n const firstP = points[0];\n const lastP = points[points.length - 1];\n const area = line && firstP && lastP\n ? `${line} L ${lastP.x},${baseY} L ${firstP.x},${baseY} Z`\n : \"\";\n\n // Gridlinien (4 Bänder) + Min/Mid/Max-Beschriftung.\n const gridLines = showAxes ? [0, 0.25, 0.5, 0.75, 1] : [];\n const min = Math.min(...values);\n const max = Math.max(...values);\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cx(\"prn-chart\", \"prn-chart-area\", className)}\n role=\"img\"\n aria-hidden\n >\n <defs>\n <linearGradient id={`prn-area-${gid}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={stroke} stopOpacity={0.32} />\n <stop offset=\"100%\" stopColor={stroke} stopOpacity={0} />\n </linearGradient>\n </defs>\n\n {showAxes &&\n gridLines.map((g) => {\n const y = pad + (baseY - pad) * g;\n return (\n <line\n key={`grid-${g}`}\n x1={padLeft}\n y1={y}\n x2={width - pad}\n y2={y}\n className=\"prn-chart-grid\"\n />\n );\n })}\n\n {showAxes && (\n <>\n <text x={padLeft - 5} y={pad + 4} className=\"prn-chart-axislabel\" textAnchor=\"end\">\n {fmtCompact(max)}\n </text>\n <text x={padLeft - 5} y={baseY} className=\"prn-chart-axislabel\" textAnchor=\"end\">\n {fmtCompact(min)}\n </text>\n <line x1={padLeft} y1={baseY} x2={width - pad} y2={baseY} className=\"prn-chart-axis\" />\n </>\n )}\n\n {area && <path d={area} fill={`url(#prn-area-${gid})`} />}\n {line && (\n <path\n d={line}\n fill=\"none\"\n stroke={stroke}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n {points.length === 1 && firstP && <circle cx={firstP.x} cy={firstP.y} r={3} fill={stroke} />}\n </svg>\n );\n}\n\n/* ---------------- BarChart ---------------- */\n\nexport interface BarDatum {\n label: string;\n value: number;\n}\n\nexport interface BarChartProps {\n data: BarDatum[];\n width?: number;\n height?: number;\n color?: string;\n /** x-Achsenbeschriftung anzeigen. */\n showLabels?: boolean;\n className?: string;\n}\n\n/** Vertikale Balken mit gerundeten Köpfen, optionale x-Labels. */\nexport function BarChart({ data, width = 320, height = 160, color, showLabels = true, className }: BarChartProps) {\n if (data.length === 0) {\n return <ChartEmpty className={className} />;\n }\n\n const pad = 6;\n const padBottom = showLabels ? 22 : pad;\n const fill = color ?? seriesColor(0);\n const values = data.map((d) => d.value);\n const max = Math.max(...values, 0) || 1;\n const usableH = height - pad - padBottom;\n const slot = (width - pad * 2) / data.length;\n const barW = Math.max(2, Math.min(slot * 0.62, 40));\n const radius = Math.min(barW / 2, 5);\n const baseY = height - padBottom;\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cx(\"prn-chart\", \"prn-chart-bar\", className)}\n role=\"img\"\n aria-hidden\n >\n {data.map((d, i) => {\n const h = max > 0 ? (d.value / max) * usableH : 0;\n const x = pad + i * slot + (slot - barW) / 2;\n const y = baseY - h;\n return (\n <g key={`${d.label}-${i}`}>\n <rect x={x} y={y} width={barW} height={Math.max(h, 0)} rx={radius} ry={radius} fill={fill} />\n {showLabels && (\n <text x={x + barW / 2} y={height - 6} className=\"prn-chart-axislabel\" textAnchor=\"middle\">\n {d.label}\n </text>\n )}\n </g>\n );\n })}\n </svg>\n );\n}\n\n/* ---------------- DonutChart ---------------- */\n\nexport interface DonutSegment {\n label: string;\n value: number;\n color?: string;\n}\n\nexport interface DonutChartProps {\n segments: DonutSegment[];\n /** Text in der Ringmitte (z. B. Summe). */\n centerLabel?: ReactNode;\n /** Kantenlänge des SVG (interne Einheiten). */\n size?: number;\n /** Ringdicke relativ zum Radius (0..1). */\n thickness?: number;\n /** Legende mit Label + Wert anzeigen. */\n showLegend?: boolean;\n className?: string;\n}\n\n/** Ring-Diagramm aus SVG-Arcs mit zentralem Label und Legende. */\nexport function DonutChart({\n segments,\n centerLabel,\n size = 160,\n thickness = 0.32,\n showLegend = true,\n className,\n}: DonutChartProps) {\n const total = segments.reduce((sum, s) => sum + Math.max(0, s.value), 0);\n if (segments.length === 0 || total <= 0) {\n return <ChartEmpty className={className} />;\n }\n\n const cx0 = size / 2;\n const cy0 = size / 2;\n const r = size / 2 - 4;\n const innerR = r * (1 - thickness);\n\n let angle = -Math.PI / 2; // Start oben (12 Uhr)\n const arcs = segments.map((s, i) => {\n const frac = Math.max(0, s.value) / total;\n const start = angle;\n const end = angle + frac * Math.PI * 2;\n angle = end;\n return {\n d: donutArc(cx0, cy0, r, innerR, start, end),\n color: s.color ?? seriesColor(i),\n key: `${s.label}-${i}`,\n };\n });\n\n return (\n <div className={cx(\"prn-chart-donut\", className)}>\n <svg viewBox={`0 0 ${size} ${size}`} className=\"prn-chart\" role=\"img\" aria-hidden>\n {arcs.map((a) => (\n <path key={a.key} d={a.d} fill={a.color} />\n ))}\n {centerLabel != null && (\n <foreignObject x={innerR * 0.4} y={cy0 - innerR * 0.7} width={size - innerR * 0.8} height={innerR * 1.4}>\n <div className=\"prn-chart-donut-center\">{centerLabel}</div>\n </foreignObject>\n )}\n </svg>\n\n {showLegend && (\n <ul className=\"prn-chart-legend\">\n {segments.map((s, i) => (\n <li key={`${s.label}-${i}`} className=\"prn-chart-legend-item\">\n <span className=\"prn-chart-legend-swatch\" style={{ background: s.color ?? seriesColor(i) }} aria-hidden />\n <span className=\"prn-chart-legend-label\">{s.label}</span>\n <span className=\"prn-chart-legend-value prn-tnum\">{fmtCompact(s.value)}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\n/** Pfad-`d` für ein Donut-Segment (Ringsektor) zwischen zwei Winkeln. */\nfunction donutArc(\n cx0: number,\n cy0: number,\n rOuter: number,\n rInner: number,\n start: number,\n end: number,\n): string {\n // Vollkreis-Sonderfall: minimal kürzen, damit der Arc nicht degeneriert.\n const sweep = end - start;\n const e = sweep >= Math.PI * 2 ? end - 0.0001 : end;\n\n const x0 = cx0 + rOuter * Math.cos(start);\n const y0 = cy0 + rOuter * Math.sin(start);\n const x1 = cx0 + rOuter * Math.cos(e);\n const y1 = cy0 + rOuter * Math.sin(e);\n const x2 = cx0 + rInner * Math.cos(e);\n const y2 = cy0 + rInner * Math.sin(e);\n const x3 = cx0 + rInner * Math.cos(start);\n const y3 = cy0 + rInner * Math.sin(start);\n\n const large = sweep > Math.PI ? 1 : 0;\n\n return [\n `M ${x0},${y0}`,\n `A ${rOuter},${rOuter} 0 ${large} 1 ${x1},${y1}`,\n `L ${x2},${y2}`,\n `A ${rInner},${rInner} 0 ${large} 0 ${x3},${y3}`,\n \"Z\",\n ].join(\" \");\n}\n\n/* ---------------- ChartEmpty ---------------- */\n\nexport interface ChartEmptyProps {\n /** Hinweistext im Leerzustand. */\n message?: string;\n /** Kompakte Variante (z. B. für Sparkline-Slot). */\n compact?: boolean;\n className?: string;\n}\n\n/** Leerzustand, wenn keine Datenpunkte vorliegen. */\nexport function ChartEmpty({ message = \"Keine Daten\", compact = false, className }: ChartEmptyProps) {\n return (\n <div className={cx(\"prn-chart-empty\", compact && \"prn-chart-empty--compact\", className)} role=\"status\">\n {!compact && (\n <svg viewBox=\"0 0 48 48\" className=\"prn-chart-empty-icon\" aria-hidden>\n <rect x=\"7\" y=\"26\" width=\"7\" height=\"15\" rx=\"2\" />\n <rect x=\"20\" y=\"18\" width=\"7\" height=\"23\" rx=\"2\" />\n <rect x=\"33\" y=\"10\" width=\"7\" height=\"31\" rx=\"2\" />\n </svg>\n )}\n <span className=\"prn-chart-empty-text\">{message}</span>\n </div>\n );\n}\n\n/* ---------------- Hilfen ---------------- */\n\n/** Kompakte Zahlenformatierung (de-DE): 1.2k, 3,4M … */\nfunction fmtCompact(n: number): string {\n const abs = Math.abs(n);\n if (abs >= 1_000_000) return `${(n / 1_000_000).toFixed(1).replace(\".\", \",\")}M`;\n if (abs >= 1_000) return `${(n / 1_000).toFixed(1).replace(\".\", \",\")}k`;\n return `${n}`;\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n GridList as RACGridList,\n GridListItem as RACGridListItem,\n Button as RACButton,\n DropIndicator,\n useDragAndDrop,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport { Icon } from \"../icons/icons\";\nimport { Card, KpiCard, List, ListRow } from \"../composites/composites\";\nimport { Modal } from \"../primitives/overlays\";\nimport { Sparkline, AreaChart } from \"../charts/charts\";\nimport \"./launchpad.css\";\n\n/* ============================================================\n * Launchpad — Apple-orientiertes App-/Card-Dashboard\n *\n * Struktur (Fiori-analog, reduziert): Launchpad → Section → Card.\n * Card ist polymorph über `kind` (Plug-in-Contract). `editable`\n * schaltet Drag-Reorder frei (react-aria GridList + Drop-Indikator);\n * ohne `editable` eine schlichte, barrierearme `role=\"list\"`-Fläche\n * mit pressbaren Kacheln. Cards mit `detail`/`trend` öffnen ein\n * Drill-down-Popup mit der Voll-Visualisierung.\n *\n * Bekannte Einschränkung: Beim Reorder wird die neue Grid-Position\n * nicht FLIP-animiert (das Layout springt). Drag-„Aufgreifen\" (Scale +\n * Schatten) und die wandernde Einfügelinie geben Feedback; ein echtes\n * Reflow-Easing wäre eine spätere Ausbaustufe.\n * ============================================================ */\n\nexport type LaunchpadSpan = 1 | 2 | 3 | 4;\ntype Trend = \"up\" | \"down\" | \"flat\";\ntype Tone = \"positive\" | \"critical\" | \"negative\";\n\ninterface BaseCard {\n id: string;\n span?: LaunchpadSpan;\n}\n\nexport interface LpNavCard extends BaseCard {\n kind: \"nav\";\n title: ReactNode;\n icon?: ReactNode;\n description?: ReactNode;\n badge?: ReactNode;\n onPress?: () => void;\n}\nexport interface LpKpiCard extends BaseCard {\n kind: \"kpi\";\n title: ReactNode;\n value: ReactNode;\n delta?: ReactNode;\n trend?: Trend;\n tone?: Tone;\n icon?: ReactNode;\n accent?: boolean;\n onPress?: () => void;\n}\nexport interface LpTrendCard extends BaseCard {\n kind: \"trend\";\n title: ReactNode;\n value?: ReactNode;\n delta?: ReactNode;\n trend?: Trend;\n data: number[];\n /** Voll-Visualisierung im Drill-down-Popup (Default: großer AreaChart). */\n detail?: ReactNode;\n}\nexport interface LpListRowModel {\n id: string;\n title: ReactNode;\n subtitle?: ReactNode;\n leading?: ReactNode;\n trailing?: ReactNode;\n onPress?: () => void;\n}\nexport interface LpListCard extends BaseCard {\n kind: \"list\";\n title: ReactNode;\n icon?: ReactNode;\n count?: ReactNode;\n rows: LpListRowModel[];\n /** Max. sichtbare Zeilen (Rest im Popup). Default 4. */\n maxRows?: number;\n onShowAll?: () => void;\n detail?: ReactNode;\n}\nexport interface LpCustomCard extends BaseCard {\n kind: \"custom\";\n title?: ReactNode;\n icon?: ReactNode;\n render: () => ReactNode;\n detail?: ReactNode;\n}\nexport type LaunchpadCard =\n | LpNavCard\n | LpKpiCard\n | LpTrendCard\n | LpListCard\n | LpCustomCard;\n\nexport interface LaunchpadSection {\n id: string;\n title?: ReactNode;\n subtitle?: ReactNode;\n icon?: ReactNode;\n cards: LaunchpadCard[];\n}\n\nexport interface LaunchpadProps {\n sections: LaunchpadSection[];\n /** Aktiviert Drag-&-Drop-Reorder (react-aria, Tastatur + Pointer). */\n editable?: boolean;\n onReorder?: (sectionId: string, orderedCardIds: string[]) => void;\n className?: string;\n}\n\nfunction asLabel(node: ReactNode, fallback: string): string {\n return typeof node === \"string\" ? node : fallback;\n}\nfunction cardLabel(card: LaunchpadCard): string {\n const t = \"title\" in card ? card.title : undefined;\n return asLabel(t, \"Karte\");\n}\nfunction trendLabel(t?: Trend): string | undefined {\n return t === \"up\" ? \"steigend\" : t === \"down\" ? \"fallend\" : t === \"flat\" ? \"unverändert\" : undefined;\n}\n\nfunction ExpandButton({ onPress }: { onPress: () => void }) {\n return (\n <RACButton className=\"prn-lp-expand\" aria-label=\"Vergrößern\" onPress={onPress}>\n <Icon name=\"maximize\" size={15} />\n </RACButton>\n );\n}\n\n/**\n * Innerer Card-Inhalt je `kind`. nav/kpi sind pressbar (Composite-Button mit\n * Hover-Lift/Press-State), trend/list/custom sind Inhaltscards mit eigenen\n * inneren Aktionen (Vergrößern, Zeilen, „Alle anzeigen\").\n */\nfunction CardBody({\n card,\n onExpand,\n}: {\n card: LaunchpadCard;\n onExpand: (card: LaunchpadCard) => void;\n}) {\n switch (card.kind) {\n case \"nav\":\n return (\n <Card className=\"prn-lp-card prn-lp-nav\" onPress={card.onPress}>\n {card.icon != null && <div className=\"prn-lp-nav-icon\">{card.icon}</div>}\n <div className=\"prn-lp-nav-title\">{card.title}</div>\n {card.description != null && (\n <div className=\"prn-lp-nav-desc\">{card.description}</div>\n )}\n {card.badge != null && <div className=\"prn-lp-nav-badge\">{card.badge}</div>}\n </Card>\n );\n case \"kpi\":\n return (\n <KpiCard\n className=\"prn-lp-card\"\n label={card.title}\n value={card.value}\n delta={card.delta}\n trend={card.trend}\n tone={card.tone}\n icon={card.icon}\n accent={card.accent}\n onPress={card.onPress}\n />\n );\n case \"trend\":\n return (\n <Card\n className=\"prn-lp-card prn-lp-trend\"\n title={card.title}\n header={<ExpandButton onPress={() => onExpand(card)} />}\n >\n <div className=\"prn-lp-trend-head\">\n {card.value != null && <span className=\"prn-lp-trend-value\">{card.value}</span>}\n {card.delta != null && (\n <span className={cx(\"prn-lp-delta\", card.trend && `is-${card.trend}`)}>\n {card.trend === \"up\" && <Icon name=\"chevron-up\" size={13} title={trendLabel(\"up\")} />}\n {card.trend === \"down\" && <Icon name=\"chevron-down\" size={13} title={trendLabel(\"down\")} />}\n {card.delta}\n </span>\n )}\n </div>\n <div className=\"prn-lp-trend-chart\">\n <Sparkline data={card.data} width={260} height={48} />\n </div>\n </Card>\n );\n case \"list\":\n return (\n <Card\n className=\"prn-lp-card prn-lp-list\"\n title={\n <span className=\"prn-lp-list-title\">\n {card.icon}\n {card.title}\n {card.count != null && <span className=\"prn-lp-list-count\">{card.count}</span>}\n </span>\n }\n header={card.detail != null ? <ExpandButton onPress={() => onExpand(card)} /> : undefined}\n >\n <List>\n {card.rows.slice(0, card.maxRows ?? 4).map((r) => (\n <ListRow\n key={r.id}\n leading={r.leading}\n title={r.title}\n subtitle={r.subtitle}\n trailing={r.trailing}\n onPress={r.onPress}\n />\n ))}\n </List>\n {card.onShowAll && (\n <RACButton className=\"prn-lp-showall\" onPress={card.onShowAll} slot={null}>\n Alle anzeigen <Icon name=\"chevron-right\" size={14} />\n </RACButton>\n )}\n </Card>\n );\n case \"custom\":\n return (\n <Card\n className=\"prn-lp-card prn-lp-custom\"\n title={card.title}\n header={card.detail != null ? <ExpandButton onPress={() => onExpand(card)} /> : undefined}\n >\n {card.render()}\n </Card>\n );\n default:\n return null;\n }\n}\n\nfunction reorder(\n current: string[],\n known: (id: string) => boolean,\n movedKeys: string[],\n targetKey: string,\n position: \"before\" | \"after\" | \"on\",\n): string[] {\n const base = current.filter(known);\n const rest = base.filter((id) => !movedKeys.includes(id));\n const tgt = rest.indexOf(targetKey);\n const at = tgt < 0 ? rest.length : position === \"before\" ? tgt : tgt + 1;\n rest.splice(at, 0, ...movedKeys);\n return rest;\n}\n\nfunction useSectionItems(section: LaunchpadSection) {\n const byId = useMemo(() => new Map(section.cards.map((c) => [c.id, c])), [section.cards]);\n const [order, setOrder] = useState<string[]>(() => section.cards.map((c) => c.id));\n const items = useMemo(() => {\n const known = order.filter((id) => byId.has(id));\n const fresh = section.cards.map((c) => c.id).filter((id) => !known.includes(id));\n return [...known, ...fresh].map((id) => byId.get(id)!).filter(Boolean);\n }, [order, byId, section.cards]);\n return { byId, order, setOrder, items };\n}\n\n/** Editierbare Section mit Drag-Reorder (react-aria GridList). */\nfunction EditableSection({\n section,\n onReorder,\n onExpand,\n}: {\n section: LaunchpadSection;\n onReorder?: (sectionId: string, orderedCardIds: string[]) => void;\n onExpand: (card: LaunchpadCard) => void;\n}) {\n const { byId, order, setOrder, items } = useSectionItems(section);\n\n const { dragAndDropHooks } = useDragAndDrop({\n getItems: (keys) => [...keys].map((k) => ({ \"text/plain\": String(k) })),\n renderDropIndicator: (target) => <DropIndicator target={target} className=\"prn-lp-drop\" />,\n onReorder(e) {\n const moved = [...e.keys].map(String);\n const next = reorder(order, (id) => byId.has(id), moved, String(e.target.key), e.target.dropPosition);\n setOrder(next);\n onReorder?.(section.id, next);\n },\n });\n\n return (\n <RACGridList\n aria-label={asLabel(section.title, \"Karten\")}\n items={items}\n layout=\"grid\"\n selectionMode=\"none\"\n className=\"prn-lp-grid\"\n dragAndDropHooks={dragAndDropHooks}\n >\n {(card: LaunchpadCard) => (\n <RACGridListItem\n id={card.id}\n textValue={cardLabel(card)}\n className=\"prn-lp-cell\"\n data-span={card.span ?? 1}\n >\n <CardBody card={card} onExpand={onExpand} />\n </RACGridListItem>\n )}\n </RACGridList>\n );\n}\n\n/** Statische Section ohne Reorder — schlichte, barrierearme Liste von Kacheln. */\nfunction StaticSection({\n section,\n onExpand,\n}: {\n section: LaunchpadSection;\n onExpand: (card: LaunchpadCard) => void;\n}) {\n return (\n <ul className=\"prn-lp-grid\" role=\"list\" aria-label={asLabel(section.title, \"Karten\")}>\n {section.cards.map((card) => (\n <li key={card.id} className=\"prn-lp-cell\" data-span={card.span ?? 1}>\n <CardBody card={card} onExpand={onExpand} />\n </li>\n ))}\n </ul>\n );\n}\n\n/** Voll-Visualisierung im Drill-down-Popup. */\nfunction CardDetail({ card }: { card: LaunchpadCard }) {\n if (\"detail\" in card && card.detail != null) return <>{card.detail}</>;\n if (card.kind === \"trend\") {\n return (\n <div className=\"prn-lp-detail\">\n <div className=\"prn-lp-trend-head\">\n {card.value != null && <span className=\"prn-lp-trend-value\">{card.value}</span>}\n {card.delta != null && (\n <span className={cx(\"prn-lp-delta\", card.trend && `is-${card.trend}`)}>\n {card.trend === \"up\" && <Icon name=\"chevron-up\" size={13} title={trendLabel(\"up\")} />}\n {card.trend === \"down\" && <Icon name=\"chevron-down\" size={13} title={trendLabel(\"down\")} />}\n {card.delta}\n </span>\n )}\n </div>\n <AreaChart data={card.data} width={520} height={260} showAxes />\n </div>\n );\n }\n return null;\n}\n\n/**\n * Launchpad — komponiert Sections aus polymorphen Cards (`kind`).\n * `editable` schaltet Drag-Reorder frei; Cards mit `detail`/`trend`\n * öffnen ein Drill-down-Popup mit der Voll-Visualisierung.\n */\nexport function Launchpad({ sections, editable = false, onReorder, className }: LaunchpadProps) {\n const [expanded, setExpanded] = useState<LaunchpadCard | null>(null);\n const onExpand = useCallback((c: LaunchpadCard) => setExpanded(c), []);\n\n return (\n <div className={cx(\"prn-launchpad\", className)} data-editable={editable ? \"\" : undefined}>\n {sections.map((s) => (\n <section className=\"prn-lp-section\" key={s.id}>\n {(s.title != null || s.subtitle != null) && (\n <header className=\"prn-lp-section-head\">\n {s.icon != null && <span className=\"prn-lp-section-icon\">{s.icon}</span>}\n {s.title != null && <h2 className=\"prn-lp-section-title\">{s.title}</h2>}\n {s.subtitle != null && <span className=\"prn-lp-section-sub\">{s.subtitle}</span>}\n </header>\n )}\n {editable ? (\n <EditableSection section={s} onReorder={onReorder} onExpand={onExpand} />\n ) : (\n <StaticSection section={s} onExpand={onExpand} />\n )}\n </section>\n ))}\n\n {expanded != null && (\n <Modal\n isOpen\n onOpenChange={(o) => !o && setExpanded(null)}\n title={cardLabel(expanded)}\n className=\"prn-lp-modal\"\n >\n <CardDetail card={expanded} />\n </Modal>\n )}\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getGroupedRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type RowSelectionState,\n type GroupingState,\n type ExpandedState,\n type VisibilityState,\n type ColumnOrderState,\n type ColumnPinningState,\n type ColumnSizingState,\n type ColumnFiltersState,\n type FilterFn,\n type AggregationFn,\n type Row,\n type RowData,\n type Column,\n type Table,\n type TableOptions,\n} from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { DialogTrigger } from \"react-aria-components\";\nimport { Checkbox, Button, TextField } from \"../primitives/forms\";\nimport { Menu, MenuItem, Popover } from \"../primitives/overlays\";\nimport { cx } from \"../utils\";\nimport { Icon } from \"../icons/icons\";\nimport \"./data.css\";\nimport \"./table.css\";\n\n/* Spalten-Metadaten (Ausrichtung/Breite) typsicher an TanStack koppeln. */\ninterface ColMeta {\n align?: \"start\" | \"end\";\n vAlign?: \"top\" | \"middle\" | \"bottom\";\n width?: string;\n minWidth?: number;\n maxWidth?: number;\n isSelect?: boolean;\n isTree?: boolean;\n headerTooltip?: string;\n headerLabel?: string;\n cellLabel?: string;\n responsivePopIn?: boolean;\n responsiveMinWidth?: number;\n popinDisplay?: \"block\" | \"inline\";\n autoResizable?: boolean;\n /** Custom-Filter-Render-Slot (per-Spalte). */\n renderFilter?: (info: {\n value: string;\n setValue: (v: string | undefined) => void;\n }) => ReactNode;\n /** Custom-Header-Popover-Inhalt (per-Spalte). */\n renderHeaderPopover?: () => ReactNode;\n}\ndeclare module \"@tanstack/react-table\" {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> extends ColMeta {}\n}\n\n/* ---------------- Spalten-Definition (Prince-API) ----------------\n * Schlanke, deklarative Spalten-Beschreibung. Intern in TanStack\n * ColumnDef übersetzt — Konsumenten brauchen TanStack nicht zu kennen. */\n\nexport type AggregateType =\n | \"sum\"\n | \"count\"\n | \"avg\"\n | \"min\"\n | \"max\"\n | \"minMax\"\n | \"median\"\n | \"unique\"\n | \"uniqueCount\";\n\nexport type SortType = \"alphanumeric\" | \"basic\" | \"datetime\";\n\nexport type ColumnFilterType = \"text\" | \"exactText\" | \"exactTextCase\" | \"equals\";\n\nexport interface AnalyticalColumn<T> {\n /** Stabile ID. Default: `accessorKey` falls gesetzt. */\n id?: string;\n /** Spaltenüberschrift. */\n header: ReactNode;\n /** Feldname für den Standard-Wert (typsicher gegen T). Unterstützt nested paths \"info.hobby\". */\n accessorKey?: (keyof T & string) | string;\n /** Eigener Wert-Resolver (überschreibt accessorKey für die Anzeige). */\n accessor?: (row: T) => unknown;\n /** Eigenes Zell-Rendering. */\n cellRender?: (row: T) => ReactNode;\n /** Feste/Initial-Breite, z. B. `120px`, `1fr`, `minmax(120px, 1fr)`. Default `1fr`. */\n width?: string;\n /** Mindestbreite in px (für Resizing/minmax). */\n minWidth?: number;\n /** Maximalbreite in px. */\n maxWidth?: number;\n /** Ausrichtung. `end` aktiviert tabular-nums (für Zahlen). */\n align?: \"start\" | \"end\";\n /** Vertikale Ausrichtung der Zelle. */\n vAlign?: \"top\" | \"middle\" | \"bottom\";\n /** Sortierung erlauben (Default true). */\n sortable?: boolean;\n /** Sortierung pro Spalte deaktivieren (SAP-Alias zu sortable:false). */\n disableSortBy?: boolean;\n /** Sortier-Typ. */\n sortType?: SortType;\n /** Bei erstem Klick absteigend statt aufsteigend sortieren (B2). */\n sortDescFirst?: boolean;\n /** Sortier-Richtung invertieren (asc↔desc), z. B. für Rang/Score (B2). */\n sortInverted?: boolean;\n /** Filterung pro Spalte erlauben (Default: globales `filterable`). */\n filterable?: boolean;\n /** Filterung pro Spalte deaktivieren. */\n disableFilters?: boolean;\n /** Spalte aus dem globalen Filter ausnehmen (B3). */\n disableGlobalFilter?: boolean;\n /** Filter-Vergleichsfunktion. Default \"text\". */\n filter?: ColumnFilterType;\n /** Eigener Filter-Render-Slot im Header-Popover (überschreibt das TextField). */\n Filter?: (info: {\n value: string;\n setValue: (v: string | undefined) => void;\n }) => ReactNode;\n /** Freier Custom-Popover-Inhalt am Spaltenkopf (B1.5). */\n Popover?: () => ReactNode;\n /** Spalte darf gruppiert werden. */\n groupable?: boolean;\n /** Resizing pro Spalte deaktivieren. */\n disableResizing?: boolean;\n /** Doppelklick auf den Resizer passt die Breite an den Inhalt an (B6). */\n autoResizable?: boolean;\n /** Drag&Drop-Reorder pro Spalte deaktivieren. */\n disableDragAndDrop?: boolean;\n /** Aggregation je Gruppe für diese Spalte. */\n aggregate?:\n | AggregateType\n | ((values: unknown[], rows: T[]) => unknown);\n /** Vorberechnung des Aggregat-Werts vor der Aggregation (B4). */\n aggregateValue?: (row: T) => unknown;\n /** Eigenes Rendering des Aggregat-Werts. */\n aggregatedCellRender?: (info: { value: unknown; rows: T[] }) => ReactNode;\n /** Darf ausgeblendet werden (Default true). */\n canHide?: boolean;\n /** Darf gepinnt werden (Default false). */\n canPin?: boolean;\n /** Initiale Pin-Seite. */\n defaultPinned?: \"left\" | \"right\";\n /** Tooltip am Spaltenkopf. */\n headerTooltip?: string;\n /** Barrierefreies Label für die Spalte (überschreibt header für a11y). */\n headerLabel?: string;\n /** Barrierefreies Label pro Zelle. */\n cellLabel?: string;\n /** Klappt diese Spalte in die erste Zelle, wenn die Tabelle schmal wird. */\n responsivePopIn?: boolean;\n /** Tabellenbreite (px), unter der diese Spalte zur Pop-In wird. */\n responsiveMinWidth?: number;\n /** Anzeigeform im Pop-In. */\n popinDisplay?: \"block\" | \"inline\";\n}\n\nexport type SelectionMode = \"none\" | \"single\" | \"multiple\";\nexport type SelectionBehavior = \"row\" | \"rowOnly\" | \"rowSelector\";\nexport type VisibleRowCountMode = \"fixed\" | \"auto\" | \"autoWithEmptyRows\";\nexport type ValueState = \"none\" | \"information\" | \"positive\" | \"critical\" | \"negative\";\nexport type NoDataReason = \"empty\" | \"filtered\";\nexport type SubComponentsBehavior = \"expandable\" | \"visible\";\nexport type ScaleWidthMode = \"default\" | \"smart\" | \"grow\";\n\nexport interface AnalyticalTableProps<T> {\n /** Datenzeilen. */\n data: T[];\n /** Spalten-Beschreibung. */\n columns: AnalyticalColumn<T>[];\n /** Eindeutige Zeilen-ID (für Selektion/Keys). Default: Array-Index. */\n getRowId?: (row: T, index: number) => string;\n\n /* ---- Selektion (B5) ---- */\n /** Selektionsmodus. */\n selectionMode?: SelectionMode;\n /** Selektionsverhalten: row = ganze Zeile selektiert + onRowClick; rowSelector = nur über Checkbox. */\n selectionBehavior?: SelectionBehavior;\n /** Alias auf selectionMode=\"multiple\" (rückwärtskompatibel). */\n selectable?: boolean;\n /** Kontrollierte Auswahl (Set ausgewählter Row-IDs). */\n selectedKeys?: Set<string>;\n /** Callback bei Auswahländerung. */\n onSelectionChange?: (keys: Set<string>) => void;\n /** SAP-Style Selektions-Event. */\n onRowSelect?: (info: { row: T; selected: boolean; selectedKeys: Set<string> }) => void;\n /** Aktion bei Zeilen-Aktivierung (Klick/Enter/Space) — rückwärtskompatibel. */\n onRowAction?: (row: T) => void;\n /** Klick-Event auf eine Zeile (mit Event-Objekt). */\n onRowClick?: (info: { row: T; event: ReactMouseEvent }) => void;\n /** Rechtsklick-Kontextmenü auf eine Zeile. */\n onRowContextMenu?: (info: { row: T; event: ReactMouseEvent }) => void;\n\n /* ---- Sortierung (B2) ---- */\n /** Globales Sortier-Flag (Default true für Spalten ohne explizites sortable). */\n sortable?: boolean;\n /** Kontrollierte Sortierung. */\n sorting?: { id: string; desc: boolean }[];\n /** Anfangs-Sortierung (unkontrolliert). */\n defaultSorting?: { id: string; desc: boolean }[];\n /** Callback bei Sortier-Änderung (controlled-Pattern). */\n onSortingChange?: (sorting: { id: string; desc: boolean }[]) => void;\n /** SAP-Style Sort-Event. */\n onSort?: (sorting: { id: string; desc: boolean }[]) => void;\n /** Multi-Sort via Shift-Klick. */\n enableMultiSort?: boolean;\n\n /* ---- Filterung (B3) ---- */\n /** Spaltenfilter global aktivieren (Header-Popover). */\n filterable?: boolean;\n /** Globaler Filter über alle Zeilen. */\n globalFilterValue?: string;\n /** Callback bei Filter-Änderung (Spaltenfilter). */\n onFilter?: (filters: { id: string; value: string }[]) => void;\n\n /* ---- Loading / Empty (B12) ---- */\n /** Ladezustand. */\n loading?: boolean;\n /** Alias auf loading (rückwärtskompatibel). */\n isLoading?: boolean;\n /** Verzögerung in ms, bevor der Ladeindikator erscheint. */\n loadingDelay?: number;\n /** BusyIndicator statt Skeleton anzeigen. */\n alwaysShowBusyIndicator?: boolean;\n /** Halbtransparentes Overlay über vorhandenen Daten. */\n showOverlay?: boolean;\n /** Anzahl Skeleton-Zeilen (Default 8). */\n skeletonRows?: number;\n /** Leerzustands-Titel (rückwärtskompatibel). */\n emptyTitle?: ReactNode;\n emptyDescription?: ReactNode;\n /** Text im Leerzustand (SAP `noDataText`). */\n noDataText?: ReactNode;\n /** Eigene Leerzustands-Komponente. */\n NoDataComponent?: (info: { reason: NoDataReason }) => ReactNode;\n\n /* ---- Zeilen-Rendering & Höhe (B7) ---- */\n /** Geschätzte Zeilenhöhe für die Virtualisierung (Default 44). */\n rowHeight?: number;\n /** Höhe der Kopfzeile (px). */\n headerRowHeight?: number;\n /** Anzahl sichtbarer Zeilen → bestimmt die Tabellenhöhe. */\n visibleRows?: number;\n /** Mindestzeilenzahl (Leerzeilen-Auffüllung). */\n minRows?: number;\n /** Höhenmodus. */\n visibleRowCountMode?: VisibleRowCountMode;\n /** Overscan der Virtualisierung (Default 10). */\n overscanCount?: number;\n /** Scroll-Event des Viewports. */\n onTableScroll?: (info: { scrollTop: number; scrollLeft: number }) => void;\n /** Max. Höhe des Scroll-Viewports (Fallback, wenn keine visibleRows). Default `480px`. */\n maxHeight?: number | string;\n\n /* ---- Tree-Table (B8) ---- */\n /** Aktiviert hierarchische Zeilen. */\n isTreeTable?: boolean;\n /** Feld, das Kindzeilen enthält (Default \"subRows\"). */\n subRowsKey?: string;\n /** Callback bei Expand/Collapse einer Zeile. */\n onRowExpandChange?: (info: { row: T; expanded: boolean }) => void;\n\n /* ---- Infinite Scroll (B9) ---- */\n /** Aktiviert Nachladen beim Scrollen. */\n infiniteScroll?: boolean;\n /** Abstand (px) vom Ende, ab dem onLoadMore feuert (Default 20). */\n infiniteScrollThreshold?: number;\n /** Callback zum Nachladen. */\n onLoadMore?: () => void;\n\n /* ---- Highlights & Navigation (B10) ---- */\n /** Zebra-Streifen. */\n alternateRowColor?: boolean;\n /** Farbband links je Zeile (ValueState). */\n withRowHighlight?: boolean;\n /** Feld, das die ValueState pro Zeile liefert. */\n highlightField?: (row: T) => ValueState;\n /** Navigations-Pfeil-Spalte aktivieren. */\n withNavigationHighlight?: boolean;\n /** Markiert die navigierte Zeile (true = Pfeil hervorgehoben). */\n markNavigatedRow?: (row: T) => boolean;\n\n /* ---- Responsive Pop-In (B11) ---- */\n /** Aktuelle Tabellenbreite (px) für Pop-In-Berechnung (Test-/SSR-Hilfe). */\n tableWidth?: number;\n\n /* ---- Header / Extension / A11y (B14) ---- */\n /** Sichtbarer Tabellen-Titel (auch accessible name). */\n header?: ReactNode;\n /** Bereich über der Tabelle (Toolbar/FilterBar). */\n extension?: ReactNode;\n /** „Liquid Glass\"-Optik auf der Tabellen-Toolbar (NICHT auf den dichten Zeilen). */\n glass?: boolean;\n /** Barrierefreies Label der Tabelle. */\n accessibleName?: string;\n /** ID eines Elements als aria-labelledby. */\n accessibleNameRef?: string;\n className?: string;\n /** Barrierefreies Label (rückwärtskompatibel). */\n \"aria-label\"?: string;\n\n /* ---- Spaltengröße & -reihenfolge (B6) ---- */\n /** Column-Resizing global aktivieren. */\n enableColumnResizing?: boolean;\n /** Manuell gesetzte Spaltenbreiten bei Container-Resize behalten (B6). */\n retainColumnWidth?: boolean;\n /** Breiten-Skalierungsmodus (B6). */\n scaleWidthMode?: ScaleWidthMode;\n /** Callback bei Auto-Resize (Doppelklick auf Resizer einer `autoResizable`-Spalte). */\n onAutoResize?: (info: { columnId: string; width: number }) => void;\n /** Drag&Drop-Reorder aktivieren. */\n enableColumnReorder?: boolean;\n /** Callback bei Reorder per Drag&Drop. */\n onColumnsReorder?: (order: string[]) => void;\n\n /* ---- Gruppierung (B4) ---- */\n /** Aktiviert Gruppierung + Group-Bar. */\n enableGrouping?: boolean;\n /** Kontrollierte Gruppierung (geordnete Spalten-IDs). */\n grouping?: string[];\n /** Unkontrollierte Anfangs-Gruppierung. */\n defaultGrouping?: string[];\n /** Callback bei Änderung der Gruppierung. */\n onGroupingChange?: (grouping: string[]) => void;\n /** SAP-Style Group-Event. */\n onGroup?: (grouping: string[]) => void;\n\n /* ---- Personalisierung ---- */\n /** Aktiviert Spalten-Personalisierung (⚙-Menü: Sichtbarkeit/Reihenfolge/Pinning). */\n enablePersonalization?: boolean;\n /** Kontrollierte Spaltensichtbarkeit. */\n columnVisibility?: Record<string, boolean>;\n /** Unkontrollierte Anfangs-Sichtbarkeit. */\n defaultColumnVisibility?: Record<string, boolean>;\n /** Callback bei Sichtbarkeitsänderung. */\n onColumnVisibilityChange?: (v: Record<string, boolean>) => void;\n /** Kontrollierte Spaltenreihenfolge. */\n columnOrder?: string[];\n /** Unkontrollierte Anfangs-Reihenfolge. */\n defaultColumnOrder?: string[];\n /** Callback bei Reihenfolgeänderung. */\n onColumnOrderChange?: (o: string[]) => void;\n /** Kontrolliertes Spalten-Pinning. */\n columnPinning?: { left?: string[]; right?: string[] };\n /** Unkontrolliertes Anfangs-Pinning. */\n defaultColumnPinning?: { left?: string[]; right?: string[] };\n /** Callback bei Pinning-Änderung. */\n onColumnPinningChange?: (p: { left?: string[]; right?: string[] }) => void;\n\n /* ---- Sub-Components (B13.1) ---- */\n /** Rendert eine Unterkomponente unter einer Zeile. */\n renderRowSubComponent?: (info: { row: T }) => ReactNode;\n /** Verhalten der Unterkomponente: ausklappbar (Chevron) oder immer sichtbar. */\n subComponentsBehavior?: SubComponentsBehavior;\n\n /* ---- Erweiterbarkeit (B14.4) ---- */\n /** Wird in useReactTable hineingemerged (Escape-Hatch). */\n reactTableOptions?: Partial<TableOptions<T>>;\n /** Liefert die TanStack-Tabellen-Instanz nach oben. */\n onTableReady?: (table: Table<T>) => void;\n}\n\nconst SELECT_COL_ID = \"__select__\";\nconst NAV_COL_ID = \"__nav__\";\n\n/* Feste Track-Breiten für die Zusatzspalten. Bewusst ohne CSS-var(…, fallback),\n * damit der grid-template-columns-String je ein einzelnes Token pro Track bleibt\n * (Track-Konsistenz lässt sich so verlässlich prüfen). */\nconst HIGHLIGHT_TRACK = \"3px\";\nconst NAV_TRACK = \"36px\";\n\n/* Gepinnte Spalten brauchen px-Breiten für korrekte Sticky-Offsets.\n * Non-px-Breiten werden einmalig gewarnt und nicht sticky gemacht. */\nlet warnedNonPxPin = false;\n\nfunction pinStyle<T>(\n column: Column<T, unknown>,\n): { pinned: \"left\" | \"right\" | undefined; style: CSSProperties | undefined } {\n const pinned = column.getIsPinned();\n if (!pinned) return { pinned: undefined, style: undefined };\n const width = column.columnDef.meta?.width;\n const isPx = typeof width === \"string\" && /^\\d+(\\.\\d+)?px$/.test(width.trim());\n if (!isPx) {\n if (!warnedNonPxPin && typeof console !== \"undefined\") {\n warnedNonPxPin = true;\n console.warn(\n `[AnalyticalTable] Gepinnte Spalte \"${column.id}\" benötigt eine px-Breite (width: \"120px\"); Sticky wird übersprungen.`,\n );\n }\n return { pinned, style: undefined };\n }\n const style: CSSProperties = { position: \"sticky\", zIndex: 2 };\n if (pinned === \"left\") style.left = column.getStart(\"left\");\n else style.right = column.getAfter(\"right\");\n return { pinned, style };\n}\n\n/* Sicherer Merge von reactTableOptions in die Basis-Optionen.\n * - `state` wird tief gemerged (interner State bleibt, opts ergänzen additiv).\n * - interne `on*Change`-Handler werden NICHT überschrieben (sonst bricht der\n * kontrollierte State); ist in opts ein eigener Handler gesetzt, wird er\n * zusätzlich nach dem internen aufgerufen (Komposition statt Überschreiben).\n * - alle übrigen Felder: opts gewinnt (echter Escape-Hatch).\n */\nfunction mergeTableOptions<T>(\n base: TableOptions<T>,\n opts: Partial<TableOptions<T>>,\n): TableOptions<T> {\n const merged: TableOptions<T> = { ...base, ...opts } as TableOptions<T>;\n // state tief mergen — interner State darf nicht verloren gehen.\n merged.state = { ...base.state, ...(opts.state ?? {}) };\n // on*Change-Handler komponieren: intern zuerst, dann opts-Handler.\n for (const key of Object.keys(opts) as (keyof TableOptions<T>)[]) {\n if (\n typeof key === \"string\" &&\n key.startsWith(\"on\") &&\n key.endsWith(\"Change\") &&\n typeof base[key] === \"function\" &&\n typeof opts[key] === \"function\"\n ) {\n const internal = base[key] as (...a: unknown[]) => void;\n const external = opts[key] as (...a: unknown[]) => void;\n (merged[key] as unknown) = (...args: unknown[]) => {\n internal(...args);\n external(...args);\n };\n }\n }\n return merged;\n}\n\n/* Nested-Path-Resolver für dotted accessorKey (\"info.hobby\"). */\nfunction resolvePath(obj: unknown, path: string): unknown {\n if (!path.includes(\".\")) {\n return obj == null ? undefined : (obj as Record<string, unknown>)[path];\n }\n return path.split(\".\").reduce<unknown>((acc, key) => {\n if (acc == null) return undefined;\n return (acc as Record<string, unknown>)[key];\n }, obj);\n}\n\n/* Zusätzliche SAP-Aggregat-Funktionen, die TanStack nicht eingebaut hat. */\nconst customAggFns: Record<string, AggregationFn<unknown>> = {\n minMax: (_columnId, leafRows) => {\n const nums = leafRows\n .map((r) => Number(r.getValue(_columnId)))\n .filter((n) => !Number.isNaN(n));\n if (nums.length === 0) return \"\";\n return `${Math.min(...nums)}–${Math.max(...nums)}`;\n },\n median: (_columnId, leafRows) => {\n const nums = leafRows\n .map((r) => Number(r.getValue(_columnId)))\n .filter((n) => !Number.isNaN(n))\n .sort((a, b) => a - b);\n if (nums.length === 0) return \"\";\n const mid = Math.floor(nums.length / 2);\n return nums.length % 2 ? nums[mid] : (nums[mid - 1]! + nums[mid]!) / 2;\n },\n unique: (_columnId, leafRows) => {\n const set = new Set(leafRows.map((r) => r.getValue(_columnId)));\n return Array.from(set).join(\", \");\n },\n uniqueCount: (_columnId, leafRows) => {\n return new Set(leafRows.map((r) => r.getValue(_columnId))).size;\n },\n};\n\n/* Filter-Funktionen für Spaltenfilter. Generisch, damit sie zu FilterFn<T> passen. */\nconst exactTextFilter: FilterFn<any> = (row, columnId, value) =>\n String(row.getValue(columnId) ?? \"\").toLowerCase() === String(value).toLowerCase();\nconst exactTextCaseFilter: FilterFn<any> = (row, columnId, value) =>\n String(row.getValue(columnId) ?? \"\") === String(value);\nconst equalsFilter: FilterFn<any> = (row, columnId, value) =>\n // eslint-disable-next-line eqeqeq\n row.getValue(columnId) == value;\n\nexport function AnalyticalTable<T>(props: AnalyticalTableProps<T>) {\n const {\n data,\n columns,\n getRowId,\n selectionMode: selectionModeProp,\n selectionBehavior = \"rowSelector\",\n selectable = false,\n selectedKeys,\n onSelectionChange,\n onRowSelect,\n onRowAction,\n onRowClick,\n onRowContextMenu,\n sortable = true,\n sorting: sortingProp,\n defaultSorting,\n onSortingChange,\n onSort,\n enableMultiSort = false,\n filterable = false,\n globalFilterValue,\n onFilter,\n loading,\n isLoading = false,\n loadingDelay = 0,\n alwaysShowBusyIndicator = false,\n showOverlay = false,\n skeletonRows = 8,\n emptyTitle = \"Keine Daten\",\n emptyDescription,\n noDataText,\n NoDataComponent,\n rowHeight = 44,\n headerRowHeight,\n visibleRows,\n renderRowSubComponent,\n subComponentsBehavior = \"expandable\",\n minRows,\n visibleRowCountMode = \"fixed\",\n overscanCount = 10,\n onTableScroll,\n maxHeight = 480,\n isTreeTable = false,\n subRowsKey = \"subRows\",\n onRowExpandChange,\n infiniteScroll = false,\n infiniteScrollThreshold = 20,\n onLoadMore,\n alternateRowColor = false,\n withRowHighlight = false,\n highlightField,\n withNavigationHighlight = false,\n markNavigatedRow,\n tableWidth,\n header,\n extension,\n glass,\n accessibleName,\n accessibleNameRef,\n className,\n \"aria-label\": ariaLabel,\n enableColumnResizing = false,\n retainColumnWidth = false,\n scaleWidthMode = \"default\",\n onAutoResize,\n enableColumnReorder = false,\n onColumnsReorder,\n enableGrouping = false,\n grouping: groupingProp,\n defaultGrouping,\n onGroupingChange,\n onGroup,\n enablePersonalization = false,\n columnVisibility: columnVisibilityProp,\n defaultColumnVisibility,\n onColumnVisibilityChange,\n columnOrder: columnOrderProp,\n defaultColumnOrder,\n onColumnOrderChange,\n columnPinning: columnPinningProp,\n defaultColumnPinning,\n onColumnPinningChange,\n reactTableOptions,\n onTableReady,\n } = props;\n\n /* Selektionsmodus: selectable (legacy) → multiple. */\n const selectionMode: SelectionMode =\n selectionModeProp ?? (selectable ? \"multiple\" : \"none\");\n const showSelectColumn =\n selectionMode !== \"none\" && selectionBehavior !== \"row\" && selectionBehavior !== \"rowOnly\";\n\n const loadingActive = loading ?? isLoading;\n\n /* ---- Sorting (controlled/uncontrolled) ---- */\n const [internalSorting, setInternalSorting] = useState<SortingState>(\n (defaultSorting as SortingState) ?? [],\n );\n const sorting = (sortingProp as SortingState) ?? internalSorting;\n const setSorting = (next: SortingState) => {\n if (sortingProp === undefined) setInternalSorting(next);\n const out = next.map((s) => ({ id: s.id, desc: s.desc }));\n onSortingChange?.(out);\n onSort?.(out);\n };\n\n /* ---- Column filters ---- */\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const emitFilter = (next: ColumnFiltersState) => {\n onFilter?.(next.map((f) => ({ id: f.id, value: String(f.value ?? \"\") })));\n };\n\n /* Grouping-State (kontrolliert/unkontrolliert). */\n const [internalGrouping, setInternalGrouping] = useState<GroupingState>(defaultGrouping ?? []);\n const grouping = groupingProp ?? internalGrouping;\n const setGrouping = (next: GroupingState) => {\n if (groupingProp === undefined) setInternalGrouping(next);\n onGroupingChange?.(next);\n onGroup?.(next);\n };\n // Gruppen initial offen; Tree-Zeilen initial geschlossen (SAP-Verhalten).\n const [expanded, setExpanded] = useState<ExpandedState>(isTreeTable ? {} : true);\n\n /* Personalisierungs-State (kontrolliert/unkontrolliert). */\n const [internalVisibility, setInternalVisibility] = useState<VisibilityState>(\n defaultColumnVisibility ?? {},\n );\n const columnVisibility = columnVisibilityProp ?? internalVisibility;\n const setColumnVisibility = (next: VisibilityState) => {\n if (columnVisibilityProp === undefined) setInternalVisibility(next);\n onColumnVisibilityChange?.(next);\n };\n\n const [internalOrder, setInternalOrder] = useState<ColumnOrderState>(defaultColumnOrder ?? []);\n const columnOrder = columnOrderProp ?? internalOrder;\n const setColumnOrder = (next: ColumnOrderState) => {\n if (columnOrderProp === undefined) setInternalOrder(next);\n onColumnOrderChange?.(next);\n };\n\n /* Column-Sizing für Resizing. */\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n\n /* Pinning-Defaults aus den Spalten ableiten, falls nicht explizit gesetzt. */\n const seededPinning = useMemo<ColumnPinningState>(() => {\n if (defaultColumnPinning) {\n return { left: defaultColumnPinning.left ?? [], right: defaultColumnPinning.right ?? [] };\n }\n const left: string[] = [];\n const right: string[] = [];\n for (const col of columns) {\n const id = col.id ?? col.accessorKey ?? String(col.header);\n if (col.defaultPinned === \"left\") left.push(id);\n else if (col.defaultPinned === \"right\") right.push(id);\n }\n return { left, right };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const [internalPinning, setInternalPinning] = useState<ColumnPinningState>(seededPinning);\n const columnPinning = columnPinningProp\n ? { left: columnPinningProp.left ?? [], right: columnPinningProp.right ?? [] }\n : internalPinning;\n const setColumnPinning = (next: ColumnPinningState) => {\n if (columnPinningProp === undefined) setInternalPinning(next);\n onColumnPinningChange?.({ left: next.left, right: next.right });\n };\n\n /* Kontrollierte vs. unkontrollierte Auswahl. */\n const [internalSelection, setInternalSelection] = useState<RowSelectionState>({});\n const rowSelection: RowSelectionState = useMemo(() => {\n if (selectedKeys === undefined) return internalSelection;\n const next: RowSelectionState = {};\n selectedKeys.forEach((k) => {\n next[k] = true;\n });\n return next;\n }, [selectedKeys, internalSelection]);\n\n /* Pop-In-Berechnung: gemessene Breite. */\n const containerRef = useRef<HTMLDivElement>(null);\n const [measuredWidth, setMeasuredWidth] = useState<number | undefined>(tableWidth);\n useEffect(() => {\n if (tableWidth !== undefined) {\n setMeasuredWidth(tableWidth);\n return;\n }\n const el = containerRef.current;\n if (!el) return;\n /* Sofortige Erstmessung — der ResizeObserver feuert sonst u. U. nie (kein\n * Resize nach Mount), wodurch measuredWidth `undefined` bliebe (MED-1). */\n const measure = (w: number) => {\n if (w > 0) setMeasuredWidth(w);\n };\n measure(el.getBoundingClientRect().width);\n if (typeof ResizeObserver === \"undefined\") return;\n let prevWidth = el.getBoundingClientRect().width;\n const ro = new ResizeObserver((entries) => {\n for (const e of entries) {\n const w = e.contentRect?.width ?? (e.target as HTMLElement).getBoundingClientRect().width;\n measure(w);\n /* retainColumnWidth=false (SAP-Default): manuell gesetzte Breiten beim\n * echten Container-Resize verwerfen, damit die Spalten neu skalieren. */\n if (!retainColumnWidth && w !== prevWidth) {\n setColumnSizing((prev) => (Object.keys(prev).length ? {} : prev));\n }\n prevWidth = w;\n }\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [tableWidth, retainColumnWidth]);\n\n const effectiveWidth = tableWidth ?? measuredWidth;\n const hasPopIns = columns.some((c) => c.responsivePopIn);\n const popInColumnIds = useMemo(() => {\n if (!hasPopIns || effectiveWidth === undefined) return new Set<string>();\n const ids = new Set<string>();\n for (const col of columns) {\n if (!col.responsivePopIn) continue;\n const threshold = col.responsiveMinWidth ?? 600;\n if (effectiveWidth < threshold) ids.add(col.id ?? col.accessorKey ?? String(col.header));\n }\n return ids;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columns, effectiveWidth, hasPopIns]);\n\n /* Prince-Spalten → TanStack ColumnDef. */\n const tableColumns = useMemo<ColumnDef<T>[]>(() => {\n const defs: ColumnDef<T>[] = [];\n\n if (showSelectColumn) {\n defs.push({\n id: SELECT_COL_ID,\n enableSorting: false,\n enableColumnFilter: false,\n enableResizing: false,\n meta: { align: \"start\", width: \"44px\", isSelect: true } satisfies ColMeta,\n header: ({ table }) => (\n <Checkbox\n aria-label=\"Alle Zeilen auswählen\"\n isSelected={table.getIsAllRowsSelected()}\n isIndeterminate={table.getIsSomeRowsSelected()}\n onChange={(v) => table.toggleAllRowsSelected(v)}\n />\n ),\n cell: ({ row }) =>\n selectionMode === \"single\" ? (\n <input\n type=\"radio\"\n aria-label=\"Zeile auswählen\"\n checked={row.getIsSelected()}\n onChange={() => row.toggleSelected(true)}\n />\n ) : (\n <Checkbox\n aria-label=\"Zeile auswählen\"\n isSelected={row.getIsSelected()}\n onChange={(v) => row.toggleSelected(v)}\n />\n ),\n });\n }\n\n columns.forEach((col, colIdx) => {\n const id = col.id ?? col.accessorKey ?? String(col.header);\n const accessorFn: ((row: T) => unknown) | undefined =\n col.accessor ??\n (col.accessorKey\n ? (row: T) => resolvePath(row, col.accessorKey as string)\n : undefined);\n\n const sortAllowed =\n col.sortable !== false &&\n col.disableSortBy !== true &&\n sortable !== false &&\n accessorFn !== undefined;\n\n const filterAllowed =\n (col.filterable ?? filterable) === true &&\n col.disableFilters !== true &&\n accessorFn !== undefined;\n\n const isTreeCol = isTreeTable && colIdx === 0;\n\n const aggSpec = col.aggregate;\n const isCustomNamedAgg =\n typeof aggSpec === \"string\" &&\n (aggSpec === \"minMax\" || aggSpec === \"median\" || aggSpec === \"unique\" || aggSpec === \"uniqueCount\");\n\n const def: ColumnDef<T> = {\n id,\n accessorFn: accessorFn ?? (() => undefined),\n header: () => col.header,\n enableSorting: sortAllowed,\n sortingFn: col.sortType ?? \"auto\",\n sortDescFirst: col.sortDescFirst,\n sortUndefined: col.sortInverted ? -1 : undefined,\n invertSorting: col.sortInverted ?? undefined,\n enableColumnFilter: filterAllowed,\n enableGlobalFilter: col.disableGlobalFilter ? false : undefined,\n filterFn:\n col.filter === \"exactText\"\n ? exactTextFilter\n : col.filter === \"exactTextCase\"\n ? exactTextCaseFilter\n : col.filter === \"equals\"\n ? equalsFilter\n : \"includesString\",\n enableHiding: col.canHide !== false,\n enablePinning: !!col.canPin,\n enableResizing: enableColumnResizing && col.disableResizing !== true,\n minSize: col.minWidth ?? 60,\n maxSize: col.maxWidth ?? Number.MAX_SAFE_INTEGER,\n meta: {\n align: col.align ?? \"start\",\n vAlign: col.vAlign,\n width: col.width ?? \"1fr\",\n minWidth: col.minWidth,\n maxWidth: col.maxWidth,\n isTree: isTreeCol,\n headerTooltip: col.headerTooltip,\n headerLabel: col.headerLabel,\n cellLabel: col.cellLabel,\n responsivePopIn: col.responsivePopIn,\n responsiveMinWidth: col.responsiveMinWidth,\n popinDisplay: col.popinDisplay,\n autoResizable: col.autoResizable,\n renderFilter: col.Filter,\n renderHeaderPopover: col.Popover,\n } satisfies ColMeta,\n cell: col.cellRender\n ? ({ row }) => col.cellRender!(row.original)\n : ({ getValue }) => {\n const v = getValue();\n return v === null || v === undefined ? \"\" : (v as ReactNode);\n },\n };\n\n if (aggSpec) {\n if (typeof aggSpec === \"function\") {\n def.aggregationFn = (_colId, leafRows) =>\n aggSpec(\n leafRows.map((r) => (col.aggregateValue ? col.aggregateValue(r.original) : r.getValue(id))),\n leafRows.map((r) => r.original),\n );\n } else if (col.aggregateValue) {\n // Vorberechneter Aggregat-Wert: aggregateValue je Zeile auflösen, dann\n // die (benannte) Aggregation darüber rechnen — ohne den Roh-Zellwert.\n const resolveAgg = col.aggregateValue;\n def.aggregationFn = (_colId, leafRows) => {\n const values = leafRows.map((r) => resolveAgg(r.original));\n const nums = values.map((v) => Number(v)).filter((n) => !Number.isNaN(n));\n switch (aggSpec) {\n case \"sum\":\n return nums.reduce((a, b) => a + b, 0);\n case \"avg\":\n return nums.length ? nums.reduce((a, b) => a + b, 0) / nums.length : \"\";\n case \"min\":\n return nums.length ? Math.min(...nums) : \"\";\n case \"max\":\n return nums.length ? Math.max(...nums) : \"\";\n case \"count\":\n return leafRows.length;\n case \"minMax\":\n return nums.length ? `${Math.min(...nums)}–${Math.max(...nums)}` : \"\";\n case \"median\": {\n const s = [...nums].sort((a, b) => a - b);\n if (!s.length) return \"\";\n const mid = Math.floor(s.length / 2);\n return s.length % 2 ? s[mid] : (s[mid - 1]! + s[mid]!) / 2;\n }\n case \"unique\":\n return Array.from(new Set(values)).join(\", \");\n case \"uniqueCount\":\n return new Set(values).size;\n default:\n return nums.reduce((a, b) => a + b, 0);\n }\n };\n } else if (isCustomNamedAgg) {\n // resolved via aggregationFns map (customAggFns)\n def.aggregationFn = aggSpec as ColumnDef<T>[\"aggregationFn\"];\n } else {\n def.aggregationFn = aggSpec === \"avg\" ? \"mean\" : (aggSpec as \"sum\" | \"count\" | \"min\" | \"max\");\n }\n def.aggregatedCell = ({ getValue, row }) => {\n const value = getValue();\n if (col.aggregatedCellRender) {\n return col.aggregatedCellRender({ value, rows: row.getLeafRows().map((r) => r.original) });\n }\n return value === null || value === undefined ? \"\" : (value as ReactNode);\n };\n }\n\n defs.push(def);\n });\n return defs;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columns, showSelectColumn, selectionMode, sortable, filterable, enableColumnResizing, isTreeTable]);\n\n /* getSubRows für Tree-Tables. */\n const getSubRows = useMemo(() => {\n if (!isTreeTable) return undefined;\n return (row: T) => (row as Record<string, unknown>)[subRowsKey] as T[] | undefined;\n }, [isTreeTable, subRowsKey]);\n\n const baseOptions: TableOptions<T> = {\n data,\n columns: tableColumns,\n state: {\n sorting,\n rowSelection,\n grouping,\n expanded,\n columnVisibility,\n columnOrder,\n columnPinning,\n columnSizing,\n columnFilters,\n ...(globalFilterValue !== undefined ? { globalFilter: globalFilterValue } : {}),\n },\n aggregationFns: customAggFns as TableOptions<T>[\"aggregationFns\"],\n globalFilterFn: \"includesString\",\n enableMultiSort,\n onSortingChange: (updater) =>\n setSorting(typeof updater === \"function\" ? updater(sorting) : updater),\n onColumnFiltersChange: (updater) => {\n setColumnFilters((prev) => {\n const next = typeof updater === \"function\" ? updater(prev) : updater;\n emitFilter(next);\n return next;\n });\n },\n enableRowSelection: selectionMode !== \"none\",\n enableMultiRowSelection: selectionMode === \"multiple\",\n onRowSelectionChange: (updater) => {\n const next = typeof updater === \"function\" ? updater(rowSelection) : updater;\n if (selectedKeys === undefined) setInternalSelection(next);\n const keys = new Set(Object.keys(next).filter((k) => next[k]));\n onSelectionChange?.(keys);\n },\n enableGrouping,\n onGroupingChange: (u) => setGrouping(typeof u === \"function\" ? u(grouping) : u),\n onExpandedChange: setExpanded,\n enableHiding: true,\n enablePinning: true,\n enableColumnResizing,\n columnResizeMode: \"onChange\",\n onColumnSizingChange: setColumnSizing,\n onColumnVisibilityChange: (u) =>\n setColumnVisibility(typeof u === \"function\" ? u(columnVisibility) : u),\n onColumnOrderChange: (u) => setColumnOrder(typeof u === \"function\" ? u(columnOrder) : u),\n onColumnPinningChange: (u) => setColumnPinning(typeof u === \"function\" ? u(columnPinning) : u),\n getRowId: getRowId ? (row, index) => getRowId(row, index) : undefined,\n getSubRows,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getGroupedRowModel: getGroupedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n };\n\n const table = useReactTable<T>(\n reactTableOptions ? mergeTableOptions(baseOptions, reactTableOptions) : baseOptions,\n );\n\n /* Tabellen-Instanz nach oben reichen. */\n const readyRef = useRef(false);\n useEffect(() => {\n if (!readyRef.current && onTableReady) {\n readyRef.current = true;\n onTableReady(table);\n }\n }, [table, onTableReady]);\n\n const rows = table.getRowModel().rows;\n const leafColumns = table.getVisibleLeafColumns();\n\n /* Tatsächlich als Grid-Zellen gerenderte Spalten: Pop-In-Spalten werden NICHT\n * als eigene Zelle gerendert (sie wandern in die erste Zelle), dürfen also auch\n * keinen eigenen grid-template-columns-Track erhalten — sonst verschiebt sich\n * der gesamte Body um die Anzahl der Pop-In-Spalten. */\n const renderedLeafColumns = useMemo(\n () => leafColumns.filter((c) => !popInColumnIds.has(c.id)),\n [leafColumns, popInColumnIds],\n );\n\n /* grid-template-columns aus den Spalten-Breiten (mit Resizing/min/max).\n * EINZIGE Quelle der Wahrheit für die Grid-Tracks. Enthält in dieser Reihenfolge:\n * [Highlight-Band-Track?] · gerenderte Daten-/Select-Spalten · [Navigations-Track?]\n * Header, Datenzeilen, Spacer, Group-/Empty-/SubComponent-Zeilen müssen exakt\n * diese Track-Zahl spannen (totalColumnCount), damit nichts verrutscht. */\n const gridTemplate = useMemo(() => {\n const tracks = renderedLeafColumns.map((c) => {\n const meta = c.columnDef.meta;\n const sized = columnSizing[c.id];\n if (enableColumnResizing && sized) return `${sized}px`;\n const base = meta?.width ?? \"1fr\";\n // scaleWidthMode \"grow\": Spalten füllen verfügbaren Platz (min..1fr).\n if (scaleWidthMode === \"grow\" && !meta?.isSelect) {\n const min = meta?.minWidth ? `${meta.minWidth}px` : base.includes(\"px\") ? base : \"120px\";\n return `minmax(${min}, 1fr)`;\n }\n if (meta?.minWidth || meta?.maxWidth) {\n const min = meta.minWidth ? `${meta.minWidth}px` : \"0\";\n const max = meta.maxWidth ? `${meta.maxWidth}px` : base;\n return `minmax(${min}, ${max})`;\n }\n return base;\n });\n // Highlight-Band als eigener, schmaler führender Track (linkes Farbband).\n if (withRowHighlight) tracks.unshift(HIGHLIGHT_TRACK);\n // Navigations-Pfeil als eigener nachgestellter Track.\n if (withNavigationHighlight) tracks.push(NAV_TRACK);\n return tracks.join(\" \");\n }, [renderedLeafColumns, columnSizing, enableColumnResizing, scaleWidthMode, withRowHighlight, withNavigationHighlight]);\n\n /* Gesamtzahl der Grid-Tracks — maßgeblich für ALLE volle-Breite-Spannen\n * (Spacer, Group-Row, Empty-Row, SubComponent, Busy/Empty). */\n const totalColumnCount =\n renderedLeafColumns.length + (withRowHighlight ? 1 : 0) + (withNavigationHighlight ? 1 : 0);\n\n /* Virtualisierung (vertikal). */\n const scrollRef = useRef<HTMLDivElement>(null);\n\n /* Auto-Resize: misst die breiteste sichtbare Zelle einer Spalte und setzt\n * die Spaltenbreite entsprechend (Doppelklick auf den Resizer, B6). */\n const handleAutoResize = useCallback(\n (columnId: string) => {\n const grid = scrollRef.current;\n if (!grid) return;\n const colIdx = table.getVisibleLeafColumns().findIndex((c) => c.id === columnId);\n if (colIdx < 0) return;\n const headerCell = grid.querySelector<HTMLElement>(\n `.prn-th:nth-of-type(${colIdx + 1})`,\n );\n const bodyCells = grid.querySelectorAll<HTMLElement>(`[data-colidx=\"${colIdx}\"]`);\n let max = 0;\n const consider = (el: HTMLElement | null) => {\n if (!el) return;\n const w = Math.max(el.scrollWidth, el.getBoundingClientRect().width);\n if (w > max) max = w;\n };\n consider(headerCell);\n bodyCells.forEach((c) => consider(c));\n // Mindestbreite respektieren + kleiner Innenabstand.\n const col = table.getColumn(columnId);\n const minSize = col?.columnDef.minSize ?? 60;\n const width = Math.max(minSize, Math.round(max) + 16);\n setColumnSizing((prev) => ({ ...prev, [columnId]: width }));\n onAutoResize?.({ columnId, width });\n },\n [table, onAutoResize],\n );\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => rowHeight,\n overscan: overscanCount,\n });\n const virtualRows = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n\n const paddingTop = virtualRows.length > 0 ? virtualRows[0]!.start : 0;\n const paddingBottom =\n virtualRows.length > 0 ? totalSize - virtualRows[virtualRows.length - 1]!.end : 0;\n\n /* Logische (ARIA-/Keyboard-)Spaltenzahl: tatsächlich gerenderte Daten-/Select-\n * Zellen. Das dekorative Highlight-Band zählt hier NICHT mit (aria-hidden). */\n const colCount = renderedLeafColumns.length;\n\n /* Höhe aus visibleRows ableiten. */\n const computedMaxHeight = useMemo<number | string>(() => {\n if (visibleRows && visibleRowCountMode !== \"auto\") {\n return visibleRows * rowHeight;\n }\n return typeof maxHeight === \"number\" ? maxHeight : maxHeight;\n }, [visibleRows, visibleRowCountMode, rowHeight, maxHeight]);\n\n /* Leerzeilen (minRows / autoWithEmptyRows). */\n const emptyRowCount = useMemo(() => {\n if (loadingActive || rows.length === 0) return 0;\n const target =\n visibleRowCountMode === \"autoWithEmptyRows\"\n ? visibleRows ?? 0\n : minRows ?? 0;\n return Math.max(0, target - rows.length);\n }, [loadingActive, rows.length, visibleRowCountMode, visibleRows, minRows]);\n\n /* Scroll-Handler: onTableScroll + Infinite Scroll. */\n const loadMoreLockRef = useRef(false);\n const handleScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n onTableScroll?.({ scrollTop: el.scrollTop, scrollLeft: el.scrollLeft });\n if (infiniteScroll && onLoadMore) {\n const remaining = el.scrollHeight - el.scrollTop - el.clientHeight;\n if (remaining <= infiniteScrollThreshold) {\n if (!loadMoreLockRef.current) {\n loadMoreLockRef.current = true;\n onLoadMore();\n }\n } else {\n loadMoreLockRef.current = false;\n }\n }\n }, [onTableScroll, infiniteScroll, onLoadMore, infiniteScrollThreshold]);\n\n /* Grid-Tastaturnavigation: aktive Zelle (rovendes tabindex). */\n const [activeCell, setActiveCell] = useState<{ r: number; c: number }>({ r: 0, c: 0 });\n const navColumnCount = colCount + (withNavigationHighlight ? 1 : 0);\n\n /* Roving-Tabindex robust gegen Virtualisierung: Liegt die aktive Zeile außerhalb\n * des gerenderten Bereichs (z. B. weit weggescrollt), bekommt stattdessen die\n * erste gerenderte Zeile den tabindex=0 – der Grid-Body bleibt so immer per Tab\n * fokussierbar. */\n const renderedFirstIndex = virtualRows.length > 0 ? virtualRows[0]!.index : 0;\n const renderedLastIndex =\n virtualRows.length > 0 ? virtualRows[virtualRows.length - 1]!.index : 0;\n const activeRowRendered =\n activeCell.r >= renderedFirstIndex && activeCell.r <= renderedLastIndex;\n const tabbableRow = activeRowRendered ? activeCell.r : renderedFirstIndex;\n const onGridKeyDown = useCallback(\n (e: ReactKeyboardEvent<HTMLDivElement>) => {\n const key = e.key;\n if (![\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(key)) return;\n e.preventDefault();\n setActiveCell((prev) => {\n let { r, c } = prev;\n if (key === \"ArrowUp\") r = Math.max(0, r - 1);\n else if (key === \"ArrowDown\") r = Math.min(rows.length - 1, r + 1);\n else if (key === \"ArrowLeft\") c = Math.max(0, c - 1);\n else if (key === \"ArrowRight\") c = Math.min(navColumnCount - 1, c + 1);\n else if (key === \"Home\") c = 0;\n else if (key === \"End\") c = navColumnCount - 1;\n const target = scrollRef.current?.querySelector<HTMLElement>(\n `[data-rowidx=\"${r}\"][data-colidx=\"${c}\"]`,\n );\n target?.focus();\n return { r, c };\n });\n },\n [rows.length, navColumnCount],\n );\n\n /* Leerzustand-Grund: gefiltert vs. leer. */\n const hasActiveFilters = columnFilters.length > 0 || (globalFilterValue ?? \"\") !== \"\";\n const noDataReason: NoDataReason =\n data.length > 0 && hasActiveFilters ? \"filtered\" : \"empty\";\n\n /* Verzögertes Loading. */\n const [showLoading, setShowLoading] = useState(loadingActive && loadingDelay === 0);\n useEffect(() => {\n if (!loadingActive) {\n setShowLoading(false);\n return;\n }\n if (loadingDelay === 0) {\n setShowLoading(true);\n return;\n }\n const t = setTimeout(() => setShowLoading(true), loadingDelay);\n return () => clearTimeout(t);\n }, [loadingActive, loadingDelay]);\n\n const titleId = accessibleNameRef ?? (header ? \"prn-table-title\" : undefined);\n const computedAriaLabel = ariaLabel ?? accessibleName;\n\n const showSkeleton = showLoading && !alwaysShowBusyIndicator && !showOverlay;\n const showBusy = showLoading && alwaysShowBusyIndicator && !showOverlay;\n\n return (\n <div className={cx(\"prn-table\", className)} ref={containerRef}>\n {header && (\n <div id={titleId} className=\"prn-table-title\" role=\"heading\" aria-level={2}>\n {header}\n </div>\n )}\n {extension && <div className=\"prn-table-extension\">{extension}</div>}\n {(enableGrouping || enablePersonalization) && (\n <div className={cx(\"prn-table-toolbar\", glass && \"prn-glass prn-glass-bar\")}>\n {enableGrouping && <GroupBar table={table} columns={columns} />}\n {enablePersonalization && (\n <ColumnMenu table={table} columns={columns} onColumnsReorder={onColumnsReorder} />\n )}\n </div>\n )}\n <div className=\"prn-table-viewport-wrap\">\n <div\n ref={scrollRef}\n className=\"prn-table-scroll\"\n onScroll={handleScroll}\n style={{ maxHeight: typeof computedMaxHeight === \"number\" ? `${computedMaxHeight}px` : computedMaxHeight }}\n >\n <div\n role=\"grid\"\n aria-label={computedAriaLabel}\n aria-labelledby={titleId && !computedAriaLabel ? titleId : undefined}\n aria-rowcount={rows.length + 1}\n aria-colcount={navColumnCount}\n aria-busy={showBusy || undefined}\n className={cx(\n \"prn-table-grid\",\n alternateRowColor && \"prn-table-zebra\",\n withRowHighlight && \"prn-table-has-highlight\",\n )}\n style={{ gridTemplateColumns: gridTemplate }}\n onKeyDown={onGridKeyDown}\n >\n {/* ---- Kopf ---- */}\n <div role=\"row\" aria-rowindex={1} className=\"prn-table-head\">\n {/* Führender Platzhalter für das Highlight-Band — hält den Header\n * mit den Datenzeilen (die das Band als erste Zelle rendern) auf\n * derselben Track-Spur. aria-hidden, da rein dekorativ. */}\n {withRowHighlight && (\n <div className=\"prn-th prn-th-highlight\" aria-hidden />\n )}\n {table.getHeaderGroups().map((hg) =>\n hg.headers.map((header2, hIdx) => {\n const meta = header2.column.columnDef.meta;\n const canSort = header2.column.getCanSort();\n const sorted = header2.column.getIsSorted();\n const sortIndex = header2.column.getSortIndex();\n const canFilter = header2.column.getCanFilter();\n const canResize = header2.column.getCanResize();\n const canReorder =\n enableColumnReorder &&\n header2.column.id !== SELECT_COL_ID &&\n !columns.find(\n (c) => (c.id ?? c.accessorKey ?? String(c.header)) === header2.column.id,\n )?.disableDragAndDrop;\n const pin = pinStyle(header2.column);\n const popinHidden = popInColumnIds.has(header2.column.id);\n if (popinHidden) return null;\n return (\n <div\n key={header2.id}\n role=\"columnheader\"\n aria-colindex={hIdx + 1}\n className={cx(\"prn-th\", meta?.isSelect && \"prn-th-select\")}\n data-align={meta?.align}\n data-pinned={pin.pinned}\n style={\n headerRowHeight !== undefined\n ? { ...pin.style, minHeight: `${headerRowHeight}px`, height: `${headerRowHeight}px` }\n : pin.style\n }\n title={meta?.headerTooltip}\n aria-label={meta?.headerLabel}\n draggable={canReorder || undefined}\n onDragStart={\n canReorder\n ? (e) => e.dataTransfer.setData(\"text/plain\", header2.column.id)\n : undefined\n }\n onDragOver={canReorder ? (e) => e.preventDefault() : undefined}\n onDrop={\n canReorder\n ? (e) => {\n e.preventDefault();\n const from = e.dataTransfer.getData(\"text/plain\");\n const to = header2.column.id;\n if (!from || from === to) return;\n const current = table.getAllLeafColumns().map((c) => c.id);\n const fromIdx = current.indexOf(from);\n const toIdx = current.indexOf(to);\n if (fromIdx < 0 || toIdx < 0) return;\n const next = [...current];\n next.splice(fromIdx, 1);\n next.splice(toIdx, 0, from);\n table.setColumnOrder(next);\n onColumnsReorder?.(next);\n }\n : undefined\n }\n data-sortable={canSort || undefined}\n data-sorted={sorted ? \"\" : undefined}\n aria-sort={\n sorted === \"asc\"\n ? \"ascending\"\n : sorted === \"desc\"\n ? \"descending\"\n : canSort\n ? \"none\"\n : undefined\n }\n tabIndex={canSort ? 0 : undefined}\n onClick={\n canSort\n ? (e) => header2.column.toggleSorting(undefined, enableMultiSort && e.shiftKey)\n : undefined\n }\n onKeyDown={\n canSort\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n header2.column.toggleSorting(undefined, enableMultiSort && e.shiftKey);\n }\n }\n : undefined\n }\n >\n {!header2.isPlaceholder &&\n flexRender(header2.column.columnDef.header, header2.getContext())}\n {canSort && (\n <span className=\"prn-th-sort\" data-active={sorted ? \"\" : undefined} aria-hidden>\n {sorted === \"desc\" ? \"▾\" : \"▴\"}\n {enableMultiSort && sortIndex >= 0 && sorting.length > 1 && (\n <sup className=\"prn-th-sortidx\">{sortIndex + 1}</sup>\n )}\n </span>\n )}\n {canFilter && <ColumnFilter column={header2.column} />}\n {meta?.renderHeaderPopover && (\n <HeaderPopover render={meta.renderHeaderPopover} />\n )}\n {canResize && (\n <span\n className=\"prn-th-resizer\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Spaltenbreite ändern\"\n onMouseDown={header2.getResizeHandler()}\n onTouchStart={header2.getResizeHandler()}\n onClick={(e) => e.stopPropagation()}\n onDoubleClick={\n meta?.autoResizable\n ? (e) => {\n e.stopPropagation();\n handleAutoResize(header2.column.id);\n }\n : undefined\n }\n data-autoresizable={meta?.autoResizable ? \"\" : undefined}\n data-resizing={header2.column.getIsResizing() ? \"\" : undefined}\n />\n )}\n </div>\n );\n }),\n )}\n {withNavigationHighlight && (\n <div role=\"columnheader\" aria-colindex={navColumnCount} className=\"prn-th prn-th-nav\" aria-label=\"Navigation\" />\n )}\n </div>\n\n {/* ---- Körper ---- */}\n {showSkeleton ? (\n <SkeletonRows\n count={skeletonRows}\n leafColumns={leafColumns}\n popInIds={popInColumnIds}\n withRowHighlight={withRowHighlight}\n withNavigationHighlight={withNavigationHighlight}\n />\n ) : showBusy ? (\n <div className=\"prn-table-busy\" role=\"row\">\n <div className=\"prn-busy-indicator\" role=\"status\" aria-label=\"Lädt\">\n <span className=\"prn-busy-dot\" />\n <span className=\"prn-busy-dot\" />\n <span className=\"prn-busy-dot\" />\n </div>\n </div>\n ) : rows.length === 0 ? (\n <div className=\"prn-table-empty\" role=\"row\">\n {NoDataComponent ? (\n NoDataComponent({ reason: noDataReason })\n ) : (\n <>\n <div className=\"prn-table-empty-title\">{noDataText ?? emptyTitle}</div>\n {emptyDescription && <div className=\"prn-table-empty-desc\">{emptyDescription}</div>}\n </>\n )}\n </div>\n ) : (\n <>\n {paddingTop > 0 && <Spacer height={paddingTop} span={totalColumnCount} />}\n {virtualRows.map((vr) => {\n const row = rows[vr.index];\n if (!row) return null;\n if (row.getIsGrouped()) {\n return (\n <GroupRow\n key={row.id}\n row={row}\n rowIndex={vr.index}\n gridSpan={totalColumnCount}\n leafColumns={leafColumns}\n />\n );\n }\n return (\n <TableRow\n key={row.id}\n table={table}\n row={row}\n rowIndex={vr.index}\n rowAriaIndex={vr.index + 2}\n activeCell={activeCell}\n tabbableRow={tabbableRow}\n setActiveCell={setActiveCell}\n selectionMode={selectionMode}\n selectionBehavior={selectionBehavior}\n isTreeTable={isTreeTable}\n onRowAction={onRowAction}\n onRowClick={onRowClick}\n onRowContextMenu={onRowContextMenu}\n onRowSelect={onRowSelect}\n onRowExpandChange={onRowExpandChange}\n withRowHighlight={withRowHighlight}\n highlightField={highlightField}\n withNavigationHighlight={withNavigationHighlight}\n markNavigatedRow={markNavigatedRow}\n navColIndex={navColumnCount}\n gridColumnCount={totalColumnCount}\n popInIds={popInColumnIds}\n columns={columns}\n renderRowSubComponent={renderRowSubComponent}\n subComponentsBehavior={subComponentsBehavior}\n />\n );\n })}\n {paddingBottom > 0 && <Spacer height={paddingBottom} span={totalColumnCount} />}\n {emptyRowCount > 0 &&\n Array.from({ length: emptyRowCount }).map((_, i) => (\n <div role=\"row\" aria-hidden className=\"prn-table-row prn-table-row-empty\" key={`empty-${i}`}>\n {Array.from({ length: totalColumnCount }).map((__, c) => (\n <div key={c} className=\"prn-td prn-td-empty\" />\n ))}\n </div>\n ))}\n </>\n )}\n </div>\n </div>\n {showOverlay && loadingActive && (\n <div className=\"prn-table-overlay\" role=\"status\" aria-label=\"Lädt\">\n <div className=\"prn-busy-indicator\">\n <span className=\"prn-busy-dot\" />\n <span className=\"prn-busy-dot\" />\n <span className=\"prn-busy-dot\" />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/* ---------------- Hilfstypen / Subkomponenten ---------------- */\n\nfunction Spacer({ height, span }: { height: number; span: number }) {\n return <div aria-hidden style={{ gridColumn: `1 / ${span + 1}`, height }} />;\n}\n\n/* Spalten-Filter-Popover im Header. */\nfunction ColumnFilter<T>({ column }: { column: Column<T, unknown> }) {\n const value = (column.getFilterValue() as string) ?? \"\";\n const renderFilter = column.columnDef.meta?.renderFilter;\n const setValue = (v: string | undefined) => column.setFilterValue(v || undefined);\n return (\n <span className=\"prn-th-filter\" onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()}>\n <DialogTrigger>\n <Button\n variant=\"plain\"\n aria-label=\"Spalte filtern\"\n className={cx(\"prn-th-filter-btn\", value && \"prn-th-filter-btn-active\")}\n >\n ⌕\n </Button>\n <Popover className=\"prn-th-filter-popover\">\n <div className=\"prn-th-filter-body\">\n {renderFilter ? (\n renderFilter({ value, setValue })\n ) : (\n <>\n <TextField\n aria-label=\"Filterwert\"\n label=\"Filtern\"\n value={value}\n onChange={(v) => setValue(v)}\n />\n {value && (\n <Button variant=\"plain\" onPress={() => column.setFilterValue(undefined)}>\n Zurücksetzen\n </Button>\n )}\n </>\n )}\n </div>\n </Popover>\n </DialogTrigger>\n </span>\n );\n}\n\n/* Freier Custom-Popover-Slot am Spaltenkopf (B1.5). */\nfunction HeaderPopover({ render }: { render: () => ReactNode }) {\n return (\n <span className=\"prn-th-popover\" onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()}>\n <DialogTrigger>\n <Button variant=\"plain\" aria-label=\"Spalteninfo\" className=\"prn-th-popover-btn\">\n ⋯\n </Button>\n <Popover className=\"prn-th-popover-content\">{render()}</Popover>\n </DialogTrigger>\n </span>\n );\n}\n\ninterface TableRowProps<T> {\n table: Table<T>;\n row: Row<T>;\n rowIndex: number;\n rowAriaIndex: number;\n activeCell: { r: number; c: number };\n tabbableRow: number;\n setActiveCell: (c: { r: number; c: number }) => void;\n selectionMode: SelectionMode;\n selectionBehavior: SelectionBehavior;\n isTreeTable: boolean;\n onRowAction?: (row: T) => void;\n onRowClick?: (info: { row: T; event: ReactMouseEvent }) => void;\n onRowContextMenu?: (info: { row: T; event: ReactMouseEvent }) => void;\n onRowSelect?: (info: { row: T; selected: boolean; selectedKeys: Set<string> }) => void;\n onRowExpandChange?: (info: { row: T; expanded: boolean }) => void;\n withRowHighlight: boolean;\n highlightField?: (row: T) => ValueState;\n withNavigationHighlight: boolean;\n markNavigatedRow?: (row: T) => boolean;\n navColIndex: number;\n /** Gesamtzahl der Grid-Tracks (für volle-Breite-Spannen, z. B. SubComponent). */\n gridColumnCount: number;\n popInIds: Set<string>;\n columns: AnalyticalColumn<T>[];\n renderRowSubComponent?: (info: { row: T }) => ReactNode;\n subComponentsBehavior: SubComponentsBehavior;\n}\n\nfunction TableRow<T>({\n table,\n row,\n rowIndex,\n rowAriaIndex,\n activeCell,\n tabbableRow,\n setActiveCell,\n selectionMode,\n selectionBehavior,\n isTreeTable,\n onRowAction,\n onRowClick,\n onRowContextMenu,\n onRowSelect,\n onRowExpandChange,\n withRowHighlight,\n highlightField,\n withNavigationHighlight,\n markNavigatedRow,\n navColIndex,\n gridColumnCount,\n popInIds,\n columns,\n renderRowSubComponent,\n subComponentsBehavior,\n}: TableRowProps<T>) {\n const [hovered, setHovered] = useState(false);\n const selectionSelectsRow =\n selectionMode !== \"none\" && (selectionBehavior === \"row\" || selectionBehavior === \"rowOnly\");\n const hasSubComponent = !!renderRowSubComponent;\n const subAlwaysVisible = hasSubComponent && subComponentsBehavior === \"visible\";\n const [subOpen, setSubOpen] = useState(subAlwaysVisible);\n const subVisible = subAlwaysVisible || subOpen;\n const interactive = !!onRowAction || !!onRowClick || selectionSelectsRow;\n\n const doSelect = () => {\n const wasSelected = row.getIsSelected();\n row.toggleSelected(!wasSelected);\n /* Autoritative Auswahl NACH dem Toggle aus dem Table-State berechnen, damit\n * onRowSelect das tatsächliche selectedKeys-Set erhält (vorher immer leer). */\n if (onRowSelect) {\n const selectedKeys = new Set<string>();\n if (selectionMode === \"single\") {\n // Single-Mode: vorherige Auswahl wird ersetzt.\n if (!wasSelected) selectedKeys.add(row.id);\n } else {\n for (const r of table.getSelectedRowModel().flatRows) selectedKeys.add(r.id);\n if (wasSelected) selectedKeys.delete(row.id);\n else selectedKeys.add(row.id);\n }\n onRowSelect({ row: row.original, selected: !wasSelected, selectedKeys });\n }\n };\n\n const handleClick = (e: ReactMouseEvent) => {\n onRowClick?.({ row: row.original, event: e });\n onRowAction?.(row.original);\n if (selectionSelectsRow) doSelect();\n };\n\n const highlight = withRowHighlight && highlightField ? highlightField(row.original) : undefined;\n const navigated = withNavigationHighlight && markNavigatedRow ? markNavigatedRow(row.original) : false;\n\n const rowElement = (\n <div\n role=\"row\"\n aria-rowindex={rowAriaIndex}\n aria-selected={selectionMode !== \"none\" ? row.getIsSelected() : undefined}\n aria-expanded={hasSubComponent && !subAlwaysVisible ? subVisible : undefined}\n data-key={row.id}\n data-zebra={rowIndex % 2 === 1 ? \"\" : undefined}\n data-highlight={highlight}\n className=\"prn-table-row\"\n data-interactive={interactive ? \"\" : undefined}\n data-selected={row.getIsSelected() ? \"\" : undefined}\n data-hovered={hovered ? \"\" : undefined}\n onMouseEnter={interactive ? () => setHovered(true) : undefined}\n onMouseLeave={interactive ? () => setHovered(false) : undefined}\n onClick={interactive ? handleClick : undefined}\n onContextMenu={\n onRowContextMenu\n ? (e) => {\n e.preventDefault();\n onRowContextMenu({ row: row.original, event: e });\n }\n : undefined\n }\n >\n {withRowHighlight && (\n <span className=\"prn-row-highlight\" data-state={highlight ?? \"none\"} aria-hidden />\n )}\n {row\n .getVisibleCells()\n /* Pop-In-Spalten werden nicht als eigene Zelle gerendert — vorher\n * herausfiltern, damit der Zell-Index lückenlos den gerenderten\n * Grid-Tracks (und data-colidx für die Tastaturnavigation) entspricht. */\n .filter((cell) => !popInIds.has(cell.column.id))\n .map((cell, cellIdx) => {\n const meta = cell.column.columnDef.meta;\n const pin = pinStyle(cell.column);\n const isTreeCell = isTreeTable && meta?.isTree;\n const canExpand = isTreeCell && row.getCanExpand();\n const isActive = activeCell.r === rowIndex && activeCell.c === cellIdx;\n // Pop-In-Inhalte in der ersten gerenderten Zelle anhängen\n const popInCells =\n cellIdx === 0 && popInIds.size > 0\n ? row.getVisibleCells().filter((c) => popInIds.has(c.column.id))\n : [];\n return (\n <div\n key={cell.id}\n role=\"gridcell\"\n aria-colindex={cellIdx + 1}\n data-rowidx={rowIndex}\n data-colidx={cellIdx}\n tabIndex={isActive ? 0 : -1}\n onFocus={() => setActiveCell({ r: rowIndex, c: cellIdx })}\n className={cx(\"prn-td\", meta?.isSelect && \"prn-td-select\")}\n data-align={meta?.align}\n data-valign={meta?.vAlign}\n data-pinned={pin.pinned}\n aria-label={meta?.cellLabel}\n style={{ ...pin.style, ...(isTreeCell ? { paddingLeft: `${row.depth * 16 + 12}px` } : null) }}\n onKeyDown={\n canExpand\n ? (e) => {\n if (e.key === \" \") {\n e.preventDefault();\n const next = !row.getIsExpanded();\n row.toggleExpanded();\n onRowExpandChange?.({ row: row.original, expanded: next });\n }\n }\n : undefined\n }\n >\n {canExpand && (\n <button\n type=\"button\"\n className=\"prn-tree-chevron\"\n aria-label={row.getIsExpanded() ? \"Zusammenklappen\" : \"Aufklappen\"}\n aria-expanded={row.getIsExpanded()}\n onClick={(e) => {\n e.stopPropagation();\n const next = !row.getIsExpanded();\n row.toggleExpanded();\n onRowExpandChange?.({ row: row.original, expanded: next });\n }}\n >\n {row.getIsExpanded() ? \"▾\" : \"▸\"}\n </button>\n )}\n {cellIdx === 0 && hasSubComponent && !subAlwaysVisible && (\n <button\n type=\"button\"\n className=\"prn-tree-chevron prn-subcomponent-toggle\"\n aria-label={subVisible ? \"Details ausblenden\" : \"Details anzeigen\"}\n aria-expanded={subVisible}\n onClick={(e) => {\n e.stopPropagation();\n setSubOpen((o) => !o);\n }}\n >\n {subVisible ? \"▾\" : \"▸\"}\n </button>\n )}\n <span className=\"prn-td-content\">\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </span>\n {popInCells.length > 0 && (\n <span className=\"prn-popin\">\n {popInCells.map((pc) => {\n const pcMeta = pc.column.columnDef.meta;\n const colDef = columns.find(\n (c) => (c.id ?? c.accessorKey ?? String(c.header)) === pc.column.id,\n );\n return (\n <span\n key={pc.id}\n className=\"prn-popin-item\"\n data-display={pcMeta?.popinDisplay ?? \"block\"}\n >\n <span className=\"prn-popin-label\">{colDef?.header}:</span>{\" \"}\n <span className=\"prn-popin-value\">\n {flexRender(pc.column.columnDef.cell, pc.getContext())}\n </span>\n </span>\n );\n })}\n </span>\n )}\n </div>\n );\n })}\n {withNavigationHighlight && (\n <div\n role=\"gridcell\"\n aria-colindex={navColIndex}\n className=\"prn-td prn-td-nav\"\n data-navigated={navigated ? \"\" : undefined}\n aria-label={navigated ? \"Navigiert\" : undefined}\n >\n <span className=\"prn-nav-arrow\" aria-hidden>›</span>\n </div>\n )}\n </div>\n );\n\n if (!hasSubComponent || !subVisible) return rowElement;\n\n return (\n <>\n {rowElement}\n <div\n role=\"row\"\n className=\"prn-table-subrow\"\n data-key={`${row.id}__sub`}\n data-subcomponent=\"\"\n >\n <div role=\"gridcell\" className=\"prn-td prn-subcomponent\" style={{ gridColumn: `1 / ${gridColumnCount + 1}` }}>\n {renderRowSubComponent!({ row: row.original })}\n </div>\n </div>\n </>\n );\n}\n\nfunction GroupBar<T>({ table, columns }: { table: Table<T>; columns: AnalyticalColumn<T>[] }) {\n const grouping = table.getState().grouping;\n const labelFor = (id: string) => {\n const col = columns.find((c) => (c.id ?? c.accessorKey ?? String(c.header)) === id);\n return col ? col.header : id;\n };\n const groupable = columns\n .filter((c) => c.groupable)\n .map((c) => ({ id: c.id ?? c.accessorKey ?? String(c.header), header: c.header }))\n .filter((c) => !grouping.includes(c.id));\n return (\n <div className=\"prn-groupbar\" role=\"toolbar\" aria-label=\"Gruppierung\">\n <span className=\"prn-groupbar-label\">Gruppiert nach:</span>\n {grouping.length === 0 && <span className=\"prn-groupbar-empty\">—</span>}\n {grouping.map((id) => (\n <span key={id} className=\"prn-group-chip\">\n <span className=\"prn-group-chip-label\">{labelFor(id)}</span>\n <button\n type=\"button\"\n className=\"prn-group-chip-remove\"\n aria-label={`${String(labelFor(id))} entfernen`}\n onClick={() => table.setGrouping((g) => g.filter((x) => x !== id))}\n >\n ×\n </button>\n </span>\n ))}\n {groupable.length > 0 && (\n <Menu trigger={<Button variant=\"plain\">+ Gruppieren</Button>}>\n {groupable.map((c) => (\n <MenuItem key={c.id} onAction={() => table.setGrouping((g) => [...g, c.id])}>\n {c.header}\n </MenuItem>\n ))}\n </Menu>\n )}\n </div>\n );\n}\n\n/* ⚙-Menü: Spalten ein-/ausblenden, umsortieren, links/rechts pinnen. */\nfunction ColumnMenu<T>({\n table,\n columns,\n onColumnsReorder,\n}: {\n table: Table<T>;\n columns: AnalyticalColumn<T>[];\n onColumnsReorder?: (order: string[]) => void;\n}) {\n const labelFor = (id: string): ReactNode => {\n const col = columns.find((c) => (c.id ?? c.accessorKey ?? String(c.header)) === id);\n return col ? col.header : id;\n };\n const leaf = table.getAllLeafColumns().filter((c) => c.id !== SELECT_COL_ID);\n const order = leaf.map((c) => c.id);\n const move = (id: string, dir: -1 | 1) => {\n const idx = order.indexOf(id);\n const next = idx + dir;\n if (next < 0 || next >= order.length) return;\n const reordered = [...order];\n [reordered[idx], reordered[next]] = [reordered[next]!, reordered[idx]!];\n table.setColumnOrder(reordered);\n onColumnsReorder?.(reordered);\n };\n return (\n <div className=\"prn-colmenu\">\n <DialogTrigger>\n <Button variant=\"plain\" aria-label=\"Spalten\">\n <Icon name=\"settings\" size={15} /> Spalten\n </Button>\n <Popover className=\"prn-colmenu-popover\">\n <ul className=\"prn-colmenu-list\" role=\"group\" aria-label=\"Spalten anpassen\">\n {leaf.map((col, i) => {\n const label = labelFor(col.id);\n const pinned = col.getIsPinned();\n return (\n <li key={col.id} className=\"prn-colmenu-row\">\n {col.getCanHide() ? (\n <Checkbox isSelected={col.getIsVisible()} onChange={() => col.toggleVisibility()}>\n {label}\n </Checkbox>\n ) : (\n <span className=\"prn-colmenu-label\">{label}</span>\n )}\n <span className=\"prn-colmenu-actions\">\n <button\n type=\"button\"\n className=\"prn-colmenu-btn\"\n aria-label={`${String(label)} nach oben`}\n disabled={i === 0}\n onClick={() => move(col.id, -1)}\n >\n ↑\n </button>\n <button\n type=\"button\"\n className=\"prn-colmenu-btn\"\n aria-label={`${String(label)} nach unten`}\n disabled={i === leaf.length - 1}\n onClick={() => move(col.id, 1)}\n >\n ↓\n </button>\n {col.getCanPin() && (\n <>\n <button\n type=\"button\"\n className=\"prn-colmenu-btn\"\n aria-label={`${String(label)} links pinnen`}\n data-active={pinned === \"left\" ? \"\" : undefined}\n onClick={() => col.pin(pinned === \"left\" ? false : \"left\")}\n >\n ⇤\n </button>\n <button\n type=\"button\"\n className=\"prn-colmenu-btn\"\n aria-label={`${String(label)} rechts pinnen`}\n data-active={pinned === \"right\" ? \"\" : undefined}\n onClick={() => col.pin(pinned === \"right\" ? false : \"right\")}\n >\n ⇥\n </button>\n </>\n )}\n </span>\n </li>\n );\n })}\n </ul>\n </Popover>\n </DialogTrigger>\n </div>\n );\n}\n\nfunction GroupRow<T>({\n row,\n rowIndex,\n gridSpan,\n leafColumns,\n}: {\n row: Row<T>;\n rowIndex: number;\n gridSpan: number;\n leafColumns: Column<T, unknown>[];\n}) {\n const expanded = row.getIsExpanded();\n const groupingColumnId = row.groupingColumnId ?? \"\";\n return (\n <div\n role=\"row\"\n aria-rowindex={rowIndex + 2}\n aria-expanded={expanded}\n data-group=\"\"\n data-depth={row.depth}\n data-index={rowIndex}\n className=\"prn-table-group\"\n tabIndex={0}\n onClick={() => row.toggleExpanded()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n row.toggleExpanded();\n }\n }}\n style={{ gridColumn: `1 / ${gridSpan + 1}`, paddingLeft: `${row.depth * 16 + 12}px` }}\n >\n <span className=\"prn-group-chevron\" aria-hidden>\n {expanded ? \"▾\" : \"▸\"}\n </span>\n <span className=\"prn-group-label\">{String(row.getGroupingValue(groupingColumnId))}</span>\n <span className=\"prn-group-count\">({row.subRows.length})</span>\n <span className=\"prn-group-aggs\">\n {leafColumns\n .filter((c) => c.columnDef.aggregatedCell && c.id !== groupingColumnId)\n .map((c) => {\n const cell = row.getAllCells().find((cl) => cl.column.id === c.id);\n return cell ? (\n <span key={c.id} className=\"prn-group-agg\">\n {flexRender(c.columnDef.aggregatedCell, cell.getContext())}\n </span>\n ) : null;\n })}\n </span>\n </div>\n );\n}\n\nfunction SkeletonRows<T>({\n count,\n leafColumns,\n popInIds,\n withRowHighlight,\n withNavigationHighlight,\n}: {\n count: number;\n leafColumns: Column<T, unknown>[];\n popInIds: Set<string>;\n withRowHighlight: boolean;\n withNavigationHighlight: boolean;\n}) {\n return (\n <>\n {Array.from({ length: count }).map((_, r) => (\n <div role=\"row\" className=\"prn-table-row\" key={`skel-${r}`} aria-hidden>\n {/* Highlight-Band-Track konsistent zu den echten Zeilen halten. */}\n {withRowHighlight && <span className=\"prn-row-highlight\" data-state=\"none\" aria-hidden />}\n {leafColumns\n .filter((c) => !popInIds.has(c.id))\n .map((c) => {\n const meta = c.columnDef.meta;\n return (\n <div\n key={c.id}\n className={cx(\"prn-td\", meta?.isSelect && \"prn-td-select\")}\n data-align={meta?.align}\n >\n <span className=\"prn-skeleton prn-skel-line\" />\n </div>\n );\n })}\n {/* Navigations-Track-Platzhalter. */}\n {withNavigationHighlight && <div className=\"prn-td prn-td-nav\" />}\n </div>\n ))}\n </>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { DialogTrigger, Button as RACButton } from \"react-aria-components\";\nimport { Button } from \"../primitives/forms\";\nimport { Popover } from \"../primitives/overlays\";\nimport { cx } from \"../utils\";\nimport \"./data.css\";\n\n/* ---------------- FilterField ----------------\n * Label + frei wählbarer Control-Slot (z. B. <Select>, <TextField>, <SearchField>).\n * Domänenfrei — der Konsument liefert das eigentliche Control als children. */\n\nexport interface FilterFieldProps {\n /** Sichtbares Label über dem Control. */\n label?: ReactNode;\n /** Das Eingabe-Control (Select, TextField, …). */\n children: ReactNode;\n className?: string;\n}\n\nexport function FilterField({ label, children, className }: FilterFieldProps) {\n return (\n <div className={cx(\"prn-filter-field\", className)}>\n {label && <span className=\"prn-filter-field-label\">{label}</span>}\n <div className=\"prn-filter-field-control\">{children}</div>\n </div>\n );\n}\n\n/* ---------------- aktive-Filter-Chips ---------------- */\n\nexport interface ActiveFilter {\n /** Stabile ID des Filters (z. B. Feldname). */\n id: string;\n /** Label, z. B. \"Sparte\". */\n label?: ReactNode;\n /** Aktiver Wert, z. B. \"Strom\". */\n value: ReactNode;\n}\n\n/* ---------------- FilterBar ---------------- */\n\nexport interface FilterBarProps {\n /** Direkt sichtbare Filter-Felder (`FilterField`). */\n children: ReactNode;\n /** In den \"Mehr Filter\"-Überlauf ausgelagerte Felder. */\n moreFields?: ReactNode;\n /** Beschriftung des Überlauf-Buttons. */\n moreLabel?: ReactNode;\n /** Aktuell aktive Filter → werden als Chips gezeigt. */\n activeFilters?: ActiveFilter[];\n /** Einzelnen Filter entfernen (X am Chip). */\n onRemoveFilter?: (id: string) => void;\n /** Alle Filter zurücksetzen (\"Zurücksetzen\"-Aktion, nur bei aktiven Filtern). */\n onClearAll?: () => void;\n /** Zusätzliche Aktionen rechts (z. B. \"Anwenden\", Suche). */\n actions?: ReactNode;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport function FilterBar({\n children,\n moreFields,\n moreLabel = \"Mehr Filter\",\n activeFilters,\n onRemoveFilter,\n onClearAll,\n actions,\n className,\n \"aria-label\": ariaLabel = \"Filter\",\n}: FilterBarProps) {\n const hasActive = !!activeFilters && activeFilters.length > 0;\n\n return (\n <div className={cx(\"prn-filterbar\", className)} role=\"search\" aria-label={ariaLabel}>\n <div className=\"prn-filterbar-row\">\n {children}\n\n {moreFields && (\n <FilterField label={\" \"}>\n <DialogTrigger>\n <Button variant=\"tinted\">{moreLabel}</Button>\n <Popover placement=\"bottom start\">\n <div className=\"prn-filter-more\">{moreFields}</div>\n </Popover>\n </DialogTrigger>\n </FilterField>\n )}\n\n {actions && (\n <>\n <span className=\"prn-filterbar-spacer\" />\n <div className=\"prn-filterbar-actions\">{actions}</div>\n </>\n )}\n </div>\n\n {hasActive && (\n <div className=\"prn-filter-chips\" aria-label=\"Aktive Filter\">\n {activeFilters!.map((f) => (\n <span key={f.id} className=\"prn-filter-chip\">\n {f.label && <span className=\"prn-filter-chip-label\">{f.label}:</span>}\n <span className=\"prn-filter-chip-value\">{f.value}</span>\n {onRemoveFilter && (\n <RACButton\n className=\"prn-filter-chip-remove\"\n aria-label=\"Filter entfernen\"\n onPress={() => onRemoveFilter(f.id)}\n >\n <span aria-hidden>×</span>\n </RACButton>\n )}\n </span>\n ))}\n {onClearAll && (\n <RACButton className=\"prn-filter-clear\" onPress={onClearAll}>\n Zurücksetzen\n </RACButton>\n )}\n </div>\n )}\n </div>\n );\n}\n","import {\n Children,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cx } from \"../utils\";\nimport { Icon } from \"../icons/icons\";\nimport \"./data.css\";\nimport \"./objectpage.css\";\n\n/* =================================================================\n * ObjectPage — SAP-UI5-äquivalenter Floorplan\n *\n * Kanonisches Modell: Kompositions-API über <ObjectPageSection> /\n * <ObjectPageSubSection> als children. Das alte deklarative\n * `sections`-Array bleibt als Adapter erhalten (Rückwärtskompat.).\n * ================================================================= */\n\n/* ---------------- Status-Badge (eigenständig) ---------------- */\n\nexport type StatusTone = \"positive\" | \"critical\" | \"negative\" | \"info\" | \"neutral\";\n\nexport interface StatusBadge {\n label: ReactNode;\n tone?: StatusTone;\n}\n\n/* ---------------- KPI ---------------- */\n\nexport interface ObjectPageKpi {\n label: ReactNode;\n value: ReactNode;\n /** Färbt den Wert (z. B. positive/negative Kennzahl). */\n tone?: \"positive\" | \"critical\" | \"negative\";\n}\n\n/* ---------------- Feld / Sektion (Legacy-Adapter) ---------------- */\n\nexport interface ObjectField {\n label: ReactNode;\n value: ReactNode;\n /** Zahl-Wert → tabular-nums + rechtsbündige Ziffern. */\n numeric?: boolean;\n}\n\nexport interface ObjectSection {\n title?: ReactNode;\n fields: ObjectField[];\n}\n\n/* =================================================================\n * A1 — Kompositions-Subkomponenten\n * ================================================================= */\n\nexport type ObjectPageMode = \"default\" | \"iconTabBar\";\n\n/** Heading-Level → aria-level / Tag. */\nexport type TitleTextLevel = \"H1\" | \"H2\" | \"H3\" | \"H4\" | \"H5\" | \"H6\";\n\nexport interface ObjectPageSectionProps {\n /** Eindeutige ID — Anker-Ziel & Selektions-Schlüssel. (Pflicht) */\n id: string;\n /** Sichtbarer Titel der Sektion. (Pflicht) */\n titleText: string;\n children?: ReactNode;\n /** Titel ausblenden (Anchor-Bar nutzt weiterhin titleText). */\n hideTitleText?: boolean;\n /** Titel in Großbuchstaben darstellen. */\n titleTextUppercase?: boolean;\n /** Langen Titel umbrechen statt kürzen. */\n wrapTitleText?: boolean;\n /** Überschriften-Level (H1..H6) → aria-level + Tag. Default H3. */\n titleTextLevel?: TitleTextLevel;\n /** Custom-Header-Inhalt rechts neben dem Titel. */\n header?: ReactNode;\n className?: string;\n}\n\n/**\n * Top-Level-Informationscontainer. Wird ausschließlich als child der\n * ObjectPage gerendert; standalone ist es ein neutraler Container.\n */\nexport function ObjectPageSection(props: ObjectPageSectionProps) {\n const { id, titleText, children, hideTitleText, titleTextUppercase, wrapTitleText, titleTextLevel = \"H3\", header, className } =\n props;\n const level = levelToAria(titleTextLevel);\n return (\n <section\n className={cx(\"prn-op-section\", className)}\n data-section-id={id}\n role=\"region\"\n aria-label={titleText}\n >\n {!hideTitleText && (\n <div className=\"prn-op-section-head\">\n <div\n role=\"heading\"\n aria-level={level}\n className=\"prn-op-section-title\"\n data-uppercase={titleTextUppercase ? \"\" : undefined}\n data-wrap={wrapTitleText ? \"\" : undefined}\n >\n {titleText}\n </div>\n {header && <div className=\"prn-op-section-header-content\">{header}</div>}\n </div>\n )}\n <div className=\"prn-op-section-body\">{children}</div>\n </section>\n );\n}\n\nexport interface ObjectPageSubSectionProps {\n /** Eindeutige ID. (Pflicht) */\n id: string;\n /** Sichtbarer Titel. (Pflicht) */\n titleText: string;\n children?: ReactNode;\n /** Aktionen rechts im SubSection-Kopf. */\n actions?: ReactNode;\n /** Titel ausblenden. */\n hideTitleText?: boolean;\n className?: string;\n}\n\n/** Zweite Ebene innerhalb einer Section. */\nexport function ObjectPageSubSection(props: ObjectPageSubSectionProps) {\n const { id, titleText, children, actions, hideTitleText, className } = props;\n return (\n <div className={cx(\"prn-op-subsection\", className)} data-subsection-id={id} role=\"group\" aria-label={titleText}>\n {!hideTitleText && (\n <div className=\"prn-op-subsection-head\">\n <div role=\"heading\" aria-level={4} className=\"prn-op-subsection-title\">\n {titleText}\n </div>\n {actions && <div className=\"prn-op-subsection-actions\">{actions}</div>}\n </div>\n )}\n <div className=\"prn-op-subsection-body\">{children}</div>\n </div>\n );\n}\n\nfunction levelToAria(level: TitleTextLevel): number {\n return Number(level.slice(1));\n}\n\n/* =================================================================\n * A6 — Accessibility-Attribute\n * ================================================================= */\n\nexport interface ObjectPageAccessibilityAttributes {\n objectPageTopHeader?: { role?: string; \"aria-label\"?: string };\n objectPageAnchorBar?: { role?: string; \"aria-label\"?: string };\n objectPageFooterActions?: { role?: string; \"aria-label\"?: string };\n}\n\n/* =================================================================\n * Imperative API (A2)\n * ================================================================= */\n\nexport interface ObjectPageHandle {\n /** Snappt/entsnappt den Header. Ohne Argument: Toggle. */\n toggleHeaderArea: (snapped?: boolean) => void;\n}\n\n/* =================================================================\n * Navigations-Event (A1)\n * ================================================================= */\n\nexport interface SelectedSectionChangeDetail {\n selectedSectionIndex: number;\n selectedSectionId: string;\n}\n\nexport interface BeforeNavigateDetail {\n sectionId: string;\n sectionIndex: number;\n /** Bricht die Navigation ab. */\n preventDefault: () => void;\n}\n\n/* =================================================================\n * ObjectPage\n * ================================================================= */\n\nexport interface ObjectPageProps {\n /* --- A3 Title-Bereich --- */\n title: ReactNode;\n subtitle?: ReactNode;\n /** Status-Badge rechts im Kopf. */\n status?: StatusBadge;\n /** KPI-Reihe im Title-Bereich. */\n kpis?: ObjectPageKpi[];\n /** Aktionen rechts im Kopf (actionsBar). */\n actions?: ReactNode;\n /** Breadcrumb-Slot über dem Titel. */\n breadcrumbs?: ReactNode;\n /** Frei komponierbarer Kopf-/Unterkopf (überschreibt title/subtitle, wenn gesetzt). */\n header?: ReactNode;\n subHeader?: ReactNode;\n /** Alternative Darstellung im kollabierten (snapped) Zustand. */\n snappedHeader?: ReactNode;\n snappedSubHeader?: ReactNode;\n /** Inhalt nur im expandierten bzw. nur im snapped Zustand. */\n expandedContent?: ReactNode;\n snappedContent?: ReactNode;\n /** Aktionsleiste (Alias zu actions; actions hat Vorrang). */\n actionsBar?: ReactNode;\n /** Navigations-Aktionen, responsiv positioniert. */\n navigationBar?: ReactNode;\n /** „Liquid Glass\"-Optik auf der Title-/Top-Header-Leiste (transluzent + Blur). */\n glass?: boolean;\n\n /* --- A2 Header-Area / Snapping --- */\n /** Expandierbarer Header-Content unter dem Title. */\n headerArea?: ReactNode;\n /** Header fixiert (nicht kollabierbar beim Scrollen). */\n headerPinned?: boolean;\n /** Pin-Button ausblenden. */\n hidePinButton?: boolean;\n /** Klick auf Title togglet den Header nicht. */\n preserveHeaderStateOnClick?: boolean;\n onToggleHeaderArea?: (visible: boolean) => void;\n onPinButtonToggle?: (pinned: boolean) => void;\n\n /* --- A4 Medien / Footer / Platzhalter --- */\n /** Bild/Avatar im Kopf — URL-String oder beliebiger Node. */\n image?: string | ReactNode;\n /** Bild rund darstellen. */\n imageShapeCircle?: boolean;\n /** Schwebende Footer-Aktionsleiste. */\n footerArea?: ReactNode;\n /** Ersetzt den gesamten Inhalt (z. B. „nicht ladbar\"). */\n placeholder?: ReactNode;\n\n /* --- A1 Navigation --- */\n /** `default` = alle Sektionen scrollbar, `iconTabBar` = nur aktive sichtbar. */\n mode?: ObjectPageMode;\n /** Controlled aktive Sektion. */\n selectedSectionId?: string;\n /** Controlled aktive SubSection (nur Markierung). */\n selectedSubSectionId?: string;\n onSelectedSectionChange?: (detail: SelectedSectionChangeDetail) => void;\n /** Cancelable vor jeder Navigation. */\n onBeforeNavigate?: (detail: BeforeNavigateDetail) => void;\n\n /* --- A6 / Sonstiges --- */\n accessibilityAttributes?: ObjectPageAccessibilityAttributes;\n\n /** Detail-Sektionen (Legacy-Adapter → ObjectPageSection). */\n sections?: ObjectSection[];\n /** Kompositions-children (ObjectPageSection-Elemente) bzw. freier Inhalt. */\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\ninterface NormalizedSection {\n id: string;\n titleText: string;\n node: ReactNode;\n}\n\nexport const ObjectPage = forwardRef<ObjectPageHandle, ObjectPageProps>(function ObjectPage(props, ref) {\n const {\n title,\n subtitle,\n status,\n kpis,\n actions,\n breadcrumbs,\n header,\n subHeader,\n snappedHeader,\n snappedSubHeader,\n expandedContent,\n snappedContent,\n actionsBar,\n navigationBar,\n headerArea,\n headerPinned,\n hidePinButton,\n preserveHeaderStateOnClick,\n onToggleHeaderArea,\n onPinButtonToggle,\n image,\n imageShapeCircle,\n footerArea,\n placeholder,\n mode = \"default\",\n selectedSectionId,\n selectedSubSectionId,\n onSelectedSectionChange,\n onBeforeNavigate,\n accessibilityAttributes,\n sections,\n children,\n glass,\n className,\n style,\n } = props;\n\n const reactId = useId();\n\n /* ---- Sektionen normalisieren: Komposition + Legacy-Adapter ---- */\n const normalizedSections = useMemo<NormalizedSection[]>(() => {\n const out: NormalizedSection[] = [];\n\n // 1) Kompositions-children (ObjectPageSection-Elemente)\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === ObjectPageSection) {\n const p = (child as ReactElement<ObjectPageSectionProps>).props;\n out.push({ id: p.id, titleText: p.titleText, node: child });\n }\n });\n\n // 2) Legacy `sections`-Array → ObjectPageSection-Adapter\n if (sections && sections.length > 0) {\n sections.forEach((section, i) => {\n const id = `legacy-section-${i}`;\n const titleText = typeof section.title === \"string\" ? section.title : `Abschnitt ${i + 1}`;\n out.push({\n id,\n titleText,\n node: (\n <ObjectPageSection key={id} id={id} titleText={titleText} hideTitleText={section.title == null}>\n <dl className=\"prn-field-grid\">\n {section.fields.map((field, j) => (\n <div className=\"prn-field-row\" key={j}>\n <dt className=\"prn-field-key\">{field.label}</dt>\n <dd className=\"prn-field-val\" data-numeric={field.numeric ? \"\" : undefined}>\n {field.value}\n </dd>\n </div>\n ))}\n </dl>\n </ObjectPageSection>\n ),\n });\n });\n }\n\n return out;\n }, [children, sections]);\n\n /* ---- Freier (Nicht-Section-)Inhalt aus children ---- */\n const freeChildren = useMemo(() => {\n const out: ReactNode[] = [];\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === ObjectPageSection) return;\n out.push(child);\n });\n return out;\n }, [children]);\n\n const hasAnchorBar = normalizedSections.length > 1;\n\n /* ---- A1: Selection-State (controlled/uncontrolled) ---- */\n const [internalActiveId, setInternalActiveId] = useState<string | undefined>(\n selectedSectionId ?? normalizedSections[0]?.id,\n );\n const activeId = selectedSectionId ?? internalActiveId ?? normalizedSections[0]?.id;\n\n // Selektion stabil halten, wenn sich Sektionen ändern.\n useEffect(() => {\n if (selectedSectionId != null) return;\n if (!normalizedSections.some((s) => s.id === internalActiveId)) {\n setInternalActiveId(normalizedSections[0]?.id);\n }\n }, [normalizedSections, internalActiveId, selectedSectionId]);\n\n const scrollRef = useRef<HTMLDivElement>(null);\n const sectionRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n const registerSection = useCallback((id: string, el: HTMLDivElement | null) => {\n if (el) sectionRefs.current.set(id, el);\n else sectionRefs.current.delete(id);\n }, []);\n\n /* ---- Navigation auslösen (mit onBeforeNavigate-Guard) ---- */\n const navigateTo = useCallback(\n (id: string, opts: { scroll?: boolean } = { scroll: true }) => {\n const index = normalizedSections.findIndex((s) => s.id === id);\n if (index < 0) return;\n\n let cancelled = false;\n onBeforeNavigate?.({\n sectionId: id,\n sectionIndex: index,\n preventDefault: () => {\n cancelled = true;\n },\n });\n if (cancelled) return;\n\n if (selectedSectionId == null) setInternalActiveId(id);\n onSelectedSectionChange?.({ selectedSectionIndex: index, selectedSectionId: id });\n\n if (opts.scroll && mode === \"default\") {\n const el = sectionRefs.current.get(id);\n el?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n },\n [normalizedSections, onBeforeNavigate, onSelectedSectionChange, selectedSectionId, mode],\n );\n\n /* ---- A1: Scroll-Spy via IntersectionObserver (nur default-mode) ---- */\n useEffect(() => {\n if (mode !== \"default\" || !hasAnchorBar) return;\n if (typeof IntersectionObserver === \"undefined\") return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n // wähle den am stärksten sichtbaren Eintrag\n const visible = entries\n .filter((e) => e.isIntersecting)\n .sort((a, b) => b.intersectionRatio - a.intersectionRatio);\n const top = visible[0];\n if (!top) return;\n const id = (top.target as HTMLElement).dataset.sectionAnchor;\n if (id && id !== activeId && selectedSectionId == null) {\n setInternalActiveId(id);\n const index = normalizedSections.findIndex((s) => s.id === id);\n onSelectedSectionChange?.({ selectedSectionIndex: index, selectedSectionId: id });\n }\n },\n { root: scrollRef.current, threshold: [0.1, 0.5, 0.9], rootMargin: \"0px 0px -55% 0px\" },\n );\n\n sectionRefs.current.forEach((el) => observer.observe(el));\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, hasAnchorBar, normalizedSections, selectedSectionId, onSelectedSectionChange]);\n\n /* ---- A2: Snapping-Header-State ---- */\n const [snapped, setSnapped] = useState(false);\n const [pinned, setPinned] = useState(!!headerPinned);\n\n // controlled pin\n useEffect(() => {\n if (headerPinned != null) setPinned(headerPinned);\n }, [headerPinned]);\n\n const setSnappedState = useCallback(\n (next: boolean) => {\n setSnapped((prev) => {\n if (prev === next) return prev;\n onToggleHeaderArea?.(!next); // visible = !snapped\n return next;\n });\n },\n [onToggleHeaderArea],\n );\n\n useImperativeHandle(\n ref,\n (): ObjectPageHandle => ({\n toggleHeaderArea: (s?: boolean) => {\n setSnappedState(s == null ? !snapped : s);\n },\n }),\n [setSnappedState, snapped],\n );\n\n /* ---- A2: Scroll-getriebenes Snapping ---- */\n const onScroll = useCallback(() => {\n if (pinned || !headerArea) return;\n const el = scrollRef.current;\n if (!el) return;\n setSnappedState(el.scrollTop > 8);\n }, [pinned, headerArea, setSnappedState]);\n\n const handleTitleClick = useCallback(() => {\n if (preserveHeaderStateOnClick || !headerArea) return;\n setSnappedState(!snapped);\n }, [preserveHeaderStateOnClick, headerArea, snapped, setSnappedState]);\n\n const togglePin = useCallback(() => {\n const next = !pinned;\n if (headerPinned == null) setPinned(next);\n onPinButtonToggle?.(next);\n if (next) setSnappedState(false);\n }, [pinned, headerPinned, onPinButtonToggle, setSnappedState]);\n\n /* ---- A1: Tastatur-Navigation in der Anchor-Bar ---- */\n const tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n const onTabKeyDown = useCallback(\n (e: React.KeyboardEvent, index: number) => {\n let nextIndex: number | null = null;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") nextIndex = (index + 1) % normalizedSections.length;\n else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\")\n nextIndex = (index - 1 + normalizedSections.length) % normalizedSections.length;\n else if (e.key === \"Home\") nextIndex = 0;\n else if (e.key === \"End\") nextIndex = normalizedSections.length - 1;\n if (nextIndex == null) return;\n e.preventDefault();\n const target = normalizedSections[nextIndex];\n if (!target) return;\n navigateTo(target.id);\n tabRefs.current.get(target.id)?.focus();\n },\n [normalizedSections, navigateTo],\n );\n\n /* ---- Title-Bereich ---- */\n const effectiveActions = actions ?? actionsBar;\n const showSnappedTitle = snapped;\n const headerNode = showSnappedTitle && snappedHeader != null ? snappedHeader : header ?? title;\n const subHeaderNode =\n showSnappedTitle && snappedSubHeader != null ? snappedSubHeader : subHeader ?? subtitle;\n\n const renderImage = () => {\n if (image == null) return null;\n const inner =\n typeof image === \"string\" ? (\n <img className=\"prn-op-image-img\" src={image} alt=\"\" />\n ) : (\n image\n );\n return (\n <div className=\"prn-op-image\" data-circle={imageShapeCircle ? \"\" : undefined}>\n {inner}\n </div>\n );\n };\n\n const topHeaderA11y = accessibilityAttributes?.objectPageTopHeader;\n const anchorBarA11y = accessibilityAttributes?.objectPageAnchorBar;\n const footerA11y = accessibilityAttributes?.objectPageFooterActions;\n\n return (\n <div\n className={cx(\"prn-objectpage\", className)}\n data-mode={mode}\n data-snapped={snapped ? \"\" : undefined}\n data-pinned={pinned ? \"\" : undefined}\n style={style}\n >\n {/* ---- A3: Title / Top-Header ---- */}\n <header\n className={cx(\n \"prn-objectpage-head prn-op-top-header\",\n glass && \"prn-glass prn-glass-bar\",\n )}\n role={topHeaderA11y?.role ?? \"banner\"}\n aria-label={topHeaderA11y?.[\"aria-label\"]}\n >\n {breadcrumbs && <div className=\"prn-op-breadcrumbs\">{breadcrumbs}</div>}\n\n <div className=\"prn-objectpage-headrow\">\n {renderImage()}\n <div className=\"prn-objectpage-titles\">\n <h1\n className=\"prn-objectpage-title\"\n onClick={handleTitleClick}\n data-clickable={!preserveHeaderStateOnClick && headerArea ? \"\" : undefined}\n >\n {headerNode}\n </h1>\n {subHeaderNode && <span className=\"prn-objectpage-subtitle\">{subHeaderNode}</span>}\n {(snapped ? snappedContent : expandedContent) && (\n <div className=\"prn-op-state-content\">{snapped ? snappedContent : expandedContent}</div>\n )}\n </div>\n\n {status && (\n <span className=\"prn-objectpage-status\">\n <span className=\"prn-status-badge\" data-tone={status.tone ?? \"neutral\"}>\n <span className=\"prn-status-dot\" aria-hidden />\n {status.label}\n </span>\n </span>\n )}\n\n {navigationBar && <div className=\"prn-op-navigation-bar\">{navigationBar}</div>}\n {effectiveActions && <div className=\"prn-objectpage-actions\">{effectiveActions}</div>}\n\n {!hidePinButton && headerArea && (\n <button\n type=\"button\"\n className=\"prn-op-pin\"\n aria-pressed={pinned}\n aria-label={pinned ? \"Header lösen\" : \"Header anheften\"}\n onClick={togglePin}\n >\n <Icon name={pinned ? \"pin\" : \"pin-off\"} size={16} />\n </button>\n )}\n </div>\n\n {/* A2: expandierbarer Header-Content */}\n {headerArea && !snapped && <div className=\"prn-op-header-area\">{headerArea}</div>}\n\n {/* A3: KPIs */}\n {kpis && kpis.length > 0 && (\n <div className=\"prn-objectpage-kpis\">\n {kpis.map((kpi, i) => (\n <div className=\"prn-kpi\" key={i}>\n <span className=\"prn-kpi-label\">{kpi.label}</span>\n <span className=\"prn-kpi-value\" data-tone={kpi.tone}>\n {kpi.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </header>\n\n {/* ---- A1: Anchor-Bar (Tablist) ---- */}\n {hasAnchorBar && (\n <div\n className=\"prn-op-anchorbar\"\n role={anchorBarA11y?.role ?? \"tablist\"}\n aria-label={anchorBarA11y?.[\"aria-label\"] ?? \"Sektionen\"}\n >\n {normalizedSections.map((s, i) => {\n const selected = s.id === activeId;\n return (\n <button\n key={s.id}\n type=\"button\"\n role=\"tab\"\n id={`${reactId}-tab-${s.id}`}\n aria-selected={selected}\n aria-controls={`${reactId}-panel-${s.id}`}\n tabIndex={selected ? 0 : -1}\n className=\"prn-op-anchor\"\n data-selected={selected ? \"\" : undefined}\n ref={(el) => {\n if (el) tabRefs.current.set(s.id, el);\n else tabRefs.current.delete(s.id);\n }}\n onClick={() => navigateTo(s.id)}\n onKeyDown={(e) => onTabKeyDown(e, i)}\n >\n {s.titleText}\n </button>\n );\n })}\n </div>\n )}\n\n {/* ---- Inhalt ---- */}\n {placeholder != null ? (\n <div className=\"prn-op-placeholder\" role=\"status\">\n {placeholder}\n </div>\n ) : (\n <div className=\"prn-op-scroll\" ref={scrollRef} onScroll={onScroll}>\n <div className=\"prn-objectpage-sections-stack\">\n {normalizedSections.map((s) => {\n const isActive = s.id === activeId;\n // iconTabBar: nur aktive Sektion sichtbar\n if (mode === \"iconTabBar\" && !isActive) return null;\n return (\n <div\n key={s.id}\n className=\"prn-op-section-anchor\"\n data-section-anchor={s.id}\n data-active={isActive ? \"\" : undefined}\n id={`${reactId}-panel-${s.id}`}\n role={hasAnchorBar ? \"tabpanel\" : undefined}\n aria-labelledby={hasAnchorBar ? `${reactId}-tab-${s.id}` : undefined}\n ref={(el) => registerSection(s.id, el)}\n >\n {s.node}\n </div>\n );\n })}\n {freeChildren}\n </div>\n </div>\n )}\n\n {/* ---- A4: Footer ---- */}\n {footerArea && (\n <div\n className=\"prn-op-footer\"\n role={footerA11y?.role ?? \"contentinfo\"}\n aria-label={footerA11y?.[\"aria-label\"]}\n >\n {footerArea}\n </div>\n )}\n\n {/* hidden: selectedSubSectionId markiert (für Konsumenten/Tests) */}\n {selectedSubSectionId && <input type=\"hidden\" data-selected-subsection={selectedSubSectionId} readOnly value=\"\" />}\n </div>\n );\n});\n","import { useCallback, useMemo, useState, type ReactNode } from \"react\";\nimport type { ActiveFilter } from \"./filterbar\";\n\nconst PREFIX = \"apl:filterstate:\";\n\nexport interface UseFilterStateOptions<V extends Record<string, unknown>> {\n /** localStorage-Schlüssel-Suffix (eindeutig pro Tabelle/View). */\n persistKey: string;\n /** Startwerte; definieren zugleich die Filter-Keys. */\n defaultValues: V;\n /** Labels für die abgeleiteten activeFilters-Chips. */\n labels?: Partial<Record<keyof V, ReactNode>>;\n /** Ob ein Wert als „aktiv\" zählt. Default: != default und nicht leer. */\n isActive?: (key: keyof V, value: unknown, defaultValue: unknown) => boolean;\n}\n\nexport interface UseFilterStateResult<V> {\n values: V;\n setValue: <K extends keyof V>(key: K, value: V[K]) => void;\n setValues: (patch: Partial<V>) => void;\n reset: () => void;\n activeFilters: ActiveFilter[];\n}\n\nfunction readPersisted<V>(persistKey: string, fallback: V): V {\n if (typeof window === \"undefined\" || !window.localStorage) return fallback;\n try {\n const raw = localStorage.getItem(PREFIX + persistKey);\n if (!raw) return fallback;\n return { ...fallback, ...(JSON.parse(raw) as Partial<V>) };\n } catch {\n return fallback;\n }\n}\n\nfunction writePersisted<V>(persistKey: string, value: V): void {\n if (typeof window === \"undefined\" || !window.localStorage) return;\n try {\n localStorage.setItem(PREFIX + persistKey, JSON.stringify(value));\n } catch {\n /* Quota/Private-Mode → still funktionsfähig ohne Persistenz. */\n }\n}\n\nconst defaultIsActive = (_k: unknown, value: unknown, dflt: unknown): boolean =>\n value !== dflt && value !== \"\" && value !== undefined && value !== null;\n\nexport function useFilterState<V extends Record<string, unknown>>(\n options: UseFilterStateOptions<V>,\n): UseFilterStateResult<V> {\n const { persistKey, defaultValues, labels, isActive = defaultIsActive } = options;\n const [values, setValuesState] = useState<V>(() => readPersisted(persistKey, defaultValues));\n\n const persist = useCallback(\n (next: V) => {\n setValuesState(next);\n writePersisted(persistKey, next);\n },\n [persistKey],\n );\n\n const setValue = useCallback(\n <K extends keyof V>(key: K, value: V[K]) => persist({ ...values, [key]: value }),\n [persist, values],\n );\n const setValues = useCallback(\n (patch: Partial<V>) => persist({ ...values, ...patch }),\n [persist, values],\n );\n const reset = useCallback(() => {\n if (typeof window !== \"undefined\" && window.localStorage) {\n try { localStorage.removeItem(PREFIX + persistKey); } catch { /* noop */ }\n }\n setValuesState(defaultValues);\n }, [persistKey, defaultValues]);\n\n const activeFilters = useMemo<ActiveFilter[]>(() => {\n const out: ActiveFilter[] = [];\n for (const key of Object.keys(values) as (keyof V)[]) {\n if (isActive(key, values[key], defaultValues[key])) {\n out.push({\n id: String(key),\n label: labels?.[key],\n value: String(values[key]),\n });\n }\n }\n return out;\n }, [values, defaultValues, labels, isActive]);\n\n return { values, setValue, setValues, reset, activeFilters };\n}\n","import type { ReactNode } from \"react\";\nimport {\n RadioGroup as RACRadioGroup, type RadioGroupProps as RACRadioGroupProps,\n Radio as RACRadio, type RadioProps as RACRadioProps,\n CheckboxGroup as RACCheckboxGroup, type CheckboxGroupProps as RACCheckboxGroupProps,\n Label, Text, FieldError,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./choice.css\";\n\nexport interface RadioGroupProps extends Omit<RACRadioGroupProps, \"className\"> {\n label?: ReactNode; description?: ReactNode; errorMessage?: ReactNode;\n children: ReactNode; className?: string;\n}\nexport function RadioGroup({ label, description, errorMessage, children, className, ...props }: RadioGroupProps) {\n return (\n <RACRadioGroup {...props} className={cx(\"prn-field prn-radiogroup\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <div className=\"prn-radiogroup-items\">{children}</div>\n {description && <Text slot=\"description\" className=\"prn-field-desc\">{description}</Text>}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n </RACRadioGroup>\n );\n}\n\nexport interface RadioProps extends Omit<RACRadioProps, \"className\"> { children?: ReactNode; className?: string; }\nexport function Radio({ children, className, ...props }: RadioProps) {\n return (\n <RACRadio {...props} className={cx(\"prn-radio\", className)}>\n <span className=\"prn-radio-dot\" aria-hidden />\n {children && <span className=\"prn-radio-label\">{children}</span>}\n </RACRadio>\n );\n}\n\nexport interface CheckboxGroupProps extends Omit<RACCheckboxGroupProps, \"className\"> {\n label?: ReactNode; description?: ReactNode; errorMessage?: ReactNode;\n children: ReactNode; className?: string;\n}\nexport function CheckboxGroup({ label, description, errorMessage, children, className, ...props }: CheckboxGroupProps) {\n return (\n <RACCheckboxGroup {...props} className={cx(\"prn-field prn-checkboxgroup\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <div className=\"prn-checkboxgroup-items\">{children}</div>\n {description && <Text slot=\"description\" className=\"prn-field-desc\">{description}</Text>}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n </RACCheckboxGroup>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n NumberField as RACNumberField, type NumberFieldProps as RACNumberFieldProps,\n Slider as RACSlider, type SliderProps as RACSliderProps,\n Label, Group, Input, Button as RACButton, Text, FieldError,\n SliderTrack, SliderThumb, SliderOutput,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./numeric.css\";\n\nexport interface NumberFieldProps extends Omit<RACNumberFieldProps, \"className\"> {\n label?: ReactNode; description?: ReactNode; errorMessage?: ReactNode; placeholder?: string; className?: string;\n}\nexport function NumberField({ label, description, errorMessage, placeholder, className, ...props }: NumberFieldProps) {\n return (\n <RACNumberField {...props} className={cx(\"prn-field prn-numberfield\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <Group className=\"prn-numberfield-group\">\n <RACButton slot=\"decrement\" className=\"prn-numberfield-step\">−</RACButton>\n <Input className=\"prn-input prn-numberfield-input\" placeholder={placeholder} />\n <RACButton slot=\"increment\" className=\"prn-numberfield-step\">+</RACButton>\n </Group>\n {description && <Text slot=\"description\" className=\"prn-field-desc\">{description}</Text>}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n </RACNumberField>\n );\n}\n\nexport interface SliderProps extends Omit<RACSliderProps, \"className\"> {\n label?: ReactNode; showValue?: boolean; className?: string;\n}\nexport function Slider({ label, showValue = true, className, ...props }: SliderProps) {\n return (\n <RACSlider {...props} className={cx(\"prn-slider\", className)}>\n <div className=\"prn-slider-header\">\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n {showValue && <SliderOutput className=\"prn-slider-output\" />}\n </div>\n <SliderTrack className=\"prn-slider-track\">\n {({ state }) => (\n <>\n <div className=\"prn-slider-fill\" style={{ width: `${state.getThumbPercent(0) * 100}%` }} />\n <SliderThumb className=\"prn-slider-thumb\" />\n </>\n )}\n </SliderTrack>\n </RACSlider>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n ComboBox as RACComboBox, type ComboBoxProps as RACComboBoxProps,\n Label, Input, Button as RACButton, Popover, ListBox, ListBoxItem,\n type ListBoxItemProps, Text, FieldError,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./overlays.css\";\nimport \"./combobox.css\";\n\nexport interface ComboBoxProps<T extends object>\n extends Omit<RACComboBoxProps<T>, \"className\" | \"children\"> {\n label?: ReactNode; placeholder?: string; description?: ReactNode; errorMessage?: ReactNode;\n children: ReactNode | ((item: T) => ReactNode); className?: string;\n}\nexport function ComboBox<T extends object>({ label, placeholder, description, errorMessage, children, className, ...props }: ComboBoxProps<T>) {\n return (\n <RACComboBox {...props} className={cx(\"prn-field prn-combobox\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <div className=\"prn-combobox-control\">\n <Input className=\"prn-input prn-combobox-input\" placeholder={placeholder} />\n <RACButton className=\"prn-combobox-button\">\n <svg viewBox=\"0 0 12 12\" width=\"12\" height=\"12\" aria-hidden fill=\"none\"\n stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2.75 4.5 6 7.75 9.25 4.5\" />\n </svg>\n </RACButton>\n </div>\n {description && <Text slot=\"description\" className=\"prn-field-desc\">{description}</Text>}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n <Popover className=\"prn-popover prn-combobox-popover\">\n <ListBox className=\"prn-listbox\">{children}</ListBox>\n </Popover>\n </RACComboBox>\n );\n}\n\nexport interface ComboBoxItemProps extends Omit<ListBoxItemProps, \"className\"> { className?: string; }\nexport function ComboBoxItem({ className, ...props }: ComboBoxItemProps) {\n return <ListBoxItem {...props} className={cx(\"prn-option\", className)} />;\n}\n","import {\n Form as RACForm, type FormProps as RACFormProps,\n FieldError as RACFieldError, type FieldErrorProps as RACFieldErrorProps,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./form.css\";\n\nexport interface FormProps extends Omit<RACFormProps, \"className\"> { className?: string; }\nexport function Form({ className, ...props }: FormProps) {\n return <RACForm {...props} className={cx(\"prn-form\", className)} />;\n}\n\nexport interface FieldErrorProps extends Omit<RACFieldErrorProps, \"className\"> { className?: string; }\nexport function FieldError({ className, ...props }: FieldErrorProps) {\n return <RACFieldError {...props} className={cx(\"prn-field-error\", className)} />;\n}\n","import type { ReactNode } from \"react\";\nimport {\n ListBox as RACListBox,\n type ListBoxProps as RACListBoxProps,\n ListBoxItem as RACListBoxItem,\n type ListBoxItemProps as RACListBoxItemProps,\n GridList as RACGridList,\n type GridListProps as RACGridListProps,\n GridListItem as RACGridListItem,\n type GridListItemProps as RACGridListItemProps,\n TagGroup as RACTagGroup,\n type TagGroupProps as RACTagGroupProps,\n TagList as RACTagList,\n type TagListProps as RACTagListProps,\n Tag as RACTag,\n type TagProps as RACTagProps,\n Label,\n Button as RACButton,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./overlays.css\";\nimport \"./forms.css\";\nimport \"./collections.css\";\n\n/* ---------------- ListBox ---------------- */\n\nexport interface ListBoxProps<T extends object> extends Omit<RACListBoxProps<T>, \"className\"> {\n className?: string;\n}\n\nexport function ListBox<T extends object>({ className, ...props }: ListBoxProps<T>) {\n return (\n <RACListBox {...props} className={cx(\"prn-listbox prn-listbox-standalone\", className)} />\n );\n}\n\nexport interface ListBoxOptionProps extends Omit<RACListBoxItemProps, \"className\"> {\n className?: string;\n}\n\nexport function ListBoxOption({ className, ...props }: ListBoxOptionProps) {\n return <RACListBoxItem {...props} className={cx(\"prn-option\", className)} />;\n}\n\n/* ---------------- GridList ---------------- */\n\nexport interface GridListProps<T extends object> extends Omit<RACGridListProps<T>, \"className\"> {\n className?: string;\n}\n\nexport function GridList<T extends object>({ className, ...props }: GridListProps<T>) {\n return <RACGridList {...props} className={cx(\"prn-gridlist\", className)} />;\n}\n\nexport interface GridListItemProps extends Omit<RACGridListItemProps, \"className\"> {\n className?: string;\n children?: ReactNode;\n}\n\nexport function GridListItem({ className, children, ...props }: GridListItemProps) {\n return (\n <RACGridListItem {...props} className={cx(\"prn-gridlist-item\", className)}>\n {children}\n </RACGridListItem>\n );\n}\n\n/* ---------------- TagGroup ---------------- */\n\nexport interface TagGroupProps<T extends object>\n extends Omit<RACTagGroupProps, \"className\" | \"children\"> {\n /** Optionales Label über der Chip-Reihe. */\n label?: ReactNode;\n /** Tags als statische Children oder via items/renderTag. */\n children: ReactNode;\n /** Inhalt, wenn keine Tags vorhanden sind. */\n renderEmptyState?: RACTagListProps<T>[\"renderEmptyState\"];\n /** Dynamische Item-Quelle für die TagList. */\n items?: RACTagListProps<T>[\"items\"];\n className?: string;\n}\n\nexport function TagGroup<T extends object>({\n label,\n children,\n renderEmptyState,\n items,\n className,\n ...props\n}: TagGroupProps<T>) {\n return (\n <RACTagGroup {...props} className={cx(\"prn-taggroup\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <RACTagList className=\"prn-taglist\" items={items} renderEmptyState={renderEmptyState}>\n {children}\n </RACTagList>\n </RACTagGroup>\n );\n}\n\nexport interface TagProps extends Omit<RACTagProps, \"className\"> {\n children?: ReactNode;\n className?: string;\n}\n\nexport function Tag({ children, className, textValue, ...props }: TagProps) {\n const derivedTextValue =\n textValue ?? (typeof children === \"string\" ? children : undefined);\n return (\n <RACTag {...props} textValue={derivedTextValue} className={cx(\"prn-tag\", className)}>\n {({ allowsRemoving }) => (\n <>\n <span className=\"prn-tag-label\">{children}</span>\n {allowsRemoving && (\n <RACButton slot=\"remove\" className=\"prn-tag-remove\" aria-label=\"Entfernen\">\n <svg viewBox=\"0 0 14 14\" aria-hidden className=\"prn-tag-remove-icon\">\n <path d=\"M4 4 L10 10 M10 4 L4 10\" />\n </svg>\n </RACButton>\n )}\n </>\n )}\n </RACTag>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n Breadcrumbs as RACBreadcrumbs,\n type BreadcrumbsProps as RACBreadcrumbsProps,\n Breadcrumb as RACBreadcrumb,\n type BreadcrumbProps as RACBreadcrumbProps,\n Link as RACLink,\n type LinkProps as RACLinkProps,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./breadcrumbs.css\";\n\n/* ---------------- Breadcrumbs ---------------- */\n\nexport interface BreadcrumbsProps<T extends object> extends Omit<RACBreadcrumbsProps<T>, \"className\"> {\n className?: string;\n}\n\nexport function Breadcrumbs<T extends object>({ className, ...props }: BreadcrumbsProps<T>) {\n return <RACBreadcrumbs {...props} className={cx(\"prn-breadcrumbs\", className)} />;\n}\n\n/* ---------------- Breadcrumb ---------------- */\n\nexport interface BreadcrumbProps extends Omit<RACBreadcrumbProps, \"className\"> {\n className?: string;\n}\n\nexport function Breadcrumb({ className, ...props }: BreadcrumbProps) {\n return <RACBreadcrumb {...props} className={cx(\"prn-breadcrumb\", className)} />;\n}\n\n/* ---------------- Link ---------------- */\n\nexport interface LinkProps extends Omit<RACLinkProps, \"className\"> {\n children?: ReactNode;\n className?: string;\n}\n\nexport function Link({ className, ...props }: LinkProps) {\n return <RACLink {...props} className={cx(\"prn-link\", className)} />;\n}\n","import type { ReactNode } from \"react\";\nimport {\n Disclosure as RACDisclosure,\n type DisclosureProps as RACDisclosureProps,\n DisclosureGroup as RACDisclosureGroup,\n type DisclosureGroupProps as RACDisclosureGroupProps,\n DisclosurePanel as RACDisclosurePanel,\n Heading,\n Button as RACButton,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./disclosure.css\";\n\n/* ---------------- Disclosure ---------------- */\n\nexport interface DisclosureProps extends Omit<RACDisclosureProps, \"className\" | \"children\"> {\n /** Beschriftung des Triggers (Kopfzeile). */\n title: ReactNode;\n /** Inhalt des aufklappbaren Panels. */\n children: ReactNode;\n className?: string;\n}\n\nexport function Disclosure({ title, children, className, ...props }: DisclosureProps) {\n return (\n <RACDisclosure {...props} className={cx(\"prn-disclosure\", className)}>\n <Heading className=\"prn-disclosure-heading\">\n <RACButton slot=\"trigger\" className=\"prn-disclosure-trigger\">\n <span className=\"prn-disclosure-title\">{title}</span>\n <svg viewBox=\"0 0 16 16\" className=\"prn-disclosure-chevron\" aria-hidden>\n <polyline points=\"6,4 10,8 6,12\" />\n </svg>\n </RACButton>\n </Heading>\n <RACDisclosurePanel className=\"prn-disclosure-panel\">{children}</RACDisclosurePanel>\n </RACDisclosure>\n );\n}\n\n/* ---------------- DisclosureGroup ---------------- */\n\nexport interface DisclosureGroupProps extends Omit<RACDisclosureGroupProps, \"className\"> {\n className?: string;\n}\n\nexport function DisclosureGroup({ className, ...props }: DisclosureGroupProps) {\n return <RACDisclosureGroup {...props} className={cx(\"prn-disclosure-group\", className)} />;\n}\n","import type { ReactNode } from \"react\";\nimport {\n Tree as RACTree,\n type TreeProps as RACTreeProps,\n TreeItem as RACTreeItem,\n type TreeItemProps as RACTreeItemProps,\n TreeItemContent as RACTreeItemContent,\n Button as RACButton,\n Checkbox as RACCheckbox,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./tree.css\";\n\n/* ---------------- Tree ---------------- */\n\nexport interface TreeProps<T extends object> extends Omit<RACTreeProps<T>, \"className\"> {\n className?: string;\n}\n\nexport function Tree<T extends object>({ className, ...props }: TreeProps<T>) {\n return <RACTree {...props} className={cx(\"prn-tree\", className)} />;\n}\n\n/* ---------------- TreeItem ---------------- */\n\nexport interface TreeItemProps extends Omit<RACTreeItemProps, \"className\" | \"children\" | \"textValue\"> {\n /** Beschriftung der Zeile; dient zugleich als textValue für Typeahead. */\n title: ReactNode;\n /** Optionaler textValue, falls title kein reiner String ist. */\n textValue?: string;\n /** Verschachtelte TreeItems. */\n children?: ReactNode;\n className?: string;\n}\n\nexport function TreeItem({ title, textValue, children, className, ...props }: TreeItemProps) {\n const resolvedTextValue = textValue ?? (typeof title === \"string\" ? title : \"\");\n return (\n <RACTreeItem\n {...props}\n textValue={resolvedTextValue}\n className={cx(\"prn-tree-item\", className)}\n >\n <RACTreeItemContent>\n {({ hasChildItems, selectionMode }) => (\n <div className=\"prn-tree-row\">\n {selectionMode !== \"none\" && (\n <RACCheckbox slot=\"selection\" className=\"prn-tree-check\">\n <span className=\"prn-tree-check-box\" aria-hidden>\n <svg viewBox=\"0 0 18 18\" className=\"prn-tree-check-mark\">\n <polyline points=\"4,9 8,13 14,5\" />\n </svg>\n </span>\n </RACCheckbox>\n )}\n {hasChildItems ? (\n <RACButton slot=\"chevron\" className=\"prn-tree-chevron\" aria-label=\"Aufklappen\">\n <svg viewBox=\"0 0 16 16\" aria-hidden>\n <path d=\"M6 4l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </RACButton>\n ) : (\n <span className=\"prn-tree-chevron prn-tree-chevron-spacer\" aria-hidden />\n )}\n <span className=\"prn-tree-label\">{title}</span>\n </div>\n )}\n </RACTreeItemContent>\n {children}\n </RACTreeItem>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n Table as RACTable,\n type TableProps as RACTableProps,\n TableHeader as RACTableHeader,\n type TableHeaderProps as RACTableHeaderProps,\n TableBody as RACTableBody,\n type TableBodyProps as RACTableBodyProps,\n Column as RACColumn,\n type ColumnProps as RACColumnProps,\n Row as RACRow,\n type RowProps as RACRowProps,\n Cell as RACCell,\n type CellProps as RACCellProps,\n Checkbox as RACCheckbox,\n type CheckboxProps as RACCheckboxProps,\n useTableOptions,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./table-aria.css\";\n\n/* ---------------- Table ---------------- */\n\nexport interface TableProps extends Omit<RACTableProps, \"className\"> {\n /** Header bleibt beim Scrollen oben kleben (Container muss eine feste Höhe haben). */\n stickyHeader?: boolean;\n className?: string;\n}\n\nexport function Table({ stickyHeader, className, ...props }: TableProps) {\n return (\n <RACTable\n {...props}\n data-sticky={stickyHeader || undefined}\n className={cx(\"prn-table\", className)}\n />\n );\n}\n\n/* ---------------- TableHeader ---------------- */\n\nexport interface TableHeaderProps<T extends object> extends Omit<RACTableHeaderProps<T>, \"className\"> {\n className?: string;\n}\n\nexport function TableHeader<T extends object>({ className, children, ...props }: TableHeaderProps<T>) {\n const { selectionBehavior, selectionMode } = useTableOptions();\n // Bei statischen Kindern wird die Auswahl-Spalte automatisch vorangestellt; bei\n // dynamischen (Funktions-)Kindern reichen wir unverändert durch.\n if (typeof children === \"function\") {\n return <RACTableHeader {...props} className={cx(\"prn-table-header\", className)}>{children}</RACTableHeader>;\n }\n return (\n <RACTableHeader {...props} className={cx(\"prn-table-header\", className)}>\n {selectionBehavior === \"toggle\" && (\n <RACColumn className=\"prn-table-column prn-table-selection-cell\">\n {selectionMode === \"multiple\" && <SelectionCheckbox slot=\"selection\" />}\n </RACColumn>\n )}\n {children}\n </RACTableHeader>\n );\n}\n\n/* ---------------- TableBody ---------------- */\n\nexport interface TableBodyProps<T extends object> extends Omit<RACTableBodyProps<T>, \"className\"> {\n className?: string;\n}\n\nexport function TableBody<T extends object>({ className, ...props }: TableBodyProps<T>) {\n return <RACTableBody {...props} className={cx(\"prn-table-body\", className)} />;\n}\n\n/* ---------------- Column ---------------- */\n\nexport interface ColumnProps extends Omit<RACColumnProps, \"className\" | \"children\"> {\n children?: ReactNode;\n className?: string;\n}\n\nexport function Column({ children, className, ...props }: ColumnProps) {\n return (\n <RACColumn {...props} className={cx(\"prn-table-column\", className)}>\n {(renderProps) => (\n <span className=\"prn-table-column-inner\">\n {children as ReactNode}\n {renderProps.allowsSorting && (\n <span aria-hidden className=\"prn-table-sort-indicator\" data-direction={renderProps.sortDirection}>\n {renderProps.sortDirection === \"ascending\"\n ? \"▲\"\n : renderProps.sortDirection === \"descending\"\n ? \"▼\"\n : \"\"}\n </span>\n )}\n </span>\n )}\n </RACColumn>\n );\n}\n\n/* ---------------- Row ---------------- */\n\nexport interface RowProps<T extends object> extends Omit<RACRowProps<T>, \"className\"> {\n className?: string;\n}\n\nexport function Row<T extends object>({ className, children, columns, ...props }: RowProps<T>) {\n const { selectionBehavior } = useTableOptions();\n // Dynamische (Funktions-)Kinder unverändert durchreichen; bei statischen Zellen\n // wird im Auswahl-Modus die Checkbox-Zelle vorangestellt.\n if (typeof children === \"function\") {\n return <RACRow {...props} columns={columns} className={cx(\"prn-table-row\", className)}>{children}</RACRow>;\n }\n return (\n <RACRow {...props} columns={columns} className={cx(\"prn-table-row\", className)}>\n {selectionBehavior === \"toggle\" && (\n <Cell className=\"prn-table-selection-cell\">\n <SelectionCheckbox slot=\"selection\" />\n </Cell>\n )}\n {children}\n </RACRow>\n );\n}\n\n/* ---------------- Cell ---------------- */\n\nexport interface CellProps extends Omit<RACCellProps, \"className\"> {\n className?: string;\n}\n\nexport function Cell({ className, ...props }: CellProps) {\n return <RACCell {...props} className={cx(\"prn-table-cell\", className)} />;\n}\n\n/* ---------------- Auswahl-Checkbox (Prince-Look, wie forms.tsx) ---------------- */\n\nfunction SelectionCheckbox(props: Omit<RACCheckboxProps, \"className\">) {\n return (\n <RACCheckbox {...props} className=\"prn-checkbox prn-table-checkbox\">\n <span className=\"prn-checkbox-box\" aria-hidden>\n <svg viewBox=\"0 0 18 18\" className=\"prn-checkbox-check\">\n <polyline points=\"4,9 8,13 14,5\" />\n </svg>\n </span>\n </RACCheckbox>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n DateField as RACDateField,\n type DateFieldProps as RACDateFieldProps,\n TimeField as RACTimeField,\n type TimeFieldProps as RACTimeFieldProps,\n DateInput,\n DateSegment,\n Label,\n Text,\n FieldError,\n type DateValue,\n type TimeValue,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./datefields.css\";\n\n/* ---------------- DateField ---------------- */\n\nexport interface DateFieldProps<T extends DateValue>\n extends Omit<RACDateFieldProps<T>, \"className\"> {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode;\n className?: string;\n}\n\nexport function DateField<T extends DateValue>({\n label,\n description,\n errorMessage,\n className,\n ...props\n}: DateFieldProps<T>) {\n return (\n <RACDateField {...props} className={cx(\"prn-field\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <DateInput className=\"prn-dateinput\">\n {(segment) => <DateSegment segment={segment} className=\"prn-datesegment\" />}\n </DateInput>\n {description && (\n <Text slot=\"description\" className=\"prn-field-desc\">\n {description}\n </Text>\n )}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n </RACDateField>\n );\n}\n\n/* ---------------- TimeField ---------------- */\n\nexport interface TimeFieldProps<T extends TimeValue>\n extends Omit<RACTimeFieldProps<T>, \"className\"> {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode;\n className?: string;\n}\n\nexport function TimeField<T extends TimeValue>({\n label,\n description,\n errorMessage,\n className,\n ...props\n}: TimeFieldProps<T>) {\n return (\n <RACTimeField {...props} className={cx(\"prn-field\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <DateInput className=\"prn-dateinput\">\n {(segment) => <DateSegment segment={segment} className=\"prn-datesegment\" />}\n </DateInput>\n {description && (\n <Text slot=\"description\" className=\"prn-field-desc\">\n {description}\n </Text>\n )}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n </RACTimeField>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n Calendar as RACCalendar,\n type CalendarProps as RACCalendarProps,\n RangeCalendar as RACRangeCalendar,\n type RangeCalendarProps as RACRangeCalendarProps,\n CalendarGrid,\n CalendarGridHeader,\n CalendarGridBody,\n CalendarHeaderCell,\n CalendarCell,\n Heading,\n Button as RACButton,\n Text,\n type DateValue,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./calendar.css\";\n\n/* ---------------- gemeinsamer Header (Monatslabel + Chevrons) ---------------- */\n\nfunction CalendarHeader() {\n return (\n <header className=\"prn-calendar-header\">\n <RACButton slot=\"previous\" className=\"prn-calendar-nav\" aria-label=\"Vorheriger Monat\">\n <span aria-hidden>‹</span>\n </RACButton>\n <Heading className=\"prn-calendar-title\" />\n <RACButton slot=\"next\" className=\"prn-calendar-nav\" aria-label=\"Nächster Monat\">\n <span aria-hidden>›</span>\n </RACButton>\n </header>\n );\n}\n\n/* ---------------- gemeinsames Monatsgitter ---------------- */\n\nfunction CalendarMonthGrid() {\n return (\n <CalendarGrid className=\"prn-calendar-grid\">\n <CalendarGridHeader className=\"prn-calendar-grid-header\">\n {(day) => <CalendarHeaderCell className=\"prn-calendar-weekday\">{day}</CalendarHeaderCell>}\n </CalendarGridHeader>\n <CalendarGridBody className=\"prn-calendar-grid-body\">\n {(date) => <CalendarCell date={date} className=\"prn-calendar-cell\" />}\n </CalendarGridBody>\n </CalendarGrid>\n );\n}\n\n/* ---------------- Calendar ---------------- */\n\nexport interface CalendarProps<T extends DateValue> extends Omit<RACCalendarProps<T>, \"className\"> {\n /** Optionale Fehlermeldung unterhalb des Gitters. */\n errorMessage?: ReactNode;\n className?: string;\n}\n\nexport function Calendar<T extends DateValue>({ errorMessage, className, ...props }: CalendarProps<T>) {\n return (\n <RACCalendar {...props} className={cx(\"prn-calendar\", className)}>\n <CalendarHeader />\n <CalendarMonthGrid />\n {errorMessage && (\n <Text slot=\"errorMessage\" className=\"prn-field-error\">\n {errorMessage}\n </Text>\n )}\n </RACCalendar>\n );\n}\n\n/* ---------------- RangeCalendar ---------------- */\n\nexport interface RangeCalendarProps<T extends DateValue> extends Omit<RACRangeCalendarProps<T>, \"className\"> {\n /** Optionale Fehlermeldung unterhalb des Gitters. */\n errorMessage?: ReactNode;\n className?: string;\n}\n\nexport function RangeCalendar<T extends DateValue>({ errorMessage, className, ...props }: RangeCalendarProps<T>) {\n return (\n <RACRangeCalendar {...props} className={cx(\"prn-calendar prn-calendar-range\", className)}>\n <CalendarHeader />\n <CalendarMonthGrid />\n {errorMessage && (\n <Text slot=\"errorMessage\" className=\"prn-field-error\">\n {errorMessage}\n </Text>\n )}\n </RACRangeCalendar>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n DatePicker as RACDatePicker,\n type DatePickerProps as RACDatePickerProps,\n DateRangePicker as RACDateRangePicker,\n type DateRangePickerProps as RACDateRangePickerProps,\n type DateValue,\n Group,\n DateInput,\n DateSegment,\n Label,\n Text,\n FieldError,\n Button as RACButton,\n Popover,\n Dialog,\n Calendar,\n RangeCalendar,\n CalendarGrid,\n CalendarGridHeader,\n CalendarGridBody,\n CalendarHeaderCell,\n CalendarCell,\n Heading,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./overlays.css\";\nimport \"./datepicker.css\";\n\n/* ---------------- gemeinsamer Kalender-Korpus ---------------- */\n\nfunction CalendarBody() {\n return (\n <>\n <header className=\"prn-cal-header\">\n <RACButton slot=\"previous\" className=\"prn-cal-nav\" aria-label=\"Vorheriger Monat\">\n ‹\n </RACButton>\n <Heading className=\"prn-cal-heading\" />\n <RACButton slot=\"next\" className=\"prn-cal-nav\" aria-label=\"Nächster Monat\">\n ›\n </RACButton>\n </header>\n <CalendarGrid className=\"prn-cal-grid\">\n <CalendarGridHeader className=\"prn-cal-grid-header\">\n {(day) => <CalendarHeaderCell className=\"prn-cal-weekday\">{day}</CalendarHeaderCell>}\n </CalendarGridHeader>\n <CalendarGridBody className=\"prn-cal-grid-body\">\n {(date) => <CalendarCell date={date} className=\"prn-cal-cell\" />}\n </CalendarGridBody>\n </CalendarGrid>\n </>\n );\n}\n\n/* ---------------- DatePicker ---------------- */\n\nexport interface DatePickerProps<T extends DateValue>\n extends Omit<RACDatePickerProps<T>, \"className\"> {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode;\n className?: string;\n}\n\nexport function DatePicker<T extends DateValue>({\n label,\n description,\n errorMessage,\n className,\n ...props\n}: DatePickerProps<T>) {\n return (\n <RACDatePicker {...props} className={cx(\"prn-field prn-datepicker\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <Group className=\"prn-dateinput\">\n <DateInput className=\"prn-dateinput-segments\">\n {(segment) => <DateSegment segment={segment} className=\"prn-date-segment\" />}\n </DateInput>\n <RACButton className=\"prn-dateinput-trigger\" aria-label=\"Kalender öffnen\">\n <svg viewBox=\"0 0 16 16\" width=\"15\" height=\"15\" aria-hidden fill=\"none\"\n stroke=\"var(--prn-accent-strong)\" strokeWidth=\"1.4\" strokeLinecap=\"round\">\n <rect x=\"2.25\" y=\"3.25\" width=\"11.5\" height=\"10.5\" rx=\"2.5\" />\n <path d=\"M2.25 6.5h11.5M5 2v2.2M11 2v2.2\" />\n </svg>\n </RACButton>\n </Group>\n {description && (\n <Text slot=\"description\" className=\"prn-field-desc\">\n {description}\n </Text>\n )}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n <Popover className=\"prn-popover prn-cal-popover\">\n <Dialog className=\"prn-cal-dialog\">\n <Calendar className=\"prn-calendar\">\n <CalendarBody />\n </Calendar>\n </Dialog>\n </Popover>\n </RACDatePicker>\n );\n}\n\n/* ---------------- DateRangePicker ---------------- */\n\nexport interface DateRangePickerProps<T extends DateValue>\n extends Omit<RACDateRangePickerProps<T>, \"className\"> {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode;\n className?: string;\n}\n\nexport function DateRangePicker<T extends DateValue>({\n label,\n description,\n errorMessage,\n className,\n ...props\n}: DateRangePickerProps<T>) {\n return (\n <RACDateRangePicker {...props} className={cx(\"prn-field prn-daterangepicker\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <Group className=\"prn-dateinput prn-daterange-group\">\n <DateInput slot=\"start\" className=\"prn-dateinput-segments\">\n {(segment) => <DateSegment segment={segment} className=\"prn-date-segment\" />}\n </DateInput>\n <span aria-hidden className=\"prn-daterange-sep\">\n –\n </span>\n <DateInput slot=\"end\" className=\"prn-dateinput-segments\">\n {(segment) => <DateSegment segment={segment} className=\"prn-date-segment\" />}\n </DateInput>\n <RACButton className=\"prn-dateinput-trigger\" aria-label=\"Kalender öffnen\">\n <svg viewBox=\"0 0 16 16\" width=\"15\" height=\"15\" aria-hidden fill=\"none\"\n stroke=\"var(--prn-accent-strong)\" strokeWidth=\"1.4\" strokeLinecap=\"round\">\n <rect x=\"2.25\" y=\"3.25\" width=\"11.5\" height=\"10.5\" rx=\"2.5\" />\n <path d=\"M2.25 6.5h11.5M5 2v2.2M11 2v2.2\" />\n </svg>\n </RACButton>\n </Group>\n {description && (\n <Text slot=\"description\" className=\"prn-field-desc\">\n {description}\n </Text>\n )}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n <Popover className=\"prn-popover prn-cal-popover\">\n <Dialog className=\"prn-cal-dialog\">\n <RangeCalendar className=\"prn-calendar\">\n <CalendarBody />\n </RangeCalendar>\n </Dialog>\n </Popover>\n </RACDateRangePicker>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n ColorField as RACColorField,\n type ColorFieldProps as RACColorFieldProps,\n ColorSwatch as RACColorSwatch,\n type ColorSwatchProps as RACColorSwatchProps,\n ColorSwatchPicker as RACColorSwatchPicker,\n type ColorSwatchPickerProps as RACColorSwatchPickerProps,\n ColorSwatchPickerItem as RACColorSwatchPickerItem,\n type ColorSwatchPickerItemProps as RACColorSwatchPickerItemProps,\n Label,\n Input,\n Text,\n FieldError,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./color.css\";\n\nexport { parseColor } from \"react-aria-components\";\n\n/* ---------------- ColorField ---------------- */\n\nexport interface ColorFieldProps extends Omit<RACColorFieldProps, \"className\"> {\n label?: ReactNode;\n description?: ReactNode;\n errorMessage?: ReactNode;\n placeholder?: string;\n className?: string;\n}\n\nexport function ColorField({\n label,\n description,\n errorMessage,\n placeholder,\n className,\n ...props\n}: ColorFieldProps) {\n return (\n <RACColorField {...props} className={cx(\"prn-field\", className)}>\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n <Input className=\"prn-input prn-colorfield-input\" placeholder={placeholder} />\n {description && (\n <Text slot=\"description\" className=\"prn-field-desc\">\n {description}\n </Text>\n )}\n <FieldError className=\"prn-field-error\">{errorMessage}</FieldError>\n </RACColorField>\n );\n}\n\n/* ---------------- ColorSwatch ---------------- */\n\nexport interface ColorSwatchProps extends Omit<RACColorSwatchProps, \"className\"> {\n className?: string;\n}\n\nexport function ColorSwatch({ className, ...props }: ColorSwatchProps) {\n return <RACColorSwatch {...props} className={cx(\"prn-colorswatch\", className)} />;\n}\n\n/* ---------------- ColorSwatchPicker ---------------- */\n\nexport interface ColorSwatchPickerProps\n extends Omit<RACColorSwatchPickerProps, \"className\"> {\n className?: string;\n}\n\nexport function ColorSwatchPicker({\n className,\n children,\n ...props\n}: ColorSwatchPickerProps) {\n return (\n <RACColorSwatchPicker {...props} className={cx(\"prn-colorswatch-picker\", className)}>\n {children}\n </RACColorSwatchPicker>\n );\n}\n\nexport interface ColorSwatchPickerItemProps\n extends Omit<RACColorSwatchPickerItemProps, \"className\"> {\n className?: string;\n}\n\nexport function ColorSwatchPickerItem({\n className,\n ...props\n}: ColorSwatchPickerItemProps) {\n return (\n <RACColorSwatchPickerItem\n {...props}\n className={cx(\"prn-colorswatch-picker-item\", className)}\n >\n <ColorSwatch />\n </RACColorSwatchPickerItem>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n ColorArea as RACColorArea,\n type ColorAreaProps as RACColorAreaProps,\n ColorSlider as RACColorSlider,\n type ColorSliderProps as RACColorSliderProps,\n ColorWheel as RACColorWheel,\n type ColorWheelProps as RACColorWheelProps,\n ColorWheelTrack,\n ColorPicker as RACColorPicker,\n type ColorPickerProps as RACColorPickerProps,\n ColorThumb,\n ColorSwatch,\n SliderTrack,\n SliderOutput,\n Button as RACButton,\n Label,\n Popover,\n Dialog,\n DialogTrigger,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport { ColorField } from \"./color\";\nimport \"./forms.css\";\nimport \"./overlays.css\";\nimport \"./color-pickers.css\";\n\n/* ---------------- ColorArea ---------------- */\n\nexport interface ColorAreaProps extends Omit<RACColorAreaProps, \"className\" | \"children\"> {\n className?: string;\n}\n\nexport function ColorArea({ className, ...props }: ColorAreaProps) {\n return (\n <RACColorArea {...props} className={cx(\"prn-colorarea\", className)}>\n <ColorThumb className=\"prn-color-thumb\" />\n </RACColorArea>\n );\n}\n\n/* ---------------- ColorSlider ---------------- */\n\nexport interface ColorSliderProps extends Omit<RACColorSliderProps, \"className\"> {\n /** Beschriftung über dem Slider. */\n label?: ReactNode;\n /** Aktuellen Kanalwert rechts neben dem Label anzeigen. */\n showValue?: boolean;\n className?: string;\n}\n\nexport function ColorSlider({ label, showValue = true, className, ...props }: ColorSliderProps) {\n return (\n <RACColorSlider {...props} className={cx(\"prn-colorslider\", className)}>\n {(label || showValue) && (\n <div className=\"prn-colorslider-head\">\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n {showValue && <SliderOutput className=\"prn-colorslider-output\" />}\n </div>\n )}\n <SliderTrack className=\"prn-colorslider-track\">\n <ColorThumb className=\"prn-color-thumb\" />\n </SliderTrack>\n </RACColorSlider>\n );\n}\n\n/* ---------------- ColorWheel ---------------- */\n\nexport interface ColorWheelProps\n extends Omit<RACColorWheelProps, \"className\" | \"children\" | \"outerRadius\" | \"innerRadius\"> {\n /** Außenradius des Rings (Default 100). */\n outerRadius?: number;\n /** Innenradius des Rings (Default 74). */\n innerRadius?: number;\n className?: string;\n}\n\nexport function ColorWheel({ className, outerRadius = 100, innerRadius = 74, ...props }: ColorWheelProps) {\n return (\n <RACColorWheel\n {...props}\n outerRadius={outerRadius}\n innerRadius={innerRadius}\n className={cx(\"prn-colorwheel\", className)}\n >\n <ColorWheelTrack className=\"prn-colorwheel-track\" />\n <ColorThumb className=\"prn-color-thumb\" />\n </RACColorWheel>\n );\n}\n\n/* ---------------- ColorPicker ---------------- */\n\nexport interface ColorPickerProps extends Omit<RACColorPickerProps, \"children\"> {\n /** Beschriftung neben dem Farb-Swatch im Trigger. */\n label?: ReactNode;\n /** Eigene Inhalte des Popovers. Standard: ColorArea + Hue-Slider + ColorField. */\n children?: ReactNode;\n className?: string;\n}\n\nexport function ColorPicker({ label = \"Farbe\", children, className, ...props }: ColorPickerProps) {\n return (\n <RACColorPicker {...props}>\n <DialogTrigger>\n <RACButton className={cx(\"prn-colorpicker-trigger\", className)}>\n <ColorSwatch className=\"prn-colorpicker-swatch\" />\n {label && <span className=\"prn-colorpicker-label\">{label}</span>}\n <span className=\"prn-select-chevron\" aria-hidden>⌄</span>\n </RACButton>\n <Popover className=\"prn-popover prn-colorpicker-popover\" placement=\"bottom start\">\n <Dialog className=\"prn-colorpicker-dialog\" aria-label=\"Farbe wählen\">\n {children ?? (\n <>\n <ColorArea\n colorSpace=\"hsb\"\n xChannel=\"saturation\"\n yChannel=\"brightness\"\n className=\"prn-colorpicker-area\"\n />\n <ColorSlider colorSpace=\"hsb\" channel=\"hue\" />\n <ColorField label=\"Hex\" />\n </>\n )}\n </Dialog>\n </Popover>\n </DialogTrigger>\n </RACColorPicker>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n ProgressBar as RACProgressBar,\n type ProgressBarProps as RACProgressBarProps,\n Meter as RACMeter,\n type MeterProps as RACMeterProps,\n Separator as RACSeparator,\n type SeparatorProps as RACSeparatorProps,\n Group as RACGroup,\n type GroupProps as RACGroupProps,\n Label,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./status.css\";\n\n/* ---------------- ProgressBar ---------------- */\n\nexport interface ProgressBarProps extends Omit<RACProgressBarProps, \"className\" | \"children\"> {\n /** Sichtbares Label oberhalb des Balkens. */\n label?: ReactNode;\n /** Formatierten Wert (z. B. „60 %\") neben dem Label anzeigen. */\n showValue?: boolean;\n className?: string;\n}\n\nexport function ProgressBar({ label, showValue = true, className, ...props }: ProgressBarProps) {\n return (\n <RACProgressBar {...props} className={cx(\"prn-progressbar\", className)}>\n {({ percentage, valueText, isIndeterminate }) => (\n <>\n {(label || showValue) && (\n <div className=\"prn-progressbar-head\">\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n {showValue && !isIndeterminate && (\n <span className=\"prn-progressbar-value\">{valueText}</span>\n )}\n </div>\n )}\n <div className=\"prn-progressbar-track\">\n <div\n className=\"prn-progressbar-fill\"\n data-indeterminate={isIndeterminate || undefined}\n style={isIndeterminate ? undefined : { width: `${percentage ?? 0}%` }}\n />\n </div>\n </>\n )}\n </RACProgressBar>\n );\n}\n\n/* ---------------- Meter ---------------- */\n\nexport interface MeterProps extends Omit<RACMeterProps, \"className\" | \"children\"> {\n /** Sichtbares Label oberhalb des Meters. */\n label?: ReactNode;\n /** Formatierten Wert neben dem Label anzeigen. */\n showValue?: boolean;\n /** Farbbänder nach Auslastung (grün/orange/rot) statt Akzentfarbe. */\n bands?: boolean;\n className?: string;\n}\n\nfunction bandFor(percentage: number): \"low\" | \"medium\" | \"high\" {\n if (percentage >= 85) return \"high\";\n if (percentage >= 60) return \"medium\";\n return \"low\";\n}\n\nexport function Meter({ label, showValue = true, bands = false, className, ...props }: MeterProps) {\n return (\n <RACMeter {...props} className={cx(\"prn-meter\", className)}>\n {({ percentage, valueText }) => (\n <>\n {(label || showValue) && (\n <div className=\"prn-meter-head\">\n {label && <Label className=\"prn-field-label\">{label}</Label>}\n {showValue && <span className=\"prn-meter-value\">{valueText}</span>}\n </div>\n )}\n <div className=\"prn-meter-track\">\n <div\n className=\"prn-meter-fill\"\n data-band={bands ? bandFor(percentage) : undefined}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </>\n )}\n </RACMeter>\n );\n}\n\n/* ---------------- Separator ---------------- */\n\nexport interface SeparatorProps extends Omit<RACSeparatorProps, \"className\"> {\n className?: string;\n}\n\nexport function Separator({ className, ...props }: SeparatorProps) {\n return <RACSeparator {...props} className={cx(\"prn-separator\", className)} />;\n}\n\n/* ---------------- Group ---------------- */\n\nexport interface GroupProps extends Omit<RACGroupProps, \"className\"> {\n className?: string;\n}\n\nexport function Group({ className, ...props }: GroupProps) {\n return <RACGroup {...props} className={cx(\"prn-group\", className)} />;\n}\n","import type { ReactNode } from \"react\";\nimport {\n UNSTABLE_Toast as RACToast,\n UNSTABLE_ToastRegion as RACToastRegion,\n type ToastRegionProps as RACToastRegionProps,\n UNSTABLE_ToastContent as RACToastContent,\n UNSTABLE_ToastQueue as RACToastQueue,\n Button as RACButton,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./toast.css\";\n\n/* ---------------- Inhalt eines Toasts ---------------- */\n\nexport type ToastVariant = \"default\" | \"success\" | \"warning\" | \"error\";\n\n/** Struktur, die ein Prince-Toast anzeigt. */\nexport interface AplToast {\n title: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n}\n\n/* ---------------- Queue ---------------- */\n\n/**\n * Globale Toast-Queue. Konsumenten rufen `toastQueue.add({ title, ... })`,\n * um einen Toast in der `<ToastRegion>` einzureihen.\n */\nexport const toastQueue = new RACToastQueue<AplToast>({\n maxVisibleToasts: 5,\n});\n\n/* ---------------- ToastRegion ---------------- */\n\nexport interface ToastRegionProps\n extends Omit<RACToastRegionProps<AplToast>, \"className\" | \"children\" | \"queue\"> {\n /** Eigene Queue (Standard: die exportierte `toastQueue`). */\n queue?: RACToastQueue<AplToast>;\n className?: string;\n}\n\n/**\n * Fixierte Region am unteren Rand, die eingereihte Toasts als erhöhte Karten\n * mit Slide-in-Animation und Schließen-Button rendert.\n */\nexport function ToastRegion({ queue = toastQueue, className, ...props }: ToastRegionProps) {\n return (\n <RACToastRegion\n {...props}\n queue={queue}\n className={cx(\"prn-toast-region\", className)}\n >\n {({ toast }) => (\n <RACToast\n toast={toast}\n className=\"prn-toast\"\n data-variant={toast.content.variant ?? \"default\"}\n >\n <RACToastContent className=\"prn-toast-content\">\n <span className=\"prn-toast-title\">{toast.content.title}</span>\n {toast.content.description && (\n <span className=\"prn-toast-desc\">{toast.content.description}</span>\n )}\n </RACToastContent>\n <RACButton slot=\"close\" className=\"prn-toast-close\" aria-label=\"Schließen\">\n <svg viewBox=\"0 0 14 14\" aria-hidden className=\"prn-toast-close-icon\">\n <path d=\"M3 3 L11 11 M11 3 L3 11\" />\n </svg>\n </RACButton>\n </RACToast>\n )}\n </RACToastRegion>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n DropZone as RACDropZone,\n type DropZoneProps as RACDropZoneProps,\n FileTrigger as RACFileTrigger,\n type FileTriggerProps as RACFileTriggerProps,\n Button as RACButton,\n} from \"react-aria-components\";\nimport { cx } from \"../utils\";\nimport \"./forms.css\";\nimport \"./dropzone.css\";\n\n/* ---------------- DropZone ---------------- */\n\nexport interface DropZoneProps extends Omit<RACDropZoneProps, \"className\"> {\n /** Inhalt der Dropzone, z. B. ein Prompt-Text und ein FileTrigger. */\n children?: ReactNode;\n className?: string;\n}\n\nexport function DropZone({ children, className, ...props }: DropZoneProps) {\n return (\n <RACDropZone {...props} className={cx(\"prn-dropzone\", className)}>\n {children}\n </RACDropZone>\n );\n}\n\n/* ---------------- FileTrigger ---------------- */\n\nexport interface FileTriggerProps extends FileTriggerOwnProps {\n /** Button-Beschriftung; Standard „Datei wählen\". */\n children?: ReactNode;\n className?: string;\n}\n\ntype FileTriggerOwnProps = Omit<RACFileTriggerProps, \"children\">;\n\nexport function FileTrigger({ children = \"Datei wählen\", className, ...props }: FileTriggerProps) {\n return (\n <RACFileTrigger {...props}>\n <RACButton className={cx(\"prn-button\", className)} data-variant=\"tinted\">\n {children}\n </RACButton>\n </RACFileTrigger>\n );\n}\n","import type { CSSProperties, ElementType, HTMLAttributes, ReactNode } from \"react\";\nimport { cx } from \"../utils\";\nimport \"./glass.css\";\n\n/** Einsatzort der Glasfläche — bestimmt Kanten, Radius und Schatten. */\nexport type GlassVariant = \"bar\" | \"sidebar\" | \"overlay\" | \"card\" | \"floating\";\n\nexport interface GlassSurfaceProps extends HTMLAttributes<HTMLElement> {\n /** Wo die Fläche sitzt (Default: `\"card\"`). */\n variant?: GlassVariant;\n /** Optionaler Branding-Tint (rgba/hex), wird unter das Glas gelegt. */\n tintColor?: string;\n /** Gerendertes Element (Default: `\"div\"`). */\n as?: ElementType;\n children?: ReactNode;\n}\n\n/**\n * GlassSurface — dünne „Liquid Glass\"-Optik-Schicht (reines CSS, kein Verhalten).\n *\n * Sparsam und nur auf der „Navigationsebene\" über dem Content einsetzen\n * (Top-Bar, Sidebar, Overlays, schwebende Controls, Übersichtskarten).\n * NICHT für datendichte Tabellen/Listen, Eingabefelder oder Fließtext —\n * dort haben Lesbarkeit/Performance Vorrang. Glas nie stapeln.\n *\n * Der Effekt nutzt `backdrop-filter`; ohne Support oder bei\n * `prefers-reduced-transparency` fällt die Fläche automatisch auf opak zurück.\n */\nexport function GlassSurface({\n variant = \"card\",\n tintColor,\n as,\n className,\n style,\n children,\n ...rest\n}: GlassSurfaceProps) {\n const Component = (as ?? \"div\") as ElementType;\n const mergedStyle: CSSProperties | undefined = tintColor\n ? ({ \"--prn-glass-tint\": tintColor, ...style } as CSSProperties)\n : style;\n return (\n <Component\n className={cx(\"prn-glass\", `prn-glass-${variant}`, className)}\n style={mergedStyle}\n {...rest}\n >\n {children}\n </Component>\n );\n}\n","/**\n * prince-ui — Prince-Look React-Komponenten auf React Aria.\n *\n * Wave 1: L1-Primitives. CSS wird über die Bereichsmodule gebündelt\n * (dist/index.css → Import via \"@conuti-das/prince-ui/styles.css\").\n */\n\nexport const PRINCE_UI_VERSION = \"0.8.0\";\n\n/** Die drei Prince-Modes. `null` = System folgen (prefers-color-scheme, Fallback Dark). */\nexport type PrinceTheme = \"light\" | \"dark\" | \"cu\";\n\n/**\n * Setzt das Theme am <html>-Element.\n * - `\"light\"` / `\"dark\"` → Prince Light / Prince Dark (Apple-Optik: SF-Fonts, Apple-System-Farben, Grün)\n * - `\"cu\"` → CONUTI Community-Styling (CI-Grün)\n * - `null` → System folgen (Prince Light bei OS-Light, sonst Prince Dark)\n */\nexport function setTheme(theme: PrinceTheme | null): void {\n const root = document.documentElement;\n if (theme === null) {\n root.removeAttribute(\"data-theme\");\n } else {\n root.setAttribute(\"data-theme\", theme);\n }\n}\n\n/** Liest das aktuell erzwungene Theme oder `null`, wenn dem System gefolgt wird. */\nexport function getTheme(): PrinceTheme | null {\n return (document.documentElement.getAttribute(\"data-theme\") as PrinceTheme | null) ?? null;\n}\n\nexport * from \"./utils\";\nexport * from \"./icons/icons\";\nexport * from \"./primitives/forms\";\nexport * from \"./primitives/overlays\";\nexport * from \"./primitives/navigation\";\n\n// Wave 2 — L2-Komposita\nexport * from \"./composites/composites\";\nexport * from \"./composites/appshell\";\nexport * from \"./launchpad/launchpad\";\n// Wave 2 — Charts (eigene SVG)\nexport * from \"./charts/charts\";\n// Wave 2 — L3-Datenschicht\nexport * from \"./data/table\";\nexport * from \"./data/filterbar\";\nexport * from \"./data/objectpage\";\nexport * from \"./data/use-filter-state\";\n\n// W1 — weitere Form-Primitives (RadioGroup/CheckboxGroup/NumberField/Slider/ComboBox/Form)\nexport * from \"./primitives/choice\";\nexport * from \"./primitives/numeric\";\nexport * from \"./primitives/combobox\";\nexport * from \"./primitives/form\";\n\n// W2 — Collections\nexport * from \"./primitives/collections\";\nexport * from \"./primitives/breadcrumbs\";\nexport * from \"./primitives/disclosure\";\nexport * from \"./primitives/tree\";\nexport * from \"./primitives/table-aria\";\n// W3 — Date & Time\nexport * from \"./primitives/datefields\";\nexport * from \"./primitives/calendar\";\nexport * from \"./primitives/datepicker\";\n// W4 — Color\nexport * from \"./primitives/color\";\nexport * from \"./primitives/color-pickers\";\n// W5 — Status & Misc\nexport * from \"./primitives/status\";\nexport * from \"./primitives/toast\";\nexport * from \"./primitives/dropzone\";\n\n// Liquid-Glass-Optik-Schicht — zuletzt, damit glass.css NACH dem Komponenten-CSS\n// gebündelt wird und die opt-in Glas-Klassen (z. B. auf Popover) gewinnen.\nexport * from \"./surfaces/glass\";\n"]}
|