@moto-nrw/design-system 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -674,7 +674,7 @@ function ListItem({
|
|
|
674
674
|
onClick,
|
|
675
675
|
className: cn(
|
|
676
676
|
"flex w-full cursor-pointer items-center gap-3 rounded-xl px-3 py-3 text-left transition-all",
|
|
677
|
-
active ? "border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-
|
|
677
|
+
active ? "border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)]" : "border border-transparent hover:bg-[var(--semantic-color-bg-subtle)]",
|
|
678
678
|
className
|
|
679
679
|
),
|
|
680
680
|
...props,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Accordion/Accordion.tsx","../src/lib/cn.ts","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Divider/Divider.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/FilterChips/FilterChips.tsx","../src/components/Input/Input.tsx","../src/components/ListItem/ListItem.tsx","../src/components/Logo/Logo.tsx","../src/components/Modal/Modal.tsx","../src/components/Pill/Pill.tsx","../src/components/Radio/Radio.tsx","../src/components/SearchBar/SearchBar.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Spinner/Spinner.tsx","../src/components/StatusDot/StatusDot.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.tsx"],"sourcesContent":["export type {\n\tAccordionProps,\n\tActiveFilter,\n\tAlertProps,\n\tAlertType,\n\tAvatarProps,\n\tBadgeProps,\n\tButtonProps,\n\tCardProps,\n\tCheckboxProps,\n\tConfirmationModalProps,\n\tDividerProps,\n\tDropdownMenuItem,\n\tDropdownMenuProps,\n\tFilterChipsProps,\n\tInputProps,\n\tListItemProps,\n\tLogoProps,\n\tModalProps,\n\tPillColor,\n\tPillProps,\n\tRadioProps,\n\tSearchBarProps,\n\tSelectOption,\n\tSelectProps,\n\tSkeletonProps,\n\tSpinnerProps,\n\tStatusDotColor,\n\tStatusDotProps,\n\tTabItem,\n\tTabsProps,\n\tTextareaProps,\n\tToastProps,\n\tToastType,\n\tToggleProps,\n} from \"./components\";\nexport {\n\tAccordion,\n\tAlert,\n\tAvatar,\n\tBadge,\n\tBadgeCompact,\n\tButton,\n\tCard,\n\tCheckbox,\n\tConfirmationModal,\n\tDivider,\n\tDropdownMenu,\n\tFilterChips,\n\tInput,\n\tListItem,\n\tLogo,\n\tModal,\n\tPill,\n\tRadio,\n\tSearchBar,\n\tSelect,\n\tSkeleton,\n\tSpinner,\n\tStatusDot,\n\tTabs,\n\tTextarea,\n\tToast,\n\tToggle,\n} from \"./components\";\nexport { cn } from \"./lib/cn\";\n","import { type ReactNode, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AccordionProps {\n\tlabel: string;\n\tbadge?: ReactNode;\n\tdefaultOpen?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function Accordion({\n\tlabel,\n\tbadge,\n\tdefaultOpen = false,\n\tchildren,\n\tclassName,\n}: AccordionProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\n\treturn (\n\t\t<div className={cn(\"border-t border-[var(--semantic-color-border-default)]\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"flex w-full items-center justify-between px-5 py-3 border-none bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t>\n\t\t\t\t<span className=\"flex items-center gap-2\">\n\t\t\t\t\t{label}\n\t\t\t\t\t{badge && <span className=\"inline-flex\">{badge}</span>}\n\t\t\t\t</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-normal)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid transition-[grid-template-rows] duration-[var(--duration-normal)]\",\n\t\t\t\t\tisOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"overflow-hidden\">{children}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AlertType = \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n\ttype: AlertType;\n\tmessage: string;\n}\n\nconst typeStyles: Record<AlertType, string> = {\n\terror:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)] border-[var(--semantic-color-feedback-success-border)]\",\n\twarning:\n\t\t\"bg-[var(--semantic-color-feedback-warning-light)] text-[var(--semantic-color-feedback-warning-text)] border-[var(--semantic-color-feedback-warning-border)]\",\n\tinfo: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)] border-[var(--semantic-color-feedback-info-border)]\",\n};\n\nconst icons: Record<AlertType, ReactNode> = {\n\terror: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tsuccess: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Alert({ type, message, className, ...props }: AlertProps) {\n\tif (!message) return null;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-2 px-4 py-3 rounded-md border font-sans text-sm shadow-sm\",\n\t\t\t\ttypeStyles[type],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"shrink-0 flex\">{icons[type]}</span>\n\t\t\t<span>{message}</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n\tname: string;\n\tsrc?: string | null;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"size-[var(--avatar-size-sm)] text-sm shadow-sm outline-2 outline-[var(--semantic-color-bg-default)] -outline-offset-2\",\n\tmd: \"size-[var(--avatar-size-md)] text-base shadow-md\",\n\tlg: \"size-[var(--avatar-size-lg)] text-xl shadow-md\",\n} as const;\n\nfunction getInitials(name: string): string {\n\tconst parts = name.split(\" \").filter(Boolean);\n\tif (parts.length === 0) return \"?\";\n\tif (parts.length === 1) return (parts[0]?.[0] ?? \"?\").toUpperCase();\n\treturn ((parts[0]?.[0] ?? \"\") + (parts.at(-1)?.[0] ?? \"\")).toUpperCase();\n}\n\nexport function Avatar({ name, src, size = \"sm\", className, ...props }: AvatarProps) {\n\tconst initials = getInitials(name);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex shrink-0 items-center justify-center overflow-hidden rounded-[var(--avatar-radius)] bg-gradient-to-br from-[var(--semantic-color-text-strong)] to-[var(--semantic-color-text-muted)] text-[var(--semantic-color-text-inverse)] font-sans font-[number:var(--avatar-font-weight)]\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={name}\n\t\t\t{...props}\n\t\t>\n\t\t\t{src ? (\n\t\t\t\t<img src={src} alt={name} className=\"size-full object-cover\" />\n\t\t\t) : (\n\t\t\t\t<span className=\"select-none\">{initials}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLDivElement> {\n\tcount: number | string;\n\tlabel?: string;\n\ticon?: ReactNode;\n\tshowLabel?: boolean;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst sizeStyles = {\n\tsm: \"px-2 py-1.5 gap-1.5\",\n\tmd: \"px-3 py-1.5 gap-2\",\n} as const;\n\nexport function Badge({\n\tcount,\n\tlabel,\n\ticon,\n\tshowLabel = true,\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: BadgeProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t\t{showLabel && label && (\n\t\t\t\t<span className=\"text-xs text-[var(--semantic-color-text-muted)]\">{label}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport function BadgeCompact({\n\tcount,\n\ticon,\n\tclassName,\n\t...props\n}: Omit<BadgeProps, \"label\" | \"showLabel\">) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans px-2 py-1.5 gap-1.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tvariant?: \"primary\" | \"secondary\" | \"outline\" | \"outline_danger\" | \"danger\" | \"success\" | \"ghost\";\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n\tisLoading?: boolean;\n\tloadingText?: string;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tprimary:\n\t\t\"bg-[var(--semantic-color-bg-inverse)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-inverse-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsecondary:\n\t\t\"bg-[var(--semantic-color-bg-emphasis)] text-[var(--semantic-color-text-strong)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-emphasis-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\toutline:\n\t\t\"bg-transparent text-[var(--semantic-color-text-tertiary)] border-[var(--semantic-color-border-strong)] hover:enabled:bg-[var(--semantic-color-bg-subtle)] hover:enabled:border-[var(--semantic-color-border-muted)]\",\n\toutline_danger:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)] hover:enabled:bg-[var(--semantic-color-feedback-error-light)] hover:enabled:border-[var(--semantic-color-feedback-error)]\",\n\tdanger:\n\t\t\"bg-[var(--semantic-color-feedback-error-text)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-feedback-error)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-brand-primary-hover)] hover:enabled:shadow-[var(--shadow-md)] active:enabled:scale-95\",\n\tghost:\n\t\t\"bg-transparent text-[var(--semantic-color-text-default)] hover:enabled:bg-[var(--semantic-color-bg-muted)]\",\n} as const;\n\nconst sizeStyles = {\n\tsm: \"px-[var(--button-sm-padding-x)] py-[var(--button-sm-padding-y)] text-[length:var(--button-sm-font-size)] leading-normal\",\n\tmd: \"px-[var(--button-md-padding-x)] py-[var(--button-md-padding-y)] text-[length:var(--button-md-font-size)] leading-normal\",\n\tlg: \"px-[var(--button-lg-padding-x)] py-[var(--button-lg-padding-y)] text-[length:var(--button-lg-font-size)] leading-normal\",\n\txl: \"px-[var(--button-xl-padding-x)] py-[var(--button-xl-padding-y)] text-[length:var(--button-xl-font-size)] leading-normal\",\n} as const;\n\nexport function Button({\n\tvariant = \"primary\",\n\tsize = \"md\",\n\tisLoading = false,\n\tloadingText = \"Laden...\",\n\tclassName,\n\tchildren,\n\tdisabled,\n\ttype = \"submit\",\n\t...props\n}: ButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center justify-center gap-2 border border-transparent rounded-[var(--button-radius)] font-sans font-[number:var(--button-font-weight)] cursor-pointer transition-all duration-[var(--button-transition-duration)] focus-visible:outline-none disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={disabled || isLoading}\n\t\t\taria-busy={isLoading || undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isLoading ? loadingText : children}\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n\tvariant?: \"default\" | \"elevated\" | \"glass\";\n\tpadding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n\thoverable?: boolean;\n\tselected?: boolean;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tdefault: \"border border-[var(--semantic-color-border-default)]\",\n\televated:\n\t\t\"border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\tglass:\n\t\t\"bg-[var(--semantic-color-bg-default)]/80 shadow-lg backdrop-blur-[var(--card-backdrop-blur)]\",\n} as const;\n\nconst paddingStyles = {\n\tnone: \"\",\n\tsm: \"p-[var(--card-padding-sm)]\",\n\tmd: \"p-[var(--card-padding)]\",\n\tlg: \"p-[var(--card-padding-lg)]\",\n} as const;\n\nconst selectedStyles =\n\t\"border-2 border-[var(--semantic-color-brand-primary)] bg-[var(--semantic-color-feedback-success-light)]\";\n\nexport function Card({\n\tvariant = \"default\",\n\tpadding = \"md\",\n\thoverable = false,\n\tselected = false,\n\tclassName,\n\tchildren,\n\t...props\n}: CardProps) {\n\tif (hoverable) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"group relative overflow-hidden rounded-[var(--card-radius)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\t\t\"cursor-pointer border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\t\t\t\t\t\"hover:translate-y-[var(--card-hover-lift)] hover:border-[var(--semantic-color-border-muted)]/50 hover:bg-[var(--semantic-color-bg-default)] hover:shadow-[var(--card-shadow-hover)]\",\n\t\t\t\t\t\"active:scale-[var(--card-active-scale)]\",\n\t\t\t\t\tselected && selectedStyles,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-subtle)]/80 to-[var(--semantic-color-bg-muted)]/80 opacity-[0.03] pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-px rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-default)]/80 to-[var(--semantic-color-bg-default)]/20 pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] shadow-[inset_0_0_0_1px_var(--card-glass-border)] transition-shadow duration-[var(--card-transition-duration)] pointer-events-none group-hover:shadow-[inset_0_0_0_1px_var(--card-glass-border-hover)]\" />\n\t\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-r from-transparent via-[var(--semantic-color-border-muted)]/20 to-transparent opacity-0 transition-opacity duration-[var(--card-transition-duration)] pointer-events-none group-hover:opacity-100\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative overflow-hidden rounded-[var(--card-radius)] bg-[var(--semantic-color-bg-default)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tselected && selectedStyles,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t</div>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Checkbox({ label, id, name, className, ...props }: CheckboxProps) {\n\tconst inputId = id || name || label.toLowerCase().replace(/\\s+/g, \"-\");\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--checkbox-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--checkbox-size)] rounded-sm border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n\tspacing?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst spacingStyles = {\n\tsm: \"my-2\",\n\tmd: \"my-4\",\n\tlg: \"my-8\",\n} as const;\n\nexport function Divider({ spacing = \"md\", label, className, ...props }: DividerProps) {\n\tif (label) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex items-center gap-4\", spacingStyles[spacing], className)}>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<span className=\"font-sans text-xs font-medium text-[var(--semantic-color-text-muted)] whitespace-nowrap\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<hr\n\t\t\tclassName={cn(\n\t\t\t\t\"border-0 border-t border-[var(--semantic-color-border-default)]\",\n\t\t\t\tspacingStyles[spacing],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DropdownMenuItem {\n\tid: string;\n\tlabel: string;\n\tonClick: () => void;\n\tvariant?: \"default\" | \"danger\";\n}\n\nexport interface DropdownMenuProps {\n\titems: DropdownMenuItem[];\n\ttrigger?: ReactNode;\n\tclassName?: string;\n}\n\nexport function DropdownMenu({ items, trigger, className }: DropdownMenuProps) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [position, setPosition] = useState({ top: 0, right: 0 });\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst menuRef = useRef<HTMLDivElement>(null);\n\n\tconst close = useCallback(() => setIsOpen(false), []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tconst target = event.target as Node;\n\t\t\tif (!buttonRef.current?.contains(target) && !menuRef.current?.contains(target)) {\n\t\t\t\tclose();\n\t\t\t}\n\t\t}\n\n\t\tfunction handleScroll() {\n\t\t\tclose();\n\t\t}\n\n\t\tfunction handleEscape(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") close();\n\t\t}\n\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\twindow.addEventListener(\"scroll\", handleScroll, true);\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll, true);\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t};\n\t}, [isOpen, close]);\n\n\tconst handleToggle = () => {\n\t\tif (!isOpen && buttonRef.current) {\n\t\t\tconst rect = buttonRef.current.getBoundingClientRect();\n\t\t\tsetPosition({\n\t\t\t\ttop: rect.bottom + 4,\n\t\t\t\tright: window.innerWidth - rect.right,\n\t\t\t});\n\t\t}\n\t\tsetIsOpen((prev) => !prev);\n\t};\n\n\tconst menu = isOpen && typeof document !== \"undefined\" && (\n\t\t<div\n\t\t\tref={menuRef}\n\t\t\tclassName=\"fixed z-[var(--dropdown-z-index)] w-[var(--dropdown-width)] p-[var(--dropdown-padding)] border border-[var(--semantic-color-border-default)] rounded-[var(--dropdown-radius)] bg-[var(--semantic-color-bg-default)] shadow-[var(--dropdown-shadow)]\"\n\t\t\tstyle={{ top: position.top, right: position.right }}\n\t\t\trole=\"menu\"\n\t\t>\n\t\t\t{items.map((item) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={item.id}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex w-full items-center px-[var(--dropdown-item-padding-x)] py-[var(--dropdown-item-padding-y)] border-none rounded-[var(--dropdown-item-radius)] bg-transparent font-sans text-[length:var(--dropdown-item-font-size)] text-left cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\t\titem.variant === \"danger\"\n\t\t\t\t\t\t\t? \"text-[var(--semantic-color-feedback-error-text)] hover:bg-[var(--semantic-color-feedback-error-light)]\"\n\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-tertiary)] hover:bg-[var(--semantic-color-bg-muted)]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{item.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tref={buttonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggle}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center justify-center p-1 border-none rounded-md bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-secondary)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-label=\"Aktionen\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t>\n\t\t\t\t{trigger || (\n\t\t\t\t\t<svg className=\"size-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t\t\t\t<path d=\"M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z\" />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{menu && createPortal(menu, document.body)}\n\t\t</>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ActiveFilter {\n\tid: string;\n\tlabel: string;\n\tonRemove: () => void;\n}\n\nexport interface FilterChipsProps extends HTMLAttributes<HTMLDivElement> {\n\tfilters: ActiveFilter[];\n\tonClearAll?: () => void;\n}\n\nexport function FilterChips({ filters, onClearAll, className, ...props }: FilterChipsProps) {\n\tif (filters.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn(\"flex items-center justify-between\", className)} {...props}>\n\t\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t\t{filters.map((filter) => (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={filter.id}\n\t\t\t\t\t\tclassName=\"inline-flex items-center gap-1 px-3 py-1 rounded-full bg-[var(--semantic-color-brand-primary-light)] font-sans text-xs font-medium text-[var(--semantic-color-brand-primary-dark)]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{filter.label}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={filter.onRemove}\n\t\t\t\t\t\t\tclassName=\"flex p-0 border-none bg-transparent text-inherit cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{onClearAll && filters.length > 1 && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClearAll}\n\t\t\t\t\tclassName=\"p-0 border-none bg-transparent font-sans text-xs font-medium text-[var(--semantic-color-brand-primary)] cursor-pointer whitespace-nowrap transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t>\n\t\t\t\t\tAlle löschen\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type InputHTMLAttributes, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Input({ label, error, id, name, type = \"text\", className, ...props }: InputProps) {\n\tconst [showPassword, setShowPassword] = useState(false);\n\tconst inputId = id || name;\n\tconst isPassword = type === \"password\";\n\tconst resolvedType = isPassword && showPassword ? \"text\" : type;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<input\n\t\t\t\t\tid={inputId}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype={resolvedType}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--input-padding-x)] py-[var(--input-padding-y)] font-sans text-[length:var(--input-font-size)] text-[var(--semantic-color-text-default)] shadow-[var(--shadow-sm)] transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\tisPassword && \"pr-10\",\n\t\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\t\taria-describedby={error ? `${inputId}-error` : undefined}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t{isPassword && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => setShowPassword((prev) => !prev)}\n\t\t\t\t\t\tclassName=\"absolute top-1/2 right-3 -translate-y-1/2 flex items-center justify-center p-0 border-none bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\t\taria-label={showPassword ? \"Passwort verbergen\" : \"Passwort anzeigen\"}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${inputId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ListItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n\tactive?: boolean;\n\tonClick?: () => void;\n\tchildren: ReactNode;\n}\n\nexport function ListItem({\n\tactive = false,\n\tonClick,\n\tchildren,\n\tclassName,\n\t...props\n}: ListItemProps) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full cursor-pointer items-center gap-3 rounded-xl px-3 py-3 text-left transition-all\",\n\t\t\t\tactive\n\t\t\t\t\t? \"border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-brand-primary-light)]\"\n\t\t\t\t\t: \"border border-transparent hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n","import type { SVGProps } from \"react\";\n\nexport interface LogoProps extends SVGProps<SVGSVGElement> {\n\tsize?: number | string;\n}\n\nexport function Logo({ size = 48, ...props }: LogoProps) {\n\treturn (\n\t\t<svg\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox=\"0 0 1000 1000\"\n\t\t\tfill=\"none\"\n\t\t\taria-label=\"Ganztagshelden Logo\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g transform=\"matrix(1.62384,0,0,1.62384,-670.097018,-377.993255)\">\n\t\t\t\t{/* Cape: Steel 800 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M659.306,666.563C647.321,692.452 643.608,697.805 636.105,707.186C597.15,755.887 537.182,756.845 535.652,756.159C520.635,749.432 541.639,734.294 543.087,720.432C546.681,686.029 515.354,694.397 490.973,657.204C474.084,631.441 470.729,569.063 491.533,580.44C566.83,621.619 610.108,565.941 697.497,581.514C795.809,599.034 828.378,545.138 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C677.562,667.944 669.794,667.148 667.332,663.505C665.729,661.133 659.929,665.972 659.306,666.563Z\"\n\t\t\t\t\tfill=\"var(--color-steel-800, #1E293B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Body: Steel 500 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M675.584,684.76C676.835,613.868 598.89,738.438 567.488,699.03C544.801,670.559 676.869,576.383 715.532,582.995C744.492,587.948 775.313,577.886 789.684,572.171C791.809,570.862 793.873,569.676 795.866,568.627C814.646,558.742 857.526,515.802 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C674.245,687.434 674.757,686.206 675.584,684.76Z\"\n\t\t\t\t\tfill=\"var(--color-steel-500, #64748B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Roof: Steel 600 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M460.76,425.665C465.048,418.094 676.602,255.297 689.716,245.799C722.985,221.705 734.948,230.838 791.173,274.938C956.769,404.821 957.228,404.054 971.138,415.929C994.202,435.618 980.079,457.145 973.404,463.396C950.46,484.884 936.954,468.134 867.775,414.13C729.691,306.338 729.459,303.94 718.557,304.907C707.569,305.88 567.819,420.024 512.203,461.094C468.741,493.188 448.741,446.89 460.76,425.665Z\"\n\t\t\t\t\tfill=\"var(--color-steel-600, #475569)\"\n\t\t\t\t/>\n\t\t\t\t{/* Head: Steel 400 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M706.539,565.374C599.871,517.702 661.839,386.507 747.483,403.592C856.658,425.371 827.324,597.116 706.539,565.374Z\"\n\t\t\t\t\tfill=\"var(--color-steel-400, #94A3B8)\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\ttitle?: string;\n\tchildren: ReactNode;\n\tfooter?: ReactNode;\n}\n\nexport function Modal({ isOpen, onClose, title, children, footer }: ModalProps) {\n\tconst [isAnimating, setIsAnimating] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\tconst onCloseRef = useRef(onClose);\n\tonCloseRef.current = onClose;\n\n\tconst handleClose = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetIsAnimating(false);\n\t\tsetTimeout(() => {\n\t\t\tonCloseRef.current();\n\t\t}, 250);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) {\n\t\t\tsetIsAnimating(false);\n\t\t\tsetIsExiting(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleEscape = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") handleClose();\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst timer = setTimeout(() => setIsAnimating(true), 10);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t\tclearTimeout(timer);\n\t\t};\n\t}, [isOpen, handleClose]);\n\n\tif (!isOpen) return null;\n\n\tconst entering = isAnimating && !isExiting;\n\tconst idle = !isAnimating && !isExiting;\n\n\tconst modalContent = (\n\t\t<div className=\"fixed inset-0 z-[var(--modal-z-index)] flex items-center justify-center\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleClose}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute inset-0 border-none p-0 cursor-default transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tentering ? \"bg-black/40\" : \"bg-transparent\",\n\t\t\t\t)}\n\t\t\t\taria-label=\"Hintergrund - Klicken zum Schließen\"\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-[calc(100%-2rem)] max-w-[var(--modal-max-width)] max-h-[calc(100vh-4rem)] mx-4 overflow-hidden rounded-[var(--modal-radius)] border border-[var(--semantic-color-border-default)] bg-[image:var(--modal-bg)] backdrop-blur-[var(--modal-backdrop-blur)] shadow-[var(--modal-shadow)]\",\n\t\t\t\t\tidle && \"opacity-0\",\n\t\t\t\t\tentering && \"animate-[modalEnter_250ms_ease-out_both]\",\n\t\t\t\t\tisExiting && \"animate-[modalExit_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-label={title || undefined}\n\t\t\t>\n\t\t\t\t{title ? (\n\t\t\t\t\t<div className=\"flex items-center justify-between px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-b border-[var(--semantic-color-border-subtle)]\">\n\t\t\t\t\t\t<h3 className=\"font-sans text-lg font-semibold text-[var(--semantic-color-text-default)] m-0 pr-4\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"absolute top-4 right-4 z-10\">\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] overflow-y-auto max-h-[calc(100vh-8rem)] text-[var(--semantic-color-text-default)] font-sans leading-relaxed opacity-0\",\n\t\t\t\t\t\tentering && \"animate-[contentReveal_300ms_ease-out_50ms_both]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className=\"flex justify-end gap-3 px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-t border-[var(--semantic-color-border-subtle)] bg-[var(--modal-footer-bg)]\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(modalContent, document.body);\n\t}\n\n\treturn modalContent;\n}\n\nexport interface ConfirmationModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n\ttitle: string;\n\tchildren: ReactNode;\n\tconfirmText?: string;\n\tcancelText?: string;\n\tisConfirmLoading?: boolean;\n\tisConfirmDisabled?: boolean;\n\tvariant?: \"danger\" | \"primary\";\n}\n\nexport function ConfirmationModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n\ttitle,\n\tchildren,\n\tconfirmText = \"Bestätigen\",\n\tcancelText = \"Abbrechen\",\n\tisConfirmLoading = false,\n\tisConfirmDisabled = false,\n\tvariant = \"primary\",\n}: ConfirmationModalProps) {\n\tconst footer = (\n\t\t<>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onClose}\n\t\t\t\tclassName=\"flex-1 px-4 py-2 border border-[var(--semantic-color-border-strong)] rounded-md bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-tertiary)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)] hover:border-[var(--semantic-color-border-muted)] hover:scale-105 hover:shadow-md active:scale-100\"\n\t\t\t>\n\t\t\t\t{cancelText}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onConfirm}\n\t\t\t\tdisabled={isConfirmLoading || isConfirmDisabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 px-4 py-2 border-none rounded-md font-sans text-sm font-medium text-[var(--semantic-color-text-inverse)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:enabled:scale-105 hover:enabled:shadow-lg active:enabled:scale-100 disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\tvariant === \"danger\"\n\t\t\t\t\t\t? \"bg-[var(--semantic-color-feedback-error-text)]\"\n\t\t\t\t\t\t: \"bg-[var(--semantic-color-bg-inverse)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{isConfirmLoading ? (\n\t\t\t\t\t<span className=\"flex items-center justify-center gap-2\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclassName=\"size-4 animate-[ds-spin_0.7s_linear_infinite]\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle opacity={0.25} cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\topacity={0.75}\n\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\td=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tWird geladen...\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tconfirmText\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} footer={footer}>\n\t\t\t{children}\n\t\t</Modal>\n\t);\n}\n\nfunction CloseButton({ onClick }: { onClick: () => void }) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName=\"group flex items-center justify-center shrink-0 size-[var(--modal-close-size)] p-0 border-none rounded-lg bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-default)] hover:scale-105 active:scale-95\"\n\t\t\taria-label=\"Modal schließen\"\n\t\t>\n\t\t\t<svg\n\t\t\t\tclassName=\"transition-transform duration-[var(--duration-fast)] group-hover:rotate-90\"\n\t\t\t\twidth=\"20\"\n\t\t\t\theight=\"20\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth={2}\n\t\t\t>\n\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t</svg>\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type PillColor = \"red\" | \"green\" | \"blue\" | \"orange\" | \"purple\" | \"gray\";\n\nexport interface PillProps extends HTMLAttributes<HTMLSpanElement> {\n\tlabel: string;\n\tcolor?: PillColor;\n\tvariant?: \"solid\" | \"subtle\";\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tdot?: boolean;\n}\n\nconst solidStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-strong)] text-[var(--semantic-color-text-inverse)]\",\n\tgreen: \"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info)] text-[var(--semantic-color-text-inverse)]\",\n\torange: \"bg-[var(--semantic-color-feedback-warning)] text-[var(--semantic-color-text-inverse)]\",\n\tpurple: \"bg-[var(--semantic-color-feedback-accent)] text-[var(--semantic-color-text-inverse)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)] text-[var(--semantic-color-text-inverse)]\",\n};\n\nconst subtleStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)]\",\n\tgreen:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)]\",\n\torange:\n\t\t\"bg-[var(--semantic-color-brand-secondary-light)] text-[var(--semantic-color-feedback-warning-text)]\",\n\tpurple:\n\t\t\"bg-[var(--semantic-color-feedback-accent-light)] text-[var(--semantic-color-feedback-accent-text)]\",\n\tgray: \"bg-[var(--semantic-color-bg-muted)] text-[var(--semantic-color-text-secondary)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"px-2 py-0.5 text-xs\",\n\tmd: \"px-3 py-1.5 text-xs\",\n\tlg: \"px-4 py-2 text-sm\",\n} as const;\n\nconst dotSizes = {\n\tsm: \"size-1 mr-1.5\",\n\tmd: \"size-1.5 mr-2\",\n\tlg: \"size-2 mr-2.5\",\n} as const;\n\nexport function Pill({\n\tlabel,\n\tcolor = \"gray\",\n\tvariant = \"solid\",\n\tsize = \"md\",\n\tdot = true,\n\tclassName,\n\t...props\n}: PillProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-full font-sans font-bold whitespace-nowrap\",\n\t\t\t\tvariant === \"solid\" ? solidStyles[color] : subtleStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{dot && <span className={cn(\"rounded-full bg-current opacity-80\", dotSizes[size])} />}\n\t\t\t{label}\n\t\t</span>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Radio({ label, id, name, className, ...props }: RadioProps) {\n\tconst inputId = id || `${name}-${label.toLowerCase().replace(/\\s+/g, \"-\")}`;\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--radio-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"radio\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--radio-size)] rounded-full border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SearchBarProps\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tonClear?: () => void;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"py-2 pl-9 pr-3 text-sm\",\n\tmd: \"py-2.5 pl-9 pr-10 text-sm\",\n\tlg: \"py-3 px-10 text-base\",\n} as const;\n\nconst iconSizes = {\n\tsm: \"size-4\",\n\tmd: \"size-4\",\n\tlg: \"size-5\",\n} as const;\n\nexport function SearchBar({\n\tvalue,\n\tonChange,\n\tonClear,\n\tplaceholder = \"Name suchen...\",\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: SearchBarProps) {\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<svg\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute top-1/2 left-3 -translate-y-1/2 text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\ticonSizes[size],\n\t\t\t\t)}\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\td=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\n\t\t\t<input\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] text-[var(--semantic-color-text-default)] font-sans transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\tsizeStyles[size],\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\n\t\t\t{value && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tonChange(\"\");\n\t\t\t\t\t\tonClear?.();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"absolute top-1/2 right-2 -translate-y-1/2 flex items-center justify-center p-1 border-none rounded-full bg-transparent cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)]\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName={cn(\"text-[var(--semantic-color-text-muted)]\", iconSizes[size])}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { SelectHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n\tlabel?: string;\n\tplaceholder?: string;\n\toptions: SelectOption[];\n}\n\nexport function Select({ label, placeholder, options, id, className, ...props }: SelectProps) {\n\tconst selectId = id || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-1\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={selectId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<select\n\t\t\t\t\tid={selectId}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"w-full appearance-none border border-[var(--semantic-color-border-default)] rounded-[var(--select-radius)] bg-[var(--semantic-color-bg-default)] py-[var(--select-padding-y)] pl-[var(--select-padding-left)] pr-10 font-sans text-[length:var(--select-font-size)] text-[var(--semantic-color-text-default)] cursor-pointer transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{placeholder && (\n\t\t\t\t\t\t<option value=\"\" disabled={props.required}>\n\t\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t)}\n\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t<option key={option.value} value={option.value} disabled={option.disabled}>\n\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t))}\n\t\t\t\t</select>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 right-0 bottom-0 flex items-center pr-3 text-[var(--semantic-color-text-muted)] pointer-events-none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { CSSProperties, HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n\twidth?: number | string;\n\theight?: number | string;\n\tcircle?: boolean;\n\tborderRadius?: number | string;\n\tcount?: number;\n\tgap?: number;\n}\n\nconst skeletonClass =\n\t\"animate-[wave_1.5s_ease-in-out_infinite] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--semantic-color-bg-muted)_25%,var(--semantic-color-bg-subtle)_50%,var(--semantic-color-bg-muted)_75%)]\";\n\nexport function Skeleton({\n\twidth,\n\theight = 16,\n\tcircle = false,\n\tborderRadius,\n\tcount = 1,\n\tgap = 8,\n\tclassName,\n\tstyle,\n\t...props\n}: SkeletonProps) {\n\tconst resolvedRadius = circle\n\t\t? \"var(--radius-full)\"\n\t\t: borderRadius != null\n\t\t\t? typeof borderRadius === \"number\"\n\t\t\t\t? `${borderRadius}px`\n\t\t\t\t: borderRadius\n\t\t\t: \"var(--radius-md)\";\n\n\tconst itemStyle: CSSProperties = {\n\t\twidth: circle ? height : width,\n\t\theight,\n\t\tborderRadius: resolvedRadius,\n\t\t...style,\n\t};\n\n\tif (count === 1) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(skeletonClass, className)}\n\t\t\t\tstyle={itemStyle}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col\" style={{ gap }} aria-hidden=\"true\" {...props}>\n\t\t\t{Array.from({ length: count }, (_, i) => (\n\t\t\t\t<div key={`skeleton-${i}`} className={cn(skeletonClass, className)} style={itemStyle} />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst sizes = { sm: 20, md: 32, lg: 48 };\nconst strokes = { sm: 2.5, md: 3, lg: 3.5 };\n\nexport function Spinner({ size = \"md\", label, className, ...props }: SpinnerProps) {\n\tconst s = sizes[size];\n\tconst stroke = strokes[size];\n\tconst r = (s - stroke) / 2;\n\tconst circumference = 2 * Math.PI * r;\n\n\treturn (\n\t\t<div className={cn(\"flex flex-col items-center gap-3\", className)} role=\"status\" {...props}>\n\t\t\t<svg\n\t\t\t\twidth={s}\n\t\t\t\theight={s}\n\t\t\t\tviewBox={`0 0 ${s} ${s}`}\n\t\t\t\tclassName=\"animate-[ds-spin_0.8s_cubic-bezier(0.4,0,0.2,1)_infinite]\"\n\t\t\t>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-border-default)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t/>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-brand-primary)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray={`${circumference * 0.3} ${circumference * 0.7}`}\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\t{label && (\n\t\t\t\t<p className=\"m-0 font-sans text-sm text-[var(--semantic-color-text-muted)]\">{label}</p>\n\t\t\t)}\n\t\t\t<span className=\"sr-only\">Laden...</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type StatusDotColor = \"green\" | \"yellow\" | \"red\" | \"gray\";\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLDivElement> {\n\tcolor: StatusDotColor;\n\ttooltip?: string;\n\tsize?: \"sm\" | \"md\";\n\tpulse?: boolean;\n}\n\nconst colorStyles: Record<StatusDotColor, string> = {\n\tgreen: \"bg-[var(--semantic-color-feedback-success)]\",\n\tyellow: \"bg-[var(--semantic-color-feedback-warning)]\",\n\tred: \"bg-[var(--semantic-color-feedback-error)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"size-2.5\",\n\tmd: \"size-3\",\n} as const;\n\nexport function StatusDot({\n\tcolor,\n\ttooltip,\n\tsize = \"sm\",\n\tpulse,\n\tclassName,\n\t...props\n}: StatusDotProps) {\n\tconst shouldPulse = pulse ?? color === \"green\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"shrink-0 rounded-full\",\n\t\t\t\tcolorStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tshouldPulse && \"animate-pulse\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={tooltip}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TabItem {\n\tid: string;\n\tlabel: string;\n\tcount?: number;\n}\n\nexport interface TabsProps {\n\titems: TabItem[];\n\tactiveTab: string;\n\tonTabChange: (tabId: string) => void;\n\tclassName?: string;\n}\n\nexport function Tabs({ items, activeTab, onTabChange, className }: TabsProps) {\n\tconst tabRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst [indicatorStyle, setIndicatorStyle] = useState({ width: 0, left: 0 });\n\tconst [canScrollLeft, setCanScrollLeft] = useState(false);\n\tconst [canScrollRight, setCanScrollRight] = useState(false);\n\n\tconst showMobileDropdown = items.length >= 2;\n\n\tconst activeIndex = useMemo(\n\t\t() => items.findIndex((item) => item.id === activeTab),\n\t\t[items, activeTab],\n\t);\n\n\tconst activeLabel = items[activeIndex]?.label ?? \"\";\n\n\tconst updateScrollState = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tsetCanScrollLeft(el.scrollLeft > 0);\n\t\tsetCanScrollRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);\n\t}, []);\n\n\tconst updateIndicator = useCallback(() => {\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && activeTabElement.offsetWidth > 0) {\n\t\t\tsetIndicatorStyle({\n\t\t\t\tleft: activeTabElement.offsetLeft,\n\t\t\t\twidth: activeTabElement.offsetWidth,\n\t\t\t});\n\t\t}\n\t}, [activeIndex]);\n\n\tuseEffect(() => {\n\t\tupdateIndicator();\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && scrollRef.current) {\n\t\t\tconst container = scrollRef.current;\n\t\t\tconst tabLeft = activeTabElement.offsetLeft;\n\t\t\tconst tabRight = tabLeft + activeTabElement.offsetWidth;\n\t\t\tconst containerLeft = container.scrollLeft;\n\t\t\tconst containerRight = containerLeft + container.clientWidth;\n\n\t\t\tif (tabLeft < containerLeft) {\n\t\t\t\tcontainer.scrollTo({ left: tabLeft - 16, behavior: \"smooth\" });\n\t\t\t} else if (tabRight > containerRight) {\n\t\t\t\tcontainer.scrollTo({\n\t\t\t\t\tleft: tabRight - container.clientWidth + 16,\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, [activeIndex, updateIndicator]);\n\n\tuseEffect(() => {\n\t\tupdateScrollState();\n\t\tupdateIndicator();\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.addEventListener(\"scroll\", updateScrollState, { passive: true });\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tupdateScrollState();\n\t\t\tupdateIndicator();\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => {\n\t\t\tel.removeEventListener(\"scroll\", updateScrollState);\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [updateScrollState, updateIndicator]);\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t{showMobileDropdown && (\n\t\t\t\t<MobileTabDropdown\n\t\t\t\t\titems={items}\n\t\t\t\t\tactiveTab={activeTab}\n\t\t\t\t\tactiveLabel={activeLabel}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<div className={cn(\"relative\", showMobileDropdown && \"hidden md:block\")}>\n\t\t\t\t{canScrollLeft && (\n\t\t\t\t\t<div className=\"absolute top-0 bottom-0 left-0 z-10 w-6 bg-gradient-to-r from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tclassName=\"relative flex gap-[var(--tabs-gap)] overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n\t\t\t\t>\n\t\t\t\t\t{items.map((tab, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\ttabRefs.current[index] = el;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onTabChange(tab.id)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"relative pb-3 border-none bg-transparent font-sans text-sm font-medium cursor-pointer transition-colors duration-[var(--duration-fast)] whitespace-nowrap\",\n\t\t\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t\t\t? \"text-[var(--semantic-color-text-default)] font-semibold\"\n\t\t\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-muted)] hover:text-[var(--semantic-color-text-tertiary)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"whitespace-nowrap\">{tab.label}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute bottom-0 h-[var(--tabs-indicator-height)] rounded-full bg-[var(--semantic-color-text-default)] transition-[left,width] duration-[var(--duration-slow)] ease-out\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${indicatorStyle.left}px`,\n\t\t\t\t\t\t\twidth: `${indicatorStyle.width}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{canScrollRight && (\n\t\t\t\t\t<div className=\"absolute top-0 right-0 bottom-0 z-10 w-6 bg-gradient-to-l from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction MobileTabDropdown({\n\titems,\n\tactiveTab,\n\tactiveLabel,\n\tonTabChange,\n}: {\n\titems: TabItem[];\n\tactiveTab: string;\n\tactiveLabel: string;\n\tonTabChange: (id: string) => void;\n}) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst dropdownRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tif (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t}, []);\n\n\treturn (\n\t\t<div className=\"relative md:hidden\" ref={dropdownRef}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2 px-4 py-2.5 border-none rounded-lg bg-[var(--semantic-color-bg-default)] font-sans text-base font-semibold text-[var(--semantic-color-text-default)] shadow-sm cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tisOpen && \"bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span>{activeLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"20\"\n\t\t\t\t\theight=\"20\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute top-full left-0 z-[var(--tabs-mobile-z-index)] mt-1 min-w-48 border border-[var(--semantic-color-border-default)] rounded-lg bg-[var(--semantic-color-bg-default)] py-1 shadow-lg\">\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonTabChange(item.id);\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"block w-full text-left px-4 py-2.5 border-none bg-transparent font-sans text-base text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\t\t\titem.id === activeTab &&\n\t\t\t\t\t\t\t\t\t\"bg-[var(--semantic-color-bg-subtle)] font-semibold text-[var(--semantic-color-text-default)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Textarea({ label, error, id, name, rows = 4, className, ...props }: TextareaProps) {\n\tconst textareaId = id || name;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={textareaId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<textarea\n\t\t\t\tid={textareaId}\n\t\t\t\tname={name}\n\t\t\t\trows={rows}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"block w-full resize-y border border-[var(--semantic-color-border-default)] rounded-[var(--textarea-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] font-sans text-[length:var(--textarea-font-size)] text-[var(--semantic-color-text-default)] transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\taria-describedby={error ? `${textareaId}-error` : undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${textareaId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport type ToastType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface ToastProps {\n\ttype?: ToastType;\n\tmessage: string;\n\tduration?: number;\n\tonClose: () => void;\n}\n\nconst typeStyles: Record<ToastType, string> = {\n\tsuccess:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-success)]\",\n\terror:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-error)]\",\n\twarning:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-info)]\",\n};\n\nconst iconColors: Record<ToastType, string> = {\n\tsuccess: \"text-[var(--semantic-color-feedback-success)]\",\n\terror: \"text-[var(--semantic-color-feedback-error)]\",\n\twarning: \"text-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"text-[var(--semantic-color-feedback-info)]\",\n};\n\nconst icons: Record<ToastType, ReactNode> = {\n\tsuccess: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n\t\t</svg>\n\t),\n\terror: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M12 9v2m0 4h.01M10.29 3.86l-8.58 14.57A1 1 0 002.57 20h18.86a1 1 0 00.86-1.57L13.71 3.86a1 1 0 00-1.72 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Toast({ type = \"info\", message, duration = 4000, onClose }: ToastProps) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetTimeout(onClose, 200);\n\t}, [onClose]);\n\n\tuseEffect(() => {\n\t\tconst enterTimer = setTimeout(() => setIsVisible(true), 10);\n\t\tconst exitTimer = duration > 0 ? setTimeout(dismiss, duration) : undefined;\n\t\treturn () => {\n\t\t\tclearTimeout(enterTimer);\n\t\t\tif (exitTimer) clearTimeout(exitTimer);\n\t\t};\n\t}, [duration, dismiss]);\n\n\tconst content = (\n\t\t<div className=\"fixed top-[var(--toast-position-top)] right-[var(--toast-position-right)] z-[var(--toast-z-index)] pointer-events-none\">\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2.5 px-[var(--toast-padding-x)] py-[var(--toast-padding-y)] rounded-[var(--toast-radius)] bg-[var(--semantic-color-bg-default)] border border-[var(--semantic-color-border-default)] shadow-[var(--toast-shadow)] font-sans text-[length:var(--toast-font-size)] text-[var(--semantic-color-text-default)] pointer-events-auto max-w-[var(--toast-max-width)]\",\n\t\t\t\t\ttypeStyles[type],\n\t\t\t\t\tisVisible && !isExiting\n\t\t\t\t\t\t? \"animate-[toastSlideIn_200ms_ease-out_both]\"\n\t\t\t\t\t\t: \"animate-[toastSlideOut_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className={cn(\"flex shrink-0\", iconColors[type])}>{icons[type]}</span>\n\t\t\t\t<span className=\"flex-1 leading-[1.4]\">{message}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={dismiss}\n\t\t\t\t\tclassName=\"flex shrink-0 p-0.5 border-none rounded-sm bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\taria-label=\"Schließen\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t>\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(content, document.body);\n\t}\n\treturn content;\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n\tlabel?: string;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst trackSizes = {\n\tsm: \"w-[var(--toggle-sm-track-width)] h-[var(--toggle-sm-track-height)]\",\n\tmd: \"w-[var(--toggle-md-track-width)] h-[var(--toggle-md-track-height)]\",\n} as const;\n\nconst thumbSizes = {\n\tsm: \"size-[var(--toggle-sm-thumb-size)]\",\n\tmd: \"size-[var(--toggle-md-thumb-size)]\",\n} as const;\n\nconst thumbTranslate = {\n\tsm: \"peer-checked:[&>div]:translate-x-[var(--toggle-sm-thumb-translate)]\",\n\tmd: \"peer-checked:[&>div]:translate-x-[var(--toggle-md-thumb-translate)]\",\n} as const;\n\nexport function Toggle({ label, size = \"md\", id, name, className, ...props }: ToggleProps) {\n\tconst inputId = id || name || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\"inline-flex items-center gap-2.5 cursor-pointer\", className)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"peer absolute size-px overflow-hidden [clip:rect(0,0,0,0)]\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative rounded-full bg-[var(--semantic-color-border-strong)] transition-colors duration-[var(--duration-fast)] peer-checked:bg-[var(--semantic-color-brand-primary)] peer-disabled:opacity-[var(--disabled-opacity)] peer-disabled:cursor-not-allowed\",\n\t\t\t\t\ttrackSizes[size],\n\t\t\t\t\tthumbTranslate[size],\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute top-0.5 left-0.5 rounded-full bg-[var(--semantic-color-bg-default)] shadow-sm transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tthumbSizes[size],\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{label && (\n\t\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</label>\n\t);\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_jsx_runtime","sizeStyles","import_jsx_runtime","variantStyles","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","typeStyles","icons","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Accordion/Accordion.tsx","../src/lib/cn.ts","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Divider/Divider.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/FilterChips/FilterChips.tsx","../src/components/Input/Input.tsx","../src/components/ListItem/ListItem.tsx","../src/components/Logo/Logo.tsx","../src/components/Modal/Modal.tsx","../src/components/Pill/Pill.tsx","../src/components/Radio/Radio.tsx","../src/components/SearchBar/SearchBar.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Spinner/Spinner.tsx","../src/components/StatusDot/StatusDot.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.tsx"],"sourcesContent":["export type {\n\tAccordionProps,\n\tActiveFilter,\n\tAlertProps,\n\tAlertType,\n\tAvatarProps,\n\tBadgeProps,\n\tButtonProps,\n\tCardProps,\n\tCheckboxProps,\n\tConfirmationModalProps,\n\tDividerProps,\n\tDropdownMenuItem,\n\tDropdownMenuProps,\n\tFilterChipsProps,\n\tInputProps,\n\tListItemProps,\n\tLogoProps,\n\tModalProps,\n\tPillColor,\n\tPillProps,\n\tRadioProps,\n\tSearchBarProps,\n\tSelectOption,\n\tSelectProps,\n\tSkeletonProps,\n\tSpinnerProps,\n\tStatusDotColor,\n\tStatusDotProps,\n\tTabItem,\n\tTabsProps,\n\tTextareaProps,\n\tToastProps,\n\tToastType,\n\tToggleProps,\n} from \"./components\";\nexport {\n\tAccordion,\n\tAlert,\n\tAvatar,\n\tBadge,\n\tBadgeCompact,\n\tButton,\n\tCard,\n\tCheckbox,\n\tConfirmationModal,\n\tDivider,\n\tDropdownMenu,\n\tFilterChips,\n\tInput,\n\tListItem,\n\tLogo,\n\tModal,\n\tPill,\n\tRadio,\n\tSearchBar,\n\tSelect,\n\tSkeleton,\n\tSpinner,\n\tStatusDot,\n\tTabs,\n\tTextarea,\n\tToast,\n\tToggle,\n} from \"./components\";\nexport { cn } from \"./lib/cn\";\n","import { type ReactNode, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AccordionProps {\n\tlabel: string;\n\tbadge?: ReactNode;\n\tdefaultOpen?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function Accordion({\n\tlabel,\n\tbadge,\n\tdefaultOpen = false,\n\tchildren,\n\tclassName,\n}: AccordionProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\n\treturn (\n\t\t<div className={cn(\"border-t border-[var(--semantic-color-border-default)]\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"flex w-full items-center justify-between px-5 py-3 border-none bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t>\n\t\t\t\t<span className=\"flex items-center gap-2\">\n\t\t\t\t\t{label}\n\t\t\t\t\t{badge && <span className=\"inline-flex\">{badge}</span>}\n\t\t\t\t</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-normal)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid transition-[grid-template-rows] duration-[var(--duration-normal)]\",\n\t\t\t\t\tisOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"overflow-hidden\">{children}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AlertType = \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n\ttype: AlertType;\n\tmessage: string;\n}\n\nconst typeStyles: Record<AlertType, string> = {\n\terror:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)] border-[var(--semantic-color-feedback-success-border)]\",\n\twarning:\n\t\t\"bg-[var(--semantic-color-feedback-warning-light)] text-[var(--semantic-color-feedback-warning-text)] border-[var(--semantic-color-feedback-warning-border)]\",\n\tinfo: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)] border-[var(--semantic-color-feedback-info-border)]\",\n};\n\nconst icons: Record<AlertType, ReactNode> = {\n\terror: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tsuccess: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Alert({ type, message, className, ...props }: AlertProps) {\n\tif (!message) return null;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-2 px-4 py-3 rounded-md border font-sans text-sm shadow-sm\",\n\t\t\t\ttypeStyles[type],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"shrink-0 flex\">{icons[type]}</span>\n\t\t\t<span>{message}</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n\tname: string;\n\tsrc?: string | null;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"size-[var(--avatar-size-sm)] text-sm shadow-sm outline-2 outline-[var(--semantic-color-bg-default)] -outline-offset-2\",\n\tmd: \"size-[var(--avatar-size-md)] text-base shadow-md\",\n\tlg: \"size-[var(--avatar-size-lg)] text-xl shadow-md\",\n} as const;\n\nfunction getInitials(name: string): string {\n\tconst parts = name.split(\" \").filter(Boolean);\n\tif (parts.length === 0) return \"?\";\n\tif (parts.length === 1) return (parts[0]?.[0] ?? \"?\").toUpperCase();\n\treturn ((parts[0]?.[0] ?? \"\") + (parts.at(-1)?.[0] ?? \"\")).toUpperCase();\n}\n\nexport function Avatar({ name, src, size = \"sm\", className, ...props }: AvatarProps) {\n\tconst initials = getInitials(name);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex shrink-0 items-center justify-center overflow-hidden rounded-[var(--avatar-radius)] bg-gradient-to-br from-[var(--semantic-color-text-strong)] to-[var(--semantic-color-text-muted)] text-[var(--semantic-color-text-inverse)] font-sans font-[number:var(--avatar-font-weight)]\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={name}\n\t\t\t{...props}\n\t\t>\n\t\t\t{src ? (\n\t\t\t\t<img src={src} alt={name} className=\"size-full object-cover\" />\n\t\t\t) : (\n\t\t\t\t<span className=\"select-none\">{initials}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLDivElement> {\n\tcount: number | string;\n\tlabel?: string;\n\ticon?: ReactNode;\n\tshowLabel?: boolean;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst sizeStyles = {\n\tsm: \"px-2 py-1.5 gap-1.5\",\n\tmd: \"px-3 py-1.5 gap-2\",\n} as const;\n\nexport function Badge({\n\tcount,\n\tlabel,\n\ticon,\n\tshowLabel = true,\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: BadgeProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t\t{showLabel && label && (\n\t\t\t\t<span className=\"text-xs text-[var(--semantic-color-text-muted)]\">{label}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport function BadgeCompact({\n\tcount,\n\ticon,\n\tclassName,\n\t...props\n}: Omit<BadgeProps, \"label\" | \"showLabel\">) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans px-2 py-1.5 gap-1.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tvariant?: \"primary\" | \"secondary\" | \"outline\" | \"outline_danger\" | \"danger\" | \"success\" | \"ghost\";\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n\tisLoading?: boolean;\n\tloadingText?: string;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tprimary:\n\t\t\"bg-[var(--semantic-color-bg-inverse)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-inverse-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsecondary:\n\t\t\"bg-[var(--semantic-color-bg-emphasis)] text-[var(--semantic-color-text-strong)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-emphasis-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\toutline:\n\t\t\"bg-transparent text-[var(--semantic-color-text-tertiary)] border-[var(--semantic-color-border-strong)] hover:enabled:bg-[var(--semantic-color-bg-subtle)] hover:enabled:border-[var(--semantic-color-border-muted)]\",\n\toutline_danger:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)] hover:enabled:bg-[var(--semantic-color-feedback-error-light)] hover:enabled:border-[var(--semantic-color-feedback-error)]\",\n\tdanger:\n\t\t\"bg-[var(--semantic-color-feedback-error-text)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-feedback-error)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-brand-primary-hover)] hover:enabled:shadow-[var(--shadow-md)] active:enabled:scale-95\",\n\tghost:\n\t\t\"bg-transparent text-[var(--semantic-color-text-default)] hover:enabled:bg-[var(--semantic-color-bg-muted)]\",\n} as const;\n\nconst sizeStyles = {\n\tsm: \"px-[var(--button-sm-padding-x)] py-[var(--button-sm-padding-y)] text-[length:var(--button-sm-font-size)] leading-normal\",\n\tmd: \"px-[var(--button-md-padding-x)] py-[var(--button-md-padding-y)] text-[length:var(--button-md-font-size)] leading-normal\",\n\tlg: \"px-[var(--button-lg-padding-x)] py-[var(--button-lg-padding-y)] text-[length:var(--button-lg-font-size)] leading-normal\",\n\txl: \"px-[var(--button-xl-padding-x)] py-[var(--button-xl-padding-y)] text-[length:var(--button-xl-font-size)] leading-normal\",\n} as const;\n\nexport function Button({\n\tvariant = \"primary\",\n\tsize = \"md\",\n\tisLoading = false,\n\tloadingText = \"Laden...\",\n\tclassName,\n\tchildren,\n\tdisabled,\n\ttype = \"submit\",\n\t...props\n}: ButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center justify-center gap-2 border border-transparent rounded-[var(--button-radius)] font-sans font-[number:var(--button-font-weight)] cursor-pointer transition-all duration-[var(--button-transition-duration)] focus-visible:outline-none disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={disabled || isLoading}\n\t\t\taria-busy={isLoading || undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isLoading ? loadingText : children}\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n\tvariant?: \"default\" | \"elevated\" | \"glass\";\n\tpadding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n\thoverable?: boolean;\n\tselected?: boolean;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tdefault: \"border border-[var(--semantic-color-border-default)]\",\n\televated:\n\t\t\"border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\tglass:\n\t\t\"bg-[var(--semantic-color-bg-default)]/80 shadow-lg backdrop-blur-[var(--card-backdrop-blur)]\",\n} as const;\n\nconst paddingStyles = {\n\tnone: \"\",\n\tsm: \"p-[var(--card-padding-sm)]\",\n\tmd: \"p-[var(--card-padding)]\",\n\tlg: \"p-[var(--card-padding-lg)]\",\n} as const;\n\nconst selectedStyles =\n\t\"border-2 border-[var(--semantic-color-brand-primary)] bg-[var(--semantic-color-feedback-success-light)]\";\n\nexport function Card({\n\tvariant = \"default\",\n\tpadding = \"md\",\n\thoverable = false,\n\tselected = false,\n\tclassName,\n\tchildren,\n\t...props\n}: CardProps) {\n\tif (hoverable) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"group relative overflow-hidden rounded-[var(--card-radius)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\t\t\"cursor-pointer border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\t\t\t\t\t\"hover:translate-y-[var(--card-hover-lift)] hover:border-[var(--semantic-color-border-muted)]/50 hover:bg-[var(--semantic-color-bg-default)] hover:shadow-[var(--card-shadow-hover)]\",\n\t\t\t\t\t\"active:scale-[var(--card-active-scale)]\",\n\t\t\t\t\tselected && selectedStyles,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-subtle)]/80 to-[var(--semantic-color-bg-muted)]/80 opacity-[0.03] pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-px rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-default)]/80 to-[var(--semantic-color-bg-default)]/20 pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] shadow-[inset_0_0_0_1px_var(--card-glass-border)] transition-shadow duration-[var(--card-transition-duration)] pointer-events-none group-hover:shadow-[inset_0_0_0_1px_var(--card-glass-border-hover)]\" />\n\t\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-r from-transparent via-[var(--semantic-color-border-muted)]/20 to-transparent opacity-0 transition-opacity duration-[var(--card-transition-duration)] pointer-events-none group-hover:opacity-100\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative overflow-hidden rounded-[var(--card-radius)] bg-[var(--semantic-color-bg-default)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tselected && selectedStyles,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t</div>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Checkbox({ label, id, name, className, ...props }: CheckboxProps) {\n\tconst inputId = id || name || label.toLowerCase().replace(/\\s+/g, \"-\");\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--checkbox-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--checkbox-size)] rounded-sm border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n\tspacing?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst spacingStyles = {\n\tsm: \"my-2\",\n\tmd: \"my-4\",\n\tlg: \"my-8\",\n} as const;\n\nexport function Divider({ spacing = \"md\", label, className, ...props }: DividerProps) {\n\tif (label) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex items-center gap-4\", spacingStyles[spacing], className)}>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<span className=\"font-sans text-xs font-medium text-[var(--semantic-color-text-muted)] whitespace-nowrap\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<hr\n\t\t\tclassName={cn(\n\t\t\t\t\"border-0 border-t border-[var(--semantic-color-border-default)]\",\n\t\t\t\tspacingStyles[spacing],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DropdownMenuItem {\n\tid: string;\n\tlabel: string;\n\tonClick: () => void;\n\tvariant?: \"default\" | \"danger\";\n}\n\nexport interface DropdownMenuProps {\n\titems: DropdownMenuItem[];\n\ttrigger?: ReactNode;\n\tclassName?: string;\n}\n\nexport function DropdownMenu({ items, trigger, className }: DropdownMenuProps) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [position, setPosition] = useState({ top: 0, right: 0 });\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst menuRef = useRef<HTMLDivElement>(null);\n\n\tconst close = useCallback(() => setIsOpen(false), []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tconst target = event.target as Node;\n\t\t\tif (!buttonRef.current?.contains(target) && !menuRef.current?.contains(target)) {\n\t\t\t\tclose();\n\t\t\t}\n\t\t}\n\n\t\tfunction handleScroll() {\n\t\t\tclose();\n\t\t}\n\n\t\tfunction handleEscape(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") close();\n\t\t}\n\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\twindow.addEventListener(\"scroll\", handleScroll, true);\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll, true);\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t};\n\t}, [isOpen, close]);\n\n\tconst handleToggle = () => {\n\t\tif (!isOpen && buttonRef.current) {\n\t\t\tconst rect = buttonRef.current.getBoundingClientRect();\n\t\t\tsetPosition({\n\t\t\t\ttop: rect.bottom + 4,\n\t\t\t\tright: window.innerWidth - rect.right,\n\t\t\t});\n\t\t}\n\t\tsetIsOpen((prev) => !prev);\n\t};\n\n\tconst menu = isOpen && typeof document !== \"undefined\" && (\n\t\t<div\n\t\t\tref={menuRef}\n\t\t\tclassName=\"fixed z-[var(--dropdown-z-index)] w-[var(--dropdown-width)] p-[var(--dropdown-padding)] border border-[var(--semantic-color-border-default)] rounded-[var(--dropdown-radius)] bg-[var(--semantic-color-bg-default)] shadow-[var(--dropdown-shadow)]\"\n\t\t\tstyle={{ top: position.top, right: position.right }}\n\t\t\trole=\"menu\"\n\t\t>\n\t\t\t{items.map((item) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={item.id}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex w-full items-center px-[var(--dropdown-item-padding-x)] py-[var(--dropdown-item-padding-y)] border-none rounded-[var(--dropdown-item-radius)] bg-transparent font-sans text-[length:var(--dropdown-item-font-size)] text-left cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\t\titem.variant === \"danger\"\n\t\t\t\t\t\t\t? \"text-[var(--semantic-color-feedback-error-text)] hover:bg-[var(--semantic-color-feedback-error-light)]\"\n\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-tertiary)] hover:bg-[var(--semantic-color-bg-muted)]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{item.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tref={buttonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggle}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center justify-center p-1 border-none rounded-md bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-secondary)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-label=\"Aktionen\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t>\n\t\t\t\t{trigger || (\n\t\t\t\t\t<svg className=\"size-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t\t\t\t<path d=\"M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z\" />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{menu && createPortal(menu, document.body)}\n\t\t</>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ActiveFilter {\n\tid: string;\n\tlabel: string;\n\tonRemove: () => void;\n}\n\nexport interface FilterChipsProps extends HTMLAttributes<HTMLDivElement> {\n\tfilters: ActiveFilter[];\n\tonClearAll?: () => void;\n}\n\nexport function FilterChips({ filters, onClearAll, className, ...props }: FilterChipsProps) {\n\tif (filters.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn(\"flex items-center justify-between\", className)} {...props}>\n\t\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t\t{filters.map((filter) => (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={filter.id}\n\t\t\t\t\t\tclassName=\"inline-flex items-center gap-1 px-3 py-1 rounded-full bg-[var(--semantic-color-brand-primary-light)] font-sans text-xs font-medium text-[var(--semantic-color-brand-primary-dark)]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{filter.label}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={filter.onRemove}\n\t\t\t\t\t\t\tclassName=\"flex p-0 border-none bg-transparent text-inherit cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{onClearAll && filters.length > 1 && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClearAll}\n\t\t\t\t\tclassName=\"p-0 border-none bg-transparent font-sans text-xs font-medium text-[var(--semantic-color-brand-primary)] cursor-pointer whitespace-nowrap transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t>\n\t\t\t\t\tAlle löschen\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type InputHTMLAttributes, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Input({ label, error, id, name, type = \"text\", className, ...props }: InputProps) {\n\tconst [showPassword, setShowPassword] = useState(false);\n\tconst inputId = id || name;\n\tconst isPassword = type === \"password\";\n\tconst resolvedType = isPassword && showPassword ? \"text\" : type;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<input\n\t\t\t\t\tid={inputId}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype={resolvedType}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--input-padding-x)] py-[var(--input-padding-y)] font-sans text-[length:var(--input-font-size)] text-[var(--semantic-color-text-default)] shadow-[var(--shadow-sm)] transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\tisPassword && \"pr-10\",\n\t\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\t\taria-describedby={error ? `${inputId}-error` : undefined}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t{isPassword && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => setShowPassword((prev) => !prev)}\n\t\t\t\t\t\tclassName=\"absolute top-1/2 right-3 -translate-y-1/2 flex items-center justify-center p-0 border-none bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\t\taria-label={showPassword ? \"Passwort verbergen\" : \"Passwort anzeigen\"}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${inputId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ListItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n\tactive?: boolean;\n\tonClick?: () => void;\n\tchildren: ReactNode;\n}\n\nexport function ListItem({\n\tactive = false,\n\tonClick,\n\tchildren,\n\tclassName,\n\t...props\n}: ListItemProps) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full cursor-pointer items-center gap-3 rounded-xl px-3 py-3 text-left transition-all\",\n\t\t\t\tactive\n\t\t\t\t\t? \"border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)]\"\n\t\t\t\t\t: \"border border-transparent hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n","import type { SVGProps } from \"react\";\n\nexport interface LogoProps extends SVGProps<SVGSVGElement> {\n\tsize?: number | string;\n}\n\nexport function Logo({ size = 48, ...props }: LogoProps) {\n\treturn (\n\t\t<svg\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox=\"0 0 1000 1000\"\n\t\t\tfill=\"none\"\n\t\t\taria-label=\"Ganztagshelden Logo\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g transform=\"matrix(1.62384,0,0,1.62384,-670.097018,-377.993255)\">\n\t\t\t\t{/* Cape: Steel 800 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M659.306,666.563C647.321,692.452 643.608,697.805 636.105,707.186C597.15,755.887 537.182,756.845 535.652,756.159C520.635,749.432 541.639,734.294 543.087,720.432C546.681,686.029 515.354,694.397 490.973,657.204C474.084,631.441 470.729,569.063 491.533,580.44C566.83,621.619 610.108,565.941 697.497,581.514C795.809,599.034 828.378,545.138 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C677.562,667.944 669.794,667.148 667.332,663.505C665.729,661.133 659.929,665.972 659.306,666.563Z\"\n\t\t\t\t\tfill=\"var(--color-steel-800, #1E293B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Body: Steel 500 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M675.584,684.76C676.835,613.868 598.89,738.438 567.488,699.03C544.801,670.559 676.869,576.383 715.532,582.995C744.492,587.948 775.313,577.886 789.684,572.171C791.809,570.862 793.873,569.676 795.866,568.627C814.646,558.742 857.526,515.802 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C674.245,687.434 674.757,686.206 675.584,684.76Z\"\n\t\t\t\t\tfill=\"var(--color-steel-500, #64748B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Roof: Steel 600 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M460.76,425.665C465.048,418.094 676.602,255.297 689.716,245.799C722.985,221.705 734.948,230.838 791.173,274.938C956.769,404.821 957.228,404.054 971.138,415.929C994.202,435.618 980.079,457.145 973.404,463.396C950.46,484.884 936.954,468.134 867.775,414.13C729.691,306.338 729.459,303.94 718.557,304.907C707.569,305.88 567.819,420.024 512.203,461.094C468.741,493.188 448.741,446.89 460.76,425.665Z\"\n\t\t\t\t\tfill=\"var(--color-steel-600, #475569)\"\n\t\t\t\t/>\n\t\t\t\t{/* Head: Steel 400 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M706.539,565.374C599.871,517.702 661.839,386.507 747.483,403.592C856.658,425.371 827.324,597.116 706.539,565.374Z\"\n\t\t\t\t\tfill=\"var(--color-steel-400, #94A3B8)\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\ttitle?: string;\n\tchildren: ReactNode;\n\tfooter?: ReactNode;\n}\n\nexport function Modal({ isOpen, onClose, title, children, footer }: ModalProps) {\n\tconst [isAnimating, setIsAnimating] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\tconst onCloseRef = useRef(onClose);\n\tonCloseRef.current = onClose;\n\n\tconst handleClose = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetIsAnimating(false);\n\t\tsetTimeout(() => {\n\t\t\tonCloseRef.current();\n\t\t}, 250);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) {\n\t\t\tsetIsAnimating(false);\n\t\t\tsetIsExiting(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleEscape = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") handleClose();\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst timer = setTimeout(() => setIsAnimating(true), 10);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t\tclearTimeout(timer);\n\t\t};\n\t}, [isOpen, handleClose]);\n\n\tif (!isOpen) return null;\n\n\tconst entering = isAnimating && !isExiting;\n\tconst idle = !isAnimating && !isExiting;\n\n\tconst modalContent = (\n\t\t<div className=\"fixed inset-0 z-[var(--modal-z-index)] flex items-center justify-center\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleClose}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute inset-0 border-none p-0 cursor-default transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tentering ? \"bg-black/40\" : \"bg-transparent\",\n\t\t\t\t)}\n\t\t\t\taria-label=\"Hintergrund - Klicken zum Schließen\"\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-[calc(100%-2rem)] max-w-[var(--modal-max-width)] max-h-[calc(100vh-4rem)] mx-4 overflow-hidden rounded-[var(--modal-radius)] border border-[var(--semantic-color-border-default)] bg-[image:var(--modal-bg)] backdrop-blur-[var(--modal-backdrop-blur)] shadow-[var(--modal-shadow)]\",\n\t\t\t\t\tidle && \"opacity-0\",\n\t\t\t\t\tentering && \"animate-[modalEnter_250ms_ease-out_both]\",\n\t\t\t\t\tisExiting && \"animate-[modalExit_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-label={title || undefined}\n\t\t\t>\n\t\t\t\t{title ? (\n\t\t\t\t\t<div className=\"flex items-center justify-between px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-b border-[var(--semantic-color-border-subtle)]\">\n\t\t\t\t\t\t<h3 className=\"font-sans text-lg font-semibold text-[var(--semantic-color-text-default)] m-0 pr-4\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"absolute top-4 right-4 z-10\">\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] overflow-y-auto max-h-[calc(100vh-8rem)] text-[var(--semantic-color-text-default)] font-sans leading-relaxed opacity-0\",\n\t\t\t\t\t\tentering && \"animate-[contentReveal_300ms_ease-out_50ms_both]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className=\"flex justify-end gap-3 px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-t border-[var(--semantic-color-border-subtle)] bg-[var(--modal-footer-bg)]\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(modalContent, document.body);\n\t}\n\n\treturn modalContent;\n}\n\nexport interface ConfirmationModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n\ttitle: string;\n\tchildren: ReactNode;\n\tconfirmText?: string;\n\tcancelText?: string;\n\tisConfirmLoading?: boolean;\n\tisConfirmDisabled?: boolean;\n\tvariant?: \"danger\" | \"primary\";\n}\n\nexport function ConfirmationModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n\ttitle,\n\tchildren,\n\tconfirmText = \"Bestätigen\",\n\tcancelText = \"Abbrechen\",\n\tisConfirmLoading = false,\n\tisConfirmDisabled = false,\n\tvariant = \"primary\",\n}: ConfirmationModalProps) {\n\tconst footer = (\n\t\t<>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onClose}\n\t\t\t\tclassName=\"flex-1 px-4 py-2 border border-[var(--semantic-color-border-strong)] rounded-md bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-tertiary)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)] hover:border-[var(--semantic-color-border-muted)] hover:scale-105 hover:shadow-md active:scale-100\"\n\t\t\t>\n\t\t\t\t{cancelText}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onConfirm}\n\t\t\t\tdisabled={isConfirmLoading || isConfirmDisabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 px-4 py-2 border-none rounded-md font-sans text-sm font-medium text-[var(--semantic-color-text-inverse)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:enabled:scale-105 hover:enabled:shadow-lg active:enabled:scale-100 disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\tvariant === \"danger\"\n\t\t\t\t\t\t? \"bg-[var(--semantic-color-feedback-error-text)]\"\n\t\t\t\t\t\t: \"bg-[var(--semantic-color-bg-inverse)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{isConfirmLoading ? (\n\t\t\t\t\t<span className=\"flex items-center justify-center gap-2\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclassName=\"size-4 animate-[ds-spin_0.7s_linear_infinite]\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle opacity={0.25} cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\topacity={0.75}\n\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\td=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tWird geladen...\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tconfirmText\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} footer={footer}>\n\t\t\t{children}\n\t\t</Modal>\n\t);\n}\n\nfunction CloseButton({ onClick }: { onClick: () => void }) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName=\"group flex items-center justify-center shrink-0 size-[var(--modal-close-size)] p-0 border-none rounded-lg bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-default)] hover:scale-105 active:scale-95\"\n\t\t\taria-label=\"Modal schließen\"\n\t\t>\n\t\t\t<svg\n\t\t\t\tclassName=\"transition-transform duration-[var(--duration-fast)] group-hover:rotate-90\"\n\t\t\t\twidth=\"20\"\n\t\t\t\theight=\"20\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth={2}\n\t\t\t>\n\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t</svg>\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type PillColor = \"red\" | \"green\" | \"blue\" | \"orange\" | \"purple\" | \"gray\";\n\nexport interface PillProps extends HTMLAttributes<HTMLSpanElement> {\n\tlabel: string;\n\tcolor?: PillColor;\n\tvariant?: \"solid\" | \"subtle\";\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tdot?: boolean;\n}\n\nconst solidStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-strong)] text-[var(--semantic-color-text-inverse)]\",\n\tgreen: \"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info)] text-[var(--semantic-color-text-inverse)]\",\n\torange: \"bg-[var(--semantic-color-feedback-warning)] text-[var(--semantic-color-text-inverse)]\",\n\tpurple: \"bg-[var(--semantic-color-feedback-accent)] text-[var(--semantic-color-text-inverse)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)] text-[var(--semantic-color-text-inverse)]\",\n};\n\nconst subtleStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)]\",\n\tgreen:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)]\",\n\torange:\n\t\t\"bg-[var(--semantic-color-brand-secondary-light)] text-[var(--semantic-color-feedback-warning-text)]\",\n\tpurple:\n\t\t\"bg-[var(--semantic-color-feedback-accent-light)] text-[var(--semantic-color-feedback-accent-text)]\",\n\tgray: \"bg-[var(--semantic-color-bg-muted)] text-[var(--semantic-color-text-secondary)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"px-2 py-0.5 text-xs\",\n\tmd: \"px-3 py-1.5 text-xs\",\n\tlg: \"px-4 py-2 text-sm\",\n} as const;\n\nconst dotSizes = {\n\tsm: \"size-1 mr-1.5\",\n\tmd: \"size-1.5 mr-2\",\n\tlg: \"size-2 mr-2.5\",\n} as const;\n\nexport function Pill({\n\tlabel,\n\tcolor = \"gray\",\n\tvariant = \"solid\",\n\tsize = \"md\",\n\tdot = true,\n\tclassName,\n\t...props\n}: PillProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-full font-sans font-bold whitespace-nowrap\",\n\t\t\t\tvariant === \"solid\" ? solidStyles[color] : subtleStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{dot && <span className={cn(\"rounded-full bg-current opacity-80\", dotSizes[size])} />}\n\t\t\t{label}\n\t\t</span>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Radio({ label, id, name, className, ...props }: RadioProps) {\n\tconst inputId = id || `${name}-${label.toLowerCase().replace(/\\s+/g, \"-\")}`;\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--radio-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"radio\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--radio-size)] rounded-full border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SearchBarProps\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tonClear?: () => void;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"py-2 pl-9 pr-3 text-sm\",\n\tmd: \"py-2.5 pl-9 pr-10 text-sm\",\n\tlg: \"py-3 px-10 text-base\",\n} as const;\n\nconst iconSizes = {\n\tsm: \"size-4\",\n\tmd: \"size-4\",\n\tlg: \"size-5\",\n} as const;\n\nexport function SearchBar({\n\tvalue,\n\tonChange,\n\tonClear,\n\tplaceholder = \"Name suchen...\",\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: SearchBarProps) {\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<svg\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute top-1/2 left-3 -translate-y-1/2 text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\ticonSizes[size],\n\t\t\t\t)}\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\td=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\n\t\t\t<input\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] text-[var(--semantic-color-text-default)] font-sans transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\tsizeStyles[size],\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\n\t\t\t{value && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tonChange(\"\");\n\t\t\t\t\t\tonClear?.();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"absolute top-1/2 right-2 -translate-y-1/2 flex items-center justify-center p-1 border-none rounded-full bg-transparent cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)]\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName={cn(\"text-[var(--semantic-color-text-muted)]\", iconSizes[size])}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { SelectHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n\tlabel?: string;\n\tplaceholder?: string;\n\toptions: SelectOption[];\n}\n\nexport function Select({ label, placeholder, options, id, className, ...props }: SelectProps) {\n\tconst selectId = id || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-1\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={selectId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<select\n\t\t\t\t\tid={selectId}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"w-full appearance-none border border-[var(--semantic-color-border-default)] rounded-[var(--select-radius)] bg-[var(--semantic-color-bg-default)] py-[var(--select-padding-y)] pl-[var(--select-padding-left)] pr-10 font-sans text-[length:var(--select-font-size)] text-[var(--semantic-color-text-default)] cursor-pointer transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{placeholder && (\n\t\t\t\t\t\t<option value=\"\" disabled={props.required}>\n\t\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t)}\n\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t<option key={option.value} value={option.value} disabled={option.disabled}>\n\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t))}\n\t\t\t\t</select>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 right-0 bottom-0 flex items-center pr-3 text-[var(--semantic-color-text-muted)] pointer-events-none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { CSSProperties, HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n\twidth?: number | string;\n\theight?: number | string;\n\tcircle?: boolean;\n\tborderRadius?: number | string;\n\tcount?: number;\n\tgap?: number;\n}\n\nconst skeletonClass =\n\t\"animate-[wave_1.5s_ease-in-out_infinite] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--semantic-color-bg-muted)_25%,var(--semantic-color-bg-subtle)_50%,var(--semantic-color-bg-muted)_75%)]\";\n\nexport function Skeleton({\n\twidth,\n\theight = 16,\n\tcircle = false,\n\tborderRadius,\n\tcount = 1,\n\tgap = 8,\n\tclassName,\n\tstyle,\n\t...props\n}: SkeletonProps) {\n\tconst resolvedRadius = circle\n\t\t? \"var(--radius-full)\"\n\t\t: borderRadius != null\n\t\t\t? typeof borderRadius === \"number\"\n\t\t\t\t? `${borderRadius}px`\n\t\t\t\t: borderRadius\n\t\t\t: \"var(--radius-md)\";\n\n\tconst itemStyle: CSSProperties = {\n\t\twidth: circle ? height : width,\n\t\theight,\n\t\tborderRadius: resolvedRadius,\n\t\t...style,\n\t};\n\n\tif (count === 1) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(skeletonClass, className)}\n\t\t\t\tstyle={itemStyle}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col\" style={{ gap }} aria-hidden=\"true\" {...props}>\n\t\t\t{Array.from({ length: count }, (_, i) => (\n\t\t\t\t<div key={`skeleton-${i}`} className={cn(skeletonClass, className)} style={itemStyle} />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst sizes = { sm: 20, md: 32, lg: 48 };\nconst strokes = { sm: 2.5, md: 3, lg: 3.5 };\n\nexport function Spinner({ size = \"md\", label, className, ...props }: SpinnerProps) {\n\tconst s = sizes[size];\n\tconst stroke = strokes[size];\n\tconst r = (s - stroke) / 2;\n\tconst circumference = 2 * Math.PI * r;\n\n\treturn (\n\t\t<div className={cn(\"flex flex-col items-center gap-3\", className)} role=\"status\" {...props}>\n\t\t\t<svg\n\t\t\t\twidth={s}\n\t\t\t\theight={s}\n\t\t\t\tviewBox={`0 0 ${s} ${s}`}\n\t\t\t\tclassName=\"animate-[ds-spin_0.8s_cubic-bezier(0.4,0,0.2,1)_infinite]\"\n\t\t\t>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-border-default)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t/>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-brand-primary)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray={`${circumference * 0.3} ${circumference * 0.7}`}\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\t{label && (\n\t\t\t\t<p className=\"m-0 font-sans text-sm text-[var(--semantic-color-text-muted)]\">{label}</p>\n\t\t\t)}\n\t\t\t<span className=\"sr-only\">Laden...</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type StatusDotColor = \"green\" | \"yellow\" | \"red\" | \"gray\";\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLDivElement> {\n\tcolor: StatusDotColor;\n\ttooltip?: string;\n\tsize?: \"sm\" | \"md\";\n\tpulse?: boolean;\n}\n\nconst colorStyles: Record<StatusDotColor, string> = {\n\tgreen: \"bg-[var(--semantic-color-feedback-success)]\",\n\tyellow: \"bg-[var(--semantic-color-feedback-warning)]\",\n\tred: \"bg-[var(--semantic-color-feedback-error)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"size-2.5\",\n\tmd: \"size-3\",\n} as const;\n\nexport function StatusDot({\n\tcolor,\n\ttooltip,\n\tsize = \"sm\",\n\tpulse,\n\tclassName,\n\t...props\n}: StatusDotProps) {\n\tconst shouldPulse = pulse ?? color === \"green\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"shrink-0 rounded-full\",\n\t\t\t\tcolorStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tshouldPulse && \"animate-pulse\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={tooltip}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TabItem {\n\tid: string;\n\tlabel: string;\n\tcount?: number;\n}\n\nexport interface TabsProps {\n\titems: TabItem[];\n\tactiveTab: string;\n\tonTabChange: (tabId: string) => void;\n\tclassName?: string;\n}\n\nexport function Tabs({ items, activeTab, onTabChange, className }: TabsProps) {\n\tconst tabRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst [indicatorStyle, setIndicatorStyle] = useState({ width: 0, left: 0 });\n\tconst [canScrollLeft, setCanScrollLeft] = useState(false);\n\tconst [canScrollRight, setCanScrollRight] = useState(false);\n\n\tconst showMobileDropdown = items.length >= 2;\n\n\tconst activeIndex = useMemo(\n\t\t() => items.findIndex((item) => item.id === activeTab),\n\t\t[items, activeTab],\n\t);\n\n\tconst activeLabel = items[activeIndex]?.label ?? \"\";\n\n\tconst updateScrollState = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tsetCanScrollLeft(el.scrollLeft > 0);\n\t\tsetCanScrollRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);\n\t}, []);\n\n\tconst updateIndicator = useCallback(() => {\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && activeTabElement.offsetWidth > 0) {\n\t\t\tsetIndicatorStyle({\n\t\t\t\tleft: activeTabElement.offsetLeft,\n\t\t\t\twidth: activeTabElement.offsetWidth,\n\t\t\t});\n\t\t}\n\t}, [activeIndex]);\n\n\tuseEffect(() => {\n\t\tupdateIndicator();\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && scrollRef.current) {\n\t\t\tconst container = scrollRef.current;\n\t\t\tconst tabLeft = activeTabElement.offsetLeft;\n\t\t\tconst tabRight = tabLeft + activeTabElement.offsetWidth;\n\t\t\tconst containerLeft = container.scrollLeft;\n\t\t\tconst containerRight = containerLeft + container.clientWidth;\n\n\t\t\tif (tabLeft < containerLeft) {\n\t\t\t\tcontainer.scrollTo({ left: tabLeft - 16, behavior: \"smooth\" });\n\t\t\t} else if (tabRight > containerRight) {\n\t\t\t\tcontainer.scrollTo({\n\t\t\t\t\tleft: tabRight - container.clientWidth + 16,\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, [activeIndex, updateIndicator]);\n\n\tuseEffect(() => {\n\t\tupdateScrollState();\n\t\tupdateIndicator();\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.addEventListener(\"scroll\", updateScrollState, { passive: true });\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tupdateScrollState();\n\t\t\tupdateIndicator();\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => {\n\t\t\tel.removeEventListener(\"scroll\", updateScrollState);\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [updateScrollState, updateIndicator]);\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t{showMobileDropdown && (\n\t\t\t\t<MobileTabDropdown\n\t\t\t\t\titems={items}\n\t\t\t\t\tactiveTab={activeTab}\n\t\t\t\t\tactiveLabel={activeLabel}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<div className={cn(\"relative\", showMobileDropdown && \"hidden md:block\")}>\n\t\t\t\t{canScrollLeft && (\n\t\t\t\t\t<div className=\"absolute top-0 bottom-0 left-0 z-10 w-6 bg-gradient-to-r from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tclassName=\"relative flex gap-[var(--tabs-gap)] overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n\t\t\t\t>\n\t\t\t\t\t{items.map((tab, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\ttabRefs.current[index] = el;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onTabChange(tab.id)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"relative pb-3 border-none bg-transparent font-sans text-sm font-medium cursor-pointer transition-colors duration-[var(--duration-fast)] whitespace-nowrap\",\n\t\t\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t\t\t? \"text-[var(--semantic-color-text-default)] font-semibold\"\n\t\t\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-muted)] hover:text-[var(--semantic-color-text-tertiary)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"whitespace-nowrap\">{tab.label}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute bottom-0 h-[var(--tabs-indicator-height)] rounded-full bg-[var(--semantic-color-text-default)] transition-[left,width] duration-[var(--duration-slow)] ease-out\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${indicatorStyle.left}px`,\n\t\t\t\t\t\t\twidth: `${indicatorStyle.width}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{canScrollRight && (\n\t\t\t\t\t<div className=\"absolute top-0 right-0 bottom-0 z-10 w-6 bg-gradient-to-l from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction MobileTabDropdown({\n\titems,\n\tactiveTab,\n\tactiveLabel,\n\tonTabChange,\n}: {\n\titems: TabItem[];\n\tactiveTab: string;\n\tactiveLabel: string;\n\tonTabChange: (id: string) => void;\n}) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst dropdownRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tif (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t}, []);\n\n\treturn (\n\t\t<div className=\"relative md:hidden\" ref={dropdownRef}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2 px-4 py-2.5 border-none rounded-lg bg-[var(--semantic-color-bg-default)] font-sans text-base font-semibold text-[var(--semantic-color-text-default)] shadow-sm cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tisOpen && \"bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span>{activeLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"20\"\n\t\t\t\t\theight=\"20\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute top-full left-0 z-[var(--tabs-mobile-z-index)] mt-1 min-w-48 border border-[var(--semantic-color-border-default)] rounded-lg bg-[var(--semantic-color-bg-default)] py-1 shadow-lg\">\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonTabChange(item.id);\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"block w-full text-left px-4 py-2.5 border-none bg-transparent font-sans text-base text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\t\t\titem.id === activeTab &&\n\t\t\t\t\t\t\t\t\t\"bg-[var(--semantic-color-bg-subtle)] font-semibold text-[var(--semantic-color-text-default)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Textarea({ label, error, id, name, rows = 4, className, ...props }: TextareaProps) {\n\tconst textareaId = id || name;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={textareaId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<textarea\n\t\t\t\tid={textareaId}\n\t\t\t\tname={name}\n\t\t\t\trows={rows}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"block w-full resize-y border border-[var(--semantic-color-border-default)] rounded-[var(--textarea-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] font-sans text-[length:var(--textarea-font-size)] text-[var(--semantic-color-text-default)] transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\taria-describedby={error ? `${textareaId}-error` : undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${textareaId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport type ToastType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface ToastProps {\n\ttype?: ToastType;\n\tmessage: string;\n\tduration?: number;\n\tonClose: () => void;\n}\n\nconst typeStyles: Record<ToastType, string> = {\n\tsuccess:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-success)]\",\n\terror:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-error)]\",\n\twarning:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-info)]\",\n};\n\nconst iconColors: Record<ToastType, string> = {\n\tsuccess: \"text-[var(--semantic-color-feedback-success)]\",\n\terror: \"text-[var(--semantic-color-feedback-error)]\",\n\twarning: \"text-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"text-[var(--semantic-color-feedback-info)]\",\n};\n\nconst icons: Record<ToastType, ReactNode> = {\n\tsuccess: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n\t\t</svg>\n\t),\n\terror: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M12 9v2m0 4h.01M10.29 3.86l-8.58 14.57A1 1 0 002.57 20h18.86a1 1 0 00.86-1.57L13.71 3.86a1 1 0 00-1.72 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Toast({ type = \"info\", message, duration = 4000, onClose }: ToastProps) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetTimeout(onClose, 200);\n\t}, [onClose]);\n\n\tuseEffect(() => {\n\t\tconst enterTimer = setTimeout(() => setIsVisible(true), 10);\n\t\tconst exitTimer = duration > 0 ? setTimeout(dismiss, duration) : undefined;\n\t\treturn () => {\n\t\t\tclearTimeout(enterTimer);\n\t\t\tif (exitTimer) clearTimeout(exitTimer);\n\t\t};\n\t}, [duration, dismiss]);\n\n\tconst content = (\n\t\t<div className=\"fixed top-[var(--toast-position-top)] right-[var(--toast-position-right)] z-[var(--toast-z-index)] pointer-events-none\">\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2.5 px-[var(--toast-padding-x)] py-[var(--toast-padding-y)] rounded-[var(--toast-radius)] bg-[var(--semantic-color-bg-default)] border border-[var(--semantic-color-border-default)] shadow-[var(--toast-shadow)] font-sans text-[length:var(--toast-font-size)] text-[var(--semantic-color-text-default)] pointer-events-auto max-w-[var(--toast-max-width)]\",\n\t\t\t\t\ttypeStyles[type],\n\t\t\t\t\tisVisible && !isExiting\n\t\t\t\t\t\t? \"animate-[toastSlideIn_200ms_ease-out_both]\"\n\t\t\t\t\t\t: \"animate-[toastSlideOut_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className={cn(\"flex shrink-0\", iconColors[type])}>{icons[type]}</span>\n\t\t\t\t<span className=\"flex-1 leading-[1.4]\">{message}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={dismiss}\n\t\t\t\t\tclassName=\"flex shrink-0 p-0.5 border-none rounded-sm bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\taria-label=\"Schließen\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t>\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(content, document.body);\n\t}\n\treturn content;\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n\tlabel?: string;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst trackSizes = {\n\tsm: \"w-[var(--toggle-sm-track-width)] h-[var(--toggle-sm-track-height)]\",\n\tmd: \"w-[var(--toggle-md-track-width)] h-[var(--toggle-md-track-height)]\",\n} as const;\n\nconst thumbSizes = {\n\tsm: \"size-[var(--toggle-sm-thumb-size)]\",\n\tmd: \"size-[var(--toggle-md-thumb-size)]\",\n} as const;\n\nconst thumbTranslate = {\n\tsm: \"peer-checked:[&>div]:translate-x-[var(--toggle-sm-thumb-translate)]\",\n\tmd: \"peer-checked:[&>div]:translate-x-[var(--toggle-md-thumb-translate)]\",\n} as const;\n\nexport function Toggle({ label, size = \"md\", id, name, className, ...props }: ToggleProps) {\n\tconst inputId = id || name || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\"inline-flex items-center gap-2.5 cursor-pointer\", className)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"peer absolute size-px overflow-hidden [clip:rect(0,0,0,0)]\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative rounded-full bg-[var(--semantic-color-border-strong)] transition-colors duration-[var(--duration-fast)] peer-checked:bg-[var(--semantic-color-brand-primary)] peer-disabled:opacity-[var(--disabled-opacity)] peer-disabled:cursor-not-allowed\",\n\t\t\t\t\ttrackSizes[size],\n\t\t\t\t\tthumbTranslate[size],\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute top-0.5 left-0.5 rounded-full bg-[var(--semantic-color-bg-default)] shadow-sm transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tthumbSizes[size],\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{label && (\n\t\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</label>\n\t);\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_jsx_runtime","sizeStyles","import_jsx_runtime","variantStyles","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","sizeStyles","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","typeStyles","icons","import_jsx_runtime"]}
|
package/dist/index.js
CHANGED
|
@@ -621,7 +621,7 @@ function ListItem({
|
|
|
621
621
|
onClick,
|
|
622
622
|
className: cn(
|
|
623
623
|
"flex w-full cursor-pointer items-center gap-3 rounded-xl px-3 py-3 text-left transition-all",
|
|
624
|
-
active ? "border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-
|
|
624
|
+
active ? "border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)]" : "border border-transparent hover:bg-[var(--semantic-color-bg-subtle)]",
|
|
625
625
|
className
|
|
626
626
|
),
|
|
627
627
|
...props,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Accordion/Accordion.tsx","../src/lib/cn.ts","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Divider/Divider.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/FilterChips/FilterChips.tsx","../src/components/Input/Input.tsx","../src/components/ListItem/ListItem.tsx","../src/components/Logo/Logo.tsx","../src/components/Modal/Modal.tsx","../src/components/Pill/Pill.tsx","../src/components/Radio/Radio.tsx","../src/components/SearchBar/SearchBar.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Spinner/Spinner.tsx","../src/components/StatusDot/StatusDot.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import { type ReactNode, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AccordionProps {\n\tlabel: string;\n\tbadge?: ReactNode;\n\tdefaultOpen?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function Accordion({\n\tlabel,\n\tbadge,\n\tdefaultOpen = false,\n\tchildren,\n\tclassName,\n}: AccordionProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\n\treturn (\n\t\t<div className={cn(\"border-t border-[var(--semantic-color-border-default)]\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"flex w-full items-center justify-between px-5 py-3 border-none bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t>\n\t\t\t\t<span className=\"flex items-center gap-2\">\n\t\t\t\t\t{label}\n\t\t\t\t\t{badge && <span className=\"inline-flex\">{badge}</span>}\n\t\t\t\t</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-normal)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid transition-[grid-template-rows] duration-[var(--duration-normal)]\",\n\t\t\t\t\tisOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"overflow-hidden\">{children}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AlertType = \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n\ttype: AlertType;\n\tmessage: string;\n}\n\nconst typeStyles: Record<AlertType, string> = {\n\terror:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)] border-[var(--semantic-color-feedback-success-border)]\",\n\twarning:\n\t\t\"bg-[var(--semantic-color-feedback-warning-light)] text-[var(--semantic-color-feedback-warning-text)] border-[var(--semantic-color-feedback-warning-border)]\",\n\tinfo: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)] border-[var(--semantic-color-feedback-info-border)]\",\n};\n\nconst icons: Record<AlertType, ReactNode> = {\n\terror: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tsuccess: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Alert({ type, message, className, ...props }: AlertProps) {\n\tif (!message) return null;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-2 px-4 py-3 rounded-md border font-sans text-sm shadow-sm\",\n\t\t\t\ttypeStyles[type],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"shrink-0 flex\">{icons[type]}</span>\n\t\t\t<span>{message}</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n\tname: string;\n\tsrc?: string | null;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"size-[var(--avatar-size-sm)] text-sm shadow-sm outline-2 outline-[var(--semantic-color-bg-default)] -outline-offset-2\",\n\tmd: \"size-[var(--avatar-size-md)] text-base shadow-md\",\n\tlg: \"size-[var(--avatar-size-lg)] text-xl shadow-md\",\n} as const;\n\nfunction getInitials(name: string): string {\n\tconst parts = name.split(\" \").filter(Boolean);\n\tif (parts.length === 0) return \"?\";\n\tif (parts.length === 1) return (parts[0]?.[0] ?? \"?\").toUpperCase();\n\treturn ((parts[0]?.[0] ?? \"\") + (parts.at(-1)?.[0] ?? \"\")).toUpperCase();\n}\n\nexport function Avatar({ name, src, size = \"sm\", className, ...props }: AvatarProps) {\n\tconst initials = getInitials(name);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex shrink-0 items-center justify-center overflow-hidden rounded-[var(--avatar-radius)] bg-gradient-to-br from-[var(--semantic-color-text-strong)] to-[var(--semantic-color-text-muted)] text-[var(--semantic-color-text-inverse)] font-sans font-[number:var(--avatar-font-weight)]\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={name}\n\t\t\t{...props}\n\t\t>\n\t\t\t{src ? (\n\t\t\t\t<img src={src} alt={name} className=\"size-full object-cover\" />\n\t\t\t) : (\n\t\t\t\t<span className=\"select-none\">{initials}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLDivElement> {\n\tcount: number | string;\n\tlabel?: string;\n\ticon?: ReactNode;\n\tshowLabel?: boolean;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst sizeStyles = {\n\tsm: \"px-2 py-1.5 gap-1.5\",\n\tmd: \"px-3 py-1.5 gap-2\",\n} as const;\n\nexport function Badge({\n\tcount,\n\tlabel,\n\ticon,\n\tshowLabel = true,\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: BadgeProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t\t{showLabel && label && (\n\t\t\t\t<span className=\"text-xs text-[var(--semantic-color-text-muted)]\">{label}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport function BadgeCompact({\n\tcount,\n\ticon,\n\tclassName,\n\t...props\n}: Omit<BadgeProps, \"label\" | \"showLabel\">) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans px-2 py-1.5 gap-1.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tvariant?: \"primary\" | \"secondary\" | \"outline\" | \"outline_danger\" | \"danger\" | \"success\" | \"ghost\";\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n\tisLoading?: boolean;\n\tloadingText?: string;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tprimary:\n\t\t\"bg-[var(--semantic-color-bg-inverse)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-inverse-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsecondary:\n\t\t\"bg-[var(--semantic-color-bg-emphasis)] text-[var(--semantic-color-text-strong)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-emphasis-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\toutline:\n\t\t\"bg-transparent text-[var(--semantic-color-text-tertiary)] border-[var(--semantic-color-border-strong)] hover:enabled:bg-[var(--semantic-color-bg-subtle)] hover:enabled:border-[var(--semantic-color-border-muted)]\",\n\toutline_danger:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)] hover:enabled:bg-[var(--semantic-color-feedback-error-light)] hover:enabled:border-[var(--semantic-color-feedback-error)]\",\n\tdanger:\n\t\t\"bg-[var(--semantic-color-feedback-error-text)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-feedback-error)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-brand-primary-hover)] hover:enabled:shadow-[var(--shadow-md)] active:enabled:scale-95\",\n\tghost:\n\t\t\"bg-transparent text-[var(--semantic-color-text-default)] hover:enabled:bg-[var(--semantic-color-bg-muted)]\",\n} as const;\n\nconst sizeStyles = {\n\tsm: \"px-[var(--button-sm-padding-x)] py-[var(--button-sm-padding-y)] text-[length:var(--button-sm-font-size)] leading-normal\",\n\tmd: \"px-[var(--button-md-padding-x)] py-[var(--button-md-padding-y)] text-[length:var(--button-md-font-size)] leading-normal\",\n\tlg: \"px-[var(--button-lg-padding-x)] py-[var(--button-lg-padding-y)] text-[length:var(--button-lg-font-size)] leading-normal\",\n\txl: \"px-[var(--button-xl-padding-x)] py-[var(--button-xl-padding-y)] text-[length:var(--button-xl-font-size)] leading-normal\",\n} as const;\n\nexport function Button({\n\tvariant = \"primary\",\n\tsize = \"md\",\n\tisLoading = false,\n\tloadingText = \"Laden...\",\n\tclassName,\n\tchildren,\n\tdisabled,\n\ttype = \"submit\",\n\t...props\n}: ButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center justify-center gap-2 border border-transparent rounded-[var(--button-radius)] font-sans font-[number:var(--button-font-weight)] cursor-pointer transition-all duration-[var(--button-transition-duration)] focus-visible:outline-none disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={disabled || isLoading}\n\t\t\taria-busy={isLoading || undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isLoading ? loadingText : children}\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n\tvariant?: \"default\" | \"elevated\" | \"glass\";\n\tpadding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n\thoverable?: boolean;\n\tselected?: boolean;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tdefault: \"border border-[var(--semantic-color-border-default)]\",\n\televated:\n\t\t\"border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\tglass:\n\t\t\"bg-[var(--semantic-color-bg-default)]/80 shadow-lg backdrop-blur-[var(--card-backdrop-blur)]\",\n} as const;\n\nconst paddingStyles = {\n\tnone: \"\",\n\tsm: \"p-[var(--card-padding-sm)]\",\n\tmd: \"p-[var(--card-padding)]\",\n\tlg: \"p-[var(--card-padding-lg)]\",\n} as const;\n\nconst selectedStyles =\n\t\"border-2 border-[var(--semantic-color-brand-primary)] bg-[var(--semantic-color-feedback-success-light)]\";\n\nexport function Card({\n\tvariant = \"default\",\n\tpadding = \"md\",\n\thoverable = false,\n\tselected = false,\n\tclassName,\n\tchildren,\n\t...props\n}: CardProps) {\n\tif (hoverable) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"group relative overflow-hidden rounded-[var(--card-radius)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\t\t\"cursor-pointer border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\t\t\t\t\t\"hover:translate-y-[var(--card-hover-lift)] hover:border-[var(--semantic-color-border-muted)]/50 hover:bg-[var(--semantic-color-bg-default)] hover:shadow-[var(--card-shadow-hover)]\",\n\t\t\t\t\t\"active:scale-[var(--card-active-scale)]\",\n\t\t\t\t\tselected && selectedStyles,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-subtle)]/80 to-[var(--semantic-color-bg-muted)]/80 opacity-[0.03] pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-px rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-default)]/80 to-[var(--semantic-color-bg-default)]/20 pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] shadow-[inset_0_0_0_1px_var(--card-glass-border)] transition-shadow duration-[var(--card-transition-duration)] pointer-events-none group-hover:shadow-[inset_0_0_0_1px_var(--card-glass-border-hover)]\" />\n\t\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-r from-transparent via-[var(--semantic-color-border-muted)]/20 to-transparent opacity-0 transition-opacity duration-[var(--card-transition-duration)] pointer-events-none group-hover:opacity-100\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative overflow-hidden rounded-[var(--card-radius)] bg-[var(--semantic-color-bg-default)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tselected && selectedStyles,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t</div>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Checkbox({ label, id, name, className, ...props }: CheckboxProps) {\n\tconst inputId = id || name || label.toLowerCase().replace(/\\s+/g, \"-\");\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--checkbox-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--checkbox-size)] rounded-sm border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n\tspacing?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst spacingStyles = {\n\tsm: \"my-2\",\n\tmd: \"my-4\",\n\tlg: \"my-8\",\n} as const;\n\nexport function Divider({ spacing = \"md\", label, className, ...props }: DividerProps) {\n\tif (label) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex items-center gap-4\", spacingStyles[spacing], className)}>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<span className=\"font-sans text-xs font-medium text-[var(--semantic-color-text-muted)] whitespace-nowrap\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<hr\n\t\t\tclassName={cn(\n\t\t\t\t\"border-0 border-t border-[var(--semantic-color-border-default)]\",\n\t\t\t\tspacingStyles[spacing],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DropdownMenuItem {\n\tid: string;\n\tlabel: string;\n\tonClick: () => void;\n\tvariant?: \"default\" | \"danger\";\n}\n\nexport interface DropdownMenuProps {\n\titems: DropdownMenuItem[];\n\ttrigger?: ReactNode;\n\tclassName?: string;\n}\n\nexport function DropdownMenu({ items, trigger, className }: DropdownMenuProps) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [position, setPosition] = useState({ top: 0, right: 0 });\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst menuRef = useRef<HTMLDivElement>(null);\n\n\tconst close = useCallback(() => setIsOpen(false), []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tconst target = event.target as Node;\n\t\t\tif (!buttonRef.current?.contains(target) && !menuRef.current?.contains(target)) {\n\t\t\t\tclose();\n\t\t\t}\n\t\t}\n\n\t\tfunction handleScroll() {\n\t\t\tclose();\n\t\t}\n\n\t\tfunction handleEscape(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") close();\n\t\t}\n\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\twindow.addEventListener(\"scroll\", handleScroll, true);\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll, true);\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t};\n\t}, [isOpen, close]);\n\n\tconst handleToggle = () => {\n\t\tif (!isOpen && buttonRef.current) {\n\t\t\tconst rect = buttonRef.current.getBoundingClientRect();\n\t\t\tsetPosition({\n\t\t\t\ttop: rect.bottom + 4,\n\t\t\t\tright: window.innerWidth - rect.right,\n\t\t\t});\n\t\t}\n\t\tsetIsOpen((prev) => !prev);\n\t};\n\n\tconst menu = isOpen && typeof document !== \"undefined\" && (\n\t\t<div\n\t\t\tref={menuRef}\n\t\t\tclassName=\"fixed z-[var(--dropdown-z-index)] w-[var(--dropdown-width)] p-[var(--dropdown-padding)] border border-[var(--semantic-color-border-default)] rounded-[var(--dropdown-radius)] bg-[var(--semantic-color-bg-default)] shadow-[var(--dropdown-shadow)]\"\n\t\t\tstyle={{ top: position.top, right: position.right }}\n\t\t\trole=\"menu\"\n\t\t>\n\t\t\t{items.map((item) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={item.id}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex w-full items-center px-[var(--dropdown-item-padding-x)] py-[var(--dropdown-item-padding-y)] border-none rounded-[var(--dropdown-item-radius)] bg-transparent font-sans text-[length:var(--dropdown-item-font-size)] text-left cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\t\titem.variant === \"danger\"\n\t\t\t\t\t\t\t? \"text-[var(--semantic-color-feedback-error-text)] hover:bg-[var(--semantic-color-feedback-error-light)]\"\n\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-tertiary)] hover:bg-[var(--semantic-color-bg-muted)]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{item.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tref={buttonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggle}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center justify-center p-1 border-none rounded-md bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-secondary)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-label=\"Aktionen\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t>\n\t\t\t\t{trigger || (\n\t\t\t\t\t<svg className=\"size-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t\t\t\t<path d=\"M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z\" />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{menu && createPortal(menu, document.body)}\n\t\t</>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ActiveFilter {\n\tid: string;\n\tlabel: string;\n\tonRemove: () => void;\n}\n\nexport interface FilterChipsProps extends HTMLAttributes<HTMLDivElement> {\n\tfilters: ActiveFilter[];\n\tonClearAll?: () => void;\n}\n\nexport function FilterChips({ filters, onClearAll, className, ...props }: FilterChipsProps) {\n\tif (filters.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn(\"flex items-center justify-between\", className)} {...props}>\n\t\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t\t{filters.map((filter) => (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={filter.id}\n\t\t\t\t\t\tclassName=\"inline-flex items-center gap-1 px-3 py-1 rounded-full bg-[var(--semantic-color-brand-primary-light)] font-sans text-xs font-medium text-[var(--semantic-color-brand-primary-dark)]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{filter.label}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={filter.onRemove}\n\t\t\t\t\t\t\tclassName=\"flex p-0 border-none bg-transparent text-inherit cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{onClearAll && filters.length > 1 && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClearAll}\n\t\t\t\t\tclassName=\"p-0 border-none bg-transparent font-sans text-xs font-medium text-[var(--semantic-color-brand-primary)] cursor-pointer whitespace-nowrap transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t>\n\t\t\t\t\tAlle löschen\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type InputHTMLAttributes, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Input({ label, error, id, name, type = \"text\", className, ...props }: InputProps) {\n\tconst [showPassword, setShowPassword] = useState(false);\n\tconst inputId = id || name;\n\tconst isPassword = type === \"password\";\n\tconst resolvedType = isPassword && showPassword ? \"text\" : type;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<input\n\t\t\t\t\tid={inputId}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype={resolvedType}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--input-padding-x)] py-[var(--input-padding-y)] font-sans text-[length:var(--input-font-size)] text-[var(--semantic-color-text-default)] shadow-[var(--shadow-sm)] transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\tisPassword && \"pr-10\",\n\t\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\t\taria-describedby={error ? `${inputId}-error` : undefined}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t{isPassword && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => setShowPassword((prev) => !prev)}\n\t\t\t\t\t\tclassName=\"absolute top-1/2 right-3 -translate-y-1/2 flex items-center justify-center p-0 border-none bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\t\taria-label={showPassword ? \"Passwort verbergen\" : \"Passwort anzeigen\"}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${inputId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ListItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n\tactive?: boolean;\n\tonClick?: () => void;\n\tchildren: ReactNode;\n}\n\nexport function ListItem({\n\tactive = false,\n\tonClick,\n\tchildren,\n\tclassName,\n\t...props\n}: ListItemProps) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full cursor-pointer items-center gap-3 rounded-xl px-3 py-3 text-left transition-all\",\n\t\t\t\tactive\n\t\t\t\t\t? \"border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-brand-primary-light)]\"\n\t\t\t\t\t: \"border border-transparent hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n","import type { SVGProps } from \"react\";\n\nexport interface LogoProps extends SVGProps<SVGSVGElement> {\n\tsize?: number | string;\n}\n\nexport function Logo({ size = 48, ...props }: LogoProps) {\n\treturn (\n\t\t<svg\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox=\"0 0 1000 1000\"\n\t\t\tfill=\"none\"\n\t\t\taria-label=\"Ganztagshelden Logo\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g transform=\"matrix(1.62384,0,0,1.62384,-670.097018,-377.993255)\">\n\t\t\t\t{/* Cape: Steel 800 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M659.306,666.563C647.321,692.452 643.608,697.805 636.105,707.186C597.15,755.887 537.182,756.845 535.652,756.159C520.635,749.432 541.639,734.294 543.087,720.432C546.681,686.029 515.354,694.397 490.973,657.204C474.084,631.441 470.729,569.063 491.533,580.44C566.83,621.619 610.108,565.941 697.497,581.514C795.809,599.034 828.378,545.138 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C677.562,667.944 669.794,667.148 667.332,663.505C665.729,661.133 659.929,665.972 659.306,666.563Z\"\n\t\t\t\t\tfill=\"var(--color-steel-800, #1E293B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Body: Steel 500 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M675.584,684.76C676.835,613.868 598.89,738.438 567.488,699.03C544.801,670.559 676.869,576.383 715.532,582.995C744.492,587.948 775.313,577.886 789.684,572.171C791.809,570.862 793.873,569.676 795.866,568.627C814.646,558.742 857.526,515.802 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C674.245,687.434 674.757,686.206 675.584,684.76Z\"\n\t\t\t\t\tfill=\"var(--color-steel-500, #64748B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Roof: Steel 600 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M460.76,425.665C465.048,418.094 676.602,255.297 689.716,245.799C722.985,221.705 734.948,230.838 791.173,274.938C956.769,404.821 957.228,404.054 971.138,415.929C994.202,435.618 980.079,457.145 973.404,463.396C950.46,484.884 936.954,468.134 867.775,414.13C729.691,306.338 729.459,303.94 718.557,304.907C707.569,305.88 567.819,420.024 512.203,461.094C468.741,493.188 448.741,446.89 460.76,425.665Z\"\n\t\t\t\t\tfill=\"var(--color-steel-600, #475569)\"\n\t\t\t\t/>\n\t\t\t\t{/* Head: Steel 400 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M706.539,565.374C599.871,517.702 661.839,386.507 747.483,403.592C856.658,425.371 827.324,597.116 706.539,565.374Z\"\n\t\t\t\t\tfill=\"var(--color-steel-400, #94A3B8)\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\ttitle?: string;\n\tchildren: ReactNode;\n\tfooter?: ReactNode;\n}\n\nexport function Modal({ isOpen, onClose, title, children, footer }: ModalProps) {\n\tconst [isAnimating, setIsAnimating] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\tconst onCloseRef = useRef(onClose);\n\tonCloseRef.current = onClose;\n\n\tconst handleClose = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetIsAnimating(false);\n\t\tsetTimeout(() => {\n\t\t\tonCloseRef.current();\n\t\t}, 250);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) {\n\t\t\tsetIsAnimating(false);\n\t\t\tsetIsExiting(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleEscape = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") handleClose();\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst timer = setTimeout(() => setIsAnimating(true), 10);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t\tclearTimeout(timer);\n\t\t};\n\t}, [isOpen, handleClose]);\n\n\tif (!isOpen) return null;\n\n\tconst entering = isAnimating && !isExiting;\n\tconst idle = !isAnimating && !isExiting;\n\n\tconst modalContent = (\n\t\t<div className=\"fixed inset-0 z-[var(--modal-z-index)] flex items-center justify-center\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleClose}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute inset-0 border-none p-0 cursor-default transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tentering ? \"bg-black/40\" : \"bg-transparent\",\n\t\t\t\t)}\n\t\t\t\taria-label=\"Hintergrund - Klicken zum Schließen\"\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-[calc(100%-2rem)] max-w-[var(--modal-max-width)] max-h-[calc(100vh-4rem)] mx-4 overflow-hidden rounded-[var(--modal-radius)] border border-[var(--semantic-color-border-default)] bg-[image:var(--modal-bg)] backdrop-blur-[var(--modal-backdrop-blur)] shadow-[var(--modal-shadow)]\",\n\t\t\t\t\tidle && \"opacity-0\",\n\t\t\t\t\tentering && \"animate-[modalEnter_250ms_ease-out_both]\",\n\t\t\t\t\tisExiting && \"animate-[modalExit_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-label={title || undefined}\n\t\t\t>\n\t\t\t\t{title ? (\n\t\t\t\t\t<div className=\"flex items-center justify-between px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-b border-[var(--semantic-color-border-subtle)]\">\n\t\t\t\t\t\t<h3 className=\"font-sans text-lg font-semibold text-[var(--semantic-color-text-default)] m-0 pr-4\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"absolute top-4 right-4 z-10\">\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] overflow-y-auto max-h-[calc(100vh-8rem)] text-[var(--semantic-color-text-default)] font-sans leading-relaxed opacity-0\",\n\t\t\t\t\t\tentering && \"animate-[contentReveal_300ms_ease-out_50ms_both]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className=\"flex justify-end gap-3 px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-t border-[var(--semantic-color-border-subtle)] bg-[var(--modal-footer-bg)]\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(modalContent, document.body);\n\t}\n\n\treturn modalContent;\n}\n\nexport interface ConfirmationModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n\ttitle: string;\n\tchildren: ReactNode;\n\tconfirmText?: string;\n\tcancelText?: string;\n\tisConfirmLoading?: boolean;\n\tisConfirmDisabled?: boolean;\n\tvariant?: \"danger\" | \"primary\";\n}\n\nexport function ConfirmationModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n\ttitle,\n\tchildren,\n\tconfirmText = \"Bestätigen\",\n\tcancelText = \"Abbrechen\",\n\tisConfirmLoading = false,\n\tisConfirmDisabled = false,\n\tvariant = \"primary\",\n}: ConfirmationModalProps) {\n\tconst footer = (\n\t\t<>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onClose}\n\t\t\t\tclassName=\"flex-1 px-4 py-2 border border-[var(--semantic-color-border-strong)] rounded-md bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-tertiary)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)] hover:border-[var(--semantic-color-border-muted)] hover:scale-105 hover:shadow-md active:scale-100\"\n\t\t\t>\n\t\t\t\t{cancelText}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onConfirm}\n\t\t\t\tdisabled={isConfirmLoading || isConfirmDisabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 px-4 py-2 border-none rounded-md font-sans text-sm font-medium text-[var(--semantic-color-text-inverse)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:enabled:scale-105 hover:enabled:shadow-lg active:enabled:scale-100 disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\tvariant === \"danger\"\n\t\t\t\t\t\t? \"bg-[var(--semantic-color-feedback-error-text)]\"\n\t\t\t\t\t\t: \"bg-[var(--semantic-color-bg-inverse)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{isConfirmLoading ? (\n\t\t\t\t\t<span className=\"flex items-center justify-center gap-2\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclassName=\"size-4 animate-[ds-spin_0.7s_linear_infinite]\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle opacity={0.25} cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\topacity={0.75}\n\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\td=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tWird geladen...\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tconfirmText\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} footer={footer}>\n\t\t\t{children}\n\t\t</Modal>\n\t);\n}\n\nfunction CloseButton({ onClick }: { onClick: () => void }) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName=\"group flex items-center justify-center shrink-0 size-[var(--modal-close-size)] p-0 border-none rounded-lg bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-default)] hover:scale-105 active:scale-95\"\n\t\t\taria-label=\"Modal schließen\"\n\t\t>\n\t\t\t<svg\n\t\t\t\tclassName=\"transition-transform duration-[var(--duration-fast)] group-hover:rotate-90\"\n\t\t\t\twidth=\"20\"\n\t\t\t\theight=\"20\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth={2}\n\t\t\t>\n\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t</svg>\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type PillColor = \"red\" | \"green\" | \"blue\" | \"orange\" | \"purple\" | \"gray\";\n\nexport interface PillProps extends HTMLAttributes<HTMLSpanElement> {\n\tlabel: string;\n\tcolor?: PillColor;\n\tvariant?: \"solid\" | \"subtle\";\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tdot?: boolean;\n}\n\nconst solidStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-strong)] text-[var(--semantic-color-text-inverse)]\",\n\tgreen: \"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info)] text-[var(--semantic-color-text-inverse)]\",\n\torange: \"bg-[var(--semantic-color-feedback-warning)] text-[var(--semantic-color-text-inverse)]\",\n\tpurple: \"bg-[var(--semantic-color-feedback-accent)] text-[var(--semantic-color-text-inverse)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)] text-[var(--semantic-color-text-inverse)]\",\n};\n\nconst subtleStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)]\",\n\tgreen:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)]\",\n\torange:\n\t\t\"bg-[var(--semantic-color-brand-secondary-light)] text-[var(--semantic-color-feedback-warning-text)]\",\n\tpurple:\n\t\t\"bg-[var(--semantic-color-feedback-accent-light)] text-[var(--semantic-color-feedback-accent-text)]\",\n\tgray: \"bg-[var(--semantic-color-bg-muted)] text-[var(--semantic-color-text-secondary)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"px-2 py-0.5 text-xs\",\n\tmd: \"px-3 py-1.5 text-xs\",\n\tlg: \"px-4 py-2 text-sm\",\n} as const;\n\nconst dotSizes = {\n\tsm: \"size-1 mr-1.5\",\n\tmd: \"size-1.5 mr-2\",\n\tlg: \"size-2 mr-2.5\",\n} as const;\n\nexport function Pill({\n\tlabel,\n\tcolor = \"gray\",\n\tvariant = \"solid\",\n\tsize = \"md\",\n\tdot = true,\n\tclassName,\n\t...props\n}: PillProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-full font-sans font-bold whitespace-nowrap\",\n\t\t\t\tvariant === \"solid\" ? solidStyles[color] : subtleStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{dot && <span className={cn(\"rounded-full bg-current opacity-80\", dotSizes[size])} />}\n\t\t\t{label}\n\t\t</span>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Radio({ label, id, name, className, ...props }: RadioProps) {\n\tconst inputId = id || `${name}-${label.toLowerCase().replace(/\\s+/g, \"-\")}`;\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--radio-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"radio\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--radio-size)] rounded-full border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SearchBarProps\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tonClear?: () => void;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"py-2 pl-9 pr-3 text-sm\",\n\tmd: \"py-2.5 pl-9 pr-10 text-sm\",\n\tlg: \"py-3 px-10 text-base\",\n} as const;\n\nconst iconSizes = {\n\tsm: \"size-4\",\n\tmd: \"size-4\",\n\tlg: \"size-5\",\n} as const;\n\nexport function SearchBar({\n\tvalue,\n\tonChange,\n\tonClear,\n\tplaceholder = \"Name suchen...\",\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: SearchBarProps) {\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<svg\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute top-1/2 left-3 -translate-y-1/2 text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\ticonSizes[size],\n\t\t\t\t)}\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\td=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\n\t\t\t<input\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] text-[var(--semantic-color-text-default)] font-sans transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\tsizeStyles[size],\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\n\t\t\t{value && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tonChange(\"\");\n\t\t\t\t\t\tonClear?.();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"absolute top-1/2 right-2 -translate-y-1/2 flex items-center justify-center p-1 border-none rounded-full bg-transparent cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)]\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName={cn(\"text-[var(--semantic-color-text-muted)]\", iconSizes[size])}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { SelectHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n\tlabel?: string;\n\tplaceholder?: string;\n\toptions: SelectOption[];\n}\n\nexport function Select({ label, placeholder, options, id, className, ...props }: SelectProps) {\n\tconst selectId = id || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-1\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={selectId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<select\n\t\t\t\t\tid={selectId}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"w-full appearance-none border border-[var(--semantic-color-border-default)] rounded-[var(--select-radius)] bg-[var(--semantic-color-bg-default)] py-[var(--select-padding-y)] pl-[var(--select-padding-left)] pr-10 font-sans text-[length:var(--select-font-size)] text-[var(--semantic-color-text-default)] cursor-pointer transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{placeholder && (\n\t\t\t\t\t\t<option value=\"\" disabled={props.required}>\n\t\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t)}\n\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t<option key={option.value} value={option.value} disabled={option.disabled}>\n\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t))}\n\t\t\t\t</select>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 right-0 bottom-0 flex items-center pr-3 text-[var(--semantic-color-text-muted)] pointer-events-none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { CSSProperties, HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n\twidth?: number | string;\n\theight?: number | string;\n\tcircle?: boolean;\n\tborderRadius?: number | string;\n\tcount?: number;\n\tgap?: number;\n}\n\nconst skeletonClass =\n\t\"animate-[wave_1.5s_ease-in-out_infinite] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--semantic-color-bg-muted)_25%,var(--semantic-color-bg-subtle)_50%,var(--semantic-color-bg-muted)_75%)]\";\n\nexport function Skeleton({\n\twidth,\n\theight = 16,\n\tcircle = false,\n\tborderRadius,\n\tcount = 1,\n\tgap = 8,\n\tclassName,\n\tstyle,\n\t...props\n}: SkeletonProps) {\n\tconst resolvedRadius = circle\n\t\t? \"var(--radius-full)\"\n\t\t: borderRadius != null\n\t\t\t? typeof borderRadius === \"number\"\n\t\t\t\t? `${borderRadius}px`\n\t\t\t\t: borderRadius\n\t\t\t: \"var(--radius-md)\";\n\n\tconst itemStyle: CSSProperties = {\n\t\twidth: circle ? height : width,\n\t\theight,\n\t\tborderRadius: resolvedRadius,\n\t\t...style,\n\t};\n\n\tif (count === 1) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(skeletonClass, className)}\n\t\t\t\tstyle={itemStyle}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col\" style={{ gap }} aria-hidden=\"true\" {...props}>\n\t\t\t{Array.from({ length: count }, (_, i) => (\n\t\t\t\t<div key={`skeleton-${i}`} className={cn(skeletonClass, className)} style={itemStyle} />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst sizes = { sm: 20, md: 32, lg: 48 };\nconst strokes = { sm: 2.5, md: 3, lg: 3.5 };\n\nexport function Spinner({ size = \"md\", label, className, ...props }: SpinnerProps) {\n\tconst s = sizes[size];\n\tconst stroke = strokes[size];\n\tconst r = (s - stroke) / 2;\n\tconst circumference = 2 * Math.PI * r;\n\n\treturn (\n\t\t<div className={cn(\"flex flex-col items-center gap-3\", className)} role=\"status\" {...props}>\n\t\t\t<svg\n\t\t\t\twidth={s}\n\t\t\t\theight={s}\n\t\t\t\tviewBox={`0 0 ${s} ${s}`}\n\t\t\t\tclassName=\"animate-[ds-spin_0.8s_cubic-bezier(0.4,0,0.2,1)_infinite]\"\n\t\t\t>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-border-default)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t/>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-brand-primary)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray={`${circumference * 0.3} ${circumference * 0.7}`}\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\t{label && (\n\t\t\t\t<p className=\"m-0 font-sans text-sm text-[var(--semantic-color-text-muted)]\">{label}</p>\n\t\t\t)}\n\t\t\t<span className=\"sr-only\">Laden...</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type StatusDotColor = \"green\" | \"yellow\" | \"red\" | \"gray\";\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLDivElement> {\n\tcolor: StatusDotColor;\n\ttooltip?: string;\n\tsize?: \"sm\" | \"md\";\n\tpulse?: boolean;\n}\n\nconst colorStyles: Record<StatusDotColor, string> = {\n\tgreen: \"bg-[var(--semantic-color-feedback-success)]\",\n\tyellow: \"bg-[var(--semantic-color-feedback-warning)]\",\n\tred: \"bg-[var(--semantic-color-feedback-error)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"size-2.5\",\n\tmd: \"size-3\",\n} as const;\n\nexport function StatusDot({\n\tcolor,\n\ttooltip,\n\tsize = \"sm\",\n\tpulse,\n\tclassName,\n\t...props\n}: StatusDotProps) {\n\tconst shouldPulse = pulse ?? color === \"green\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"shrink-0 rounded-full\",\n\t\t\t\tcolorStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tshouldPulse && \"animate-pulse\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={tooltip}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TabItem {\n\tid: string;\n\tlabel: string;\n\tcount?: number;\n}\n\nexport interface TabsProps {\n\titems: TabItem[];\n\tactiveTab: string;\n\tonTabChange: (tabId: string) => void;\n\tclassName?: string;\n}\n\nexport function Tabs({ items, activeTab, onTabChange, className }: TabsProps) {\n\tconst tabRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst [indicatorStyle, setIndicatorStyle] = useState({ width: 0, left: 0 });\n\tconst [canScrollLeft, setCanScrollLeft] = useState(false);\n\tconst [canScrollRight, setCanScrollRight] = useState(false);\n\n\tconst showMobileDropdown = items.length >= 2;\n\n\tconst activeIndex = useMemo(\n\t\t() => items.findIndex((item) => item.id === activeTab),\n\t\t[items, activeTab],\n\t);\n\n\tconst activeLabel = items[activeIndex]?.label ?? \"\";\n\n\tconst updateScrollState = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tsetCanScrollLeft(el.scrollLeft > 0);\n\t\tsetCanScrollRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);\n\t}, []);\n\n\tconst updateIndicator = useCallback(() => {\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && activeTabElement.offsetWidth > 0) {\n\t\t\tsetIndicatorStyle({\n\t\t\t\tleft: activeTabElement.offsetLeft,\n\t\t\t\twidth: activeTabElement.offsetWidth,\n\t\t\t});\n\t\t}\n\t}, [activeIndex]);\n\n\tuseEffect(() => {\n\t\tupdateIndicator();\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && scrollRef.current) {\n\t\t\tconst container = scrollRef.current;\n\t\t\tconst tabLeft = activeTabElement.offsetLeft;\n\t\t\tconst tabRight = tabLeft + activeTabElement.offsetWidth;\n\t\t\tconst containerLeft = container.scrollLeft;\n\t\t\tconst containerRight = containerLeft + container.clientWidth;\n\n\t\t\tif (tabLeft < containerLeft) {\n\t\t\t\tcontainer.scrollTo({ left: tabLeft - 16, behavior: \"smooth\" });\n\t\t\t} else if (tabRight > containerRight) {\n\t\t\t\tcontainer.scrollTo({\n\t\t\t\t\tleft: tabRight - container.clientWidth + 16,\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, [activeIndex, updateIndicator]);\n\n\tuseEffect(() => {\n\t\tupdateScrollState();\n\t\tupdateIndicator();\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.addEventListener(\"scroll\", updateScrollState, { passive: true });\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tupdateScrollState();\n\t\t\tupdateIndicator();\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => {\n\t\t\tel.removeEventListener(\"scroll\", updateScrollState);\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [updateScrollState, updateIndicator]);\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t{showMobileDropdown && (\n\t\t\t\t<MobileTabDropdown\n\t\t\t\t\titems={items}\n\t\t\t\t\tactiveTab={activeTab}\n\t\t\t\t\tactiveLabel={activeLabel}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<div className={cn(\"relative\", showMobileDropdown && \"hidden md:block\")}>\n\t\t\t\t{canScrollLeft && (\n\t\t\t\t\t<div className=\"absolute top-0 bottom-0 left-0 z-10 w-6 bg-gradient-to-r from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tclassName=\"relative flex gap-[var(--tabs-gap)] overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n\t\t\t\t>\n\t\t\t\t\t{items.map((tab, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\ttabRefs.current[index] = el;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onTabChange(tab.id)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"relative pb-3 border-none bg-transparent font-sans text-sm font-medium cursor-pointer transition-colors duration-[var(--duration-fast)] whitespace-nowrap\",\n\t\t\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t\t\t? \"text-[var(--semantic-color-text-default)] font-semibold\"\n\t\t\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-muted)] hover:text-[var(--semantic-color-text-tertiary)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"whitespace-nowrap\">{tab.label}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute bottom-0 h-[var(--tabs-indicator-height)] rounded-full bg-[var(--semantic-color-text-default)] transition-[left,width] duration-[var(--duration-slow)] ease-out\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${indicatorStyle.left}px`,\n\t\t\t\t\t\t\twidth: `${indicatorStyle.width}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{canScrollRight && (\n\t\t\t\t\t<div className=\"absolute top-0 right-0 bottom-0 z-10 w-6 bg-gradient-to-l from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction MobileTabDropdown({\n\titems,\n\tactiveTab,\n\tactiveLabel,\n\tonTabChange,\n}: {\n\titems: TabItem[];\n\tactiveTab: string;\n\tactiveLabel: string;\n\tonTabChange: (id: string) => void;\n}) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst dropdownRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tif (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t}, []);\n\n\treturn (\n\t\t<div className=\"relative md:hidden\" ref={dropdownRef}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2 px-4 py-2.5 border-none rounded-lg bg-[var(--semantic-color-bg-default)] font-sans text-base font-semibold text-[var(--semantic-color-text-default)] shadow-sm cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tisOpen && \"bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span>{activeLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"20\"\n\t\t\t\t\theight=\"20\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute top-full left-0 z-[var(--tabs-mobile-z-index)] mt-1 min-w-48 border border-[var(--semantic-color-border-default)] rounded-lg bg-[var(--semantic-color-bg-default)] py-1 shadow-lg\">\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonTabChange(item.id);\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"block w-full text-left px-4 py-2.5 border-none bg-transparent font-sans text-base text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\t\t\titem.id === activeTab &&\n\t\t\t\t\t\t\t\t\t\"bg-[var(--semantic-color-bg-subtle)] font-semibold text-[var(--semantic-color-text-default)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Textarea({ label, error, id, name, rows = 4, className, ...props }: TextareaProps) {\n\tconst textareaId = id || name;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={textareaId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<textarea\n\t\t\t\tid={textareaId}\n\t\t\t\tname={name}\n\t\t\t\trows={rows}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"block w-full resize-y border border-[var(--semantic-color-border-default)] rounded-[var(--textarea-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] font-sans text-[length:var(--textarea-font-size)] text-[var(--semantic-color-text-default)] transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\taria-describedby={error ? `${textareaId}-error` : undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${textareaId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport type ToastType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface ToastProps {\n\ttype?: ToastType;\n\tmessage: string;\n\tduration?: number;\n\tonClose: () => void;\n}\n\nconst typeStyles: Record<ToastType, string> = {\n\tsuccess:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-success)]\",\n\terror:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-error)]\",\n\twarning:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-info)]\",\n};\n\nconst iconColors: Record<ToastType, string> = {\n\tsuccess: \"text-[var(--semantic-color-feedback-success)]\",\n\terror: \"text-[var(--semantic-color-feedback-error)]\",\n\twarning: \"text-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"text-[var(--semantic-color-feedback-info)]\",\n};\n\nconst icons: Record<ToastType, ReactNode> = {\n\tsuccess: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n\t\t</svg>\n\t),\n\terror: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M12 9v2m0 4h.01M10.29 3.86l-8.58 14.57A1 1 0 002.57 20h18.86a1 1 0 00.86-1.57L13.71 3.86a1 1 0 00-1.72 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Toast({ type = \"info\", message, duration = 4000, onClose }: ToastProps) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetTimeout(onClose, 200);\n\t}, [onClose]);\n\n\tuseEffect(() => {\n\t\tconst enterTimer = setTimeout(() => setIsVisible(true), 10);\n\t\tconst exitTimer = duration > 0 ? setTimeout(dismiss, duration) : undefined;\n\t\treturn () => {\n\t\t\tclearTimeout(enterTimer);\n\t\t\tif (exitTimer) clearTimeout(exitTimer);\n\t\t};\n\t}, [duration, dismiss]);\n\n\tconst content = (\n\t\t<div className=\"fixed top-[var(--toast-position-top)] right-[var(--toast-position-right)] z-[var(--toast-z-index)] pointer-events-none\">\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2.5 px-[var(--toast-padding-x)] py-[var(--toast-padding-y)] rounded-[var(--toast-radius)] bg-[var(--semantic-color-bg-default)] border border-[var(--semantic-color-border-default)] shadow-[var(--toast-shadow)] font-sans text-[length:var(--toast-font-size)] text-[var(--semantic-color-text-default)] pointer-events-auto max-w-[var(--toast-max-width)]\",\n\t\t\t\t\ttypeStyles[type],\n\t\t\t\t\tisVisible && !isExiting\n\t\t\t\t\t\t? \"animate-[toastSlideIn_200ms_ease-out_both]\"\n\t\t\t\t\t\t: \"animate-[toastSlideOut_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className={cn(\"flex shrink-0\", iconColors[type])}>{icons[type]}</span>\n\t\t\t\t<span className=\"flex-1 leading-[1.4]\">{message}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={dismiss}\n\t\t\t\t\tclassName=\"flex shrink-0 p-0.5 border-none rounded-sm bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\taria-label=\"Schließen\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t>\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(content, document.body);\n\t}\n\treturn content;\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n\tlabel?: string;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst trackSizes = {\n\tsm: \"w-[var(--toggle-sm-track-width)] h-[var(--toggle-sm-track-height)]\",\n\tmd: \"w-[var(--toggle-md-track-width)] h-[var(--toggle-md-track-height)]\",\n} as const;\n\nconst thumbSizes = {\n\tsm: \"size-[var(--toggle-sm-thumb-size)]\",\n\tmd: \"size-[var(--toggle-md-thumb-size)]\",\n} as const;\n\nconst thumbTranslate = {\n\tsm: \"peer-checked:[&>div]:translate-x-[var(--toggle-sm-thumb-translate)]\",\n\tmd: \"peer-checked:[&>div]:translate-x-[var(--toggle-md-thumb-translate)]\",\n} as const;\n\nexport function Toggle({ label, size = \"md\", id, name, className, ...props }: ToggleProps) {\n\tconst inputId = id || name || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\"inline-flex items-center gap-2.5 cursor-pointer\", className)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"peer absolute size-px overflow-hidden [clip:rect(0,0,0,0)]\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative rounded-full bg-[var(--semantic-color-border-strong)] transition-colors duration-[var(--duration-fast)] peer-checked:bg-[var(--semantic-color-brand-primary)] peer-disabled:opacity-[var(--disabled-opacity)] peer-disabled:cursor-not-allowed\",\n\t\t\t\t\ttrackSizes[size],\n\t\t\t\t\tthumbTranslate[size],\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute top-0.5 left-0.5 rounded-full bg-[var(--semantic-color-bg-default)] shadow-sm transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tthumbSizes[size],\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{label && (\n\t\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</label>\n\t);\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsx","jsxs","sizeStyles","jsx","sizeStyles","jsx","jsxs","variantStyles","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsx","jsxs","useCallback","useEffect","useRef","useState","createPortal","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","createPortal","jsx","jsxs","sizeStyles","jsx","jsxs","jsx","jsxs","sizeStyles","jsx","jsxs","jsx","jsx","jsxs","jsx","sizeStyles","useCallback","useEffect","useRef","useState","jsx","jsxs","useRef","useState","useCallback","useEffect","jsx","jsxs","useCallback","useEffect","useState","createPortal","jsx","jsxs","typeStyles","icons","useState","useCallback","useEffect","createPortal","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Accordion/Accordion.tsx","../src/lib/cn.ts","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Divider/Divider.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/FilterChips/FilterChips.tsx","../src/components/Input/Input.tsx","../src/components/ListItem/ListItem.tsx","../src/components/Logo/Logo.tsx","../src/components/Modal/Modal.tsx","../src/components/Pill/Pill.tsx","../src/components/Radio/Radio.tsx","../src/components/SearchBar/SearchBar.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Spinner/Spinner.tsx","../src/components/StatusDot/StatusDot.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import { type ReactNode, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AccordionProps {\n\tlabel: string;\n\tbadge?: ReactNode;\n\tdefaultOpen?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function Accordion({\n\tlabel,\n\tbadge,\n\tdefaultOpen = false,\n\tchildren,\n\tclassName,\n}: AccordionProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\n\treturn (\n\t\t<div className={cn(\"border-t border-[var(--semantic-color-border-default)]\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen((prev) => !prev)}\n\t\t\t\tclassName=\"flex w-full items-center justify-between px-5 py-3 border-none bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t>\n\t\t\t\t<span className=\"flex items-center gap-2\">\n\t\t\t\t\t{label}\n\t\t\t\t\t{badge && <span className=\"inline-flex\">{badge}</span>}\n\t\t\t\t</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-normal)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid transition-[grid-template-rows] duration-[var(--duration-normal)]\",\n\t\t\t\t\tisOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"overflow-hidden\">{children}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AlertType = \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n\ttype: AlertType;\n\tmessage: string;\n}\n\nconst typeStyles: Record<AlertType, string> = {\n\terror:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)] border-[var(--semantic-color-feedback-success-border)]\",\n\twarning:\n\t\t\"bg-[var(--semantic-color-feedback-warning-light)] text-[var(--semantic-color-feedback-warning-text)] border-[var(--semantic-color-feedback-warning-border)]\",\n\tinfo: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)] border-[var(--semantic-color-feedback-info-border)]\",\n};\n\nconst icons: Record<AlertType, ReactNode> = {\n\terror: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tsuccess: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n\t\t\t\tclipRule=\"evenodd\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Alert({ type, message, className, ...props }: AlertProps) {\n\tif (!message) return null;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-2 px-4 py-3 rounded-md border font-sans text-sm shadow-sm\",\n\t\t\t\ttypeStyles[type],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"shrink-0 flex\">{icons[type]}</span>\n\t\t\t<span>{message}</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n\tname: string;\n\tsrc?: string | null;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"size-[var(--avatar-size-sm)] text-sm shadow-sm outline-2 outline-[var(--semantic-color-bg-default)] -outline-offset-2\",\n\tmd: \"size-[var(--avatar-size-md)] text-base shadow-md\",\n\tlg: \"size-[var(--avatar-size-lg)] text-xl shadow-md\",\n} as const;\n\nfunction getInitials(name: string): string {\n\tconst parts = name.split(\" \").filter(Boolean);\n\tif (parts.length === 0) return \"?\";\n\tif (parts.length === 1) return (parts[0]?.[0] ?? \"?\").toUpperCase();\n\treturn ((parts[0]?.[0] ?? \"\") + (parts.at(-1)?.[0] ?? \"\")).toUpperCase();\n}\n\nexport function Avatar({ name, src, size = \"sm\", className, ...props }: AvatarProps) {\n\tconst initials = getInitials(name);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex shrink-0 items-center justify-center overflow-hidden rounded-[var(--avatar-radius)] bg-gradient-to-br from-[var(--semantic-color-text-strong)] to-[var(--semantic-color-text-muted)] text-[var(--semantic-color-text-inverse)] font-sans font-[number:var(--avatar-font-weight)]\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={name}\n\t\t\t{...props}\n\t\t>\n\t\t\t{src ? (\n\t\t\t\t<img src={src} alt={name} className=\"size-full object-cover\" />\n\t\t\t) : (\n\t\t\t\t<span className=\"select-none\">{initials}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLDivElement> {\n\tcount: number | string;\n\tlabel?: string;\n\ticon?: ReactNode;\n\tshowLabel?: boolean;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst sizeStyles = {\n\tsm: \"px-2 py-1.5 gap-1.5\",\n\tmd: \"px-3 py-1.5 gap-2\",\n} as const;\n\nexport function Badge({\n\tcount,\n\tlabel,\n\ticon,\n\tshowLabel = true,\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: BadgeProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans\",\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t\t{showLabel && label && (\n\t\t\t\t<span className=\"text-xs text-[var(--semantic-color-text-muted)]\">{label}</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport function BadgeCompact({\n\tcount,\n\ticon,\n\tclassName,\n\t...props\n}: Omit<BadgeProps, \"label\" | \"showLabel\">) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-[var(--badge-radius)] border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)] font-sans px-2 py-1.5 gap-1.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{icon && <span className=\"flex text-[var(--semantic-color-text-muted)]\">{icon}</span>}\n\t\t\t<span className=\"text-[length:var(--badge-font-size)] font-[number:var(--badge-font-weight)] text-[var(--semantic-color-text-default)]\">\n\t\t\t\t{count}\n\t\t\t</span>\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tvariant?: \"primary\" | \"secondary\" | \"outline\" | \"outline_danger\" | \"danger\" | \"success\" | \"ghost\";\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n\tisLoading?: boolean;\n\tloadingText?: string;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tprimary:\n\t\t\"bg-[var(--semantic-color-bg-inverse)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-inverse-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsecondary:\n\t\t\"bg-[var(--semantic-color-bg-emphasis)] text-[var(--semantic-color-text-strong)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-bg-emphasis-hover)] hover:enabled:shadow-[var(--shadow-md)]\",\n\toutline:\n\t\t\"bg-transparent text-[var(--semantic-color-text-tertiary)] border-[var(--semantic-color-border-strong)] hover:enabled:bg-[var(--semantic-color-bg-subtle)] hover:enabled:border-[var(--semantic-color-border-muted)]\",\n\toutline_danger:\n\t\t\"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)] border-[var(--semantic-color-feedback-error-border)] hover:enabled:bg-[var(--semantic-color-feedback-error-light)] hover:enabled:border-[var(--semantic-color-feedback-error)]\",\n\tdanger:\n\t\t\"bg-[var(--semantic-color-feedback-error-text)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-feedback-error)] hover:enabled:shadow-[var(--shadow-md)]\",\n\tsuccess:\n\t\t\"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)] shadow-[var(--shadow-sm)] hover:enabled:bg-[var(--semantic-color-brand-primary-hover)] hover:enabled:shadow-[var(--shadow-md)] active:enabled:scale-95\",\n\tghost:\n\t\t\"bg-transparent text-[var(--semantic-color-text-default)] hover:enabled:bg-[var(--semantic-color-bg-muted)]\",\n} as const;\n\nconst sizeStyles = {\n\tsm: \"px-[var(--button-sm-padding-x)] py-[var(--button-sm-padding-y)] text-[length:var(--button-sm-font-size)] leading-normal\",\n\tmd: \"px-[var(--button-md-padding-x)] py-[var(--button-md-padding-y)] text-[length:var(--button-md-font-size)] leading-normal\",\n\tlg: \"px-[var(--button-lg-padding-x)] py-[var(--button-lg-padding-y)] text-[length:var(--button-lg-font-size)] leading-normal\",\n\txl: \"px-[var(--button-xl-padding-x)] py-[var(--button-xl-padding-y)] text-[length:var(--button-xl-font-size)] leading-normal\",\n} as const;\n\nexport function Button({\n\tvariant = \"primary\",\n\tsize = \"md\",\n\tisLoading = false,\n\tloadingText = \"Laden...\",\n\tclassName,\n\tchildren,\n\tdisabled,\n\ttype = \"submit\",\n\t...props\n}: ButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center justify-center gap-2 border border-transparent rounded-[var(--button-radius)] font-sans font-[number:var(--button-font-weight)] cursor-pointer transition-all duration-[var(--button-transition-duration)] focus-visible:outline-none disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={disabled || isLoading}\n\t\t\taria-busy={isLoading || undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isLoading ? loadingText : children}\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n\tvariant?: \"default\" | \"elevated\" | \"glass\";\n\tpadding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n\thoverable?: boolean;\n\tselected?: boolean;\n\tchildren: ReactNode;\n}\n\nconst variantStyles = {\n\tdefault: \"border border-[var(--semantic-color-border-default)]\",\n\televated:\n\t\t\"border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\tglass:\n\t\t\"bg-[var(--semantic-color-bg-default)]/80 shadow-lg backdrop-blur-[var(--card-backdrop-blur)]\",\n} as const;\n\nconst paddingStyles = {\n\tnone: \"\",\n\tsm: \"p-[var(--card-padding-sm)]\",\n\tmd: \"p-[var(--card-padding)]\",\n\tlg: \"p-[var(--card-padding-lg)]\",\n} as const;\n\nconst selectedStyles =\n\t\"border-2 border-[var(--semantic-color-brand-primary)] bg-[var(--semantic-color-feedback-success-light)]\";\n\nexport function Card({\n\tvariant = \"default\",\n\tpadding = \"md\",\n\thoverable = false,\n\tselected = false,\n\tclassName,\n\tchildren,\n\t...props\n}: CardProps) {\n\tif (hoverable) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"group relative overflow-hidden rounded-[var(--card-radius)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\t\t\"cursor-pointer border border-black/5 bg-[var(--semantic-color-bg-default)]/90 shadow-[var(--card-shadow)] backdrop-blur-[var(--card-backdrop-blur)]\",\n\t\t\t\t\t\"hover:translate-y-[var(--card-hover-lift)] hover:border-[var(--semantic-color-border-muted)]/50 hover:bg-[var(--semantic-color-bg-default)] hover:shadow-[var(--card-shadow-hover)]\",\n\t\t\t\t\t\"active:scale-[var(--card-active-scale)]\",\n\t\t\t\t\tselected && selectedStyles,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-subtle)]/80 to-[var(--semantic-color-bg-muted)]/80 opacity-[0.03] pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-px rounded-[var(--card-radius)] bg-gradient-to-br from-[var(--semantic-color-bg-default)]/80 to-[var(--semantic-color-bg-default)]/20 pointer-events-none\" />\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] shadow-[inset_0_0_0_1px_var(--card-glass-border)] transition-shadow duration-[var(--card-transition-duration)] pointer-events-none group-hover:shadow-[inset_0_0_0_1px_var(--card-glass-border-hover)]\" />\n\t\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t\t\t<div className=\"absolute inset-0 rounded-[var(--card-radius)] bg-gradient-to-r from-transparent via-[var(--semantic-color-border-muted)]/20 to-transparent opacity-0 transition-opacity duration-[var(--card-transition-duration)] pointer-events-none group-hover:opacity-100\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative overflow-hidden rounded-[var(--card-radius)] bg-[var(--semantic-color-bg-default)] transition-all duration-[var(--card-transition-duration)]\",\n\t\t\t\tvariantStyles[variant],\n\t\t\t\tselected && selectedStyles,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className={cn(\"relative\", paddingStyles[padding])}>{children}</div>\n\t\t</div>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Checkbox({ label, id, name, className, ...props }: CheckboxProps) {\n\tconst inputId = id || name || label.toLowerCase().replace(/\\s+/g, \"-\");\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--checkbox-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--checkbox-size)] rounded-sm border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n\tspacing?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst spacingStyles = {\n\tsm: \"my-2\",\n\tmd: \"my-4\",\n\tlg: \"my-8\",\n} as const;\n\nexport function Divider({ spacing = \"md\", label, className, ...props }: DividerProps) {\n\tif (label) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex items-center gap-4\", spacingStyles[spacing], className)}>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<span className=\"font-sans text-xs font-medium text-[var(--semantic-color-text-muted)] whitespace-nowrap\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t\t<hr\n\t\t\t\t\tclassName=\"flex-1 border-0 border-t border-[var(--semantic-color-border-default)]\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<hr\n\t\t\tclassName={cn(\n\t\t\t\t\"border-0 border-t border-[var(--semantic-color-border-default)]\",\n\t\t\t\tspacingStyles[spacing],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DropdownMenuItem {\n\tid: string;\n\tlabel: string;\n\tonClick: () => void;\n\tvariant?: \"default\" | \"danger\";\n}\n\nexport interface DropdownMenuProps {\n\titems: DropdownMenuItem[];\n\ttrigger?: ReactNode;\n\tclassName?: string;\n}\n\nexport function DropdownMenu({ items, trigger, className }: DropdownMenuProps) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [position, setPosition] = useState({ top: 0, right: 0 });\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst menuRef = useRef<HTMLDivElement>(null);\n\n\tconst close = useCallback(() => setIsOpen(false), []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tconst target = event.target as Node;\n\t\t\tif (!buttonRef.current?.contains(target) && !menuRef.current?.contains(target)) {\n\t\t\t\tclose();\n\t\t\t}\n\t\t}\n\n\t\tfunction handleScroll() {\n\t\t\tclose();\n\t\t}\n\n\t\tfunction handleEscape(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") close();\n\t\t}\n\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\twindow.addEventListener(\"scroll\", handleScroll, true);\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll, true);\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t};\n\t}, [isOpen, close]);\n\n\tconst handleToggle = () => {\n\t\tif (!isOpen && buttonRef.current) {\n\t\t\tconst rect = buttonRef.current.getBoundingClientRect();\n\t\t\tsetPosition({\n\t\t\t\ttop: rect.bottom + 4,\n\t\t\t\tright: window.innerWidth - rect.right,\n\t\t\t});\n\t\t}\n\t\tsetIsOpen((prev) => !prev);\n\t};\n\n\tconst menu = isOpen && typeof document !== \"undefined\" && (\n\t\t<div\n\t\t\tref={menuRef}\n\t\t\tclassName=\"fixed z-[var(--dropdown-z-index)] w-[var(--dropdown-width)] p-[var(--dropdown-padding)] border border-[var(--semantic-color-border-default)] rounded-[var(--dropdown-radius)] bg-[var(--semantic-color-bg-default)] shadow-[var(--dropdown-shadow)]\"\n\t\t\tstyle={{ top: position.top, right: position.right }}\n\t\t\trole=\"menu\"\n\t\t>\n\t\t\t{items.map((item) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={item.id}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex w-full items-center px-[var(--dropdown-item-padding-x)] py-[var(--dropdown-item-padding-y)] border-none rounded-[var(--dropdown-item-radius)] bg-transparent font-sans text-[length:var(--dropdown-item-font-size)] text-left cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\t\titem.variant === \"danger\"\n\t\t\t\t\t\t\t? \"text-[var(--semantic-color-feedback-error-text)] hover:bg-[var(--semantic-color-feedback-error-light)]\"\n\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-tertiary)] hover:bg-[var(--semantic-color-bg-muted)]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{item.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tref={buttonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggle}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center justify-center p-1 border-none rounded-md bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-secondary)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-label=\"Aktionen\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t>\n\t\t\t\t{trigger || (\n\t\t\t\t\t<svg className=\"size-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n\t\t\t\t\t\t<path d=\"M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z\" />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{menu && createPortal(menu, document.body)}\n\t\t</>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ActiveFilter {\n\tid: string;\n\tlabel: string;\n\tonRemove: () => void;\n}\n\nexport interface FilterChipsProps extends HTMLAttributes<HTMLDivElement> {\n\tfilters: ActiveFilter[];\n\tonClearAll?: () => void;\n}\n\nexport function FilterChips({ filters, onClearAll, className, ...props }: FilterChipsProps) {\n\tif (filters.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn(\"flex items-center justify-between\", className)} {...props}>\n\t\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t\t{filters.map((filter) => (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={filter.id}\n\t\t\t\t\t\tclassName=\"inline-flex items-center gap-1 px-3 py-1 rounded-full bg-[var(--semantic-color-brand-primary-light)] font-sans text-xs font-medium text-[var(--semantic-color-brand-primary-dark)]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{filter.label}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={filter.onRemove}\n\t\t\t\t\t\t\tclassName=\"flex p-0 border-none bg-transparent text-inherit cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{onClearAll && filters.length > 1 && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClearAll}\n\t\t\t\t\tclassName=\"p-0 border-none bg-transparent font-sans text-xs font-medium text-[var(--semantic-color-brand-primary)] cursor-pointer whitespace-nowrap transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-brand-primary-hover)]\"\n\t\t\t\t>\n\t\t\t\t\tAlle löschen\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type InputHTMLAttributes, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Input({ label, error, id, name, type = \"text\", className, ...props }: InputProps) {\n\tconst [showPassword, setShowPassword] = useState(false);\n\tconst inputId = id || name;\n\tconst isPassword = type === \"password\";\n\tconst resolvedType = isPassword && showPassword ? \"text\" : type;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<input\n\t\t\t\t\tid={inputId}\n\t\t\t\t\tname={name}\n\t\t\t\t\ttype={resolvedType}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--input-padding-x)] py-[var(--input-padding-y)] font-sans text-[length:var(--input-font-size)] text-[var(--semantic-color-text-default)] shadow-[var(--shadow-sm)] transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\tisPassword && \"pr-10\",\n\t\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\t\taria-describedby={error ? `${inputId}-error` : undefined}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t{isPassword && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => setShowPassword((prev) => !prev)}\n\t\t\t\t\t\tclassName=\"absolute top-1/2 right-3 -translate-y-1/2 flex items-center justify-center p-0 border-none bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\t\taria-label={showPassword ? \"Passwort verbergen\" : \"Passwort anzeigen\"}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\td=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${inputId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ListItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n\tactive?: boolean;\n\tonClick?: () => void;\n\tchildren: ReactNode;\n}\n\nexport function ListItem({\n\tactive = false,\n\tonClick,\n\tchildren,\n\tclassName,\n\t...props\n}: ListItemProps) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full cursor-pointer items-center gap-3 rounded-xl px-3 py-3 text-left transition-all\",\n\t\t\t\tactive\n\t\t\t\t\t? \"border border-[var(--semantic-color-border-default)] bg-[var(--semantic-color-bg-subtle)]\"\n\t\t\t\t\t: \"border border-transparent hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n","import type { SVGProps } from \"react\";\n\nexport interface LogoProps extends SVGProps<SVGSVGElement> {\n\tsize?: number | string;\n}\n\nexport function Logo({ size = 48, ...props }: LogoProps) {\n\treturn (\n\t\t<svg\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox=\"0 0 1000 1000\"\n\t\t\tfill=\"none\"\n\t\t\taria-label=\"Ganztagshelden Logo\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<g transform=\"matrix(1.62384,0,0,1.62384,-670.097018,-377.993255)\">\n\t\t\t\t{/* Cape: Steel 800 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M659.306,666.563C647.321,692.452 643.608,697.805 636.105,707.186C597.15,755.887 537.182,756.845 535.652,756.159C520.635,749.432 541.639,734.294 543.087,720.432C546.681,686.029 515.354,694.397 490.973,657.204C474.084,631.441 470.729,569.063 491.533,580.44C566.83,621.619 610.108,565.941 697.497,581.514C795.809,599.034 828.378,545.138 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C677.562,667.944 669.794,667.148 667.332,663.505C665.729,661.133 659.929,665.972 659.306,666.563Z\"\n\t\t\t\t\tfill=\"var(--color-steel-800, #1E293B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Body: Steel 500 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M675.584,684.76C676.835,613.868 598.89,738.438 567.488,699.03C544.801,670.559 676.869,576.383 715.532,582.995C744.492,587.948 775.313,577.886 789.684,572.171C791.809,570.862 793.873,569.676 795.866,568.627C814.646,558.742 857.526,515.802 873.613,499.611C886.943,486.194 921.218,489.412 905.57,533.525C884.114,594.015 824.679,638.112 824.916,640.467C825.254,643.83 825.708,647.181 826.036,650.545C841.184,805.69 775.341,869.784 748.516,842.485C733.986,827.697 766.215,763.869 753.18,746.69C742.331,732.393 727.791,767.884 690.115,801.076C617.879,864.714 605.932,819.074 607.847,805.541C609.887,791.128 663.09,752.991 674.077,688.423C674.245,687.434 674.757,686.206 675.584,684.76Z\"\n\t\t\t\t\tfill=\"var(--color-steel-500, #64748B)\"\n\t\t\t\t/>\n\t\t\t\t{/* Roof: Steel 600 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M460.76,425.665C465.048,418.094 676.602,255.297 689.716,245.799C722.985,221.705 734.948,230.838 791.173,274.938C956.769,404.821 957.228,404.054 971.138,415.929C994.202,435.618 980.079,457.145 973.404,463.396C950.46,484.884 936.954,468.134 867.775,414.13C729.691,306.338 729.459,303.94 718.557,304.907C707.569,305.88 567.819,420.024 512.203,461.094C468.741,493.188 448.741,446.89 460.76,425.665Z\"\n\t\t\t\t\tfill=\"var(--color-steel-600, #475569)\"\n\t\t\t\t/>\n\t\t\t\t{/* Head: Steel 400 */}\n\t\t\t\t<path\n\t\t\t\t\td=\"M706.539,565.374C599.871,517.702 661.839,386.507 747.483,403.592C856.658,425.371 827.324,597.116 706.539,565.374Z\"\n\t\t\t\t\tfill=\"var(--color-steel-400, #94A3B8)\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\ttitle?: string;\n\tchildren: ReactNode;\n\tfooter?: ReactNode;\n}\n\nexport function Modal({ isOpen, onClose, title, children, footer }: ModalProps) {\n\tconst [isAnimating, setIsAnimating] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\tconst onCloseRef = useRef(onClose);\n\tonCloseRef.current = onClose;\n\n\tconst handleClose = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetIsAnimating(false);\n\t\tsetTimeout(() => {\n\t\t\tonCloseRef.current();\n\t\t}, 250);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) {\n\t\t\tsetIsAnimating(false);\n\t\t\tsetIsExiting(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleEscape = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") handleClose();\n\t\t};\n\n\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\tconst timer = setTimeout(() => setIsAnimating(true), 10);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t\tclearTimeout(timer);\n\t\t};\n\t}, [isOpen, handleClose]);\n\n\tif (!isOpen) return null;\n\n\tconst entering = isAnimating && !isExiting;\n\tconst idle = !isAnimating && !isExiting;\n\n\tconst modalContent = (\n\t\t<div className=\"fixed inset-0 z-[var(--modal-z-index)] flex items-center justify-center\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleClose}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute inset-0 border-none p-0 cursor-default transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tentering ? \"bg-black/40\" : \"bg-transparent\",\n\t\t\t\t)}\n\t\t\t\taria-label=\"Hintergrund - Klicken zum Schließen\"\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-[calc(100%-2rem)] max-w-[var(--modal-max-width)] max-h-[calc(100vh-4rem)] mx-4 overflow-hidden rounded-[var(--modal-radius)] border border-[var(--semantic-color-border-default)] bg-[image:var(--modal-bg)] backdrop-blur-[var(--modal-backdrop-blur)] shadow-[var(--modal-shadow)]\",\n\t\t\t\t\tidle && \"opacity-0\",\n\t\t\t\t\tentering && \"animate-[modalEnter_250ms_ease-out_both]\",\n\t\t\t\t\tisExiting && \"animate-[modalExit_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-label={title || undefined}\n\t\t\t>\n\t\t\t\t{title ? (\n\t\t\t\t\t<div className=\"flex items-center justify-between px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-b border-[var(--semantic-color-border-subtle)]\">\n\t\t\t\t\t\t<h3 className=\"font-sans text-lg font-semibold text-[var(--semantic-color-text-default)] m-0 pr-4\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"absolute top-4 right-4 z-10\">\n\t\t\t\t\t\t<CloseButton onClick={handleClose} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] overflow-y-auto max-h-[calc(100vh-8rem)] text-[var(--semantic-color-text-default)] font-sans leading-relaxed opacity-0\",\n\t\t\t\t\t\tentering && \"animate-[contentReveal_300ms_ease-out_50ms_both]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className=\"flex justify-end gap-3 px-[var(--modal-padding-x)] py-[var(--modal-padding-y)] border-t border-[var(--semantic-color-border-subtle)] bg-[var(--modal-footer-bg)]\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(modalContent, document.body);\n\t}\n\n\treturn modalContent;\n}\n\nexport interface ConfirmationModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonConfirm: () => void;\n\ttitle: string;\n\tchildren: ReactNode;\n\tconfirmText?: string;\n\tcancelText?: string;\n\tisConfirmLoading?: boolean;\n\tisConfirmDisabled?: boolean;\n\tvariant?: \"danger\" | \"primary\";\n}\n\nexport function ConfirmationModal({\n\tisOpen,\n\tonClose,\n\tonConfirm,\n\ttitle,\n\tchildren,\n\tconfirmText = \"Bestätigen\",\n\tcancelText = \"Abbrechen\",\n\tisConfirmLoading = false,\n\tisConfirmDisabled = false,\n\tvariant = \"primary\",\n}: ConfirmationModalProps) {\n\tconst footer = (\n\t\t<>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onClose}\n\t\t\t\tclassName=\"flex-1 px-4 py-2 border border-[var(--semantic-color-border-strong)] rounded-md bg-transparent font-sans text-sm font-medium text-[var(--semantic-color-text-tertiary)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)] hover:border-[var(--semantic-color-border-muted)] hover:scale-105 hover:shadow-md active:scale-100\"\n\t\t\t>\n\t\t\t\t{cancelText}\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onConfirm}\n\t\t\t\tdisabled={isConfirmLoading || isConfirmDisabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex-1 px-4 py-2 border-none rounded-md font-sans text-sm font-medium text-[var(--semantic-color-text-inverse)] whitespace-nowrap cursor-pointer transition-all duration-[var(--duration-fast)] hover:enabled:scale-105 hover:enabled:shadow-lg active:enabled:scale-100 disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\tvariant === \"danger\"\n\t\t\t\t\t\t? \"bg-[var(--semantic-color-feedback-error-text)]\"\n\t\t\t\t\t\t: \"bg-[var(--semantic-color-bg-inverse)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{isConfirmLoading ? (\n\t\t\t\t\t<span className=\"flex items-center justify-center gap-2\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclassName=\"size-4 animate-[ds-spin_0.7s_linear_infinite]\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle opacity={0.25} cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\topacity={0.75}\n\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\td=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tWird geladen...\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tconfirmText\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} footer={footer}>\n\t\t\t{children}\n\t\t</Modal>\n\t);\n}\n\nfunction CloseButton({ onClick }: { onClick: () => void }) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onClick}\n\t\t\tclassName=\"group flex items-center justify-center shrink-0 size-[var(--modal-close-size)] p-0 border-none rounded-lg bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-all duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)] hover:text-[var(--semantic-color-text-default)] hover:scale-105 active:scale-95\"\n\t\t\taria-label=\"Modal schließen\"\n\t\t>\n\t\t\t<svg\n\t\t\t\tclassName=\"transition-transform duration-[var(--duration-fast)] group-hover:rotate-90\"\n\t\t\t\twidth=\"20\"\n\t\t\t\theight=\"20\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth={2}\n\t\t\t>\n\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t</svg>\n\t\t</button>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type PillColor = \"red\" | \"green\" | \"blue\" | \"orange\" | \"purple\" | \"gray\";\n\nexport interface PillProps extends HTMLAttributes<HTMLSpanElement> {\n\tlabel: string;\n\tcolor?: PillColor;\n\tvariant?: \"solid\" | \"subtle\";\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tdot?: boolean;\n}\n\nconst solidStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-strong)] text-[var(--semantic-color-text-inverse)]\",\n\tgreen: \"bg-[var(--semantic-color-brand-primary)] text-[var(--semantic-color-text-inverse)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info)] text-[var(--semantic-color-text-inverse)]\",\n\torange: \"bg-[var(--semantic-color-feedback-warning)] text-[var(--semantic-color-text-inverse)]\",\n\tpurple: \"bg-[var(--semantic-color-feedback-accent)] text-[var(--semantic-color-text-inverse)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)] text-[var(--semantic-color-text-inverse)]\",\n};\n\nconst subtleStyles: Record<PillColor, string> = {\n\tred: \"bg-[var(--semantic-color-feedback-error-light)] text-[var(--semantic-color-feedback-error-text)]\",\n\tgreen:\n\t\t\"bg-[var(--semantic-color-feedback-success-light)] text-[var(--semantic-color-feedback-success-text)]\",\n\tblue: \"bg-[var(--semantic-color-feedback-info-light)] text-[var(--semantic-color-feedback-info-text)]\",\n\torange:\n\t\t\"bg-[var(--semantic-color-brand-secondary-light)] text-[var(--semantic-color-feedback-warning-text)]\",\n\tpurple:\n\t\t\"bg-[var(--semantic-color-feedback-accent-light)] text-[var(--semantic-color-feedback-accent-text)]\",\n\tgray: \"bg-[var(--semantic-color-bg-muted)] text-[var(--semantic-color-text-secondary)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"px-2 py-0.5 text-xs\",\n\tmd: \"px-3 py-1.5 text-xs\",\n\tlg: \"px-4 py-2 text-sm\",\n} as const;\n\nconst dotSizes = {\n\tsm: \"size-1 mr-1.5\",\n\tmd: \"size-1.5 mr-2\",\n\tlg: \"size-2 mr-2.5\",\n} as const;\n\nexport function Pill({\n\tlabel,\n\tcolor = \"gray\",\n\tvariant = \"solid\",\n\tsize = \"md\",\n\tdot = true,\n\tclassName,\n\t...props\n}: PillProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex items-center rounded-full font-sans font-bold whitespace-nowrap\",\n\t\t\t\tvariant === \"solid\" ? solidStyles[color] : subtleStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{dot && <span className={cn(\"rounded-full bg-current opacity-80\", dotSizes[size])} />}\n\t\t\t{label}\n\t\t</span>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel: string;\n}\n\nexport function Radio({ label, id, name, className, ...props }: RadioProps) {\n\tconst inputId = id || `${name}-${label.toLowerCase().replace(/\\s+/g, \"-\")}`;\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-[var(--radio-gap)] px-2 py-1.5 rounded-md cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"radio\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"size-[var(--radio-size)] rounded-full border border-[var(--semantic-color-border-strong)] accent-[var(--semantic-color-text-default)] cursor-pointer disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</label>\n\t);\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SearchBarProps\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tonClear?: () => void;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles = {\n\tsm: \"py-2 pl-9 pr-3 text-sm\",\n\tmd: \"py-2.5 pl-9 pr-10 text-sm\",\n\tlg: \"py-3 px-10 text-base\",\n} as const;\n\nconst iconSizes = {\n\tsm: \"size-4\",\n\tmd: \"size-4\",\n\tlg: \"size-5\",\n} as const;\n\nexport function SearchBar({\n\tvalue,\n\tonChange,\n\tonClear,\n\tplaceholder = \"Name suchen...\",\n\tsize = \"md\",\n\tclassName,\n\t...props\n}: SearchBarProps) {\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<svg\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute top-1/2 left-3 -translate-y-1/2 text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\ticonSizes[size],\n\t\t\t\t)}\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\td=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\n\t\t\t<input\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"w-full border border-[var(--semantic-color-border-default)] rounded-[var(--input-radius)] bg-[var(--semantic-color-bg-default)] text-[var(--semantic-color-text-default)] font-sans transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\tsizeStyles[size],\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\n\t\t\t{value && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tonChange(\"\");\n\t\t\t\t\t\tonClear?.();\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"absolute top-1/2 right-2 -translate-y-1/2 flex items-center justify-center p-1 border-none rounded-full bg-transparent cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-muted)]\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName={cn(\"text-[var(--semantic-color-text-muted)]\", iconSizes[size])}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { SelectHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n\tlabel?: string;\n\tplaceholder?: string;\n\toptions: SelectOption[];\n}\n\nexport function Select({ label, placeholder, options, id, className, ...props }: SelectProps) {\n\tconst selectId = id || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-1\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={selectId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<div className=\"relative\">\n\t\t\t\t<select\n\t\t\t\t\tid={selectId}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"w-full appearance-none border border-[var(--semantic-color-border-default)] rounded-[var(--select-radius)] bg-[var(--semantic-color-bg-default)] py-[var(--select-padding-y)] pl-[var(--select-padding-left)] pr-10 font-sans text-[length:var(--select-font-size)] text-[var(--semantic-color-text-default)] cursor-pointer transition-[border-color,box-shadow] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{placeholder && (\n\t\t\t\t\t\t<option value=\"\" disabled={props.required}>\n\t\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t)}\n\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t<option key={option.value} value={option.value} disabled={option.disabled}>\n\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t))}\n\t\t\t\t</select>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 right-0 bottom-0 flex items-center pr-3 text-[var(--semantic-color-text-muted)] pointer-events-none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { CSSProperties, HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n\twidth?: number | string;\n\theight?: number | string;\n\tcircle?: boolean;\n\tborderRadius?: number | string;\n\tcount?: number;\n\tgap?: number;\n}\n\nconst skeletonClass =\n\t\"animate-[wave_1.5s_ease-in-out_infinite] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--semantic-color-bg-muted)_25%,var(--semantic-color-bg-subtle)_50%,var(--semantic-color-bg-muted)_75%)]\";\n\nexport function Skeleton({\n\twidth,\n\theight = 16,\n\tcircle = false,\n\tborderRadius,\n\tcount = 1,\n\tgap = 8,\n\tclassName,\n\tstyle,\n\t...props\n}: SkeletonProps) {\n\tconst resolvedRadius = circle\n\t\t? \"var(--radius-full)\"\n\t\t: borderRadius != null\n\t\t\t? typeof borderRadius === \"number\"\n\t\t\t\t? `${borderRadius}px`\n\t\t\t\t: borderRadius\n\t\t\t: \"var(--radius-md)\";\n\n\tconst itemStyle: CSSProperties = {\n\t\twidth: circle ? height : width,\n\t\theight,\n\t\tborderRadius: resolvedRadius,\n\t\t...style,\n\t};\n\n\tif (count === 1) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(skeletonClass, className)}\n\t\t\t\tstyle={itemStyle}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col\" style={{ gap }} aria-hidden=\"true\" {...props}>\n\t\t\t{Array.from({ length: count }, (_, i) => (\n\t\t\t\t<div key={`skeleton-${i}`} className={cn(skeletonClass, className)} style={itemStyle} />\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tlabel?: string;\n}\n\nconst sizes = { sm: 20, md: 32, lg: 48 };\nconst strokes = { sm: 2.5, md: 3, lg: 3.5 };\n\nexport function Spinner({ size = \"md\", label, className, ...props }: SpinnerProps) {\n\tconst s = sizes[size];\n\tconst stroke = strokes[size];\n\tconst r = (s - stroke) / 2;\n\tconst circumference = 2 * Math.PI * r;\n\n\treturn (\n\t\t<div className={cn(\"flex flex-col items-center gap-3\", className)} role=\"status\" {...props}>\n\t\t\t<svg\n\t\t\t\twidth={s}\n\t\t\t\theight={s}\n\t\t\t\tviewBox={`0 0 ${s} ${s}`}\n\t\t\t\tclassName=\"animate-[ds-spin_0.8s_cubic-bezier(0.4,0,0.2,1)_infinite]\"\n\t\t\t>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-border-default)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t/>\n\t\t\t\t<circle\n\t\t\t\t\tcx={s / 2}\n\t\t\t\t\tcy={s / 2}\n\t\t\t\t\tr={r}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--semantic-color-brand-primary)\"\n\t\t\t\t\tstrokeWidth={stroke}\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray={`${circumference * 0.3} ${circumference * 0.7}`}\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\t{label && (\n\t\t\t\t<p className=\"m-0 font-sans text-sm text-[var(--semantic-color-text-muted)]\">{label}</p>\n\t\t\t)}\n\t\t\t<span className=\"sr-only\">Laden...</span>\n\t\t</div>\n\t);\n}\n","import type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type StatusDotColor = \"green\" | \"yellow\" | \"red\" | \"gray\";\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLDivElement> {\n\tcolor: StatusDotColor;\n\ttooltip?: string;\n\tsize?: \"sm\" | \"md\";\n\tpulse?: boolean;\n}\n\nconst colorStyles: Record<StatusDotColor, string> = {\n\tgreen: \"bg-[var(--semantic-color-feedback-success)]\",\n\tyellow: \"bg-[var(--semantic-color-feedback-warning)]\",\n\tred: \"bg-[var(--semantic-color-feedback-error)]\",\n\tgray: \"bg-[var(--semantic-color-border-muted)]\",\n};\n\nconst sizeStyles = {\n\tsm: \"size-2.5\",\n\tmd: \"size-3\",\n} as const;\n\nexport function StatusDot({\n\tcolor,\n\ttooltip,\n\tsize = \"sm\",\n\tpulse,\n\tclassName,\n\t...props\n}: StatusDotProps) {\n\tconst shouldPulse = pulse ?? color === \"green\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"shrink-0 rounded-full\",\n\t\t\t\tcolorStyles[color],\n\t\t\t\tsizeStyles[size],\n\t\t\t\tshouldPulse && \"animate-pulse\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={tooltip}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TabItem {\n\tid: string;\n\tlabel: string;\n\tcount?: number;\n}\n\nexport interface TabsProps {\n\titems: TabItem[];\n\tactiveTab: string;\n\tonTabChange: (tabId: string) => void;\n\tclassName?: string;\n}\n\nexport function Tabs({ items, activeTab, onTabChange, className }: TabsProps) {\n\tconst tabRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst [indicatorStyle, setIndicatorStyle] = useState({ width: 0, left: 0 });\n\tconst [canScrollLeft, setCanScrollLeft] = useState(false);\n\tconst [canScrollRight, setCanScrollRight] = useState(false);\n\n\tconst showMobileDropdown = items.length >= 2;\n\n\tconst activeIndex = useMemo(\n\t\t() => items.findIndex((item) => item.id === activeTab),\n\t\t[items, activeTab],\n\t);\n\n\tconst activeLabel = items[activeIndex]?.label ?? \"\";\n\n\tconst updateScrollState = useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tsetCanScrollLeft(el.scrollLeft > 0);\n\t\tsetCanScrollRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);\n\t}, []);\n\n\tconst updateIndicator = useCallback(() => {\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && activeTabElement.offsetWidth > 0) {\n\t\t\tsetIndicatorStyle({\n\t\t\t\tleft: activeTabElement.offsetLeft,\n\t\t\t\twidth: activeTabElement.offsetWidth,\n\t\t\t});\n\t\t}\n\t}, [activeIndex]);\n\n\tuseEffect(() => {\n\t\tupdateIndicator();\n\t\tconst activeTabElement = tabRefs.current[activeIndex];\n\t\tif (activeTabElement && scrollRef.current) {\n\t\t\tconst container = scrollRef.current;\n\t\t\tconst tabLeft = activeTabElement.offsetLeft;\n\t\t\tconst tabRight = tabLeft + activeTabElement.offsetWidth;\n\t\t\tconst containerLeft = container.scrollLeft;\n\t\t\tconst containerRight = containerLeft + container.clientWidth;\n\n\t\t\tif (tabLeft < containerLeft) {\n\t\t\t\tcontainer.scrollTo({ left: tabLeft - 16, behavior: \"smooth\" });\n\t\t\t} else if (tabRight > containerRight) {\n\t\t\t\tcontainer.scrollTo({\n\t\t\t\t\tleft: tabRight - container.clientWidth + 16,\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, [activeIndex, updateIndicator]);\n\n\tuseEffect(() => {\n\t\tupdateScrollState();\n\t\tupdateIndicator();\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tel.addEventListener(\"scroll\", updateScrollState, { passive: true });\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tupdateScrollState();\n\t\t\tupdateIndicator();\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => {\n\t\t\tel.removeEventListener(\"scroll\", updateScrollState);\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [updateScrollState, updateIndicator]);\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t{showMobileDropdown && (\n\t\t\t\t<MobileTabDropdown\n\t\t\t\t\titems={items}\n\t\t\t\t\tactiveTab={activeTab}\n\t\t\t\t\tactiveLabel={activeLabel}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<div className={cn(\"relative\", showMobileDropdown && \"hidden md:block\")}>\n\t\t\t\t{canScrollLeft && (\n\t\t\t\t\t<div className=\"absolute top-0 bottom-0 left-0 z-10 w-6 bg-gradient-to-r from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tclassName=\"relative flex gap-[var(--tabs-gap)] overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n\t\t\t\t>\n\t\t\t\t\t{items.map((tab, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\ttabRefs.current[index] = el;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onTabChange(tab.id)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"relative pb-3 border-none bg-transparent font-sans text-sm font-medium cursor-pointer transition-colors duration-[var(--duration-fast)] whitespace-nowrap\",\n\t\t\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t\t\t? \"text-[var(--semantic-color-text-default)] font-semibold\"\n\t\t\t\t\t\t\t\t\t: \"text-[var(--semantic-color-text-muted)] hover:text-[var(--semantic-color-text-tertiary)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"whitespace-nowrap\">{tab.label}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute bottom-0 h-[var(--tabs-indicator-height)] rounded-full bg-[var(--semantic-color-text-default)] transition-[left,width] duration-[var(--duration-slow)] ease-out\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${indicatorStyle.left}px`,\n\t\t\t\t\t\t\twidth: `${indicatorStyle.width}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{canScrollRight && (\n\t\t\t\t\t<div className=\"absolute top-0 right-0 bottom-0 z-10 w-6 bg-gradient-to-l from-[var(--semantic-color-bg-default)] to-transparent pointer-events-none\" />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction MobileTabDropdown({\n\titems,\n\tactiveTab,\n\tactiveLabel,\n\tonTabChange,\n}: {\n\titems: TabItem[];\n\tactiveTab: string;\n\tactiveLabel: string;\n\tonTabChange: (id: string) => void;\n}) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst dropdownRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tif (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t}, []);\n\n\treturn (\n\t\t<div className=\"relative md:hidden\" ref={dropdownRef}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2 px-4 py-2.5 border-none rounded-lg bg-[var(--semantic-color-bg-default)] font-sans text-base font-semibold text-[var(--semantic-color-text-default)] shadow-sm cursor-pointer transition-colors duration-[var(--duration-fast)]\",\n\t\t\t\t\tisOpen && \"bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span>{activeLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 text-[var(--semantic-color-text-muted)] transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tisOpen && \"rotate-180\",\n\t\t\t\t\t)}\n\t\t\t\t\twidth=\"20\"\n\t\t\t\t\theight=\"20\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t>\n\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute top-full left-0 z-[var(--tabs-mobile-z-index)] mt-1 min-w-48 border border-[var(--semantic-color-border-default)] rounded-lg bg-[var(--semantic-color-bg-default)] py-1 shadow-lg\">\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonTabChange(item.id);\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"block w-full text-left px-4 py-2.5 border-none bg-transparent font-sans text-base text-[var(--semantic-color-text-secondary)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\t\t\t\titem.id === activeTab &&\n\t\t\t\t\t\t\t\t\t\"bg-[var(--semantic-color-bg-subtle)] font-semibold text-[var(--semantic-color-text-default)]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n\tlabel?: string;\n\terror?: string;\n}\n\nexport function Textarea({ label, error, id, name, rows = 4, className, ...props }: TextareaProps) {\n\tconst textareaId = id || name;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={textareaId}\n\t\t\t\t\tclassName=\"font-sans text-sm font-medium text-[var(--semantic-color-text-default)]\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<textarea\n\t\t\t\tid={textareaId}\n\t\t\t\tname={name}\n\t\t\t\trows={rows}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"block w-full resize-y border border-[var(--semantic-color-border-default)] rounded-[var(--textarea-radius)] bg-[var(--semantic-color-bg-default)] px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] font-sans text-[length:var(--textarea-font-size)] text-[var(--semantic-color-text-default)] transition-[border-color] duration-[var(--duration-fast)]\",\n\t\t\t\t\t\"placeholder:text-[var(--semantic-color-text-muted)]\",\n\t\t\t\t\t\"focus:outline-none focus:border-[var(--semantic-color-border-strong)]\",\n\t\t\t\t\t\"disabled:opacity-[var(--disabled-opacity)] disabled:cursor-not-allowed disabled:bg-[var(--semantic-color-bg-subtle)]\",\n\t\t\t\t\terror && \"border-[var(--semantic-color-feedback-error)]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-invalid={error ? \"true\" : undefined}\n\t\t\t\taria-describedby={error ? `${textareaId}-error` : undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t{error && (\n\t\t\t\t<p\n\t\t\t\t\tid={`${textareaId}-error`}\n\t\t\t\t\tclassName=\"font-sans text-xs text-[var(--semantic-color-feedback-error-text)] m-0\"\n\t\t\t\t>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { type ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\n\nexport type ToastType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface ToastProps {\n\ttype?: ToastType;\n\tmessage: string;\n\tduration?: number;\n\tonClose: () => void;\n}\n\nconst typeStyles: Record<ToastType, string> = {\n\tsuccess:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-success)]\",\n\terror:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-error)]\",\n\twarning:\n\t\t\"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"border-l-[length:var(--toast-border-width)] border-l-[var(--semantic-color-feedback-info)]\",\n};\n\nconst iconColors: Record<ToastType, string> = {\n\tsuccess: \"text-[var(--semantic-color-feedback-success)]\",\n\terror: \"text-[var(--semantic-color-feedback-error)]\",\n\twarning: \"text-[var(--semantic-color-feedback-warning)]\",\n\tinfo: \"text-[var(--semantic-color-feedback-info)]\",\n};\n\nconst icons: Record<ToastType, ReactNode> = {\n\tsuccess: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n\t\t</svg>\n\t),\n\terror: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t</svg>\n\t),\n\twarning: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M12 9v2m0 4h.01M10.29 3.86l-8.58 14.57A1 1 0 002.57 20h18.86a1 1 0 00.86-1.57L13.71 3.86a1 1 0 00-1.72 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n\tinfo: (\n\t\t<svg\n\t\t\twidth=\"18\"\n\t\t\theight=\"18\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2}\n\t\t>\n\t\t\t<path\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\td=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n};\n\nexport function Toast({ type = \"info\", message, duration = 4000, onClose }: ToastProps) {\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [isExiting, setIsExiting] = useState(false);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetIsExiting(true);\n\t\tsetTimeout(onClose, 200);\n\t}, [onClose]);\n\n\tuseEffect(() => {\n\t\tconst enterTimer = setTimeout(() => setIsVisible(true), 10);\n\t\tconst exitTimer = duration > 0 ? setTimeout(dismiss, duration) : undefined;\n\t\treturn () => {\n\t\t\tclearTimeout(enterTimer);\n\t\t\tif (exitTimer) clearTimeout(exitTimer);\n\t\t};\n\t}, [duration, dismiss]);\n\n\tconst content = (\n\t\t<div className=\"fixed top-[var(--toast-position-top)] right-[var(--toast-position-right)] z-[var(--toast-z-index)] pointer-events-none\">\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2.5 px-[var(--toast-padding-x)] py-[var(--toast-padding-y)] rounded-[var(--toast-radius)] bg-[var(--semantic-color-bg-default)] border border-[var(--semantic-color-border-default)] shadow-[var(--toast-shadow)] font-sans text-[length:var(--toast-font-size)] text-[var(--semantic-color-text-default)] pointer-events-auto max-w-[var(--toast-max-width)]\",\n\t\t\t\t\ttypeStyles[type],\n\t\t\t\t\tisVisible && !isExiting\n\t\t\t\t\t\t? \"animate-[toastSlideIn_200ms_ease-out_both]\"\n\t\t\t\t\t\t: \"animate-[toastSlideOut_200ms_ease-in_both]\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className={cn(\"flex shrink-0\", iconColors[type])}>{icons[type]}</span>\n\t\t\t\t<span className=\"flex-1 leading-[1.4]\">{message}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={dismiss}\n\t\t\t\t\tclassName=\"flex shrink-0 p-0.5 border-none rounded-sm bg-transparent text-[var(--semantic-color-text-muted)] cursor-pointer transition-colors duration-[var(--duration-fast)] hover:text-[var(--semantic-color-text-default)]\"\n\t\t\t\t\taria-label=\"Schließen\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t>\n\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\tif (typeof document !== \"undefined\") {\n\t\treturn createPortal(content, document.body);\n\t}\n\treturn content;\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n\tlabel?: string;\n\tsize?: \"sm\" | \"md\";\n}\n\nconst trackSizes = {\n\tsm: \"w-[var(--toggle-sm-track-width)] h-[var(--toggle-sm-track-height)]\",\n\tmd: \"w-[var(--toggle-md-track-width)] h-[var(--toggle-md-track-height)]\",\n} as const;\n\nconst thumbSizes = {\n\tsm: \"size-[var(--toggle-sm-thumb-size)]\",\n\tmd: \"size-[var(--toggle-md-thumb-size)]\",\n} as const;\n\nconst thumbTranslate = {\n\tsm: \"peer-checked:[&>div]:translate-x-[var(--toggle-sm-thumb-translate)]\",\n\tmd: \"peer-checked:[&>div]:translate-x-[var(--toggle-md-thumb-translate)]\",\n} as const;\n\nexport function Toggle({ label, size = \"md\", id, name, className, ...props }: ToggleProps) {\n\tconst inputId = id || name || (label ? label.toLowerCase().replace(/\\s+/g, \"-\") : undefined);\n\n\treturn (\n\t\t<label\n\t\t\thtmlFor={inputId}\n\t\t\tclassName={cn(\"inline-flex items-center gap-2.5 cursor-pointer\", className)}\n\t\t>\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tclassName=\"peer absolute size-px overflow-hidden [clip:rect(0,0,0,0)]\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative rounded-full bg-[var(--semantic-color-border-strong)] transition-colors duration-[var(--duration-fast)] peer-checked:bg-[var(--semantic-color-brand-primary)] peer-disabled:opacity-[var(--disabled-opacity)] peer-disabled:cursor-not-allowed\",\n\t\t\t\t\ttrackSizes[size],\n\t\t\t\t\tthumbTranslate[size],\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute top-0.5 left-0.5 rounded-full bg-[var(--semantic-color-bg-default)] shadow-sm transition-transform duration-[var(--duration-fast)]\",\n\t\t\t\t\t\tthumbSizes[size],\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{label && (\n\t\t\t\t<span className=\"font-sans text-sm text-[var(--semantic-color-text-default)] select-none\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</label>\n\t);\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsx","jsxs","sizeStyles","jsx","sizeStyles","jsx","jsxs","variantStyles","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsx","jsxs","useCallback","useEffect","useRef","useState","createPortal","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","createPortal","jsx","jsxs","sizeStyles","jsx","jsxs","jsx","jsxs","sizeStyles","jsx","jsxs","jsx","jsx","jsxs","jsx","sizeStyles","useCallback","useEffect","useRef","useState","jsx","jsxs","useRef","useState","useCallback","useEffect","jsx","jsxs","useCallback","useEffect","useState","createPortal","jsx","jsxs","typeStyles","icons","useState","useCallback","useEffect","createPortal","jsx","jsxs"]}
|