@martinsura/ui 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/icons.ts","../src/theme.ts","../src/spinner/spinner.tsx","../src/popconfirm/popconfirm.tsx","../src/button/button.tsx","../src/input/inputField.tsx","../src/input/inputLabel.tsx","../src/input/inputError.tsx","../src/input/errorResolverContext.tsx","../src/input/textInput.tsx","../src/input/numberInput.tsx","../src/input/checkboxInput.tsx","../src/input/switchInput.tsx","../src/dropdown/dropdown.tsx","../src/input/colorInput.tsx","../src/empty/empty.tsx","../src/table/table.tsx","../src/table/useGrid.ts","../src/table/grid.tsx","../src/table/gridFilters.tsx","../src/table/filterTextInput.tsx","../src/table/filterNumberInput.tsx","../src/table/filterCheckboxInput.tsx","../src/select/_selectDropdown.tsx","../src/select/selectInput.tsx","../src/table/filterSelectInput.tsx","../src/date/_calendar.tsx","../src/date/dateInput.tsx","../src/table/filterDateInput.tsx","../src/badge/badge.tsx","../src/table/filterSelectGroupPopover.tsx","../src/table/filterDateRangePopover.tsx","../src/drawer/drawerContext.ts","../src/_feedbackConfig.ts","../src/notification/notification.tsx","../src/drawer/drawer.tsx","../src/drawer/drawerTitle.tsx","../src/drawer/drawerFooter.tsx","../src/skeleton/skeleton.tsx","../src/drawer/drawerContent.tsx","../src/alert/alert.tsx","../src/serverError/serverError.tsx","../src/panel/panel.tsx","../src/tabs/tabs.tsx","../src/tag/tag.tsx","../src/avatar/avatar.tsx","../src/html/htmlInput.tsx","../src/upload/uploadContext.tsx","../src/upload/uploadInput.tsx","../src/select/multiSelectInput.tsx","../src/notification/useNotification.ts","../src/pretty/pretty.tsx","../src/tooltip/tooltip.tsx","../src/initUI.ts"],"names":["jsxs","jsx","twMerge","useState","useRef","Fragment","createPortal","useEffect","useMemo","IconX","columnTypeWidth","getKey","calcPosition","IconCheck","IconChevronDown","useCallback","clamp","IconChevronLeft","IconChevronRight","dayjs","defaultPlaceholder","IconCalendar","createContext","useContext","IconPaperclip","IconDownload","GAP","VIEWPORT_MARGIN","gray"],"mappings":"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","file":"index.js","sourcesContent":["import { ComponentType } from \"react\";\nimport { IconDotsVertical, IconDownload, IconFileSpreadsheet, IconPaperclip, IconPencil, IconPlus, IconTrashX, IconX } from \"@tabler/icons-react\";\nimport { IconProps } from \"./button/button\";\n\nconst defaultIcons = {\n dots: IconDotsVertical,\n edit: IconPencil,\n create: IconPlus,\n delete: IconTrashX,\n remove: IconX,\n excel: IconFileSpreadsheet,\n file: IconPaperclip,\n download: IconDownload,\n} as const;\n\nexport type UiDefaultIconType = keyof typeof defaultIcons;\nexport type UiIconType = UiDefaultIconType | (string & {});\n\nlet iconRegistry: Record<string, ComponentType<IconProps>> = { ...defaultIcons };\n\nexport function registerIcons(icons: Record<string, ComponentType<IconProps>>) {\n iconRegistry = { ...iconRegistry, ...icons };\n}\n\nexport function getIcon(type: string): ComponentType<IconProps> | undefined {\n return iconRegistry[type];\n}\n","// ─── Barevná paleta ───────────────────────────────────────────────────────────\n// Upravuj zde — uiTheme.colors níže z těchto hodnot čte.\n\nconst black = { base: \"#000000\", hover: \"#1f2937\" };\nconst red = { base: \"#dc2626\", hover: \"#b91c1c\" }; // red-600 / red-700\nconst green = { base: \"#16a34a\", hover: \"#15803d\" }; // green-600 / green-700\nconst amber = { base: \"#d97706\", hover: \"#b45309\" }; // amber-600 / amber-700\nconst blue = { base: \"#2563eb\", hover: \"#1d4ed8\" }; // blue-600 / blue-700\nconst gray = {\n 50: \"#f9fafb\",\n 100: \"#f3f4f6\",\n 200: \"#e5e7eb\",\n 300: \"#d1d5db\",\n 400: \"#9ca3af\",\n 500: \"#6b7280\",\n 600: \"#4b5563\",\n 700: \"#374151\",\n 800: \"#1f2937\",\n 900: \"#111827\",\n};\n\n// ─── Theme ───────────────────────────────────────────────────────────────────\n\nexport const uiTheme = {\n colors: {\n primary: { bg: black.base, hover: black.hover, text: \"#fff\" },\n danger: { bg: red.base, hover: red.hover, text: \"#fff\" },\n success: { bg: green.base, hover: green.hover, text: \"#fff\" },\n warning: { bg: amber.base, hover: amber.hover, text: \"#fff\" },\n info: { bg: blue.base, hover: blue.hover, text: \"#fff\" },\n },\n size: {\n small: { height: \"28px\", px: \"10px\", text: \"12px\", radius: \"4px\" },\n middle: { height: \"32px\", px: \"12px\", text: \"13px\", radius: \"6px\" },\n large: { height: \"40px\", px: \"16px\", text: \"15px\", radius: \"8px\" },\n },\n radius: { sm: \"4px\", md: \"6px\", lg: \"8px\", full: \"9999px\" },\n border: {\n color: \"#e5e7eb\",\n input: \"#d1d5db\",\n focus: \"#6b7280\",\n width: \"1px\",\n },\n shadow: {\n sm: \"0 1px 2px rgba(0,0,0,0.05)\",\n md: \"0 4px 6px rgba(0,0,0,0.07)\",\n },\n font: { family: \"sans-serif\", size: { sm: \"12px\", md: \"13px\", lg: \"15px\" } },\n gray,\n layout: {\n panel: {\n headerHeight: \"40px\",\n headerPx: \"12px\",\n bodyPadding: \"12px\",\n footerPx: \"12px\",\n footerPy: \"8px\",\n },\n drawer: {\n headerHeight: \"48px\",\n headerPx: \"16px\",\n bodyPadding: \"24px\",\n footerPx: \"12px\",\n footerPy: \"10px\",\n },\n popup: {\n panelPadding: \"12px\",\n compactPaddingX: \"12px\",\n compactPaddingY: \"8px\",\n compactGap: \"8px\",\n text: \"13px\",\n },\n table: {\n small: { cellPx: \"8px\", thPy: \"6px\", tdPy: \"4px\", emptyPy: \"24px\" },\n middle: { cellPx: \"12px\", thPy: \"8px\", tdPy: \"6px\", emptyPy: \"32px\" },\n large: { cellPx: \"16px\", thPy: \"10px\", tdPy: \"8px\", emptyPy: \"40px\" },\n },\n empty: {\n defaultPy: \"48px\",\n compactPy: \"32px\",\n defaultIconBox: \"56px\",\n compactIconBox: \"44px\",\n defaultIcon: \"28px\",\n compactIcon: \"22px\",\n compactText: \"13px\",\n compactDescription: \"11px\",\n },\n },\n};\n\nexport type UiColor = keyof typeof uiTheme.colors | string;\nexport type UiSize = keyof typeof uiTheme.size;\n\n// ─── Shared Tailwind class configs ───────────────────────────────────────────\n// Použít jako Record<UiSize, string> — hodnoty jsou Tailwind třídy.\n// Změna zde se projeví ve všech komponentách najednou.\n\n/** Pevná výška pro jednoduché inputy: TextInput, NumberInput, DateInput */\nexport const inputSizeClasses: Record<UiSize, string> = {\n small:\n \"h-(--ui-h-sm) px-(--ui-px-sm) [font-size:var(--ui-text-sm)] rounded-(--ui-radius-sm)\",\n middle:\n \"h-(--ui-h-md) px-(--ui-px-md) [font-size:var(--ui-text-md)] rounded-(--ui-radius-md)\",\n large:\n \"h-(--ui-h-lg) px-(--ui-px-lg) [font-size:var(--ui-text-lg)] rounded-(--ui-radius-lg)\",\n};\n\n/** Minimální výška pro trigger inputy (select): SelectInput */\nexport const triggerSizeClasses: Record<UiSize, string> = {\n small:\n \"min-h-(--ui-h-sm) px-(--ui-px-sm) [font-size:var(--ui-text-sm)] rounded-(--ui-radius-sm)\",\n middle:\n \"min-h-(--ui-h-md) px-(--ui-px-md) [font-size:var(--ui-text-md)] rounded-(--ui-radius-md)\",\n large:\n \"min-h-(--ui-h-lg) px-(--ui-px-lg) [font-size:var(--ui-text-lg)] rounded-(--ui-radius-lg)\",\n};\n\n/** Minimální výška pro multi-select trigger (menší px kvůli tagům uvnitř) */\nexport const multiTriggerSizeClasses: Record<UiSize, string> = {\n small:\n \"min-h-(--ui-h-sm) px-(--ui-px-sm) [font-size:var(--ui-text-sm)] rounded-(--ui-radius-sm)\",\n middle:\n \"min-h-(--ui-h-md) px-(--ui-px-md) [font-size:var(--ui-text-md)] rounded-(--ui-radius-md)\",\n large:\n \"min-h-(--ui-h-lg) px-(--ui-px-lg) [font-size:var(--ui-text-lg)] rounded-(--ui-radius-lg)\",\n};\n\n/** Velikost spinner ikony navázaná na theme size */\nexport const spinnerIconSize: Record<UiSize, number> = {\n small: 14,\n middle: 18,\n large: 22,\n};\n\n/** Velikost textu u spinneru */\nexport const spinnerTextSizeClasses: Record<UiSize, string> = {\n small: \"[font-size:var(--ui-text-sm)]\",\n middle: \"[font-size:var(--ui-text-md)]\",\n large: \"[font-size:var(--ui-text-lg)]\",\n};\n\n/** Sdílené title styly pro hlavičky komponent */\nexport const componentTitleClasses = {\n default: \"font-medium [font-size:var(--ui-text-lg)] text-(--ui-text-strong)\",\n inverse: \"font-medium [font-size:var(--ui-text-lg)] text-(--ui-primary-text)\",\n} as const;\n\nexport const panelLayoutClasses = {\n header: \"min-h-(--ui-panel-header-h) px-(--ui-panel-header-px)\",\n body: \"p-(--ui-panel-body-p)\",\n footer: \"px-(--ui-panel-footer-px) py-(--ui-panel-footer-py)\",\n} as const;\n\nexport const drawerLayoutClasses = {\n header: \"h-(--ui-drawer-header-h) px-(--ui-drawer-header-px)\",\n body: \"p-(--ui-drawer-body-p)\",\n footer: \"px-(--ui-drawer-footer-px) py-(--ui-drawer-footer-py)\",\n} as const;\n\nexport const popupLayoutClasses = {\n panel: \"p-(--ui-popup-panel-p)\",\n compactRow:\n \"px-(--ui-popup-row-px) py-(--ui-popup-row-py) gap-(--ui-popup-gap) [font-size:var(--ui-popup-text)]\",\n compactHeader: \"px-(--ui-popup-row-px) py-(--ui-popup-row-py)\",\n tooltip:\n \"px-(--ui-popup-row-px) py-(--ui-popup-row-py) [font-size:var(--ui-text-sm)]\",\n} as const;\n\nexport const emptyLayoutClasses = {\n default: \"py-(--ui-empty-py)\",\n compact: \"py-(--ui-empty-compact-py)\",\n defaultIconBox: \"h-(--ui-empty-icon-box) w-(--ui-empty-icon-box)\",\n compactIconBox:\n \"h-(--ui-empty-compact-icon-box) w-(--ui-empty-compact-icon-box)\",\n compactText: \"[font-size:var(--ui-empty-compact-text)]\",\n compactDescription: \"[font-size:var(--ui-empty-compact-description)]\",\n} as const;\n\nexport const neutralTextClasses = {\n strong: \"text-(--ui-text-strong)\",\n default: \"text-(--ui-text)\",\n muted: \"text-(--ui-text-muted)\",\n soft: \"text-(--ui-text-soft)\",\n disabled: \"text-(--ui-text-disabled)\",\n} as const;\n\nexport const neutralSurfaceClasses = {\n subtle: \"bg-(--ui-surface-subtle)\",\n muted: \"bg-(--ui-surface-muted)\",\n selected: \"bg-(--ui-surface-selected)\",\n} as const;\n\nexport const neutralIconClasses = {\n default: \"text-(--ui-text-soft)\",\n hover: \"hover:text-(--ui-text)\",\n} as const;\n\n/** Základní třídy pro textové inputy (border, bg, focus, disabled) */\nexport const inputBaseClass =\n \"w-full border border-(--ui-border-input) bg-white text-(--ui-text-strong) outline-none transition-colors placeholder:text-(--ui-text-soft) focus:border-(--ui-border-focus) disabled:bg-(--ui-surface-muted) disabled:text-(--ui-text-disabled) disabled:cursor-not-allowed\";\n\n/** Stavy borderu pro trigger inputy (select, date, multiselect) */\nexport const triggerBorderClasses = {\n default: \"border-(--ui-border-input) hover:border-(--ui-border-focus)\",\n open: \"border-(--ui-border-focus)\",\n error: \"border-(--ui-danger) hover:border-(--ui-danger)\",\n disabled:\n \"bg-(--ui-surface-muted) cursor-not-allowed opacity-60 hover:border-(--ui-border-input)\",\n} as const;\n","import { IconLoader2 } from \"@tabler/icons-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { spinnerIconSize, spinnerTextSizeClasses, type UiSize } from \"../theme\";\n\nexport type SpinnerColor = \"primary\" | \"danger\" | \"success\" | \"warning\" | \"info\" | \"current\";\ntype SpinnerSize = UiSize | number;\n\nexport type SpinnerProps = {\n size?: SpinnerSize;\n color?: SpinnerColor;\n label?: string;\n center?: boolean;\n className?: string;\n};\n\nconst spinnerColorStyle: Record<Exclude<SpinnerColor, \"current\">, { color: string }> = {\n primary: { color: \"var(--ui-primary)\" },\n danger: { color: \"var(--ui-danger)\" },\n success: { color: \"var(--ui-success)\" },\n warning: { color: \"var(--ui-warning)\" },\n info: { color: \"var(--ui-info)\" },\n};\n\nexport const Spinner = ({\n size = \"middle\",\n color = \"current\",\n label,\n center = false,\n className,\n}: SpinnerProps) => {\n const icon = (\n <IconLoader2\n size={typeof size === \"number\" ? size : spinnerIconSize[size]}\n strokeWidth={1.5}\n className=\"animate-spin shrink-0\"\n />\n );\n\n return (\n <span\n className={twMerge(\n \"inline-flex items-center\",\n label && \"gap-2\",\n center && \"w-full justify-center\",\n typeof size === \"number\" ? \"text-sm\" : spinnerTextSizeClasses[size],\n className,\n )}\n style={color === \"current\" ? undefined : spinnerColorStyle[color]}\n >\n {icon}\n {label && <span>{label}</span>}\n </span>\n );\n};\n","import { ReactElement, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { twMerge } from \"tailwind-merge\";\nimport { popupLayoutClasses } from \"../theme\";\n\nexport type ConfirmOptions = {\n message: string;\n confirmOk?: string;\n confirmCancel?: string;\n confirmColor?: \"red\" | \"primary\";\n};\n\nexport type PopconfirmProps = ConfirmOptions & {\n children?: ReactElement;\n onConfirm: () => void;\n onCancel?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n anchorRect?: DOMRect | null;\n classNames?: {\n trigger?: string;\n overlay?: string;\n panel?: string;\n message?: string;\n actions?: string;\n cancelButton?: string;\n confirmButton?: string;\n };\n};\n\nexport const Popconfirm = ({\n children,\n onConfirm,\n onCancel,\n open: controlledOpen,\n onOpenChange,\n anchorRect,\n classNames,\n ...confirm\n}: PopconfirmProps) => {\n const triggerRef = useRef<HTMLElement | null>(null);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (next: boolean) => {\n if (controlledOpen === undefined) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n };\n\n const rect = anchorRect ?? triggerRef.current?.getBoundingClientRect();\n const top = rect ? rect.bottom + 4 : 0;\n const left = rect ? rect.left : 0;\n\n return (\n <>\n {children && (\n <span\n ref={triggerRef}\n className={twMerge(\"inline-flex\", classNames?.trigger)}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setOpen(true);\n }}\n >\n {children}\n </span>\n )}\n {open && createPortal(\n <>\n <div\n className={twMerge(\"fixed inset-0 z-999\", classNames?.overlay)}\n onClick={() => {\n setOpen(false);\n onCancel?.();\n }}\n />\n <div\n className={twMerge(\"fixed z-1000 min-w-55 rounded-lg border border-(--ui-border) bg-white shadow-lg\", popupLayoutClasses.panel, classNames?.panel)}\n style={{ top, left: Math.max(left, 8) }}\n >\n <p className={twMerge(\"mb-3 text-sm text-(--ui-text)\", classNames?.message)}>{confirm.message}</p>\n <div className={twMerge(\"flex justify-end gap-2\", classNames?.actions)}>\n <button\n type=\"button\"\n className={twMerge(\"h-7 rounded-(--ui-radius-sm) border border-(--ui-border-strong) bg-white px-2.5 text-xs text-(--ui-text) cursor-pointer hover:bg-(--ui-surface-subtle)\", classNames?.cancelButton)}\n onClick={() => {\n setOpen(false);\n onCancel?.();\n }}\n >\n {confirm.confirmCancel ?? \"Zrušit\"}\n </button>\n <button\n type=\"button\"\n className={twMerge(\n \"h-7 rounded-(--ui-radius-sm) px-2.5 text-xs cursor-pointer\",\n confirm.confirmColor === \"red\"\n ? \"bg-(--ui-danger) text-(--ui-danger-text) hover:bg-(--ui-danger-hover)\"\n : \"bg-(--ui-primary) text-(--ui-primary-text) hover:bg-(--ui-primary-hover)\",\n classNames?.confirmButton,\n )}\n onClick={() => {\n setOpen(false);\n onConfirm();\n }}\n >\n {confirm.confirmOk ?? \"Potvrdit\"}\n </button>\n </div>\n </div>\n </>,\n document.body,\n )}\n </>\n );\n};\n","import { ComponentType, ReactNode } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { twMerge } from \"tailwind-merge\";\nimport { getIcon, UiIconType } from \"../icons\";\nimport { Spinner } from \"../spinner/spinner\";\nimport { Popconfirm, type ConfirmOptions } from \"../popconfirm/popconfirm\";\n\nexport type IconProps = { size?: number; strokeWidth?: number; className?: string };\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center gap-1.5 font-medium cursor-pointer transition-colors disabled:opacity-50 disabled:cursor-not-allowed select-none\",\n {\n variants: {\n variant: {\n primary: \"bg-(--ui-primary) text-(--ui-primary-text) hover:bg-(--ui-primary-hover) active:bg-(--ui-primary-active)\",\n danger: \"bg-(--ui-danger) text-(--ui-danger-text) hover:bg-(--ui-danger-hover) active:bg-(--ui-danger-hover)\",\n success: \"bg-(--ui-success) text-(--ui-success-text) hover:bg-(--ui-success-hover) active:bg-(--ui-success-hover)\",\n default: \"bg-white text-(--ui-text) border border-(--ui-border-strong) hover:bg-(--ui-surface-subtle) active:bg-(--ui-surface-muted)\",\n ghost: \"text-(--ui-text) hover:bg-(--ui-surface-muted) active:bg-(--ui-surface-subtle)\",\n link: \"text-(--ui-primary) hover:underline p-0! h-auto!\",\n },\n size: {\n small: \"h-(--ui-h-sm) px-(--ui-px-sm) [font-size:var(--ui-text-sm)] rounded-(--ui-radius-sm)\",\n middle: \"h-(--ui-h-md) px-(--ui-px-md) [font-size:var(--ui-text-md)] rounded-(--ui-radius-md)\",\n large: \"h-(--ui-h-lg) px-(--ui-px-lg) [font-size:var(--ui-text-lg)] rounded-(--ui-radius-lg)\",\n },\n block: {\n true: \"w-full\",\n false: \"\",\n },\n shape: {\n default: \"\",\n circle: \"rounded-full aspect-square px-0!\",\n round: \"rounded-full\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"middle\",\n block: false,\n shape: \"default\",\n },\n },\n);\n\nexport type ButtonVariant = NonNullable<VariantProps<typeof buttonVariants>[\"variant\"]>;\nexport type ButtonSize = NonNullable<VariantProps<typeof buttonVariants>[\"size\"]>;\n\ntype ButtonProps = {\n text?: string;\n children?: ReactNode;\n onClick?: () => void;\n loading?: boolean;\n disabled?: boolean;\n variant?: ButtonVariant;\n className?: string;\n htmlType?: \"button\" | \"submit\" | \"reset\";\n icon?: ComponentType<IconProps>;\n iconType?: UiIconType;\n iconPosition?: \"left\" | \"right\";\n block?: boolean;\n size?: ButtonSize;\n iconSize?: number;\n confirm?: ConfirmOptions;\n shape?: \"default\" | \"circle\" | \"round\";\n classNames?: {\n icon?: string;\n content?: string;\n spinner?: string;\n };\n};\n\nconst iconSizeMap: Record<ButtonSize, number> = {\n small: 14,\n middle: 16,\n large: 18,\n};\n\nexport const Button = ({\n variant = \"primary\",\n size = \"middle\",\n shape = \"default\",\n block = false,\n iconPosition = \"left\",\n ...props\n}: ButtonProps) => {\n const iconSize = props.iconSize ?? iconSizeMap[size];\n const IconComponent = props.icon ?? (props.iconType ? getIcon(props.iconType) : undefined);\n const iconNode = IconComponent ? <IconComponent size={iconSize} strokeWidth={1.5} className={props.classNames?.icon} /> : undefined;\n\n const handleClick = () => {\n if (props.disabled || props.loading) {\n return;\n }\n props.onClick?.();\n };\n\n const button = (\n <button\n type={props.htmlType ?? \"button\"}\n disabled={props.disabled || props.loading}\n className={twMerge(buttonVariants({ variant, size, block, shape }), props.className)}\n onClick={props.confirm ? undefined : handleClick}\n >\n {props.loading ? (\n <Spinner size={iconSize} color=\"current\" className={props.classNames?.spinner} />\n ) : (\n iconPosition === \"left\" && iconNode\n )}\n <span className={props.classNames?.content}>{props.text ?? props.children}</span>\n {!props.loading && iconPosition === \"right\" && iconNode}\n </button>\n );\n\n if (!props.confirm) {\n return button;\n }\n\n return (\n <Popconfirm\n message={props.confirm.message}\n confirmOk={props.confirm.confirmOk}\n confirmCancel={props.confirm.confirmCancel}\n confirmColor={props.confirm.confirmColor}\n onConfirm={handleClick}\n >\n {button}\n </Popconfirm>\n );\n};\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ntype InputFieldProps = {\n children: ReactNode;\n noMargin?: boolean;\n className?: string;\n};\n\nexport const InputField = ({ noMargin, className, children }: InputFieldProps) => (\n <div className={twMerge(\"flex flex-col gap-1\", !noMargin && \"mb-3\", className)}>{children}</div>\n);\n","import { twMerge } from \"tailwind-merge\";\n\ntype InputLabelProps = {\n label: string;\n required?: boolean;\n className?: string;\n requiredMarkClassName?: string;\n};\n\nexport const InputLabel = ({ label, required, className, requiredMarkClassName }: InputLabelProps) => (\n <label className={twMerge(\"text-sm text-(--ui-text)\", className)}>\n {label}\n {required && <span className={twMerge(\"ml-0.5 text-(--ui-danger)\", requiredMarkClassName)}>*</span>}\n </label>\n);\n","import { twMerge } from \"tailwind-merge\";\n\ntype InputErrorProps = {\n error: string;\n className?: string;\n};\n\nexport const InputError = ({ error, className }: InputErrorProps) => (\n <span className={twMerge(\"text-xs text-(--ui-danger)\", className)}>{error}</span>\n);\n","import { createContext, useContext, ReactNode } from \"react\";\n\nexport type ServerErrorValue = { title: string; detail?: string } | null | undefined;\n\ntype ErrorContextValue = {\n resolveInputError: (name: string) => string[];\n resolveServerError: () => ServerErrorValue;\n};\n\nconst ErrorContext = createContext<ErrorContextValue>({\n resolveInputError: () => [],\n resolveServerError: () => null,\n});\n\ntype ErrorProviderProps = {\n resolveInputError: (name: string) => string[];\n resolveServerError: () => ServerErrorValue;\n children: ReactNode;\n};\n\nexport const ErrorProvider = ({ resolveInputError, resolveServerError, children }: ErrorProviderProps) => (\n <ErrorContext.Provider value={{ resolveInputError, resolveServerError }}>\n {children}\n </ErrorContext.Provider>\n);\n\nexport const useErrorResolver = () => useContext(ErrorContext).resolveInputError;\nexport const useServerError = () => useContext(ErrorContext).resolveServerError;\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconEye, IconEyeOff } from \"@tabler/icons-react\";\nimport { useState } from \"react\";\nimport { InputField } from \"./inputField\";\nimport { InputLabel } from \"./inputLabel\";\nimport { InputError } from \"./inputError\";\nimport { inputSizeClasses, inputBaseClass, neutralIconClasses } from \"../theme\";\nimport { useErrorResolver } from \"./errorResolverContext\";\n\nexport type TextInputProps = {\n label?: string;\n placeholder?: string;\n value?: string | null;\n onChange?: (value: string) => void;\n required?: boolean;\n disabled?: boolean;\n password?: boolean;\n newPassword?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n size?: \"small\" | \"middle\" | \"large\";\n classNames?: {\n label?: string;\n requiredMark?: string;\n inputWrapper?: string;\n input?: string;\n passwordToggle?: string;\n error?: string;\n };\n};\n\nexport const TextInput = ({\n size = \"middle\",\n password = false,\n newPassword = false,\n ...props\n}: TextInputProps) => {\n const [showPassword, setShowPassword] = useState(false);\n const resolveError = useErrorResolver();\n\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay =\n props.error ??\n props.customError ??\n (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n const inputType = !password ? \"text\" : showPassword ? \"text\" : \"password\";\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n <div className={twMerge(\"relative\", props.classNames?.inputWrapper)}>\n <input\n type={inputType}\n autoComplete={newPassword ? \"new-password\" : undefined}\n placeholder={props.placeholder}\n value={props.value ?? \"\"}\n disabled={props.disabled}\n onChange={(e) => props.onChange?.(e.target.value)}\n className={twMerge(\n inputBaseClass,\n inputSizeClasses[size],\n password && \"pr-8\",\n hasError && \"border-(--ui-danger)\",\n props.classNames?.input,\n )}\n />\n {password && (\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={() => setShowPassword((v) => !v)}\n className={twMerge(\n \"absolute right-2 top-1/2 -translate-y-1/2 cursor-pointer\",\n neutralIconClasses.default,\n neutralIconClasses.hover,\n props.classNames?.passwordToggle,\n )}\n >\n {showPassword ? (\n <IconEyeOff size={14} strokeWidth={1.5} />\n ) : (\n <IconEye size={14} strokeWidth={1.5} />\n )}\n </button>\n )}\n </div>\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { InputField } from \"./inputField\";\nimport { InputLabel } from \"./inputLabel\";\nimport { InputError } from \"./inputError\";\nimport { inputSizeClasses, inputBaseClass } from \"../theme\";\nimport { useErrorResolver } from \"./errorResolverContext\";\n\nexport type NumberInputProps = {\n label?: string;\n placeholder?: string;\n value?: number | null;\n onChange?: (value: number | null) => void;\n required?: boolean;\n disabled?: boolean;\n min?: number;\n max?: number;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n size?: \"small\" | \"middle\" | \"large\";\n classNames?: {\n label?: string;\n requiredMark?: string;\n input?: string;\n error?: string;\n };\n};\n\nconst numberInputClass =\n inputBaseClass +\n \" [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\";\n\nexport const NumberInput = ({\n size = \"middle\",\n ...props\n}: NumberInputProps) => {\n const resolveError = useErrorResolver();\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay =\n props.error ??\n props.customError ??\n (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (raw === \"\" || raw === \"-\") {\n props.onChange?.(null);\n return;\n }\n const num = parseFloat(raw);\n if (!isNaN(num)) {\n props.onChange?.(num);\n }\n };\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n <input\n type=\"number\"\n placeholder={props.placeholder}\n value={props.value ?? \"\"}\n disabled={props.disabled}\n min={props.min}\n max={props.max}\n onChange={handleChange}\n className={twMerge(\n numberInputClass,\n inputSizeClasses[size],\n hasError && \"border-(--ui-danger)\",\n props.classNames?.input,\n )}\n />\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconCheck } from \"@tabler/icons-react\";\nimport { InputField } from \"./inputField\";\nimport { InputError } from \"./inputError\";\nimport { useErrorResolver } from \"./errorResolverContext\";\nimport { neutralTextClasses } from \"../theme\";\n\nexport type CheckboxInputProps = {\n label?: string;\n value?: boolean | null;\n onChange?: (value: boolean) => void;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n classNames?: {\n label?: string;\n control?: string;\n indicator?: string;\n text?: string;\n error?: string;\n };\n};\n\nexport const CheckboxInput = ({\n value = false,\n ...props\n}: CheckboxInputProps) => {\n const resolveError = useErrorResolver();\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay =\n props.error ??\n props.customError ??\n (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n const checked = value ?? false;\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n <label\n className={twMerge(\n \"inline-flex items-center gap-2\",\n props.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n props.classNames?.label,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={props.disabled}\n onChange={e => props.onChange?.(e.target.checked)}\n className=\"sr-only peer\"\n />\n <span\n className={twMerge(\n \"relative shrink-0 w-4 h-4 rounded border transition-colors\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-(--ui-border-focus) peer-focus-visible:ring-offset-2\",\n checked\n ? \"bg-(--ui-primary) border-(--ui-primary)\"\n : \"bg-white border-(--ui-border-strong)\",\n hasError && \"border-(--ui-danger)\",\n props.classNames?.control,\n )}\n >\n {checked && (\n <IconCheck\n size={12}\n strokeWidth={2.5}\n className={twMerge(\"absolute inset-0 m-auto text-white\", props.classNames?.indicator)}\n />\n )}\n </span>\n {props.label && (\n <span className={twMerge(\"text-sm\", neutralTextClasses.default, props.classNames?.text)}>{props.label}</span>\n )}\n </label>\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { InputField } from \"./inputField\";\nimport { InputError } from \"./inputError\";\nimport { useErrorResolver } from \"./errorResolverContext\";\nimport { neutralTextClasses } from \"../theme\";\n\nexport type SwitchInputProps = {\n label?: string;\n value?: boolean | null;\n onChange?: (value: boolean) => void;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n checkedLabel?: ReactNode;\n uncheckedLabel?: ReactNode;\n size?: \"small\" | \"middle\";\n classNames?: {\n label?: string;\n track?: string;\n thumb?: string;\n text?: string;\n error?: string;\n };\n};\n\nexport const SwitchInput = ({\n value = false,\n size = \"middle\",\n ...props\n}: SwitchInputProps) => {\n const resolveError = useErrorResolver();\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay = props.error ?? props.customError ?? (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n const checked = value ?? false;\n\n const trackClasses = size === \"small\"\n ? \"h-5 w-9 p-0.5\"\n : \"h-6 w-11 p-0.5\";\n\n const thumbSizeClass = size === \"small\" ? \"h-4 w-4\" : \"h-5 w-5\";\n const thumbPositionClass = size === \"small\"\n ? \"left-[1px] top-1/2 -translate-y-1/2 peer-checked:translate-x-4\"\n : \"left-[1px] top-1/2 -translate-y-1/2 peer-checked:translate-x-5\";\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n <label\n className={twMerge(\n \"inline-flex items-center gap-3\",\n props.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n props.classNames?.label,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={props.disabled}\n onChange={e => props.onChange?.(e.target.checked)}\n className=\"sr-only peer\"\n />\n\n <span\n className={twMerge(\n \"relative shrink-0 rounded-full border transition-colors\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-(--ui-border-focus) peer-focus-visible:ring-offset-2\",\n trackClasses,\n checked\n ? \"border-(--ui-primary) bg-(--ui-primary)\"\n : \"border-(--ui-border-strong) bg-(--ui-surface-muted)\",\n hasError && \"border-(--ui-danger)\",\n props.classNames?.track,\n )}\n >\n <span\n className={twMerge(\n \"absolute rounded-full bg-white shadow-sm transition-transform\",\n thumbSizeClass,\n thumbPositionClass,\n props.classNames?.thumb,\n )}\n />\n </span>\n\n {(props.label || props.checkedLabel || props.uncheckedLabel) && (\n <span className={twMerge(\"text-sm\", neutralTextClasses.default, props.classNames?.text)}>\n {props.label ?? (checked ? props.checkedLabel : props.uncheckedLabel)}\n </span>\n )}\n </label>\n\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { ComponentType, ReactNode, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Button, type IconProps } from \"../button/button\";\nimport { getIcon, type UiIconType } from \"../icons\";\nimport { Popconfirm, type ConfirmOptions } from \"../popconfirm/popconfirm\";\nimport { popupLayoutClasses } from \"../theme\";\n\ntype DropdownDivider = {\n divider: true;\n visible?: boolean;\n};\n\ntype DropdownAction = {\n divider?: false;\n label: ReactNode;\n custom?: boolean;\n icon?: ComponentType<IconProps>;\n iconType?: UiIconType;\n color?: string;\n disabled?: boolean;\n visible?: boolean;\n closeOnSelect?: boolean;\n onSelect?: () => void;\n confirm?: ConfirmOptions;\n className?: string;\n};\n\nexport type DropdownOption = DropdownDivider | DropdownAction;\n\nexport type DropdownPlacement = \"auto\" | \"bottom-start\" | \"bottom-end\";\n\nexport type DropdownProps = {\n children: ReactNode;\n options?: DropdownOption[];\n content?: ReactNode | ((api: { close: () => void }) => ReactNode);\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: DropdownPlacement;\n panelClassName?: string;\n className?: string;\n matchTriggerWidth?: boolean;\n classNames?: {\n trigger?: string;\n panel?: string;\n divider?: string;\n option?: string;\n optionIcon?: string;\n optionLabel?: string;\n content?: string;\n };\n};\n\ntype DropdownPos = {\n top: number;\n left: number;\n minWidth: number;\n maxHeight: number;\n};\n\nconst GAP = 6;\nconst VIEWPORT_MARGIN = 8;\nconst FLOATING_ROOT_SELECTOR = \"[data-ui-floating-root]\";\n\nfunction calcPosition(\n triggerRect: DOMRect,\n panelRect: DOMRect,\n placement: DropdownPlacement,\n): DropdownPos {\n const spaceBelow = window.innerHeight - triggerRect.bottom - VIEWPORT_MARGIN;\n const spaceAbove = triggerRect.top - VIEWPORT_MARGIN;\n const openAbove = spaceBelow < panelRect.height && spaceAbove > spaceBelow;\n const preferEnd = placement === \"bottom-end\";\n const startLeft = triggerRect.left;\n const endLeft = triggerRect.right - panelRect.width;\n const overflowsRightWithStart = startLeft + panelRect.width > window.innerWidth - VIEWPORT_MARGIN;\n const overflowsLeftWithEnd = endLeft < VIEWPORT_MARGIN;\n const startFits = !overflowsRightWithStart;\n const endFits = !overflowsLeftWithEnd;\n\n let unclampedLeft = preferEnd ? endLeft : startLeft;\n\n if (placement === \"auto\") {\n if (endFits && (!startFits || triggerRect.right > window.innerWidth / 2)) {\n unclampedLeft = endLeft;\n } else {\n unclampedLeft = startLeft;\n }\n }\n\n // Auto-flip horizontally when the preferred side would overflow and the opposite side fits better.\n if (placement !== \"auto\" && !preferEnd && overflowsRightWithStart && endLeft >= VIEWPORT_MARGIN) {\n unclampedLeft = endLeft;\n } else if (placement !== \"auto\" && preferEnd && overflowsLeftWithEnd && startLeft + panelRect.width <= window.innerWidth - VIEWPORT_MARGIN) {\n unclampedLeft = startLeft;\n }\n\n return {\n top: openAbove\n ? Math.max(triggerRect.top - panelRect.height - GAP, VIEWPORT_MARGIN)\n : Math.min(triggerRect.bottom + GAP, window.innerHeight - panelRect.height - VIEWPORT_MARGIN),\n left: Math.min(\n Math.max(unclampedLeft, VIEWPORT_MARGIN),\n Math.max(window.innerWidth - panelRect.width - VIEWPORT_MARGIN, VIEWPORT_MARGIN),\n ),\n minWidth: triggerRect.width,\n maxHeight: Math.max((openAbove ? spaceAbove : spaceBelow) - GAP, 120),\n };\n}\n\nconst isAction = (option: DropdownOption): option is DropdownAction => !option.divider;\n\nexport const Dropdown = ({\n children,\n options,\n content,\n open: controlledOpen,\n onOpenChange,\n placement = \"auto\",\n panelClassName,\n className,\n matchTriggerWidth = true,\n classNames,\n}: DropdownProps) => {\n const triggerRef = useRef<HTMLSpanElement>(null);\n const popupRef = useRef<HTMLDivElement>(null);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const [pos, setPos] = useState<DropdownPos | null>(null);\n const [pendingConfirm, setPendingConfirm] = useState<{ option: DropdownAction; anchorRect: DOMRect } | null>(null);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (next: boolean) => {\n if (next) {\n setPos(null);\n }\n if (controlledOpen === undefined) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n };\n\n useLayoutEffect(() => {\n if (!open || !triggerRef.current) {\n return;\n }\n\n const triggerEl = triggerRef.current;\n let frame = 0;\n let resizeObserver: ResizeObserver | null = null;\n\n const updatePosition = () => {\n if (!triggerEl || !popupRef.current) {\n return;\n }\n setPos(calcPosition(\n triggerEl.getBoundingClientRect(),\n popupRef.current.getBoundingClientRect(),\n placement,\n ));\n };\n\n frame = requestAnimationFrame(updatePosition);\n if (typeof ResizeObserver !== \"undefined\" && popupRef.current) {\n resizeObserver = new ResizeObserver(() => updatePosition());\n resizeObserver.observe(popupRef.current);\n }\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n cancelAnimationFrame(frame);\n resizeObserver?.disconnect();\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [open, placement]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const handleMouseDown = (e: MouseEvent) => {\n const target = e.target as Node;\n const targetElement = target instanceof Element ? target : null;\n const isInsideAnotherFloatingRoot = !!targetElement?.closest(FLOATING_ROOT_SELECTOR);\n if (\n !isInsideAnotherFloatingRoot &&\n popupRef.current &&\n !popupRef.current.contains(target) &&\n triggerRef.current &&\n !triggerRef.current.contains(target)\n ) {\n setOpen(false);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleMouseDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handleMouseDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [open]);\n\n const visibleOptions = (options ?? []).filter(option => option.visible !== false);\n\n const renderedContent = typeof content === \"function\"\n ? content({ close: () => setOpen(false) })\n : content;\n\n const panel = renderedContent ?? (\n <div className={twMerge(\"py-[calc(var(--ui-popup-row-py)/2)]\", classNames?.content)}>\n {visibleOptions.map((option, index) => {\n if (!isAction(option)) {\n return <div key={`divider-${index}`} className={twMerge(\"my-1 border-t border-(--ui-border)\", classNames?.divider)} />;\n }\n\n const Icon = option.icon ?? (option.iconType ? getIcon(option.iconType) : undefined);\n\n const handleSelect = () => {\n if (option.disabled) {\n return;\n }\n\n const shouldClose = option.closeOnSelect ?? true;\n if (shouldClose) {\n setOpen(false);\n }\n\n if (option.confirm) {\n const target = popupRef.current?.getBoundingClientRect() ?? triggerRef.current?.getBoundingClientRect();\n if (target) {\n setPendingConfirm({ option, anchorRect: target });\n }\n return;\n }\n\n option.onSelect?.();\n };\n\n if (option.custom) {\n return (\n <div\n key={`option-${index}`}\n className={twMerge(\"w-full\", popupLayoutClasses.compactHeader, option.className, classNames?.content)}\n style={option.color ? { color: option.color } : undefined}\n >\n {option.label}\n </div>\n );\n }\n\n return (\n <button\n key={`option-${index}`}\n type=\"button\"\n disabled={option.disabled}\n onClick={handleSelect}\n className={twMerge(\n \"w-full flex items-center text-left transition-colors\",\n popupLayoutClasses.compactRow,\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n option.disabled ? \"\" : \"cursor-pointer hover:bg-gray-50\",\n option.className,\n classNames?.option,\n )}\n style={option.color ? { color: option.color } : undefined}\n >\n {Icon && <Icon size={14} strokeWidth={1.5} className={twMerge(\"shrink-0\", classNames?.optionIcon)} />}\n <span className={twMerge(\"min-w-0 truncate\", classNames?.optionLabel)}>{option.label}</span>\n </button>\n );\n })}\n </div>\n );\n\n const confirmAnchorRect = useMemo(() => {\n if (!pendingConfirm) return null;\n const rect = pendingConfirm.anchorRect;\n if (placement === \"bottom-end\") {\n return {\n ...rect,\n left: rect.right - 220,\n right: rect.right,\n } as DOMRect;\n }\n return rect;\n }, [pendingConfirm, placement]);\n\n return (\n <>\n <span\n ref={triggerRef}\n onClick={() => setOpen(!open)}\n className={twMerge(\"inline-flex\", className, classNames?.trigger)}\n >\n {children}\n </span>\n\n {open && createPortal(\n <div\n ref={popupRef}\n data-ui-floating-root=\"\"\n className={twMerge(\n \"fixed z-1000 min-w-40 overflow-auto rounded-(--ui-radius-lg) border border-(--ui-border) bg-white shadow-lg\",\n !pos && \"invisible\",\n panelClassName,\n classNames?.panel,\n )}\n style={{\n top: pos?.top ?? 0,\n left: pos?.left ?? 0,\n minWidth: matchTriggerWidth ? (pos?.minWidth ?? triggerRef.current?.getBoundingClientRect().width) : undefined,\n maxHeight: pos?.maxHeight,\n }}\n >\n {panel}\n </div>,\n document.body,\n )}\n\n {pendingConfirm && (\n <Popconfirm\n open\n anchorRect={confirmAnchorRect}\n message={pendingConfirm.option.confirm?.message ?? \"\"}\n confirmOk={pendingConfirm.option.confirm?.confirmOk}\n confirmCancel={pendingConfirm.option.confirm?.confirmCancel}\n confirmColor={pendingConfirm.option.confirm?.confirmColor}\n onOpenChange={next => {\n if (!next) setPendingConfirm(null);\n }}\n onCancel={() => setPendingConfirm(null)}\n onConfirm={() => {\n pendingConfirm.option.onSelect?.();\n setPendingConfirm(null);\n }}\n />\n )}\n </>\n );\n};\n","import { ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconDroplet, IconX } from \"@tabler/icons-react\";\nimport { InputField } from \"./inputField\";\nimport { InputLabel } from \"./inputLabel\";\nimport { InputError } from \"./inputError\";\nimport { useErrorResolver } from \"./errorResolverContext\";\nimport { Dropdown } from \"../dropdown/dropdown\";\nimport {\n inputBaseClass,\n inputSizeClasses,\n neutralIconClasses,\n neutralSurfaceClasses,\n neutralTextClasses,\n popupLayoutClasses,\n triggerBorderClasses,\n} from \"../theme\";\n\ntype HSVA = {\n h: number;\n s: number;\n v: number;\n a: number;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction normalizeHex(value: string | null | undefined): string | null {\n if (!value) return null;\n const raw = value.trim().replace(/^#/, \"\");\n if (/^[0-9a-fA-F]{3}$/.test(raw)) {\n return `#${raw.split(\"\").map(char => char + char).join(\"\").toUpperCase()}`;\n }\n if (/^[0-9a-fA-F]{4}$/.test(raw)) {\n return `#${raw.split(\"\").map(char => char + char).join(\"\").toUpperCase()}`;\n }\n if (/^[0-9a-fA-F]{6}$/.test(raw) || /^[0-9a-fA-F]{8}$/.test(raw)) {\n return `#${raw.toUpperCase()}`;\n }\n return null;\n}\n\nfunction hexToRgba(value: string | null | undefined) {\n const normalized = normalizeHex(value);\n if (!normalized) {\n return { r: 37, g: 99, b: 235, a: 1 };\n }\n const raw = normalized.slice(1);\n const hasAlpha = raw.length === 8;\n return {\n r: parseInt(raw.slice(0, 2), 16),\n g: parseInt(raw.slice(2, 4), 16),\n b: parseInt(raw.slice(4, 6), 16),\n a: hasAlpha ? parseInt(raw.slice(6, 8), 16) / 255 : 1,\n };\n}\n\nfunction rgbaToHex(r: number, g: number, b: number, a = 1) {\n const toHex = (value: number) => clamp(Math.round(value), 0, 255).toString(16).padStart(2, \"0\").toUpperCase();\n const rgb = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n if (a >= 0.999) return rgb;\n return `${rgb}${toHex(a * 255)}`;\n}\n\nfunction rgbToHsv(r: number, g: number, b: number): HSVA {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const delta = max - min;\n\n let h = 0;\n if (delta !== 0) {\n if (max === rn) h = 60 * (((gn - bn) / delta) % 6);\n else if (max === gn) h = 60 * ((bn - rn) / delta + 2);\n else h = 60 * ((rn - gn) / delta + 4);\n }\n\n return {\n h: h < 0 ? h + 360 : h,\n s: max === 0 ? 0 : delta / max,\n v: max,\n a: 1,\n };\n}\n\nfunction hsvToRgb(h: number, s: number, v: number) {\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n\n let r1 = 0;\n let g1 = 0;\n let b1 = 0;\n\n if (h >= 0 && h < 60) [r1, g1, b1] = [c, x, 0];\n else if (h < 120) [r1, g1, b1] = [x, c, 0];\n else if (h < 180) [r1, g1, b1] = [0, c, x];\n else if (h < 240) [r1, g1, b1] = [0, x, c];\n else if (h < 300) [r1, g1, b1] = [x, 0, c];\n else [r1, g1, b1] = [c, 0, x];\n\n return {\n r: Math.round((r1 + m) * 255),\n g: Math.round((g1 + m) * 255),\n b: Math.round((b1 + m) * 255),\n };\n}\n\nfunction hexToHsva(value: string | null | undefined): HSVA {\n const rgba = hexToRgba(value);\n const hsv = rgbToHsv(rgba.r, rgba.g, rgba.b);\n return { ...hsv, a: rgba.a };\n}\n\nfunction hsvaToHex(value: HSVA) {\n const rgb = hsvToRgb(value.h, value.s, value.v);\n return rgbaToHex(rgb.r, rgb.g, rgb.b, value.a);\n}\n\nexport type ColorInputProps = {\n label?: string;\n placeholder?: string;\n value?: string | null;\n onChange?: (value: string | null) => void;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n size?: \"small\" | \"middle\" | \"large\";\n presets?: string[];\n allowClear?: boolean;\n variant?: \"default\" | \"picker\";\n showAlpha?: boolean;\n classNames?: {\n label?: string;\n requiredMark?: string;\n trigger?: string;\n swatch?: string;\n value?: string;\n clearButton?: string;\n icon?: string;\n panel?: string;\n saturation?: string;\n hueSlider?: string;\n alphaSlider?: string;\n hexRow?: string;\n hexInput?: string;\n preview?: string;\n presets?: string;\n presetButton?: string;\n error?: string;\n };\n};\n\nexport const ColorInput = ({\n size = \"middle\",\n placeholder = \"Vyberte barvu\",\n presets,\n allowClear = true,\n variant = \"default\",\n showAlpha = false,\n ...props\n}: ColorInputProps) => {\n const resolveError = useErrorResolver();\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay = props.error ?? props.customError ?? (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n const [open, setOpen] = useState(false);\n const normalizedValue = normalizeHex(props.value);\n const [draft, setDraft] = useState(normalizedValue ?? \"\");\n const [pickerValue, setPickerValue] = useState<HSVA>(() => hexToHsva(props.value));\n const saturationRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setDraft(normalizedValue ?? \"\");\n setPickerValue(hexToHsva(normalizedValue));\n }, [normalizedValue]);\n\n const normalizedPresets = useMemo(\n () => (presets ?? []).map(normalizeHex).filter((value): value is string => !!value),\n [presets],\n );\n\n const commitHex = (next: string | null) => {\n setDraft(next ?? \"\");\n setPickerValue(hexToHsva(next));\n props.onChange?.(next);\n };\n\n const commitDraft = () => {\n const next = normalizeHex(draft);\n if (!draft.trim()) {\n commitHex(null);\n return;\n }\n if (next) {\n commitHex(next);\n } else {\n setDraft(normalizedValue ?? \"\");\n }\n };\n\n const updatePicker = (next: Partial<HSVA>) => {\n const merged = {\n ...pickerValue,\n ...next,\n h: clamp(next.h ?? pickerValue.h, 0, 360),\n s: clamp(next.s ?? pickerValue.s, 0, 1),\n v: clamp(next.v ?? pickerValue.v, 0, 1),\n a: clamp(next.a ?? pickerValue.a, 0, 1),\n };\n setPickerValue(merged);\n const result = hsvaToHex(showAlpha ? merged : { ...merged, a: 1 });\n setDraft(result);\n props.onChange?.(result);\n };\n\n const hueColor = hsvaToHex({ h: pickerValue.h, s: 1, v: 1, a: 1 });\n const triggerText = normalizedValue ?? placeholder;\n\n const updateSaturationFromPointer = (clientX: number, clientY: number) => {\n if (!saturationRef.current) return;\n const rect = saturationRef.current.getBoundingClientRect();\n const s = clamp((clientX - rect.left) / rect.width, 0, 1);\n const v = clamp(1 - (clientY - rect.top) / rect.height, 0, 1);\n updatePicker({ s, v });\n };\n\n const startSaturationDrag = (clientX: number, clientY: number) => {\n updateSaturationFromPointer(clientX, clientY);\n const handleMove = (e: MouseEvent) => updateSaturationFromPointer(e.clientX, e.clientY);\n const handleUp = () => {\n window.removeEventListener(\"mousemove\", handleMove);\n window.removeEventListener(\"mouseup\", handleUp);\n };\n window.addEventListener(\"mousemove\", handleMove);\n window.addEventListener(\"mouseup\", handleUp);\n };\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n\n <Dropdown\n open={open}\n onOpenChange={next => !props.disabled && setOpen(next)}\n placement=\"bottom-start\"\n matchTriggerWidth={false}\n panelClassName={variant === \"picker\" ? \"w-[320px] max-w-[320px]\" : \"w-[256px] max-w-[256px]\"}\n content={() => (\n <div className={twMerge(\"grid gap-3\", popupLayoutClasses.panel, props.classNames?.panel)}>\n {variant === \"picker\" ? (\n <>\n <div className=\"grid gap-3\">\n <div\n ref={saturationRef}\n onMouseDown={e => {\n e.preventDefault();\n startSaturationDrag(e.clientX, e.clientY);\n }}\n className={twMerge(\"relative h-44 rounded-(--ui-radius-lg) border border-(--ui-border) cursor-crosshair overflow-hidden\", props.classNames?.saturation)}\n style={{ backgroundColor: hueColor }}\n >\n <div className=\"absolute inset-0 bg-linear-to-r from-white to-transparent\" />\n <div className=\"absolute inset-0 bg-linear-to-t from-black to-transparent\" />\n <span\n className=\"absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-sm\"\n style={{\n left: `${pickerValue.s * 100}%`,\n top: `${(1 - pickerValue.v) * 100}%`,\n }}\n />\n </div>\n\n <div className=\"grid gap-2\">\n <input\n type=\"range\"\n min={0}\n max={360}\n value={pickerValue.h}\n onChange={e => updatePicker({ h: Number(e.target.value) })}\n className={twMerge(\"h-2 w-full cursor-pointer appearance-none rounded-full border border-(--ui-border)\", props.classNames?.hueSlider)}\n style={{\n background:\n \"linear-gradient(90deg, #FF0000 0%, #FFFF00 17%, #00FF00 33%, #00FFFF 50%, #0000FF 67%, #FF00FF 83%, #FF0000 100%)\",\n }}\n />\n {showAlpha && (\n <input\n type=\"range\"\n min={0}\n max={100}\n value={Math.round(pickerValue.a * 100)}\n onChange={e => updatePicker({ a: Number(e.target.value) / 100 })}\n className={twMerge(\"h-2 w-full cursor-pointer appearance-none rounded-full border border-(--ui-border)\", props.classNames?.alphaSlider)}\n style={{\n background: `linear-gradient(90deg, transparent 0%, ${hsvaToHex({ ...pickerValue, a: 1 })} 100%)`,\n }}\n />\n )}\n </div>\n </div>\n\n <div className={twMerge(\"grid grid-cols-[1fr_auto] gap-2\", props.classNames?.hexRow)}>\n <input\n type=\"text\"\n value={draft}\n disabled={props.disabled}\n placeholder={showAlpha ? \"#000000FF\" : \"#000000\"}\n onChange={e => setDraft(e.target.value)}\n onBlur={commitDraft}\n onKeyDown={e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commitDraft();\n }\n }}\n className={twMerge(inputBaseClass, inputSizeClasses.small, props.classNames?.hexInput)}\n />\n <div\n className={twMerge(\"h-(--ui-h-sm) w-11 rounded-(--ui-radius-md) border border-(--ui-border)\", props.classNames?.preview)}\n style={{ backgroundColor: normalizedValue ?? \"transparent\" }}\n />\n </div>\n </>\n ) : (\n <div className=\"grid gap-2\">\n <div className={twMerge(\"flex items-center gap-3\", props.classNames?.hexRow)}>\n <label\n className={twMerge(\n \"relative block h-11 w-11 shrink-0 overflow-hidden rounded-(--ui-radius-md) border border-(--ui-border) cursor-pointer\",\n props.disabled && \"pointer-events-none opacity-60\",\n )}\n >\n <input\n type=\"color\"\n value={normalizedValue ?? \"#000000\"}\n disabled={props.disabled}\n onChange={e => {\n const next = normalizeHex(e.target.value);\n commitHex(next);\n }}\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n />\n <span\n className=\"absolute inset-0\"\n style={{ backgroundColor: normalizedValue ?? \"var(--ui-surface-subtle)\" }}\n />\n </label>\n\n <div className=\"min-w-0 flex-1\">\n <input\n type=\"text\"\n value={draft}\n disabled={props.disabled}\n placeholder=\"#000000\"\n onChange={e => setDraft(e.target.value)}\n onBlur={commitDraft}\n onKeyDown={e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commitDraft();\n }\n }}\n className={twMerge(inputBaseClass, inputSizeClasses.small, props.classNames?.hexInput)}\n />\n </div>\n </div>\n <p className={twMerge(\"text-xs\", neutralTextClasses.muted)}>\n Zadejte HEX barvu nebo ji vyberte z pickeru.\n </p>\n </div>\n )}\n\n {normalizedPresets.length > 0 && (\n <div className={twMerge(\"grid gap-2\", props.classNames?.presets)}>\n <div className={twMerge(\"text-xs font-medium\", neutralTextClasses.muted)}>\n Rychlé volby\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {normalizedPresets.map(color => (\n <button\n key={color}\n type=\"button\"\n onClick={() => commitHex(color)}\n className={twMerge(\n \"h-7 w-7 rounded-(--ui-radius-sm) border border-(--ui-border) transition-transform cursor-pointer hover:scale-105\",\n normalizedValue === color && \"ring-2 ring-(--ui-border-focus) ring-offset-2 ring-offset-white\",\n props.classNames?.presetButton,\n )}\n style={{ backgroundColor: color }}\n aria-label={`Vybrat barvu ${color}`}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n >\n <div\n className={twMerge(\n \"flex items-center gap-2 border bg-white cursor-pointer transition-colors select-none\",\n inputSizeClasses[size],\n open ? triggerBorderClasses.open : triggerBorderClasses.default,\n props.disabled && triggerBorderClasses.disabled,\n hasError && triggerBorderClasses.error,\n props.classNames?.trigger,\n )}\n >\n <span\n className={twMerge(\n \"h-4 w-4 shrink-0 rounded-(--ui-radius-sm) border border-(--ui-border)\",\n !normalizedValue && neutralSurfaceClasses.subtle,\n props.classNames?.swatch,\n )}\n style={normalizedValue ? { backgroundColor: normalizedValue } : undefined}\n />\n <span className={twMerge(\"min-w-0 flex-1 truncate\", normalizedValue ? neutralTextClasses.strong : neutralTextClasses.soft, props.classNames?.value)}>\n {triggerText}\n </span>\n {allowClear && normalizedValue && !props.disabled && (\n <button\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n commitHex(null);\n }}\n className={twMerge(\"shrink-0 cursor-pointer\", neutralIconClasses.default, neutralIconClasses.hover, props.classNames?.clearButton)}\n >\n <IconX size={12} strokeWidth={2} />\n </button>\n )}\n <IconDroplet size={14} strokeWidth={1.5} className={twMerge(\"shrink-0\", neutralIconClasses.default, props.classNames?.icon)} />\n </div>\n </Dropdown>\n\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { twMerge } from \"tailwind-merge\";\nimport { IconDatabaseOff } from \"@tabler/icons-react\";\nimport { emptyLayoutClasses, neutralTextClasses } from \"../theme\";\n\nexport type EmptyProps = {\n text?: string;\n description?: string;\n icon?: React.FC<{ size?: number | string; strokeWidth?: number; className?: string }>;\n className?: string;\n size?: \"default\" | \"compact\";\n};\n\nexport const Empty = ({\n text = \"Žádné záznamy k dispozici\",\n description,\n icon: Icon = IconDatabaseOff,\n className,\n size = \"default\",\n}: EmptyProps) => (\n <div\n className={twMerge(\n \"flex flex-col items-center justify-center text-center\",\n size === \"default\" ? emptyLayoutClasses.default : emptyLayoutClasses.compact,\n className,\n )}\n >\n <div\n className={twMerge(\n \"mb-3 flex items-center justify-center rounded-full border border-dashed border-(--ui-border) bg-(--ui-surface-subtle)\",\n size === \"default\" ? emptyLayoutClasses.defaultIconBox : twMerge(\"mb-2.5\", emptyLayoutClasses.compactIconBox),\n )}\n >\n <Icon\n size=\"1em\"\n strokeWidth={1.5}\n className={twMerge(\n neutralTextClasses.soft,\n size === \"default\" ? \"[font-size:var(--ui-empty-icon)]\" : \"[font-size:var(--ui-empty-compact-icon)]\",\n )}\n />\n </div>\n <p className={twMerge(\"font-medium text-(--ui-text-muted)\", size === \"default\" ? \"text-sm\" : emptyLayoutClasses.compactText)}>\n {text}\n </p>\n {description && (\n <p className={twMerge(\"mt-1 max-w-xs text-(--ui-text-soft)\", size === \"default\" ? \"text-xs\" : emptyLayoutClasses.compactDescription)}>\n {description}\n </p>\n )}\n </div>\n);\n","import { Key, ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport dayjs from \"dayjs\";\nimport { Spinner } from \"../spinner/spinner\";\nimport { Empty } from \"../empty/empty\";\nimport { neutralSurfaceClasses } from \"../theme\";\n\n// ─── Size ───────────────────────────────────────────────────────────────────\n\nexport type TableSize = \"small\" | \"middle\" | \"large\";\n\nexport const tableSizeConfig: Record<TableSize, { th: string; td: string; emptyPy: string }> = {\n small: { th: \"px-(--ui-table-cell-x-sm) py-(--ui-table-th-y-sm) [font-size:var(--ui-text-sm)]\", td: \"px-(--ui-table-cell-x-sm) py-(--ui-table-td-y-sm) [font-size:var(--ui-text-sm)]\", emptyPy: \"py-(--ui-table-empty-y-sm)\" },\n middle: { th: \"px-(--ui-table-cell-x-md) py-(--ui-table-th-y-md) [font-size:var(--ui-text-md)]\", td: \"px-(--ui-table-cell-x-md) py-(--ui-table-td-y-md) [font-size:var(--ui-text-md)]\", emptyPy: \"py-(--ui-table-empty-y-md)\" },\n large: { th: \"px-(--ui-table-cell-x-lg) py-(--ui-table-th-y-lg) [font-size:var(--ui-text-lg)]\", td: \"px-(--ui-table-cell-x-lg) py-(--ui-table-td-y-lg) [font-size:var(--ui-text-lg)]\", emptyPy: \"py-(--ui-table-empty-y-lg)\" },\n};\n\n// ─── Typy sloupců ───────────────────────────────────────────────────────────\n\nexport type ColumnType = \"date\" | \"datetime\" | \"yes/no\" | \"boolean\" | \"dot\";\n\nexport type TableColumn<T> = {\n title?: string;\n dataField?: keyof T;\n type?: ColumnType;\n align?: \"left\" | \"center\" | \"right\";\n width?: number | string;\n wrap?: boolean;\n render?: (item: T) => ReactNode;\n sortBy?: never;\n};\n\nexport type TableProps<T> = {\n items: T[];\n columns: TableColumn<T>[];\n loading?: boolean;\n emptyText?: string;\n rowKey?: keyof T;\n size?: TableSize;\n onRowClick?: (item: T) => void;\n verticalBorders?: boolean;\n className?: string;\n classNames?: {\n overlay?: string;\n table?: string;\n headerRow?: string;\n headerCell?: string;\n bodyRow?: string;\n bodyCell?: string;\n emptyCell?: string;\n };\n};\n\nexport const tableHeaderVerticalBorderClass = \"border-r border-(--ui-primary-text)/10 last:border-r-0\";\nexport const tableCellVerticalBorderClass = \"border-r border-(--ui-border) last:border-r-0\";\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nexport const columnTypeWidth: Partial<Record<ColumnType, number | string>> = {\n date: 100,\n datetime: 130,\n dot: 36,\n};\n\nexport function formatCellValue(value: unknown, type: ColumnType | undefined): ReactNode {\n if (value === null || value === undefined) return \"-\";\n switch (type) {\n case \"date\":\n return dayjs(value as string).format(\"D.M.YYYY\");\n case \"datetime\":\n return dayjs(value as string).format(\"D.M.YYYY H:mm\");\n case \"boolean\":\n return <input type=\"checkbox\" readOnly checked={value as boolean} className=\"cursor-default\" />;\n case \"yes/no\":\n return (value as boolean) ? \"Ano\" : \"Ne\";\n default:\n return String(value);\n }\n}\n\nexport function getKey<T>(item: T, items: T[], rowKey?: keyof T): Key {\n return rowKey ? String(item[rowKey]) : items.indexOf(item);\n}\n\n// ─── Table ───────────────────────────────────────────────────────────────────\n\nexport const Table = <T extends object>({\n loading = false,\n emptyText = \"Žádné záznamy\",\n size = \"middle\",\n verticalBorders = false,\n ...props\n}: TableProps<T>) => {\n const sc = tableSizeConfig[size];\n const isEmpty = !loading && props.items.length === 0;\n\n return (\n <div className={twMerge(\"relative overflow-x-auto border border-(--ui-border) rounded-(--ui-radius-lg)\", props.className)}>\n {loading && (\n <div className={twMerge(\"absolute inset-0 z-10 bg-white/60 flex items-center justify-center\", props.classNames?.overlay)}>\n <Spinner size=\"large\" color=\"primary\" />\n </div>\n )}\n\n <table className={twMerge(\"w-full border-collapse\", props.classNames?.table)}>\n <thead>\n <tr className={twMerge(\"bg-(--ui-primary) text-(--ui-primary-text)\", props.classNames?.headerRow)}>\n {props.columns.map((col, i) => (\n <th\n key={i}\n style={{ width: col.width ?? columnTypeWidth[col.type!] }}\n className={twMerge(\n sc.th,\n \"font-normal text-left whitespace-nowrap\",\n verticalBorders && tableHeaderVerticalBorderClass,\n col.align === \"center\" && \"text-center\",\n col.align === \"right\" && \"text-right\",\n props.classNames?.headerCell,\n )}\n >\n {col.title}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {isEmpty ? (\n <tr>\n <td\n colSpan={props.columns.length}\n className={twMerge(\"px-3\", props.classNames?.emptyCell)}\n >\n <Empty size=\"compact\" text={emptyText} className={sc.emptyPy} />\n </td>\n </tr>\n ) : (\n props.items.map((item, rowIdx) => (\n <tr\n key={getKey(item, props.items, props.rowKey)}\n onClick={props.onRowClick ? () => props.onRowClick!(item) : undefined}\n className={twMerge(\n \"border-t border-(--ui-border) transition-colors\",\n rowIdx % 2 === 1 && neutralSurfaceClasses.subtle,\n props.onRowClick && \"cursor-pointer hover:bg-blue-50\",\n props.classNames?.bodyRow,\n )}\n >\n {props.columns.map((col, colIdx) => {\n const content = col.render\n ? col.render(item)\n : col.dataField\n ? formatCellValue(item[col.dataField], col.type)\n : null;\n const centeredContent = col.align === \"center\";\n const rightAlignedContent = col.align === \"right\";\n\n return (\n <td\n key={colIdx}\n onClick={col.type === \"dot\" ? e => e.stopPropagation() : undefined}\n className={twMerge(\n sc.td,\n \"align-middle\",\n verticalBorders && tableCellVerticalBorderClass,\n !col.wrap && \"max-w-60 truncate\",\n col.wrap && \"whitespace-normal\",\n col.align === \"center\" && \"text-center\",\n col.align === \"right\" && \"text-right\",\n col.type === \"dot\" && \"w-9\",\n props.classNames?.bodyCell,\n )}\n >\n {centeredContent || rightAlignedContent ? (\n <div\n className={twMerge(\n \"flex w-full items-center\",\n centeredContent ? \"justify-center\" : \"justify-end\",\n )}\n >\n {content}\n </div>\n ) : (\n content\n )}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n};\n","import { useState } from \"react\";\n\nexport const SortDirection = {\n Asc: \"Asc\",\n Desc: \"Desc\",\n} as const;\nexport type SortDirection = typeof SortDirection[keyof typeof SortDirection];\n\nexport type GridApiQuery<TSortField, TFilter extends object> = {\n pageNumber: number;\n pageSize: number;\n sortBy?: TSortField;\n direction?: SortDirection;\n} & TFilter;\n\nexport type GridState<TSortField = never, TFilter extends object = Record<string, never>> = {\n pageNumber: number;\n pageSize: number;\n sortBy?: TSortField;\n direction?: SortDirection;\n filter: TFilter;\n};\n\nexport type GridHandle<TSortField = never, TFilter extends object = Record<string, never>> = GridState<TSortField, TFilter> & {\n onChange: (changes: Partial<GridState<TSortField, TFilter>>) => void;\n apiQuery: GridApiQuery<TSortField, TFilter>;\n};\n\nconst ISO_REGEX = /^\\d{4}-\\d{2}-\\d{2}T/;\n\nfunction reviveDates(obj: unknown): unknown {\n if (typeof obj === \"string\" && ISO_REGEX.test(obj)) {\n return new Date(obj);\n }\n if (obj && typeof obj === \"object\" && !Array.isArray(obj)) {\n return Object.fromEntries(\n Object.entries(obj as object).map(([k, v]) => [k, reviveDates(v)]),\n );\n }\n return obj;\n}\n\nfunction loadFilter<TFilter extends object>(storageKey: string): Partial<TFilter> {\n try {\n const raw = sessionStorage.getItem(`gridFilters:${storageKey}`);\n if (!raw) return {};\n return reviveDates(JSON.parse(raw)) as Partial<TFilter>;\n } catch {\n return {};\n }\n}\n\nfunction saveFilter<TFilter extends object>(storageKey: string, filter: TFilter): void {\n try {\n sessionStorage.setItem(`gridFilters:${storageKey}`, JSON.stringify(filter));\n } catch {\n // ignore\n }\n}\n\nexport function useGrid<TSortField = never, TFilter extends object = Record<string, never>>(\n defaults?: Partial<GridState<TSortField, TFilter>>,\n storageKey?: string,\n): GridHandle<TSortField, TFilter> {\n const [state, setState] = useState<GridState<TSortField, TFilter>>(() => {\n const persisted =\n storageKey ? loadFilter<TFilter>(storageKey) : {};\n return {\n pageNumber: 1,\n pageSize: 15,\n filter: { ...persisted } as TFilter,\n ...defaults,\n };\n });\n\n const onChange = (changes: Partial<GridState<TSortField, TFilter>>) => {\n setState(s => {\n const next = {\n ...s,\n pageNumber: \"filter\" in changes ? 1 : s.pageNumber,\n ...changes,\n };\n if (\"filter\" in changes && storageKey) {\n saveFilter(storageKey, next.filter);\n }\n return next;\n });\n };\n\n const apiQuery: GridApiQuery<TSortField, TFilter> = {\n pageNumber: state.pageNumber,\n pageSize: state.pageSize,\n sortBy: state.sortBy,\n direction: state.direction,\n ...state.filter,\n };\n\n return { ...state, onChange, apiQuery };\n}\n","import { Key, ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconChevronDown, IconChevronUp, IconSelector, IconChevronLeft, IconChevronRight } from \"@tabler/icons-react\";\nimport {\n formatCellValue,\n tableCellVerticalBorderClass,\n tableHeaderVerticalBorderClass,\n tableSizeConfig,\n type ColumnType,\n type TableSize,\n} from \"./table\";\nimport { SortDirection, type GridHandle } from \"./useGrid\";\nimport { Spinner } from \"../spinner/spinner\";\nimport { Empty } from \"../empty/empty\";\nimport { neutralSurfaceClasses } from \"../theme\";\n\n// ─── Typy ──────────────────────────────────────────────────────────────────\n\nexport type GridColumn<T, TSortField = never> = {\n title?: string;\n dataField?: keyof T;\n sortBy?: TSortField;\n type?: ColumnType;\n align?: \"left\" | \"center\" | \"right\";\n width?: number | string;\n wrap?: boolean;\n render?: (item: T) => ReactNode;\n};\n\ntype GridSelection<T> = {\n selectedItems: T[];\n onChange: (items: T[]) => void;\n};\n\nexport type GridProps<T, TSortField = never, TFilter extends object = Record<string, never>> = {\n items: T[];\n totalCount: number;\n loading: boolean;\n columns: GridColumn<T, TSortField>[];\n grid: GridHandle<TSortField, TFilter>;\n rowKey?: keyof T;\n emptyText?: string;\n size?: TableSize;\n selection?: GridSelection<T>;\n onRowClick?: (item: T) => void;\n verticalBorders?: boolean;\n showPageNumberChanger?: boolean;\n showPageSizeChanger?: boolean;\n className?: string;\n classNames?: {\n overlay?: string;\n table?: string;\n headerRow?: string;\n headerCell?: string;\n bodyRow?: string;\n bodyCell?: string;\n emptyCell?: string;\n loadingCell?: string;\n pagination?: {\n root?: string;\n summary?: string;\n controls?: string;\n pageSizeSelect?: string;\n button?: string;\n activeButton?: string;\n };\n };\n};\n\ntype GridPaginationClassNames = NonNullable<GridProps<any>[\"classNames\"]>[\"pagination\"];\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nconst columnTypeWidth: Partial<Record<ColumnType, number | string>> = {\n date: 100,\n datetime: 130,\n dot: 36,\n};\n\nfunction getKey<T>(item: T, items: T[], rowKey?: keyof T): Key {\n return rowKey ? String(item[rowKey]) : items.indexOf(item);\n}\n\n// ─── Pagination ─────────────────────────────────────────────────────────────\n\nconst PAGE_SIZES = [15, 25, 50];\n\nfunction buildPageNumbers(current: number, total: number): (number | \"...\")[] {\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n const pages: (number | \"...\")[] = [1];\n if (current > 3) pages.push(\"...\");\n for (let p = Math.max(2, current - 1); p <= Math.min(total - 1, current + 1); p++) {\n pages.push(p);\n }\n if (current < total - 2) pages.push(\"...\");\n pages.push(total);\n return pages;\n}\n\ntype PaginationProps = {\n current: number;\n pageSize: number;\n total: number;\n onChange: (page: number, pageSize: number) => void;\n showPageNumberChanger: boolean;\n showPageSizeChanger: boolean;\n classNames?: GridPaginationClassNames;\n};\n\nconst Pagination = ({ current, pageSize, total, onChange, showPageNumberChanger, showPageSizeChanger, classNames }: PaginationProps) => {\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const from = Math.min((current - 1) * pageSize + 1, total);\n const to = Math.min(current * pageSize, total);\n const pages = buildPageNumbers(current, totalPages);\n\n const btnBase =\n \"h-7 min-w-7 px-1.5 text-xs rounded border border-(--ui-border) flex items-center justify-center transition-colors cursor-pointer select-none\";\n\n return (\n <div className={twMerge(\"flex items-center justify-between gap-4 px-3 py-2 border-t border-(--ui-border) rounded-b-lg\", neutralSurfaceClasses.subtle, classNames?.root)}>\n {/* Celkový počet */}\n <span className={twMerge(\"text-xs text-gray-500 whitespace-nowrap\", classNames?.summary)}>\n {total > 0 ? `${from}–${to} z ${total} záznamů` : \"0 záznamů\"}\n </span>\n\n <div className={twMerge(\"flex items-center gap-1.5\", classNames?.controls)}>\n {showPageSizeChanger && (\n <select\n value={pageSize}\n onChange={e => onChange(1, Number(e.target.value))}\n className={twMerge(\"h-7 px-1.5 text-xs border border-(--ui-border) rounded-(--ui-radius-sm) bg-white cursor-pointer outline-none\", classNames?.pageSizeSelect)}\n >\n {PAGE_SIZES.map(s => (\n <option key={s} value={s}>{s} / str.</option>\n ))}\n </select>\n )}\n\n {/* Prev */}\n <button\n type=\"button\"\n disabled={current <= 1}\n onClick={() => onChange(current - 1, pageSize)}\n className={twMerge(btnBase, \"bg-white hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed\", classNames?.button)}\n >\n <IconChevronLeft size={13} strokeWidth={1.5} />\n </button>\n\n {showPageNumberChanger && (\n <>\n {/* Page buttons */}\n {pages.map((p, i) =>\n p === \"...\" ? (\n <span key={`ellipsis-${i}`} className=\"text-xs text-gray-400 px-0.5\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n onClick={() => onChange(p, pageSize)}\n className={twMerge(\n btnBase,\n p === current ? \"bg-(--ui-primary) text-(--ui-primary-text) border-(--ui-primary)\" : \"bg-white hover:bg-gray-50\",\n classNames?.button,\n p === current && classNames?.activeButton,\n )}\n >\n {p}\n </button>\n ),\n )}\n </>\n )}\n\n {/* Next */}\n <button\n type=\"button\"\n disabled={current >= totalPages}\n onClick={() => onChange(current + 1, pageSize)}\n className={twMerge(btnBase, \"bg-white hover:bg-gray-50 disabled:opacity-40 disabled:cursor-not-allowed\", classNames?.button)}\n >\n <IconChevronRight size={13} strokeWidth={1.5} />\n </button>\n </div>\n </div>\n );\n};\n\n// ─── Grid ──────────────────────────────────────────────────────────────────\n\nexport const Grid = <T extends object, TSortField = never, TFilter extends object = Record<string, never>>(\n props: GridProps<T, TSortField, TFilter>,\n) => {\n const { grid } = props;\n const sc = tableSizeConfig[props.size ?? \"middle\"];\n const verticalBorders = props.verticalBorders ?? false;\n const isInitialLoading = props.loading && props.items.length === 0;\n const isEmpty = !props.loading && props.items.length === 0;\n\n const handleSort = (col: GridColumn<T, TSortField>) => {\n if (col.sortBy === undefined) return;\n const isCurrent = grid.sortBy === col.sortBy;\n grid.onChange({\n sortBy: col.sortBy,\n direction:\n isCurrent && grid.direction === SortDirection.Asc ? SortDirection.Desc : SortDirection.Asc,\n });\n };\n\n const allKeys = props.items.map(item => getKey(item, props.items, props.rowKey));\n const selectedKeys = new Set(\n (props.selection?.selectedItems ?? []).map(item => getKey(item, props.items, props.rowKey)),\n );\n const allSelected = props.items.length > 0 && props.items.every(item => selectedKeys.has(getKey(item, props.items, props.rowKey)));\n const someSelected = !allSelected && props.items.some(item => selectedKeys.has(getKey(item, props.items, props.rowKey)));\n\n const toggleAll = () => {\n if (!props.selection) return;\n props.selection.onChange(allSelected ? [] : [...props.items]);\n };\n\n const toggleRow = (item: T) => {\n if (!props.selection) return;\n const key = getKey(item, props.items, props.rowKey);\n const next = selectedKeys.has(key)\n ? props.selection.selectedItems.filter(s => getKey(s, props.items, props.rowKey) !== key)\n : [...props.selection.selectedItems, item];\n props.selection.onChange(next);\n };\n\n return (\n <div className={twMerge(\"relative border border-(--ui-border) rounded-(--ui-radius-lg) overflow-hidden\", props.className)}>\n {/* Loading overlay */}\n {props.loading && !isInitialLoading && (\n <div className={twMerge(\"absolute inset-0 z-10 bg-white/60 flex items-center justify-center\", props.classNames?.overlay)}>\n <Spinner size=\"large\" color=\"primary\" />\n </div>\n )}\n\n <div className=\"overflow-x-auto\">\n <table className={twMerge(\"w-full border-collapse\", props.classNames?.table)}>\n <thead>\n <tr className={twMerge(\"bg-(--ui-primary) text-(--ui-primary-text)\", props.classNames?.headerRow)}>\n {/* Checkbox sloupec */}\n {props.selection && (\n <th className={twMerge(sc.th, \"w-9\", verticalBorders && tableHeaderVerticalBorderClass, props.classNames?.headerCell)}>\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={el => { if (el) el.indeterminate = someSelected; }}\n onChange={toggleAll}\n className=\"cursor-pointer accent-white\"\n />\n </th>\n )}\n {props.columns.map((col, i) => {\n const isSortable = col.sortBy !== undefined;\n const isCurrent = isSortable && grid.sortBy === col.sortBy;\n\n return (\n <th\n key={i}\n style={{ width: col.width ?? columnTypeWidth[col.type!] }}\n onClick={isSortable ? () => handleSort(col) : undefined}\n className={twMerge(\n sc.th,\n \"font-normal text-left whitespace-nowrap\",\n verticalBorders && tableHeaderVerticalBorderClass,\n isSortable && \"cursor-pointer select-none hover:bg-white/10\",\n col.align === \"center\" && \"text-center\",\n col.align === \"right\" && \"text-right\",\n props.classNames?.headerCell,\n )}\n >\n <span className=\"inline-flex items-center gap-1\">\n {col.title}\n {isSortable && (\n <span className=\"opacity-70\">\n {isCurrent ? (\n grid.direction === SortDirection.Asc ? (\n <IconChevronUp size={12} strokeWidth={2} />\n ) : (\n <IconChevronDown size={12} strokeWidth={2} />\n )\n ) : (\n <IconSelector size={12} strokeWidth={2} />\n )}\n </span>\n )}\n </span>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {isInitialLoading ? (\n <tr>\n <td\n colSpan={props.columns.length + (props.selection ? 1 : 0)}\n className={twMerge(\"px-3 py-0\", props.classNames?.loadingCell)}\n >\n <div className=\"flex min-h-28 items-center justify-center\">\n <Spinner size=\"large\" color=\"primary\" />\n </div>\n </td>\n </tr>\n ) : isEmpty ? (\n <tr>\n <td\n colSpan={props.columns.length + (props.selection ? 1 : 0)}\n className={twMerge(\"px-3\", props.classNames?.emptyCell)}\n >\n <Empty size=\"compact\" text={props.emptyText ?? \"Žádné záznamy\"} className={sc.emptyPy} />\n </td>\n </tr>\n ) : (\n props.items.map((item, rowIdx) => {\n const key = getKey(item, props.items, props.rowKey);\n const isSelected = selectedKeys.has(key);\n\n return (\n <tr\n key={key}\n onClick={props.onRowClick ? () => props.onRowClick!(item) : undefined}\n className={twMerge(\n \"border-t border-(--ui-border) transition-colors\",\n rowIdx % 2 === 1 && !isSelected && neutralSurfaceClasses.subtle,\n isSelected && \"bg-blue-50\",\n props.onRowClick && \"cursor-pointer hover:bg-blue-50\",\n props.classNames?.bodyRow,\n )}\n >\n {props.selection && (\n <td\n className={twMerge(sc.td, \"w-9 align-middle\", verticalBorders && tableCellVerticalBorderClass, props.classNames?.bodyCell)}\n onClick={e => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-center\">\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggleRow(item)}\n className=\"cursor-pointer\"\n />\n </div>\n </td>\n )}\n {props.columns.map((col, colIdx) => {\n const content = col.render\n ? col.render(item)\n : col.dataField\n ? formatCellValue(item[col.dataField], col.type)\n : null;\n const centeredContent = col.align === \"center\";\n const rightAlignedContent = col.align === \"right\";\n\n return (\n <td\n key={colIdx}\n onClick={col.type === \"dot\" ? e => e.stopPropagation() : undefined}\n className={twMerge(\n sc.td,\n \"align-middle\",\n verticalBorders && tableCellVerticalBorderClass,\n !col.wrap && \"max-w-60 truncate\",\n col.wrap && \"whitespace-normal\",\n col.align === \"center\" && \"text-center\",\n col.align === \"right\" && \"text-right\",\n col.type === \"dot\" && \"w-9\",\n props.classNames?.bodyCell,\n )}\n >\n {centeredContent || rightAlignedContent ? (\n <div\n className={twMerge(\n \"flex w-full items-center\",\n centeredContent ? \"justify-center\" : \"justify-end\",\n )}\n >\n {content}\n </div>\n ) : (\n content\n )}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n <Pagination\n current={grid.pageNumber}\n pageSize={grid.pageSize}\n total={props.totalCount}\n showPageNumberChanger={props.showPageNumberChanger ?? false}\n showPageSizeChanger={props.showPageSizeChanger ?? false}\n onChange={(page, pageSize) => grid.onChange({ pageNumber: page, pageSize })}\n classNames={props.classNames?.pagination}\n />\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { type GridHandle } from \"./useGrid\";\n\nexport type FilterDescriptor<TFilter extends object> = {\n label: string;\n keys: (keyof TFilter)[];\n formatValue?: (filter: TFilter) => string | null | undefined;\n};\n\ntype GridFiltersProps<TFilter extends object> = {\n grid: GridHandle<any, TFilter>;\n children: ReactNode;\n descriptors?: FilterDescriptor<TFilter>[];\n className?: string;\n classNames?: {\n inputs?: string;\n activeFilters?: string;\n chip?: string;\n chipRemove?: string;\n clearAll?: string;\n };\n};\n\nfunction isValueSet(v: unknown): boolean {\n if (Array.isArray(v)) return v.length > 0;\n return v !== null && v !== undefined && v !== \"\";\n}\n\nexport const GridFilters = <TFilter extends object>(props: GridFiltersProps<TFilter>) => {\n const active = (props.descriptors ?? []).filter(d =>\n d.keys.some(k => isValueSet(props.grid.filter[k])),\n );\n\n const clearDescriptor = (d: FilterDescriptor<TFilter>) => {\n const cleared = d.keys.reduce((acc, k) => ({ ...acc, [k]: undefined }), {});\n props.grid.onChange({ filter: { ...props.grid.filter, ...cleared } as TFilter });\n };\n\n const clearAll = () => {\n props.grid.onChange({ filter: {} as TFilter });\n };\n\n return (\n <div className={props.className}>\n {/* Filter inputs */}\n <div className={twMerge(\"p-2 border border-b-0 border-(--ui-border) bg-(--ui-surface-subtle) rounded-t-lg\", props.classNames?.inputs)}>\n {props.children}\n </div>\n\n {/* Active filter tags */}\n {active.length > 0 && (\n <div className={twMerge(\"flex flex-wrap items-center gap-1.5 px-2 py-1.5 border border-b-0 border-(--ui-border) bg-(--ui-surface-subtle)\", props.classNames?.activeFilters)}>\n {active.map(d => {\n const value = d.formatValue?.(props.grid.filter);\n return (\n <span\n key={d.keys.join(\",\")}\n className={twMerge(\"inline-flex items-center gap-1 bg-blue-50 text-blue-700 border border-blue-200 rounded-full px-2 h-6 text-xs\", props.classNames?.chip)}\n >\n {value ? `${d.label}: ${value}` : d.label}\n <button\n type=\"button\"\n onClick={() => clearDescriptor(d)}\n className={twMerge(\"text-blue-400 hover:text-blue-700 cursor-pointer\", props.classNames?.chipRemove)}\n >\n <IconX size={10} strokeWidth={2.5} />\n </button>\n </span>\n );\n })}\n <button\n type=\"button\"\n onClick={clearAll}\n className={twMerge(\"ml-1 text-xs text-(--ui-text-soft) hover:text-(--ui-text) cursor-pointer\", props.classNames?.clearAll)}\n >\n Vymazat vše\n </button>\n </div>\n )}\n </div>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { TextInput } from \"../input/textInput\";\nimport { type GridHandle } from \"./useGrid\";\n\ntype FilterTextInputProps<TFilter extends object> = {\n grid: GridHandle<any, TFilter>;\n filterKey: keyof TFilter;\n placeholder?: string;\n label?: string;\n debounce?: number;\n};\n\nexport const FilterTextInput = <TFilter extends object>({\n debounce = 400,\n ...props\n}: FilterTextInputProps<TFilter>) => {\n const [local, setLocal] = useState<string>(String(props.grid.filter[props.filterKey] ?? \"\"));\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n setLocal(String(props.grid.filter[props.filterKey] ?? \"\"));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.grid.filter[props.filterKey]]);\n\n const handleChange = (value: string) => {\n setLocal(value);\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n props.grid.onChange({ filter: { ...props.grid.filter, [props.filterKey]: value } });\n }, debounce);\n };\n\n return (\n <TextInput\n size=\"small\"\n noMargin\n label={props.label}\n placeholder={props.placeholder}\n value={local}\n onChange={handleChange}\n />\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { NumberInput } from \"../input/numberInput\";\nimport { type GridHandle } from \"./useGrid\";\n\ntype FilterNumberInputProps<TFilter extends object> = {\n grid: GridHandle<any, TFilter>;\n filterKey: keyof TFilter;\n placeholder?: string;\n label?: string;\n debounce?: number;\n min?: number;\n max?: number;\n};\n\nexport const FilterNumberInput = <TFilter extends object>({\n debounce = 300,\n ...props\n}: FilterNumberInputProps<TFilter>) => {\n const rawValue = props.grid.filter[props.filterKey];\n const [local, setLocal] = useState<number | null>(typeof rawValue === \"number\" ? rawValue : null);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n const next = props.grid.filter[props.filterKey];\n setLocal(typeof next === \"number\" ? next : null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.grid.filter[props.filterKey]]);\n\n const handleChange = (value: number | null) => {\n setLocal(value);\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n props.grid.onChange({\n filter: {\n ...props.grid.filter,\n [props.filterKey]: value ?? undefined,\n },\n });\n }, debounce);\n };\n\n return (\n <NumberInput\n size=\"small\"\n noMargin\n label={props.label}\n placeholder={props.placeholder}\n value={local}\n onChange={handleChange}\n min={props.min}\n max={props.max}\n />\n );\n};\n","import { CheckboxInput } from \"../input/checkboxInput\";\nimport { type GridHandle } from \"./useGrid\";\n\ntype FilterCheckboxInputProps<TFilter extends object> = {\n grid: GridHandle<any, TFilter>;\n filterKey: keyof TFilter;\n label?: string;\n};\n\nexport const FilterCheckboxInput = <TFilter extends object>(props: FilterCheckboxInputProps<TFilter>) => {\n const currentValue = props.grid.filter[props.filterKey];\n const checked = currentValue === true;\n\n const handleChange = (value: boolean) => {\n props.grid.onChange({\n filter: {\n ...props.grid.filter,\n [props.filterKey]: value ? true : undefined,\n },\n });\n };\n\n return (\n <div className=\"flex h-(--ui-h-sm) items-center\">\n <CheckboxInput\n noMargin\n label={props.label}\n value={checked}\n onChange={handleChange}\n />\n </div>\n );\n};\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconCheck, IconSearch } from \"@tabler/icons-react\";\nimport { Spinner } from \"../spinner/spinner\";\nimport { neutralIconClasses, neutralSurfaceClasses, neutralTextClasses, popupLayoutClasses } from \"../theme\";\n\nexport type DropdownOption = {\n label: string;\n value: unknown;\n};\n\ntype DropdownPos = {\n top: number;\n left: number;\n width: number;\n openAbove: boolean;\n};\n\nfunction calcPosition(el: HTMLElement): DropdownPos {\n const rect = el.getBoundingClientRect();\n const maxDropdownHeight = 280;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxDropdownHeight && rect.top > spaceBelow;\n\n // fixed positioning is viewport-relative — do NOT add window.scrollY/scrollX\n return {\n top: openAbove ? rect.top - maxDropdownHeight - 2 : rect.bottom + 2,\n left: rect.left,\n width: rect.width,\n openAbove,\n };\n}\n\ntype SelectDropdownProps = {\n anchorRef: React.RefObject<HTMLElement | null>;\n isOpen: boolean;\n options: DropdownOption[];\n selectedValues: Set<unknown>;\n onSelect: (value: unknown) => void;\n onClose: () => void;\n loading?: boolean;\n showSearch?: boolean;\n multiMode?: boolean;\n onSelectAll?: () => void;\n onClearAll?: () => void;\n};\n\nexport const SelectDropdown = (props: SelectDropdownProps) => {\n const [search, setSearch] = useState(\"\");\n const [pos, setPos] = useState<DropdownPos | null>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const popupRef = useRef<HTMLDivElement>(null);\n\n // Recalculate position on open\n useEffect(() => {\n if (props.isOpen && props.anchorRef.current) {\n setPos(calcPosition(props.anchorRef.current));\n setSearch(\"\");\n if (props.showSearch !== false) {\n setTimeout(() => searchRef.current?.focus(), 0);\n }\n }\n }, [props.isOpen, props.anchorRef, props.showSearch]);\n\n // Close on outside click\n const handleMouseDown = useCallback(\n (e: MouseEvent) => {\n if (\n popupRef.current &&\n !popupRef.current.contains(e.target as Node) &&\n props.anchorRef.current &&\n !props.anchorRef.current.contains(e.target as Node)\n ) {\n props.onClose();\n }\n },\n [props],\n );\n\n useEffect(() => {\n if (props.isOpen) {\n document.addEventListener(\"mousedown\", handleMouseDown);\n }\n return () => document.removeEventListener(\"mousedown\", handleMouseDown);\n }, [props.isOpen, handleMouseDown]);\n\n if (!props.isOpen || !pos) {\n return null;\n }\n\n const filtered =\n search.trim() === \"\"\n ? props.options\n : props.options.filter(o => o.label.toLowerCase().includes(search.toLowerCase()));\n\n return createPortal(\n <div\n ref={popupRef}\n data-ui-floating-root=\"\"\n style={{ top: pos.top, left: pos.left, minWidth: pos.width }}\n className=\"fixed z-1002 bg-white border border-(--ui-border) rounded-(--ui-radius-lg) shadow-lg flex flex-col overflow-hidden\"\n >\n {/* Search input */}\n {props.showSearch !== false && (\n <div\n className={twMerge(\n \"flex items-center\",\n !props.multiMode && \"border-b border-(--ui-border)\",\n popupLayoutClasses.compactHeader,\n \"gap-(--ui-popup-gap)\",\n )}\n >\n <IconSearch size={13} strokeWidth={1.5} className={twMerge(\"shrink-0\", neutralIconClasses.default)} />\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={e => setSearch(e.target.value)}\n placeholder=\"Hledat...\"\n className=\"flex-1 bg-transparent outline-none [font-size:var(--ui-popup-text)] placeholder:text-(--ui-text-soft)\"\n />\n </div>\n )}\n\n {/* Multi: Vybrat vše / Zrušit vše */}\n {props.multiMode && props.onSelectAll && props.onClearAll && (\n <div\n className={twMerge(\n \"flex items-center justify-between border-t border-b border-(--ui-border) bg-(--ui-surface-subtle)\",\n popupLayoutClasses.compactHeader,\n )}\n >\n <span className={twMerge(\"text-[11px] font-medium uppercase tracking-[0.08em]\", neutralTextClasses.soft)}>\n Hromadné akce\n </span>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={props.onSelectAll}\n className={twMerge(\n \"cursor-pointer rounded-md px-2 py-1 text-xs transition-colors hover:bg-white\",\n neutralTextClasses.muted,\n \"hover:text-(--ui-text-strong)\",\n )}\n >\n Vybrat vše\n </button>\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={props.onClearAll}\n className={twMerge(\n \"cursor-pointer rounded-md px-2 py-1 text-xs transition-colors hover:bg-white\",\n neutralTextClasses.muted,\n \"hover:text-(--ui-text-strong)\",\n )}\n >\n Zrušit vše\n </button>\n </div>\n </div>\n )}\n\n {/* Options */}\n <div className=\"overflow-y-auto max-h-60\">\n {props.loading ? (\n <div className=\"flex items-center justify-center py-6\">\n <Spinner size=\"middle\" color=\"primary\" />\n </div>\n ) : filtered.length === 0 ? (\n <div className={twMerge(\"py-4 text-center text-xs\", neutralTextClasses.soft)}>Žádné výsledky</div>\n ) : (\n filtered.map((opt, i) => {\n const isSelected = props.selectedValues.has(opt.value);\n return (\n <div\n key={i}\n onMouseDown={e => e.preventDefault()}\n onClick={() => props.onSelect(opt.value)}\n className={twMerge(\n \"flex items-center justify-between cursor-pointer select-none\",\n popupLayoutClasses.compactRow,\n isSelected\n ? \"font-medium text-(--ui-text-strong)\"\n : \"text-(--ui-text) hover:bg-(--ui-surface-subtle)\",\n )}\n >\n <span>{opt.label}</span>\n {isSelected && <IconCheck size={13} strokeWidth={2} className=\"shrink-0 text-(--ui-text)\" />}\n </div>\n );\n })\n )}\n </div>\n </div>,\n document.body,\n );\n};\n","import { ReactNode, useRef, useState } from \"react\";\nimport { useErrorResolver } from \"../input/errorResolverContext\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconChevronDown, IconX } from \"@tabler/icons-react\";\nimport { InputField } from \"../input/inputField\";\nimport { InputLabel } from \"../input/inputLabel\";\nimport { InputError } from \"../input/inputError\";\nimport { SelectDropdown, type DropdownOption } from \"./_selectDropdown\";\nimport { neutralIconClasses, neutralTextClasses, triggerSizeClasses, triggerBorderClasses } from \"../theme\";\n\ntype DefaultVK<T extends object> = \"value\" extends keyof T ? Extract<\"value\", string & keyof T> : string & keyof T;\n\nexport type SelectInputProps<T extends object, VK extends string & keyof T = DefaultVK<T>> = {\n options?: T[] | null;\n loading?: boolean;\n labelKey?: keyof T & string;\n valueKey?: VK;\n label?: string;\n placeholder?: string;\n value?: T[VK] | null;\n onChange?: (value: T[VK] | null) => void;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n size?: \"small\" | \"middle\" | \"large\";\n allowClear?: boolean;\n showSearch?: boolean;\n treatZeroAsEmpty?: boolean;\n classNames?: {\n label?: string;\n requiredMark?: string;\n trigger?: string;\n value?: string;\n clearButton?: string;\n icon?: string;\n error?: string;\n };\n};\n\nexport const SelectInput = <T extends object, VK extends string & keyof T = DefaultVK<T>>({\n options,\n labelKey = \"label\" as keyof T & string,\n valueKey = \"value\" as unknown as VK,\n size = \"middle\",\n showSearch = true,\n ...props\n}: SelectInputProps<T, VK>) => {\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const allOptions: DropdownOption[] = (options ?? []).map(opt => ({\n label: String(opt[labelKey]),\n value: opt[valueKey],\n }));\n\n const effectiveValue = props.treatZeroAsEmpty && props.value === 0 ? null : props.value ?? null;\n const selectedOption = allOptions.find(o => o.value === effectiveValue) ?? null;\n const hasValue = effectiveValue !== null && effectiveValue !== undefined;\n const allowClear = props.allowClear ?? false;\n const resolveError = useErrorResolver();\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay = props.error ?? props.customError ?? (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n\n const handleSelect = (value: unknown) => {\n props.onChange?.(value as T[VK]);\n setIsOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n props.onChange?.(null);\n };\n\n const handleTriggerClick = () => {\n if (!props.disabled) {\n setIsOpen(v => !v);\n }\n };\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n className={twMerge(\n \"flex items-center gap-1 border bg-white cursor-pointer transition-colors select-none\",\n triggerSizeClasses[size],\n isOpen ? triggerBorderClasses.open : triggerBorderClasses.default,\n props.disabled && triggerBorderClasses.disabled,\n props.classNames?.trigger,\n )}\n style={hasError ? { borderColor: \"var(--ui-danger)\" } : undefined}\n >\n <span\n className={twMerge(\n \"flex min-w-0 flex-1 items-center truncate leading-none\",\n !selectedOption && neutralTextClasses.soft,\n props.classNames?.value,\n )}\n >\n {selectedOption ? selectedOption.label : (props.placeholder ?? \"\")}\n </span>\n\n {allowClear && hasValue && !props.disabled && (\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={handleClear}\n className={twMerge(\n \"flex h-4 w-4 shrink-0 items-center justify-center self-center cursor-pointer\",\n neutralIconClasses.default,\n neutralIconClasses.hover,\n props.classNames?.clearButton,\n )}\n >\n <IconX size={12} strokeWidth={2} />\n </button>\n )}\n\n <IconChevronDown\n size={13}\n strokeWidth={1.5}\n className={twMerge(\n \"shrink-0 self-center transition-transform\",\n neutralIconClasses.default,\n isOpen && \"rotate-180\",\n props.classNames?.icon,\n )}\n />\n </div>\n\n <SelectDropdown\n anchorRef={triggerRef}\n isOpen={isOpen}\n options={allOptions}\n selectedValues={new Set(hasValue ? [effectiveValue] : [])}\n onSelect={handleSelect}\n onClose={() => setIsOpen(false)}\n loading={props.loading}\n showSearch={showSearch}\n multiMode={false}\n />\n\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { SelectInput } from \"../select/selectInput\";\nimport { type GridHandle } from \"./useGrid\";\n\ntype DefaultVK<T extends object> = \"value\" extends keyof T ? \"value\" : string & keyof T;\n\ntype FilterSelectInputProps<\n TFilter extends object,\n TOption extends object,\n VK extends string & keyof TOption = DefaultVK<TOption>,\n> = {\n grid: GridHandle<any, TFilter>;\n filterKey: keyof TFilter;\n options?: TOption[];\n labelKey?: keyof TOption & string;\n valueKey?: VK;\n placeholder?: string;\n label?: string;\n};\n\nexport const FilterSelectInput = <\n TFilter extends object,\n TOption extends object,\n VK extends string & keyof TOption = DefaultVK<TOption>,\n>(\n props: FilterSelectInputProps<TFilter, TOption, VK>,\n) => {\n const currentValue = (props.grid.filter[props.filterKey] ?? null) as TOption[VK] | null;\n\n const handleChange = (value: TOption[VK] | null) => {\n props.grid.onChange({\n filter: { ...props.grid.filter, [props.filterKey]: value ?? undefined },\n });\n };\n\n return (\n <SelectInput\n size=\"small\"\n noMargin\n label={props.label}\n placeholder={props.placeholder}\n options={props.options}\n labelKey={props.labelKey}\n valueKey={props.valueKey}\n value={currentValue}\n onChange={handleChange}\n allowClear\n />\n );\n};\n","import { useState, useEffect, useRef, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconChevronLeft, IconChevronRight } from \"@tabler/icons-react\";\nimport { neutralIconClasses, neutralSurfaceClasses, neutralTextClasses } from \"../theme\";\n\nconst MONTHS_CS = [\n \"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\",\n \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\",\n];\nconst DAYS_CS = [\"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\", \"Ne\"];\n\n// JS: 0=Sun → Monday-first: 0=Mon\nfunction toMondayFirst(jsDay: number) {\n return (jsDay + 6) % 7;\n}\n\ntype CalDay = { day: number; month: number; year: number; isCurrentMonth: boolean };\n\nfunction buildDays(year: number, month: number): CalDay[] {\n const first = new Date(year, month, 1);\n const last = new Date(year, month + 1, 0);\n const startOffset = toMondayFirst(first.getDay());\n const days: CalDay[] = [];\n\n for (let i = startOffset; i > 0; i--) {\n const d = new Date(year, month, 1 - i);\n days.push({ day: d.getDate(), month: d.getMonth(), year: d.getFullYear(), isCurrentMonth: false });\n }\n for (let d = 1; d <= last.getDate(); d++) {\n days.push({ day: d, month, year, isCurrentMonth: true });\n }\n let next = 1;\n while (days.length < 42) {\n const nd = new Date(year, month + 1, next++);\n days.push({ day: nd.getDate(), month: nd.getMonth(), year: nd.getFullYear(), isCurrentMonth: false });\n }\n return days;\n}\n\nfunction sameDay(a: Date, b: CalDay) {\n return a.getFullYear() === b.year && a.getMonth() === b.month && a.getDate() === b.day;\n}\n\ntype CalendarPos = { top: number; left: number };\n\nfunction calcPos(el: HTMLElement, calHeight: number): CalendarPos {\n const rect = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < calHeight && rect.top > spaceBelow;\n return {\n top: openAbove ? rect.top - calHeight - 2 : rect.bottom + 2,\n left: rect.left,\n };\n}\n\nexport type CalendarPopupProps = {\n anchorRef: React.RefObject<HTMLElement | null>;\n isOpen: boolean;\n value: Date | null;\n minDate?: Date;\n maxDate?: Date;\n isDateDisabled?: (date: Date) => boolean;\n onSelect: (date: Date) => void;\n onClose: () => void;\n showTime?: boolean;\n};\n\nfunction atStartOfDay(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n}\n\nfunction isDayDisabled(\n date: Date,\n minDate?: Date,\n maxDate?: Date,\n isDateDisabled?: (date: Date) => boolean,\n) {\n const day = atStartOfDay(date);\n if (minDate && day < atStartOfDay(minDate)) return true;\n if (maxDate && day > atStartOfDay(maxDate)) return true;\n return isDateDisabled?.(date) ?? false;\n}\n\nexport const CalendarPopup = (props: CalendarPopupProps) => {\n const today = new Date();\n const [pos, setPos] = useState<CalendarPos | null>(null);\n const [viewYear, setViewYear] = useState(today.getFullYear());\n const [viewMonth, setViewMonth] = useState(today.getMonth());\n const [pending, setPending] = useState<Date | null>(null);\n const [hours, setHours] = useState(0);\n const [minutes, setMinutes] = useState(0);\n const popupRef = useRef<HTMLDivElement>(null);\n\n const calHeight = props.showTime ? 360 : 310;\n\n useEffect(() => {\n if (!props.isOpen || !props.anchorRef.current) {\n return;\n }\n setPos(calcPos(props.anchorRef.current, calHeight));\n const base = props.value;\n if (base) {\n setViewYear(base.getFullYear());\n setViewMonth(base.getMonth());\n setPending(base);\n setHours(base.getHours());\n setMinutes(base.getMinutes());\n } else {\n setViewYear(today.getFullYear());\n setViewMonth(today.getMonth());\n setPending(null);\n setHours(0);\n setMinutes(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.isOpen]);\n\n const handleMouseDown = useCallback(\n (e: MouseEvent) => {\n if (\n popupRef.current &&\n !popupRef.current.contains(e.target as Node) &&\n props.anchorRef.current &&\n !props.anchorRef.current.contains(e.target as Node)\n ) {\n props.onClose();\n }\n },\n [props],\n );\n\n useEffect(() => {\n if (props.isOpen) {\n document.addEventListener(\"mousedown\", handleMouseDown);\n }\n return () => document.removeEventListener(\"mousedown\", handleMouseDown);\n }, [props.isOpen, handleMouseDown]);\n\n if (!props.isOpen || !pos) {\n return null;\n }\n\n const days = buildDays(viewYear, viewMonth);\n\n const prevMonth = () => {\n if (viewMonth === 0) {\n setViewMonth(11);\n setViewYear(y => y - 1);\n } else {\n setViewMonth(m => m - 1);\n }\n };\n\n const nextMonth = () => {\n if (viewMonth === 11) {\n setViewMonth(0);\n setViewYear(y => y + 1);\n } else {\n setViewMonth(m => m + 1);\n }\n };\n\n const handleDayClick = (day: CalDay) => {\n const newDate = new Date(day.year, day.month, day.day, hours, minutes, 0, 0);\n if (isDayDisabled(newDate, props.minDate, props.maxDate, props.isDateDisabled)) {\n return;\n }\n if (!props.showTime) {\n props.onSelect(newDate);\n props.onClose();\n } else {\n setPending(newDate);\n }\n };\n\n const handleConfirm = () => {\n if (!pending) {\n return;\n }\n props.onSelect(\n new Date(pending.getFullYear(), pending.getMonth(), pending.getDate(), hours, minutes, 0, 0),\n );\n props.onClose();\n };\n\n const clamp = (val: number, min: number, max: number) => Math.min(max, Math.max(min, val));\n\n return createPortal(\n <div\n ref={popupRef}\n data-ui-floating-root=\"\"\n style={{ top: pos.top, left: pos.left }}\n className=\"fixed z-1000 bg-white border border-(--ui-border) rounded-(--ui-radius-lg) shadow-lg w-68\"\n >\n {/* Header — navigace měsíce */}\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-(--ui-border)\">\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={prevMonth}\n className={twMerge(\"p-1 rounded cursor-pointer hover:bg-(--ui-surface-muted)\", neutralTextClasses.muted)}\n >\n <IconChevronLeft size={14} strokeWidth={1.5} />\n </button>\n <span className=\"text-[13px] font-medium text-(--ui-text-strong)\">\n {MONTHS_CS[viewMonth]} {viewYear}\n </span>\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={nextMonth}\n className={twMerge(\"p-1 rounded cursor-pointer hover:bg-(--ui-surface-muted)\", neutralTextClasses.muted)}\n >\n <IconChevronRight size={14} strokeWidth={1.5} />\n </button>\n </div>\n\n {/* Názvy dnů */}\n <div className=\"grid grid-cols-7 px-2 pt-2 pb-1\">\n {DAYS_CS.map(d => (\n <div key={d} className=\"text-center text-[11px] text-(--ui-text-soft) font-medium\">\n {d}\n </div>\n ))}\n </div>\n\n {/* Mřížka dnů */}\n <div className=\"grid grid-cols-7 px-2 pb-2\">\n {days.map((day, i) => {\n const dayDate = new Date(day.year, day.month, day.day, hours, minutes, 0, 0);\n const disabled = isDayDisabled(dayDate, props.minDate, props.maxDate, props.isDateDisabled);\n const isSelected = pending !== null && sameDay(pending, day);\n const isTodayDay =\n today.getDate() === day.day &&\n today.getMonth() === day.month &&\n today.getFullYear() === day.year;\n\n return (\n <button\n key={i}\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={() => handleDayClick(day)}\n disabled={disabled}\n className={twMerge(\n \"h-8 w-full text-[13px] rounded transition-colors leading-none\",\n disabled && \"cursor-not-allowed text-(--ui-text-disabled) opacity-55\",\n !disabled && \"cursor-pointer\",\n !day.isCurrentMonth && !disabled && \"text-(--ui-text-disabled)\",\n day.isCurrentMonth && !isSelected && !disabled && \"text-(--ui-text) hover:bg-(--ui-surface-muted)\",\n isSelected && !disabled && \"bg-(--ui-primary) text-(--ui-primary-text) hover:bg-(--ui-primary-hover)\",\n isTodayDay && !isSelected && \"font-semibold\",\n )}\n >\n {day.day}\n </button>\n );\n })}\n </div>\n\n {/* Time inputs — jen v datetime módu */}\n {props.showTime && (\n <div className=\"flex items-center gap-2 px-3 py-2.5 border-t border-(--ui-border)\">\n <span className=\"text-xs text-(--ui-text-muted) mr-1\">Čas:</span>\n <input\n type=\"number\"\n min={0}\n max={23}\n value={hours}\n onChange={e => setHours(clamp(parseInt(e.target.value) || 0, 0, 23))}\n className=\"w-11 h-7 text-center text-[13px] border border-(--ui-border-input) rounded-(--ui-radius-md) outline-none focus:border-(--ui-border-focus) [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <span className=\"text-(--ui-text-muted) font-medium text-sm\">:</span>\n <input\n type=\"number\"\n min={0}\n max={59}\n value={String(minutes).padStart(2, \"0\")}\n onChange={e => setMinutes(clamp(parseInt(e.target.value) || 0, 0, 59))}\n className=\"w-11 h-7 text-center text-[13px] border border-(--ui-border-input) rounded-(--ui-radius-md) outline-none focus:border-(--ui-border-focus) [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={handleConfirm}\n disabled={!pending}\n className=\"ml-auto h-7 px-3 text-xs bg-(--ui-primary) text-(--ui-primary-text) rounded-(--ui-radius-md) hover:bg-(--ui-primary-hover) disabled:opacity-40 cursor-pointer disabled:cursor-not-allowed\"\n >\n Potvrdit\n </button>\n </div>\n )}\n </div>,\n document.body,\n );\n};\n","import { ReactNode, useRef, useState } from \"react\";\nimport { useErrorResolver } from \"../input/errorResolverContext\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconCalendar, IconX } from \"@tabler/icons-react\";\nimport dayjs from \"dayjs\";\nimport { InputField } from \"../input/inputField\";\nimport { InputLabel } from \"../input/inputLabel\";\nimport { InputError } from \"../input/inputError\";\nimport { CalendarPopup } from \"./_calendar\";\nimport { inputSizeClasses, neutralIconClasses, neutralTextClasses, triggerBorderClasses } from \"../theme\";\n\nexport type DateInputProps = {\n label?: string;\n placeholder?: string;\n value?: Date | null;\n onChange?: (value: Date | null) => void;\n minDate?: Date;\n maxDate?: Date;\n isDateDisabled?: (date: Date) => boolean;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n size?: \"small\" | \"middle\" | \"large\";\n showTime?: boolean;\n classNames?: {\n label?: string;\n requiredMark?: string;\n trigger?: string;\n value?: string;\n clearButton?: string;\n icon?: string;\n error?: string;\n };\n};\n\nexport const DateInput = ({ size = \"middle\", showTime = false, ...props }: DateInputProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLDivElement>(null);\n const resolveError = useErrorResolver();\n\n const hasValue = props.value != null;\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay = props.error ?? props.customError ?? (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n\n const displayValue = hasValue\n ? showTime\n ? dayjs(props.value).format(\"D.M.YYYY H:mm\")\n : dayjs(props.value).format(\"D.M.YYYY\")\n : null;\n\n const defaultPlaceholder = showTime ? \"Vyberte datum a čas...\" : \"Vyberte datum...\";\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n props.onChange?.(null);\n };\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n\n <div\n ref={triggerRef}\n onClick={() => !props.disabled && setIsOpen(v => !v)}\n className={twMerge(\n \"flex items-center gap-1.5 border bg-white cursor-pointer transition-colors select-none\",\n inputSizeClasses[size],\n isOpen ? triggerBorderClasses.open : triggerBorderClasses.default,\n props.disabled && triggerBorderClasses.disabled,\n props.classNames?.trigger,\n )}\n style={hasError ? { borderColor: \"var(--ui-danger)\" } : undefined}\n >\n <span className={twMerge(\"flex-1 truncate\", !displayValue && neutralTextClasses.soft, props.classNames?.value)}>\n {displayValue ?? (props.placeholder ?? defaultPlaceholder)}\n </span>\n\n {hasValue && !props.disabled && (\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={handleClear}\n className={twMerge(\"shrink-0 cursor-pointer\", neutralIconClasses.default, neutralIconClasses.hover, props.classNames?.clearButton)}\n >\n <IconX size={12} strokeWidth={2} />\n </button>\n )}\n\n <IconCalendar size={13} strokeWidth={1.5} className={twMerge(\"shrink-0\", neutralIconClasses.default, props.classNames?.icon)} />\n </div>\n\n <CalendarPopup\n anchorRef={triggerRef}\n isOpen={isOpen}\n value={props.value ?? null}\n minDate={props.minDate}\n maxDate={props.maxDate}\n isDateDisabled={props.isDateDisabled}\n onSelect={v => props.onChange?.(v)}\n onClose={() => setIsOpen(false)}\n showTime={showTime}\n />\n\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { DateInput } from \"../date/dateInput\";\nimport { type GridHandle } from \"./useGrid\";\n\ntype FilterDateInputProps<TFilter extends object> = {\n grid: GridHandle<any, TFilter>;\n filterKey: keyof TFilter;\n placeholder?: string;\n label?: string;\n showTime?: boolean;\n};\n\nexport const FilterDateInput = <TFilter extends object>(props: FilterDateInputProps<TFilter>) => {\n const rawValue = props.grid.filter[props.filterKey];\n const [local, setLocal] = useState<Date | null>(rawValue instanceof Date ? rawValue : null);\n\n useEffect(() => {\n const v = props.grid.filter[props.filterKey];\n setLocal(v instanceof Date ? v : null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.grid.filter[props.filterKey]]);\n\n const handleChange = (value: Date | null) => {\n setLocal(value);\n props.grid.onChange({ filter: { ...props.grid.filter, [props.filterKey]: value } });\n };\n\n return (\n <DateInput\n size=\"small\"\n noMargin\n label={props.label}\n placeholder={props.placeholder}\n showTime={props.showTime}\n value={local}\n onChange={handleChange}\n />\n );\n};\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport type BadgeProps = {\n count?: number;\n children?: ReactNode;\n showZero?: boolean;\n size?: \"default\" | \"small\";\n className?: string;\n classNames?: {\n badge?: string;\n };\n};\n\nexport const Badge = ({\n count = 0,\n size = \"default\",\n showZero = false,\n ...props\n}: BadgeProps) => {\n const visible = count > 0 || showZero;\n const label = count > 99 ? \"99+\" : String(count);\n\n return (\n <div className={twMerge(\"relative inline-flex\", props.className)}>\n {props.children}\n {visible && (\n <span\n className={twMerge(\n \"absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 bg-red-500 text-white font-medium rounded-full flex items-center justify-center leading-none\",\n size === \"small\" ? \"min-w-4 h-4 px-1 text-[10px]\" : \"min-w-4.5 h-4.5 px-1 text-xs\",\n props.classNames?.badge,\n )}\n >\n {label}\n </span>\n )}\n </div>\n );\n};\n","import { ComponentType } from \"react\";\nimport { IconUsers } from \"@tabler/icons-react\";\nimport { Badge } from \"../badge/badge\";\nimport { Button, type IconProps } from \"../button/button\";\nimport { Dropdown } from \"../dropdown/dropdown\";\nimport { SelectInput } from \"../select/selectInput\";\nimport { type GridHandle } from \"./useGrid\";\n\ntype DefaultVK<T extends object> = \"value\" extends keyof T ? Extract<\"value\", string & keyof T> : string & keyof T;\n\nexport type FilterSelectGroupItem<\n TFilter extends object,\n TOption extends object,\n VK extends string & keyof TOption = DefaultVK<TOption>,\n> = {\n label: string;\n filterKey: keyof TFilter;\n options?: TOption[];\n placeholder?: string;\n labelKey?: keyof TOption & string;\n valueKey?: VK;\n};\n\ntype FilterSelectGroupPopoverProps<\n TFilter extends object,\n TOption extends object,\n VK extends string & keyof TOption = DefaultVK<TOption>,\n> = {\n grid: GridHandle<any, TFilter>;\n groups: FilterSelectGroupItem<TFilter, TOption, VK>[];\n label?: string;\n icon?: ComponentType<IconProps>;\n className?: string;\n block?: boolean;\n};\n\nexport const FilterSelectGroupPopover = <\n TFilter extends object,\n TOption extends object,\n VK extends string & keyof TOption = DefaultVK<TOption>,\n>(\n props: FilterSelectGroupPopoverProps<TFilter, TOption, VK>,\n) => {\n const activeCount = props.groups.filter(g => {\n const value = props.grid.filter[g.filterKey];\n return value !== null && value !== undefined && value !== \"\";\n }).length;\n\n const handleReset = () => {\n const cleared = props.groups.reduce((acc, group) => {\n acc[group.filterKey] = undefined;\n return acc;\n }, {} as Partial<TFilter>);\n\n props.grid.onChange({ filter: { ...props.grid.filter, ...cleared } as TFilter });\n };\n\n const Icon = props.icon ?? IconUsers;\n\n return (\n <Dropdown\n className={props.className}\n content={() => (\n <div className=\"grid min-w-70 gap-3 p-3\">\n {props.groups.map(group => (\n <div key={String(group.filterKey)} className=\"grid gap-1\">\n <div className=\"text-xs font-medium text-gray-500\">{group.label}</div>\n <SelectInput\n size=\"small\"\n noMargin\n placeholder={group.placeholder ?? group.label}\n options={group.options}\n labelKey={group.labelKey}\n valueKey={group.valueKey}\n value={(props.grid.filter[group.filterKey] ?? null) as TOption[VK] | null}\n onChange={value => {\n props.grid.onChange({\n filter: { ...props.grid.filter, [group.filterKey]: value ?? undefined } as TFilter,\n });\n }}\n allowClear\n />\n </div>\n ))}\n\n {activeCount > 0 && (\n <div className=\"flex justify-end\">\n <Button\n variant=\"default\"\n size=\"small\"\n text=\"Resetovat\"\n onClick={handleReset}\n />\n </div>\n )}\n </div>\n )}\n >\n <Badge count={activeCount} size=\"small\">\n <Button\n variant=\"default\"\n size=\"small\"\n text={props.label ?? \"Uživatel\"}\n icon={Icon}\n block={props.block}\n />\n </Badge>\n </Dropdown>\n );\n};\n","import { IconCalendar } from \"@tabler/icons-react\";\nimport { Badge } from \"../badge/badge\";\nimport { Button } from \"../button/button\";\nimport { DateInput } from \"../date/dateInput\";\nimport { Dropdown } from \"../dropdown/dropdown\";\nimport { type GridHandle } from \"./useGrid\";\n\nexport type FilterDateRangeGroup<TFilter extends object> = {\n label: string;\n fromKey: keyof TFilter;\n toKey: keyof TFilter;\n};\n\ntype FilterDateRangePopoverProps<TFilter extends object> = {\n grid: GridHandle<any, TFilter>;\n groups: FilterDateRangeGroup<TFilter>[];\n label?: string;\n className?: string;\n block?: boolean;\n};\n\nexport const FilterDateRangePopover = <TFilter extends object>(props: FilterDateRangePopoverProps<TFilter>) => {\n const activeCount = props.groups.filter(group => {\n const from = props.grid.filter[group.fromKey];\n const to = props.grid.filter[group.toKey];\n return from instanceof Date || to instanceof Date;\n }).length;\n\n const handleDateChange = (key: keyof TFilter, value: Date | null) => {\n props.grid.onChange({\n filter: { ...props.grid.filter, [key]: value ?? undefined } as TFilter,\n });\n };\n\n const handleReset = () => {\n const cleared = props.groups.reduce((acc, group) => {\n acc[group.fromKey] = undefined;\n acc[group.toKey] = undefined;\n return acc;\n }, {} as Partial<TFilter>);\n\n props.grid.onChange({ filter: { ...props.grid.filter, ...cleared } as TFilter });\n };\n\n return (\n <Dropdown\n className={props.className}\n content={() => (\n <div className=\"grid min-w-85 gap-3 p-3\">\n {props.groups.map(group => {\n const fromValue = props.grid.filter[group.fromKey];\n const toValue = props.grid.filter[group.toKey];\n\n return (\n <div key={String(group.fromKey)} className=\"grid gap-1\">\n <div className=\"text-xs font-medium text-gray-500\">{group.label}</div>\n <div className=\"grid grid-cols-[1fr_auto_1fr] items-center gap-1\">\n <DateInput\n size=\"small\"\n noMargin\n placeholder=\"Od\"\n value={fromValue instanceof Date ? fromValue : null}\n onChange={value => handleDateChange(group.fromKey, value)}\n />\n <span className=\"px-1 text-gray-400\">→</span>\n <DateInput\n size=\"small\"\n noMargin\n placeholder=\"Do\"\n value={toValue instanceof Date ? toValue : null}\n onChange={value => handleDateChange(group.toKey, value)}\n />\n </div>\n </div>\n );\n })}\n\n {activeCount > 0 && (\n <div className=\"flex justify-end\">\n <Button\n variant=\"default\"\n size=\"small\"\n text=\"Resetovat\"\n onClick={handleReset}\n />\n </div>\n )}\n </div>\n )}\n >\n <Badge count={activeCount} size=\"small\">\n <Button\n variant=\"default\"\n size=\"small\"\n text={props.label ?? \"Datum\"}\n icon={IconCalendar}\n block={props.block}\n />\n </Badge>\n </Dropdown>\n );\n};\n","import { createContext, ReactNode, useContext } from \"react\";\n\nexport type DrawerContextValue = {\n close: () => void;\n saveAndClose: (message?: string) => void;\n setTitle: (title: string) => void;\n setFooter: (footer: ReactNode) => void;\n setLoading: (loading: boolean) => void;\n};\n\nexport const DrawerContext = createContext<DrawerContextValue | null>(null);\n\nexport function useDrawer() {\n const ctx = useContext(DrawerContext);\n if (!ctx) {\n throw new Error(\"useDrawer must be used inside Drawer\");\n }\n return ctx;\n}\n","import { IconCheck, IconAlertTriangle, IconInfoCircle, IconCircleX } from \"@tabler/icons-react\";\n\nexport type FeedbackType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport const feedbackTypeConfig: Record<\n FeedbackType,\n {\n icon: React.FC<{ size?: number; strokeWidth?: number; className?: string }>;\n borderColorVar: string;\n iconColor: string;\n }\n> = {\n success: { icon: IconCheck, borderColorVar: \"--ui-success\", iconColor: \"text-(--ui-success)\" },\n error: { icon: IconCircleX, borderColorVar: \"--ui-danger\", iconColor: \"text-(--ui-danger)\" },\n warning: { icon: IconAlertTriangle, borderColorVar: \"--ui-warning\", iconColor: \"text-(--ui-warning)\" },\n info: { icon: IconInfoCircle, borderColorVar: \"--ui-info\", iconColor: \"text-(--ui-info)\" },\n};\n","import { createContext, useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { feedbackTypeConfig } from \"../_feedbackConfig\";\nimport { neutralIconClasses } from \"../theme\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type NotificationType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport type NotificationOptions = {\n description?: string;\n duration?: number; // ms, 0 = persistent, default 4000\n};\n\ntype ToastItem = {\n id: number;\n type: NotificationType;\n message: string;\n description?: string;\n duration: number;\n visible: boolean;\n};\n\ntype NotificationContextValue = {\n add: (type: NotificationType, message: string, options?: NotificationOptions) => void;\n};\n\n// ─── Imperative API (for use outside components) ─────────────────────────────\n\nlet _add: ((type: NotificationType, message: string, options?: NotificationOptions) => void) | null = null;\n\nexport const notification = {\n success: (message: string, options?: NotificationOptions) => _add?.(\"success\", message, options),\n error: (message: string, options?: NotificationOptions) => _add?.(\"error\", message, options),\n warning: (message: string, options?: NotificationOptions) => _add?.(\"warning\", message, options),\n info: (message: string, options?: NotificationOptions) => _add?.(\"info\", message, options),\n};\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\nconst NotificationContext = createContext<NotificationContextValue | null>(null);\n\nexport const useNotificationContext = (): NotificationContextValue => {\n const ctx = useContext(NotificationContext);\n if (!ctx) {\n throw new Error(\"useNotification must be used within NotificationProvider\");\n }\n return ctx;\n};\n\n// ─── Toast item ───────────────────────────────────────────────────────────────\n\ntype ToastProps = {\n toast: ToastItem;\n onClose: (id: number) => void;\n classNames?: {\n icon?: string;\n content?: string;\n message?: string;\n description?: string;\n closeButton?: string;\n };\n};\n\nconst Toast = ({ toast, onClose, classNames }: ToastProps) => {\n const { icon: Icon, borderColorVar, iconColor } = feedbackTypeConfig[toast.type];\n\n return (\n <div\n className={twMerge(\n \"flex items-start gap-3 w-80 bg-white border border-(--ui-border) rounded-lg shadow-md px-4 py-3\",\n \"transition-all duration-300 ease-out\",\n toast.visible ? \"opacity-100 translate-x-0\" : \"opacity-0 translate-x-6\",\n )}\n style={{ borderLeftWidth: \"4px\", borderLeftColor: `var(${borderColorVar})` }}\n >\n <Icon size={18} strokeWidth={2} className={twMerge(\"shrink-0 mt-0.5\", iconColor, classNames?.icon)} />\n <div className={twMerge(\"flex-1 min-w-0\", classNames?.content)}>\n <p className={twMerge(\"text-sm font-medium text-(--ui-text-strong) leading-snug\", classNames?.message)}>{toast.message}</p>\n {toast.description && (\n <p className={twMerge(\"mt-0.5 text-xs text-(--ui-text-muted) leading-snug\", classNames?.description)}>{toast.description}</p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => onClose(toast.id)}\n className={twMerge(\"shrink-0 transition-colors cursor-pointer mt-0.5\", neutralIconClasses.default, neutralIconClasses.hover, classNames?.closeButton)}\n >\n <IconX size={14} strokeWidth={2} />\n </button>\n </div>\n );\n};\n\n// ─── Provider ────────────────────────────────────────────────────────────────\n\nlet counter = 0;\nconst MAX_TOASTS = 6;\n\nexport const NotificationProvider = ({ children }: { children: React.ReactNode }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timers = useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n\n const remove = useCallback((id: number) => {\n timers.current.delete(id);\n setToasts(prev => prev.map(t => (t.id === id ? { ...t, visible: false } : t)));\n setTimeout(() => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, 320);\n }, []);\n\n const add = useCallback(\n (type: NotificationType, message: string, options?: NotificationOptions) => {\n const id = ++counter;\n const duration = options?.duration ?? 4000;\n\n setToasts(prev => {\n const next = [\n ...prev,\n { id, type, message, description: options?.description, duration, visible: false },\n ];\n return next.length > MAX_TOASTS ? next.slice(next.length - MAX_TOASTS) : next;\n });\n\n // Double rAF to trigger enter animation after render\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setToasts(prev => prev.map(t => (t.id === id ? { ...t, visible: true } : t)));\n });\n });\n\n if (duration > 0) {\n const timer = setTimeout(() => remove(id), duration);\n timers.current.set(id, timer);\n }\n },\n [remove],\n );\n\n useEffect(() => {\n _add = add;\n return () => { _add = null; };\n }, [add]);\n\n useEffect(() => {\n const t = timers.current;\n return () => {\n t.forEach(clearTimeout);\n };\n }, []);\n\n return (\n <NotificationContext.Provider value={{ add }}>\n {children}\n {createPortal(\n <div className=\"fixed top-4 right-4 z-9999 flex flex-col gap-2 pointer-events-none\">\n {toasts.map(toast => (\n <div key={toast.id} className=\"pointer-events-auto\">\n <Toast toast={toast} onClose={remove} />\n </div>\n ))}\n </div>,\n document.body,\n )}\n </NotificationContext.Provider>\n );\n};\n","import { ReactNode, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { DrawerContext } from \"./drawerContext\";\nimport { Spinner } from \"../spinner/spinner\";\nimport { notification } from \"../notification/notification\";\nimport { componentTitleClasses, drawerLayoutClasses, neutralSurfaceClasses } from \"../theme\";\n\nexport type DrawerPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport type DrawerProps = {\n isOpen: boolean;\n onClose: (saved: boolean) => void;\n children: ReactNode;\n placement?: DrawerPlacement;\n className?: string;\n classNames?: {\n overlay?: string;\n panel?: string;\n header?: string;\n title?: string;\n closeButton?: string;\n body?: string;\n loading?: string;\n footer?: string;\n };\n};\n\nconst TRANSITION_MS = 220;\n\n// Třídy pro každý placement\nconst panelBase: Record<DrawerPlacement, string> = {\n top: \"fixed top-0 left-0 right-0 z-1001 flex flex-col\",\n bottom: \"fixed bottom-0 left-0 right-0 z-1001 flex flex-col\",\n left: \"fixed top-0 left-0 bottom-0 z-1001 flex flex-col w-120 max-w-[95vw]\",\n right: \"fixed top-0 right-0 bottom-0 z-1001 flex flex-col w-120 max-w-[95vw]\",\n};\n\nconst panelHidden: Record<DrawerPlacement, string> = {\n top: \"-translate-y-full\",\n bottom: \"translate-y-full\",\n left: \"-translate-x-full\",\n right: \"translate-x-full\",\n};\n\nconst panelVisible: Record<DrawerPlacement, string> = {\n top: \"translate-y-0\",\n bottom: \"translate-y-0\",\n left: \"translate-x-0\",\n right: \"translate-x-0\",\n};\n\n// Max-výška scrollovatelného body pro top/bottom placement\nconst bodyMaxHeight = {\n withFooter: \"max-h-[calc(90dvh-120px)]\",\n withoutFooter: \"max-h-[calc(90dvh-65px)]\",\n};\n\nexport const Drawer = ({ placement = \"top\", ...props }: DrawerProps) => {\n const [rendered, setRendered] = useState(false);\n const [visible, setVisible] = useState(false);\n const [title, setTitle] = useState(\"\");\n const [footer, setFooter] = useState<ReactNode>(null);\n const [loading, setLoading] = useState(false);\n const frameRef = useRef<number>(0);\n\n // Animace mount/unmount\n useEffect(() => {\n if (props.isOpen) {\n setRendered(true);\n frameRef.current = requestAnimationFrame(() => {\n frameRef.current = requestAnimationFrame(() => setVisible(true));\n });\n } else {\n setVisible(false);\n const t = setTimeout(() => setRendered(false), TRANSITION_MS);\n return () => clearTimeout(t);\n }\n return () => cancelAnimationFrame(frameRef.current);\n }, [props.isOpen]);\n\n // Zamknout scroll + ESC zavření\n useEffect(() => {\n if (!rendered) {\n return;\n }\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n props.onClose(false);\n }\n };\n document.body.style.overflow = \"hidden\";\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.body.style.overflow = \"\";\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [rendered, props.onClose]);\n\n if (!rendered) {\n return null;\n }\n\n const close = () => props.onClose(false);\n const saveAndClose = (message?: string) => {\n if (message) {\n notification.success(message);\n }\n props.onClose(true);\n };\n\n const isVertical = placement === \"top\" || placement === \"bottom\";\n const hasFooter = footer !== null;\n\n return createPortal(\n <DrawerContext.Provider value={{ close, saveAndClose, setTitle, setFooter, setLoading }}>\n {/* Overlay */}\n <div\n className={twMerge(\n \"fixed inset-0 z-1000 bg-black/40 transition-opacity duration-220\",\n visible ? \"opacity-100\" : \"opacity-0\",\n props.classNames?.overlay,\n )}\n onClick={close}\n />\n\n {/* Panel */}\n <div\n className={twMerge(\n panelBase[placement],\n \"bg-white shadow-xl transition-transform duration-220 ease-out\",\n visible ? panelVisible[placement] : panelHidden[placement],\n props.className,\n props.classNames?.panel,\n )}\n >\n {/* Header */}\n <div className={twMerge(\"flex items-center justify-between gap-2 bg-(--ui-primary) shrink-0\", drawerLayoutClasses.header, props.classNames?.header)}>\n <span className={twMerge(componentTitleClasses.inverse, \"truncate\", props.classNames?.title)}>{title}</span>\n <button\n type=\"button\"\n onClick={close}\n className={twMerge(\"shrink-0 text-(--ui-primary-text)/70 hover:text-(--ui-primary-text) cursor-pointer transition-colors\", props.classNames?.closeButton)}\n >\n <IconX size={18} strokeWidth={1.5} />\n </button>\n </div>\n\n {/* Body */}\n <div\n className={twMerge(\n \"overflow-y-auto flex-1\",\n drawerLayoutClasses.body,\n isVertical && (hasFooter ? bodyMaxHeight.withFooter : bodyMaxHeight.withoutFooter),\n props.classNames?.body,\n )}\n >\n {loading ? (\n <div className={twMerge(\"flex items-center justify-center py-16\", props.classNames?.loading)}>\n <Spinner size=\"large\" color=\"primary\" />\n </div>\n ) : (\n props.children\n )}\n </div>\n\n {/* Footer */}\n {hasFooter && (\n <div className={twMerge(\"shrink-0 border-t border-(--ui-border)\", neutralSurfaceClasses.subtle, drawerLayoutClasses.footer, props.classNames?.footer)}>\n {footer}\n </div>\n )}\n </div>\n </DrawerContext.Provider>,\n document.body,\n );\n};\n","import { ReactNode, useEffect } from \"react\";\nimport { useDrawer } from \"./drawerContext\";\n\ntype DrawerTitleProps = {\n children: ReactNode;\n};\n\nexport const DrawerTitle = ({ children }: DrawerTitleProps) => {\n const { setTitle } = useDrawer();\n\n useEffect(() => {\n setTitle(String(children));\n return () => setTitle(\"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n return null;\n};\n","import { ReactNode, useEffect } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useDrawer } from \"./drawerContext\";\n\ntype DrawerFooterProps = {\n children: ReactNode;\n align?: \"left\" | \"center\" | \"right\";\n};\n\nconst alignClass = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n} as const;\n\nexport const DrawerFooter = ({ children, align = \"right\" }: DrawerFooterProps) => {\n const { setFooter } = useDrawer();\n\n useEffect(() => {\n setFooter(\n <div className={twMerge(\"flex items-center gap-2\", alignClass[align])}>\n {children}\n </div>,\n );\n return () => setFooter(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return null;\n};\n","import { twMerge } from \"tailwind-merge\";\n\nexport type SkeletonProps = {\n active?: boolean;\n title?: boolean;\n paragraph?: { rows?: number };\n className?: string;\n};\n\nexport const Skeleton = ({\n active = false,\n title = true,\n paragraph,\n className,\n}: SkeletonProps) => {\n const rows = paragraph?.rows ?? 3;\n\n return (\n <div className={twMerge(\"space-y-3\", active && \"animate-pulse\", className)}>\n {title && (\n <div className=\"h-4 w-1/3 rounded bg-(--ui-surface-muted)\" />\n )}\n <div className=\"space-y-2\">\n {Array.from({ length: rows }, (_, index) => (\n <div\n key={index}\n className={twMerge(\n \"h-4 rounded bg-(--ui-surface-muted)\",\n index === rows - 1 ? \"w-4/5\" : \"w-full\",\n )}\n />\n ))}\n </div>\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { Skeleton } from \"../skeleton/skeleton\";\n\n// Skeleton — animate-pulse řádky\nconst DrawerSkeleton = () => (\n <div className=\"animate-pulse space-y-3\">\n <div className=\"h-4 bg-(--ui-surface-muted) rounded w-1/3\" />\n <div className=\"h-8 bg-(--ui-surface-muted) rounded\" />\n <div className=\"h-4 bg-(--ui-surface-muted) rounded w-1/3 mt-5\" />\n <div className=\"h-8 bg-(--ui-surface-muted) rounded\" />\n <div className=\"h-4 bg-(--ui-surface-muted) rounded w-1/3 mt-5\" />\n <div className=\"h-8 bg-(--ui-surface-muted) rounded\" />\n <div className=\"grid grid-cols-2 gap-4 mt-5\">\n <div>\n <div className=\"h-4 bg-(--ui-surface-muted) rounded w-1/2 mb-1\" />\n <div className=\"h-8 bg-(--ui-surface-muted) rounded\" />\n </div>\n <div>\n <div className=\"h-4 bg-(--ui-surface-muted) rounded w-1/2 mb-1\" />\n <div className=\"h-8 bg-(--ui-surface-muted) rounded\" />\n </div>\n </div>\n </div>\n);\n\ntype DrawerContentProps = {\n children: ReactNode;\n loading?: boolean;\n};\n\nexport const DrawerContent = ({ loading = false, children }: DrawerContentProps) => {\n if (loading) {\n return (\n <div className=\"space-y-5\">\n <DrawerSkeleton />\n <Skeleton active title={false} paragraph={{ rows: 2 }} />\n </div>\n );\n }\n return <>{children}</>;\n};\n","import { twMerge } from \"tailwind-merge\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { useState } from \"react\";\nimport { feedbackTypeConfig } from \"../_feedbackConfig\";\nimport { neutralIconClasses, neutralTextClasses } from \"../theme\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type AlertType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport type AlertProps = {\n type?: AlertType;\n message: string;\n description?: string;\n closable?: boolean;\n className?: string;\n classNames?: {\n icon?: string;\n content?: string;\n message?: string;\n description?: string;\n closeButton?: string;\n };\n};\n\n// ─── Alert ───────────────────────────────────────────────────────────────────\n\nexport const Alert = ({ type = \"info\", message, description, closable = false, className, classNames }: AlertProps) => {\n const [closed, setClosed] = useState(false);\n\n if (closed) {\n return null;\n }\n\n const { icon: Icon, borderColorVar, iconColor } = feedbackTypeConfig[type];\n\n return (\n <div\n className={twMerge(\n \"flex items-start gap-3 bg-white border border-(--ui-border) rounded-lg px-4 py-3\",\n className,\n )}\n style={{ borderLeftWidth: \"4px\", borderLeftColor: `var(${borderColorVar})` }}\n >\n <Icon size={17} strokeWidth={2} className={twMerge(\"shrink-0 mt-0.5\", iconColor, classNames?.icon)} />\n <div className={twMerge(\"flex-1 min-w-0\", classNames?.content)}>\n <p className={twMerge(\"text-sm font-medium text-(--ui-text-strong) leading-snug\", classNames?.message)}>{message}</p>\n {description && (\n <p className={twMerge(\"mt-1 text-xs text-(--ui-text-muted) leading-relaxed\", classNames?.description)}>{description}</p>\n )}\n </div>\n {closable && (\n <button\n type=\"button\"\n onClick={() => setClosed(true)}\n className={twMerge(\"shrink-0 transition-colors cursor-pointer mt-0.5\", neutralIconClasses.default, neutralIconClasses.hover, classNames?.closeButton)}\n >\n <IconX size={14} strokeWidth={2} />\n </button>\n )}\n </div>\n );\n};\n","import { useServerError } from \"../input/errorResolverContext\";\nimport { Alert } from \"../alert/alert\";\n\nexport const ServerError = ({ className }: { className?: string }) => {\n const error = useServerError()();\n\n if (!error) return null;\n\n const description = error.detail && error.detail !== error.title ? error.detail : undefined;\n\n return (\n <div className={className ?? \"mb-3\"}>\n <Alert type=\"error\" message={error.title} description={description} />\n </div>\n );\n};\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { ServerError } from \"../serverError/serverError\";\nimport { componentTitleClasses, neutralSurfaceClasses, panelLayoutClasses } from \"../theme\";\n\nexport type PanelProps = {\n title?: string;\n children?: ReactNode;\n footer?: ReactNode;\n className?: string;\n variant?: \"outlined\" | \"borderless\";\n inner?: boolean;\n headerExtra?: ReactNode;\n showServerError?: boolean;\n classNames?: {\n header?: string;\n title?: string;\n headerExtra?: string;\n body?: string;\n footer?: string;\n serverError?: string;\n };\n};\n\nexport const Panel = ({\n variant = \"outlined\",\n inner = false,\n ...props\n}: PanelProps) => {\n const hasHeader = !!props.title || !!props.headerExtra;\n\n return (\n <div\n className={twMerge(\n \"bg-white\",\n variant === \"outlined\" && \"border border-(--ui-border) rounded-(--ui-radius-lg)\",\n inner && `${neutralSurfaceClasses.subtle} rounded-md`,\n props.className,\n )}\n >\n {hasHeader && (\n <div\n className={twMerge(\n \"flex items-center justify-between gap-2\",\n panelLayoutClasses.header,\n variant === \"outlined\" && `border-b border-(--ui-border) ${neutralSurfaceClasses.subtle} rounded-t-lg`,\n inner && \"border-b border-(--ui-border)\",\n props.classNames?.header,\n )}\n >\n {props.title && (\n <span className={twMerge(componentTitleClasses.default, props.classNames?.title)}>{props.title}</span>\n )}\n {props.headerExtra && (\n <div className={twMerge(\"ml-auto flex items-center gap-2\", props.classNames?.headerExtra)}>{props.headerExtra}</div>\n )}\n </div>\n )}\n <div className={twMerge(panelLayoutClasses.body, props.classNames?.body)}>\n {props.showServerError && <ServerError className={props.classNames?.serverError} />}\n {props.children}\n </div>\n {props.footer && (\n <div\n className={twMerge(\n \"flex items-center justify-end gap-2 border-t border-(--ui-border)\",\n panelLayoutClasses.footer,\n variant === \"outlined\" && `${neutralSurfaceClasses.subtle} rounded-b-lg`,\n props.classNames?.footer,\n )}\n >\n {props.footer}\n </div>\n )}\n </div>\n );\n};\n","import { twMerge } from \"tailwind-merge\";\nimport { neutralSurfaceClasses } from \"../theme\";\n\nexport type TabOption<T extends string = string> = {\n label: React.ReactNode;\n value: T;\n};\n\nexport type TabsProps<T extends string = string> = {\n options: TabOption<T>[];\n value: T;\n onChange: (value: T) => void;\n block?: boolean;\n className?: string;\n classNames?: {\n list?: string;\n tab?: string;\n activeTab?: string;\n inactiveTab?: string;\n };\n};\n\nexport const Tabs = <T extends string = string>({\n block = true,\n ...props\n}: TabsProps<T>) => (\n <div\n className={twMerge(\n \"inline-flex gap-0 rounded-(--ui-radius-lg) p-1\",\n neutralSurfaceClasses.subtle,\n block && \"flex w-full\",\n props.className,\n props.classNames?.list,\n )}\n >\n {props.options.map(opt => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => props.onChange(opt.value)}\n className={twMerge(\n \"flex-1 h-9 px-4 text-[14px] rounded-[calc(var(--ui-radius-lg)-4px)] transition-all duration-150 cursor-pointer select-none whitespace-nowrap\",\n props.value === opt.value\n ? \"bg-white text-(--ui-text-strong) shadow-sm font-semibold\"\n : \"text-(--ui-text-muted) hover:text-(--ui-text)\",\n props.classNames?.tab,\n props.value === opt.value ? props.classNames?.activeTab : props.classNames?.inactiveTab,\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n);\n","import { ReactNode } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n// ─── Barvy ─────────────────────────────────────────────────────────────────\n\ntype TagColor =\n | \"geekblue\" | \"blue\"\n | \"green\" | \"cyan\"\n | \"red\" | \"volcano\"\n | \"orange\" | \"gold\"\n | \"purple\" | \"magenta\"\n | \"gray\" | \"default\";\n\ntype TagVariant = \"outlined\" | \"filled\";\n\nconst colorClasses: Record<TagColor, Record<TagVariant, string>> = {\n geekblue: {\n outlined: \"bg-blue-50 text-blue-700 border border-blue-200\",\n filled: \"bg-blue-600 text-white border border-blue-600\",\n },\n blue: {\n outlined: \"bg-blue-50 text-blue-700 border border-blue-200\",\n filled: \"bg-blue-600 text-white border border-blue-600\",\n },\n green: {\n outlined: \"bg-green-50 text-green-700 border border-green-200\",\n filled: \"bg-green-600 text-white border border-green-600\",\n },\n cyan: {\n outlined: \"bg-cyan-50 text-cyan-700 border border-cyan-200\",\n filled: \"bg-cyan-600 text-white border border-cyan-600\",\n },\n red: {\n outlined: \"bg-red-50 text-red-700 border border-red-200\",\n filled: \"bg-red-600 text-white border border-red-600\",\n },\n volcano: {\n outlined: \"bg-orange-50 text-orange-700 border border-orange-200\",\n filled: \"bg-orange-600 text-white border border-orange-600\",\n },\n orange: {\n outlined: \"bg-orange-50 text-orange-700 border border-orange-200\",\n filled: \"bg-orange-600 text-white border border-orange-600\",\n },\n gold: {\n outlined: \"bg-yellow-50 text-yellow-700 border border-yellow-200\",\n filled: \"bg-yellow-500 text-white border border-yellow-500\",\n },\n purple: {\n outlined: \"bg-purple-50 text-purple-700 border border-purple-200\",\n filled: \"bg-purple-600 text-white border border-purple-600\",\n },\n magenta: {\n outlined: \"bg-pink-50 text-pink-700 border border-pink-200\",\n filled: \"bg-pink-600 text-white border border-pink-600\",\n },\n gray: {\n outlined: \"bg-gray-50 text-gray-600 border border-gray-200\",\n filled: \"bg-gray-500 text-white border border-gray-500\",\n },\n default: {\n outlined: \"bg-gray-50 text-gray-600 border border-gray-200\",\n filled: \"bg-gray-500 text-white border border-gray-500\",\n },\n};\n\n// ─── Tag ───────────────────────────────────────────────────────────────────\n\nexport type TagProps = {\n children: ReactNode;\n color?: TagColor;\n variant?: TagVariant;\n className?: string;\n contentClassName?: string;\n};\n\nexport const Tag = ({\n color = \"geekblue\",\n variant = \"outlined\",\n ...props\n}: TagProps) => (\n <span\n className={twMerge(\n \"inline-flex items-center px-2 h-5 text-xs rounded-full whitespace-nowrap\",\n colorClasses[color][variant],\n props.className,\n )}\n >\n <span className={props.contentClassName}>{props.children}</span>\n </span>\n);\n\n// ─── ActiveTag ─────────────────────────────────────────────────────────────\n\nexport type ActiveTagProps = {\n value: boolean;\n trueLabel?: string;\n falseLabel?: string;\n};\n\nexport const ActiveTag = ({\n value,\n trueLabel = \"Aktivní\",\n falseLabel = \"Neaktivní\",\n}: ActiveTagProps) => (\n <Tag color={value ? \"green\" : \"red\"}>{value ? trueLabel : falseLabel}</Tag>\n);\n\n// ─── FlagTag ───────────────────────────────────────────────────────────────\n\nexport type FlagTagProps = {\n value: boolean;\n label: string;\n color?: TagColor;\n variant?: TagVariant;\n};\n\nexport const FlagTag = ({ value, label, color = \"geekblue\", variant }: FlagTagProps) => {\n if (!value) {\n return null;\n }\n return <Tag color={color} variant={variant}>{label}</Tag>;\n};\n","import { twMerge } from \"tailwind-merge\";\n\n// Deterministic barva z řetězce (jméno → barva bg)\nconst AVATAR_COLORS = [\n \"bg-blue-500\",\n \"bg-green-500\",\n \"bg-purple-500\",\n \"bg-orange-500\",\n \"bg-pink-500\",\n \"bg-teal-500\",\n \"bg-red-500\",\n \"bg-indigo-500\",\n];\n\nfunction colorFromString(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nconst sizeClasses = {\n xs: \"w-6 h-6 text-[10px]\",\n sm: \"w-7 h-7 text-xs\",\n md: \"w-8 h-8 text-sm\",\n lg: \"w-10 h-10 text-base\",\n xl: \"w-12 h-12 text-lg\",\n} as const;\n\nexport type AvatarSize = keyof typeof sizeClasses;\n\nexport type AvatarProps = {\n name?: string;\n src?: string;\n size?: AvatarSize;\n color?: string;\n className?: string;\n initialsClassName?: string;\n};\n\nexport const Avatar = ({ size = \"md\", ...props }: AvatarProps) => {\n const initials = props.name ? getInitials(props.name) : \"?\";\n const bgColor = props.color ?? (props.name ? colorFromString(props.name) : \"bg-gray-400\");\n\n if (props.src) {\n return (\n <img\n src={props.src}\n alt={props.name ?? \"avatar\"}\n className={twMerge(\n \"rounded-full object-cover shrink-0\",\n sizeClasses[size],\n props.className,\n )}\n />\n );\n }\n\n return (\n <span\n title={props.name}\n className={twMerge(\n \"inline-flex items-center justify-center rounded-full text-white font-medium shrink-0 select-none\",\n sizeClasses[size],\n bgColor,\n props.className,\n )}\n >\n <span className={props.initialsClassName}>{initials}</span>\n </span>\n );\n};\n","import {\n IconBold,\n IconClearFormatting,\n IconItalic,\n IconLink,\n IconList,\n IconListNumbers,\n IconUnderline,\n IconUnlink,\n} from \"@tabler/icons-react\";\nimport { ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useErrorResolver } from \"../input/errorResolverContext\";\nimport { InputError } from \"../input/inputError\";\nimport { InputField } from \"../input/inputField\";\nimport { InputLabel } from \"../input/inputLabel\";\nimport {\n inputBaseClass,\n neutralIconClasses,\n neutralTextClasses,\n triggerBorderClasses,\n} from \"../theme\";\n\ntype ToolbarAction = \"bold\" | \"italic\" | \"underline\" | \"bullet\" | \"numbered\" | \"link\" | \"unlink\" | \"clear\";\n\nexport type HtmlInputProps = {\n label?: string;\n placeholder?: string;\n value?: string | null;\n onChange?: (value: string) => void;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n minHeight?: number;\n toolbar?: ToolbarAction[];\n classNames?: {\n label?: string;\n requiredMark?: string;\n shell?: string;\n toolbar?: string;\n toolbarButton?: string;\n placeholder?: string;\n editor?: string;\n error?: string;\n };\n};\n\nconst defaultToolbar: ToolbarAction[] = [\n \"bold\",\n \"italic\",\n \"underline\",\n \"bullet\",\n \"numbered\",\n \"link\",\n \"unlink\",\n \"clear\",\n];\n\nconst emptyHtml = \"<p></p>\";\n\nfunction normalizeHtml(html: string): string {\n const trimmed = html\n .replace(/<div><br><\\/div>/gi, \"\")\n .replace(/<p><br><\\/p>/gi, \"\")\n .trim();\n\n return trimmed === \"\" ? emptyHtml : html;\n}\n\nfunction isHtmlEmpty(html: string | null | undefined): boolean {\n if (!html) {\n return true;\n }\n\n const textOnly = html\n .replace(/<br\\s*\\/?>/gi, \"\")\n .replace(/&nbsp;/gi, \" \")\n .replace(/<[^>]+>/g, \"\")\n .trim();\n\n return textOnly === \"\";\n}\n\nexport const HtmlInput = ({\n placeholder = \"Zadejte text...\",\n value,\n disabled = false,\n minHeight = 180,\n toolbar = defaultToolbar,\n ...props\n}: HtmlInputProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const [focused, setFocused] = useState(false);\n const [selectionVersion, setSelectionVersion] = useState(0);\n const resolveError = useErrorResolver();\n\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay =\n props.error ??\n props.customError ??\n (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n const normalizedValue = value ?? \"\";\n const showPlaceholder = isHtmlEmpty(normalizedValue);\n\n useEffect(() => {\n if (!editorRef.current) {\n return;\n }\n\n if (editorRef.current.innerHTML !== normalizedValue) {\n editorRef.current.innerHTML = normalizedValue;\n }\n }, [normalizedValue]);\n\n useEffect(() => {\n const handleSelectionChange = () => {\n if (focused) {\n setSelectionVersion(v => v + 1);\n }\n };\n\n document.addEventListener(\"selectionchange\", handleSelectionChange);\n return () => document.removeEventListener(\"selectionchange\", handleSelectionChange);\n }, [focused]);\n\n const activeState = useMemo(() => ({\n bold: document.queryCommandState?.(\"bold\") ?? false,\n italic: document.queryCommandState?.(\"italic\") ?? false,\n underline: document.queryCommandState?.(\"underline\") ?? false,\n bullet: document.queryCommandState?.(\"insertUnorderedList\") ?? false,\n numbered: document.queryCommandState?.(\"insertOrderedList\") ?? false,\n }), [selectionVersion]);\n\n const emitChange = () => {\n if (!editorRef.current) {\n return;\n }\n props.onChange?.(normalizeHtml(editorRef.current.innerHTML));\n };\n\n const focusEditor = () => {\n editorRef.current?.focus();\n };\n\n const runCommand = (action: ToolbarAction) => {\n if (disabled) {\n return;\n }\n\n focusEditor();\n\n switch (action) {\n case \"bullet\":\n document.execCommand(\"insertUnorderedList\");\n break;\n case \"numbered\":\n document.execCommand(\"insertOrderedList\");\n break;\n case \"link\": {\n const url = window.prompt(\"Zadejte URL\", \"https://\");\n if (url) {\n document.execCommand(\"createLink\", false, url);\n }\n break;\n }\n case \"unlink\":\n document.execCommand(\"unlink\");\n break;\n case \"clear\":\n document.execCommand(\"removeFormat\");\n document.execCommand(\"formatBlock\", false, \"p\");\n break;\n default:\n document.execCommand(action);\n break;\n }\n\n emitChange();\n setSelectionVersion(v => v + 1);\n };\n\n const toolbarButtons = [\n { key: \"bold\", icon: IconBold, title: \"Tučně\", active: activeState.bold },\n { key: \"italic\", icon: IconItalic, title: \"Kurzíva\", active: activeState.italic },\n { key: \"underline\", icon: IconUnderline, title: \"Podtržení\", active: activeState.underline },\n { key: \"bullet\", icon: IconList, title: \"Odrážky\", active: activeState.bullet },\n { key: \"numbered\", icon: IconListNumbers, title: \"Číslování\", active: activeState.numbered },\n { key: \"link\", icon: IconLink, title: \"Odkaz\", active: false },\n { key: \"unlink\", icon: IconUnlink, title: \"Zrušit odkaz\", active: false },\n { key: \"clear\", icon: IconClearFormatting, title: \"Vyčistit formát\", active: false },\n ].filter(button => toolbar.includes(button.key as ToolbarAction));\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n\n <div\n className={twMerge(\n \"overflow-hidden rounded-(--ui-radius-md) border bg-white\",\n focused ? triggerBorderClasses.open : triggerBorderClasses.default,\n disabled && triggerBorderClasses.disabled,\n hasError && triggerBorderClasses.error,\n props.classNames?.shell,\n )}\n >\n <div className={twMerge(\"flex flex-wrap items-center gap-1 border-b border-(--ui-border) bg-(--ui-surface-subtle) px-2 py-1.5\", props.classNames?.toolbar)}>\n {toolbarButtons.map(button => {\n const Icon = button.icon;\n return (\n <button\n key={button.key}\n type=\"button\"\n title={button.title}\n disabled={disabled}\n onMouseDown={e => e.preventDefault()}\n onClick={() => runCommand(button.key as ToolbarAction)}\n className={twMerge(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md border transition-colors disabled:opacity-40 disabled:cursor-not-allowed\",\n button.active\n ? \"border-(--ui-border-focus) bg-white text-(--ui-text-strong)\"\n : \"border-transparent bg-transparent\",\n !button.active && neutralIconClasses.default,\n !disabled && \"hover:border-(--ui-border) hover:bg-white\",\n props.classNames?.toolbarButton,\n )}\n >\n <Icon size={15} strokeWidth={1.8} />\n </button>\n );\n })}\n </div>\n\n <div className=\"relative\">\n {showPlaceholder && (\n <span\n className={twMerge(\n \"pointer-events-none absolute left-3 top-2.5 z-1 text-sm\",\n neutralTextClasses.soft,\n props.classNames?.placeholder,\n )}\n >\n {placeholder}\n </span>\n )}\n\n <div\n ref={editorRef}\n contentEditable={!disabled}\n suppressContentEditableWarning\n onInput={emitChange}\n onFocus={() => setFocused(true)}\n onBlur={() => {\n setFocused(false);\n emitChange();\n }}\n className={twMerge(\n inputBaseClass,\n \"relative z-2 min-h-0 border-0! rounded-none! bg-transparent! px-3 py-2.5 focus:border-transparent!\",\n \"overflow-y-auto [&_a]:text-(--ui-primary) [&_a]:underline [&_blockquote]:border-l-2 [&_blockquote]:border-(--ui-border) [&_blockquote]:pl-3 [&_ol]:list-decimal [&_ol]:pl-5 [&_p]:min-h-[1.5em] [&_ul]:list-disc [&_ul]:pl-5\",\n neutralTextClasses.strong,\n !disabled && \"cursor-text\",\n props.classNames?.editor,\n )}\n style={{ minHeight }}\n />\n </div>\n </div>\n\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { createContext, ReactNode, useContext } from \"react\";\n\nexport type UploadStatus = \"idle\" | \"uploading\" | \"uploaded\" | \"error\";\n\nexport type UploadItem<TMeta = unknown> = {\n id: string;\n name: string;\n size?: number;\n mimeType?: string;\n url?: string;\n status: UploadStatus;\n progress?: number;\n error?: string;\n file?: File;\n meta?: TMeta;\n};\n\nexport type UploadConfig<TMeta = unknown> = {\n uploadFile: (file: File) => Promise<UploadItem<TMeta>>;\n onRemoveClick?: (item: UploadItem<TMeta>) => Promise<void> | void;\n removeFile?: (item: UploadItem<TMeta>) => Promise<void> | void;\n downloadFile?: (item: UploadItem<TMeta>) => Promise<void> | void;\n};\n\nconst UploadContext = createContext<UploadConfig<any> | null>(null);\n\ntype UploadProviderProps = {\n config: UploadConfig<any>;\n children: ReactNode;\n};\n\nexport const UploadProvider = ({ config, children }: UploadProviderProps) => (\n <UploadContext.Provider value={config}>{children}</UploadContext.Provider>\n);\n\nexport function useUploadConfig<TMeta = unknown>() {\n return useContext(UploadContext) as UploadConfig<TMeta> | null;\n}\n","import {\n IconAlertCircle,\n IconDownload,\n IconPaperclip,\n IconTrash,\n IconUpload,\n} from \"@tabler/icons-react\";\nimport { ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useErrorResolver } from \"../input/errorResolverContext\";\nimport { InputError } from \"../input/inputError\";\nimport { InputField } from \"../input/inputField\";\nimport { InputLabel } from \"../input/inputLabel\";\nimport { Button } from \"../button/button\";\nimport { Spinner } from \"../spinner/spinner\";\nimport {\n neutralIconClasses,\n neutralSurfaceClasses,\n neutralTextClasses,\n triggerBorderClasses,\n} from \"../theme\";\nimport { type UploadConfig, type UploadItem, useUploadConfig } from \"./uploadContext\";\n\nexport type UploadInputProps<TMeta = unknown> = {\n value?: UploadItem<TMeta>[];\n defaultValue?: UploadItem<TMeta>[];\n onChange?: (items: UploadItem<TMeta>[]) => void;\n label?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n multiple?: boolean;\n accept?: string;\n maxFiles?: number;\n placeholder?: string;\n browseText?: string;\n autoUpload?: boolean;\n variant?: \"dropzone\" | \"button\";\n renderTrigger?: (api: {\n open: () => void;\n disabled: boolean;\n dragActive: boolean;\n itemCount: number;\n remainingSlots?: number;\n }) => ReactNode;\n texts?: Partial<{\n placeholder: string;\n helperSingle: string;\n helperMultiple: string;\n browseButton: string;\n }>;\n onUpload?: UploadConfig<TMeta>[\"uploadFile\"];\n onRemoveClick?: UploadConfig<TMeta>[\"onRemoveClick\"];\n onRemove?: UploadConfig<TMeta>[\"removeFile\"];\n onDownload?: UploadConfig<TMeta>[\"downloadFile\"];\n classNames?: {\n label?: string;\n requiredMark?: string;\n trigger?: string;\n dropzone?: string;\n fileList?: string;\n fileItem?: string;\n fileIcon?: string;\n fileName?: string;\n fileMeta?: string;\n fileActions?: string;\n downloadButton?: string;\n removeButton?: string;\n error?: string;\n };\n};\n\nconst defaultPlaceholder = \"Přetáhněte soubory sem nebo je vyberte z počítače.\";\nconst defaultBrowseText = \"Vybrat soubor\";\nconst defaultHelperMultiple = \"Můžete nahrát více souborů.\";\n\nfunction createId() {\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n return crypto.randomUUID();\n }\n return `upload-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nfunction formatBytes(size?: number) {\n if (!size || Number.isNaN(size)) {\n return null;\n }\n\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\n return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction normalizeUploadedItem<TMeta>(file: File, item: UploadItem<TMeta>): UploadItem<TMeta> {\n const next = { ...item };\n return {\n ...next,\n id: next.id || createId(),\n name: next.name || file.name,\n size: next.size ?? file.size,\n mimeType: next.mimeType ?? file.type,\n status: next.status ?? \"uploaded\",\n };\n}\n\nexport const UploadInput = <TMeta = unknown,>({\n defaultValue = [],\n multiple = false,\n autoUpload = true,\n variant = \"dropzone\",\n placeholder = defaultPlaceholder,\n browseText = defaultBrowseText,\n ...props\n}: UploadInputProps<TMeta>) => {\n const providerConfig = useUploadConfig<TMeta>();\n const inputRef = useRef<HTMLInputElement>(null);\n const itemsRef = useRef<UploadItem<TMeta>[]>(props.value ?? defaultValue);\n const [uncontrolledItems, setUncontrolledItems] = useState<UploadItem<TMeta>[]>(defaultValue);\n const [dragActive, setDragActive] = useState(false);\n const [removingIds, setRemovingIds] = useState<string[]>([]);\n const [downloadingIds, setDownloadingIds] = useState<string[]>([]);\n const resolveError = useErrorResolver();\n\n const items = props.value ?? uncontrolledItems;\n const uploadFile = props.onUpload ?? providerConfig?.uploadFile;\n const onRemoveClick = props.onRemoveClick ?? providerConfig?.onRemoveClick;\n const removeFile = props.onRemove ?? providerConfig?.removeFile;\n const downloadFile = props.onDownload ?? providerConfig?.downloadFile;\n\n useEffect(() => {\n itemsRef.current = items;\n }, [items]);\n\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay =\n props.error ??\n props.customError ??\n (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n\n const setItems = (next: UploadItem<TMeta>[] | ((current: UploadItem<TMeta>[]) => UploadItem<TMeta>[])) => {\n const resolved = typeof next === \"function\" ? next(itemsRef.current) : next;\n itemsRef.current = resolved;\n if (props.value === undefined) {\n setUncontrolledItems(resolved);\n }\n props.onChange?.(resolved);\n };\n\n const remainingSlots = props.maxFiles ? Math.max(props.maxFiles - items.length, 0) : undefined;\n\n const addFiles = async (fileList: FileList | File[]) => {\n if (props.disabled) {\n return;\n }\n\n const incoming = Array.from(fileList);\n const limited = remainingSlots !== undefined ? incoming.slice(0, remainingSlots) : incoming;\n if (limited.length === 0) {\n return;\n }\n\n if (!autoUpload || !uploadFile) {\n const localItems = limited.map(file => ({\n id: createId(),\n name: file.name,\n size: file.size,\n mimeType: file.type,\n file,\n status: \"idle\" as const,\n }));\n setItems(current => [...current, ...localItems]);\n return;\n }\n\n const optimisticItems = limited.map(file => ({\n id: createId(),\n name: file.name,\n size: file.size,\n mimeType: file.type,\n file,\n status: \"uploading\" as const,\n }));\n\n setItems(current => [...current, ...optimisticItems]);\n\n await Promise.all(optimisticItems.map(async optimisticItem => {\n try {\n const uploaded = await uploadFile(optimisticItem.file!);\n setItems(current => current.map(item =>\n item.id === optimisticItem.id\n ? normalizeUploadedItem(optimisticItem.file!, uploaded)\n : item,\n ));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Nahrání se nepodařilo.\";\n setItems(current => current.map(item =>\n item.id === optimisticItem.id\n ? { ...item, status: \"error\", error: message }\n : item,\n ));\n }\n }));\n };\n\n const handleRemove = async (item: UploadItem<TMeta>) => {\n if (props.disabled || removingIds.includes(item.id)) {\n return;\n }\n\n setRemovingIds(current => [...current, item.id]);\n try {\n await onRemoveClick?.(item);\n await removeFile?.(item);\n setItems(current => current.filter(existing => existing.id !== item.id));\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Soubor se nepodařilo odebrat.\";\n setItems(current => current.map(existing =>\n existing.id === item.id\n ? { ...existing, error: message, status: \"error\" }\n : existing,\n ));\n } finally {\n setRemovingIds(current => current.filter(id => id !== item.id));\n }\n };\n\n const handleDownload = async (item: UploadItem<TMeta>) => {\n if (!downloadFile || props.disabled || downloadingIds.includes(item.id)) {\n return;\n }\n\n setDownloadingIds(current => [...current, item.id]);\n try {\n await downloadFile(item);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Soubor se nepodařilo stáhnout.\";\n setItems(current => current.map(existing =>\n existing.id === item.id\n ? { ...existing, error: message, status: existing.status === \"uploaded\" ? \"uploaded\" : \"error\" }\n : existing,\n ));\n } finally {\n setDownloadingIds(current => current.filter(id => id !== item.id));\n }\n };\n\n const effectiveTexts = {\n placeholder: props.texts?.placeholder ?? placeholder,\n browseButton: props.texts?.browseButton ?? browseText,\n helperSingle: props.texts?.helperSingle ?? \"\",\n helperMultiple: props.texts?.helperMultiple ?? defaultHelperMultiple,\n };\n\n const helperText = useMemo(() => {\n if (props.maxFiles) {\n return multiple ? `Maximálně ${props.maxFiles} souborů.` : \"Lze vybrat pouze jeden soubor.\";\n }\n return multiple ? effectiveTexts.helperMultiple : effectiveTexts.helperSingle;\n }, [effectiveTexts.helperMultiple, effectiveTexts.helperSingle, multiple, props.maxFiles]);\n\n const openPicker = () => inputRef.current?.click();\n\n const triggerApi = {\n open: openPicker,\n disabled: !!props.disabled || remainingSlots === 0,\n dragActive,\n itemCount: items.length,\n remainingSlots,\n };\n\n const defaultTrigger = variant === \"button\" ? (\n <Button\n variant=\"default\"\n size=\"small\"\n text={effectiveTexts.browseButton}\n disabled={triggerApi.disabled}\n onClick={openPicker}\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center gap-2 py-1.5 text-center\">\n <div className={twMerge(\"flex h-12 w-12 items-center justify-center rounded-full border border-(--ui-border) bg-white\", dragActive && \"border-(--ui-border-focus)\")}>\n <IconUpload size={22} strokeWidth={1.7} className={neutralIconClasses.default} />\n </div>\n <div className=\"space-y-0.5\">\n <div className={twMerge(\"text-sm font-semibold\", neutralTextClasses.strong)}>\n {effectiveTexts.placeholder}\n </div>\n {helperText && (\n <div className={twMerge(\"text-xs\", neutralTextClasses.muted)}>\n {helperText}\n </div>\n )}\n </div>\n <Button\n variant=\"default\"\n size=\"small\"\n text={effectiveTexts.browseButton}\n disabled={triggerApi.disabled}\n onClick={openPicker}\n />\n </div>\n );\n\n const renderedTrigger = props.renderTrigger?.(triggerApi) ?? defaultTrigger;\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n\n <div className=\"space-y-2\">\n <div\n onDragOver={e => {\n e.preventDefault();\n if (!props.disabled) {\n setDragActive(true);\n }\n }}\n onDragLeave={e => {\n e.preventDefault();\n setDragActive(false);\n }}\n onDrop={async e => {\n e.preventDefault();\n setDragActive(false);\n await addFiles(e.dataTransfer.files);\n }}\n className={twMerge(\n variant === \"button\" ? \"border-0 bg-transparent p-0\" : \"rounded-(--ui-radius-md) border border-dashed bg-white px-4 py-3.5 transition-colors\",\n dragActive ? \"border-(--ui-border-focus) bg-(--ui-surface-subtle)\" : variant === \"button\" ? \"\" : triggerBorderClasses.default,\n props.disabled && triggerBorderClasses.disabled,\n hasError && triggerBorderClasses.error,\n props.classNames?.dropzone,\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className=\"hidden\"\n disabled={props.disabled}\n multiple={multiple}\n accept={props.accept}\n onChange={async e => {\n if (!e.target.files) {\n return;\n }\n await addFiles(e.target.files);\n e.target.value = \"\";\n }}\n />\n\n <div className={props.classNames?.trigger}>{renderedTrigger}</div>\n </div>\n\n {items.length > 0 && (\n <div className={twMerge(\"rounded-(--ui-radius-md) border border-(--ui-border) bg-white\", props.classNames?.fileList)}>\n <div className=\"divide-y divide-(--ui-border)\">\n {items.map(item => {\n const removing = removingIds.includes(item.id);\n const downloading = downloadingIds.includes(item.id);\n const canDownload = !!downloadFile && item.status !== \"uploading\" && !removing;\n const meta = formatBytes(item.size);\n\n return (\n <div key={item.id} className={twMerge(\"flex items-start gap-3 px-3 py-2.5\", props.classNames?.fileItem)}>\n <div className={twMerge(\"mt-0.5 rounded-full p-2\", neutralSurfaceClasses.subtle, props.classNames?.fileIcon)}>\n {item.status === \"uploading\" ? (\n <Spinner size={14} color=\"current\" />\n ) : item.status === \"error\" ? (\n <IconAlertCircle size={16} strokeWidth={1.7} className=\"text-(--ui-danger)\" />\n ) : (\n <IconPaperclip size={16} strokeWidth={1.7} className={neutralIconClasses.default} />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n {canDownload ? (\n <button\n type=\"button\"\n disabled={downloading}\n onClick={() => handleDownload(item)}\n className={twMerge(\n \"max-w-full truncate text-left text-sm font-medium underline-offset-2 transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\",\n neutralTextClasses.strong,\n \"hover:text-(--ui-primary) hover:underline\",\n props.classNames?.fileName,\n )}\n title={item.name}\n >\n {item.name}\n </button>\n ) : (\n <div className={twMerge(\"truncate text-sm font-medium\", neutralTextClasses.strong, props.classNames?.fileName)}>\n {item.name}\n </div>\n )}\n <div className={twMerge(\"mt-0.5 text-xs\", item.status === \"error\" ? \"text-(--ui-danger)\" : neutralTextClasses.muted, props.classNames?.fileMeta)}>\n {item.error ?? (\n item.status === \"uploading\"\n ? \"Nahrává se...\"\n : meta || \"Připraveno\"\n )}\n </div>\n </div>\n\n <div className={twMerge(\"flex items-center gap-1\", props.classNames?.fileActions)}>\n {canDownload && (\n <button\n type=\"button\"\n disabled={downloading}\n onClick={() => handleDownload(item)}\n className={twMerge(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-40\",\n neutralIconClasses.default,\n \"hover:bg-(--ui-surface-subtle) hover:text-(--ui-text)\",\n props.classNames?.downloadButton,\n )}\n title=\"Stáhnout\"\n >\n {downloading ? (\n <Spinner size={14} color=\"current\" />\n ) : (\n <IconDownload size={15} strokeWidth={1.7} />\n )}\n </button>\n )}\n\n <button\n type=\"button\"\n disabled={props.disabled || removing}\n onClick={() => handleRemove(item)}\n className={twMerge(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-40\",\n \"text-(--ui-danger) hover:bg-red-50 hover:text-red-700\",\n props.classNames?.removeButton,\n )}\n title=\"Odebrat\"\n >\n {removing ? (\n <Spinner size={14} color=\"current\" />\n ) : (\n <IconTrash size={15} strokeWidth={1.7} />\n )}\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { ReactNode, useRef, useState } from \"react\";\nimport { useErrorResolver } from \"../input/errorResolverContext\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconChevronDown, IconX } from \"@tabler/icons-react\";\nimport { InputField } from \"../input/inputField\";\nimport { InputLabel } from \"../input/inputLabel\";\nimport { InputError } from \"../input/inputError\";\nimport { SelectDropdown, type DropdownOption } from \"./_selectDropdown\";\nimport { multiTriggerSizeClasses, neutralIconClasses, neutralTextClasses, triggerBorderClasses } from \"../theme\";\n\ntype DefaultVK<T extends object> = \"value\" extends keyof T ? Extract<\"value\", string & keyof T> : string & keyof T;\n\nexport type MultiSelectInputProps<T extends object, VK extends string & keyof T = DefaultVK<T>> = {\n options?: T[] | null;\n loading?: boolean;\n labelKey?: keyof T & string;\n valueKey?: VK;\n label?: string;\n placeholder?: string;\n value?: T[VK][] | null;\n onChange?: (value: T[VK][]) => void;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n error?: ReactNode;\n customError?: ReactNode;\n errorName?: string;\n noMargin?: boolean;\n size?: \"small\" | \"middle\" | \"large\";\n allowClear?: boolean;\n showSearch?: boolean;\n maxTagsVisible?: number;\n classNames?: {\n label?: string;\n requiredMark?: string;\n trigger?: string;\n tags?: string;\n tag?: string;\n tagRemove?: string;\n overflowTag?: string;\n placeholder?: string;\n icon?: string;\n error?: string;\n };\n};\n\nconst tagSizeClass = {\n small: \"h-5 px-1.5 text-[11px] rounded\",\n middle: \"h-5 px-1.5 text-xs rounded\",\n large: \"h-6 px-2 text-xs rounded\",\n} as const;\n\nexport const MultiSelectInput = <T extends object, VK extends string & keyof T = DefaultVK<T>>({\n options,\n labelKey = \"label\" as keyof T & string,\n valueKey = \"value\" as unknown as VK,\n size = \"middle\",\n showSearch = true,\n maxTagsVisible = 3,\n ...props\n}: MultiSelectInputProps<T, VK>) => {\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const allOptions: DropdownOption[] = (options ?? []).map(opt => ({\n label: String(opt[labelKey]),\n value: opt[valueKey],\n }));\n\n const selectedValues = props.value ?? [];\n const hasValue = selectedValues.length > 0;\n const resolveError = useErrorResolver();\n const resolvedErrors = props.errorName ? resolveError(props.errorName) : [];\n const errorDisplay = props.error ?? props.customError ?? (resolvedErrors.length > 0 ? resolvedErrors.join(\", \") : undefined);\n const hasError = !!errorDisplay;\n\n const selectedOptions = selectedValues\n .map(v => allOptions.find(o => o.value === v))\n .filter((o): o is DropdownOption => o !== undefined);\n\n const visibleTags = selectedOptions.slice(0, maxTagsVisible);\n const overflowCount = selectedOptions.length - maxTagsVisible;\n\n const handleToggle = (value: unknown) => {\n const v = value as T[VK];\n const next = selectedValues.includes(v)\n ? selectedValues.filter(x => x !== v)\n : [...selectedValues, v];\n props.onChange?.(next);\n // Keep dropdown open in multi mode\n };\n\n const handleRemoveTag = (e: React.MouseEvent, value: T[VK]) => {\n e.stopPropagation();\n props.onChange?.(selectedValues.filter(v => v !== value));\n };\n\n const handleTriggerClick = () => {\n if (!props.disabled) {\n setIsOpen(v => !v);\n }\n };\n\n const handleSelectAll = () => {\n props.onChange?.(allOptions.map(o => o.value as T[VK]));\n };\n\n const handleClearAllDropdown = () => {\n props.onChange?.([]);\n };\n\n return (\n <InputField noMargin={props.noMargin} className={props.className}>\n {props.label && (\n <InputLabel\n label={props.label}\n required={props.required}\n className={props.classNames?.label}\n requiredMarkClassName={props.classNames?.requiredMark}\n />\n )}\n\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n className={twMerge(\n \"flex items-center gap-1 border bg-white cursor-pointer transition-colors select-none\",\n multiTriggerSizeClasses[size],\n isOpen ? triggerBorderClasses.open : triggerBorderClasses.default,\n props.disabled && triggerBorderClasses.disabled,\n props.classNames?.trigger,\n )}\n style={hasError ? { borderColor: \"var(--ui-danger)\" } : undefined}\n >\n <div className={twMerge(\"flex min-w-0 flex-1 flex-wrap items-center gap-1 py-0.5\", props.classNames?.tags)}>\n {hasValue ? (\n <>\n {visibleTags.map(opt => (\n <span\n key={String(opt.value)}\n className={twMerge(\n \"inline-flex shrink-0 items-center gap-0.5 border border-(--ui-border) bg-white text-(--ui-text)\",\n tagSizeClass[size],\n props.classNames?.tag,\n )}\n >\n <span className=\"max-w-30 truncate\">{opt.label}</span>\n {!props.disabled && (\n <button\n type=\"button\"\n onMouseDown={e => e.preventDefault()}\n onClick={e => handleRemoveTag(e, opt.value as T[VK])}\n className={twMerge(\"shrink-0 cursor-pointer ml-0.5\", neutralIconClasses.default, neutralIconClasses.hover, props.classNames?.tagRemove)}\n >\n <IconX size={10} strokeWidth={2.5} />\n </button>\n )}\n </span>\n ))}\n {overflowCount > 0 && (\n <span\n className={twMerge(\n \"inline-flex shrink-0 items-center border border-(--ui-border) bg-white text-(--ui-text-muted)\",\n tagSizeClass[size],\n props.classNames?.overflowTag,\n )}\n >\n +{overflowCount}\n </span>\n )}\n </>\n ) : (\n <span className={twMerge(\"flex min-h-5 items-center leading-none\", neutralTextClasses.soft, props.classNames?.placeholder)}>\n {props.placeholder ?? \"\"}\n </span>\n )}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1 self-center\">\n <IconChevronDown\n size={13}\n strokeWidth={1.5}\n className={twMerge(neutralIconClasses.default, \"shrink-0 self-center transition-transform\", isOpen && \"rotate-180\", props.classNames?.icon)}\n />\n </div>\n </div>\n\n <SelectDropdown\n anchorRef={triggerRef}\n isOpen={isOpen}\n options={allOptions}\n selectedValues={new Set(selectedValues)}\n onSelect={handleToggle}\n onClose={() => setIsOpen(false)}\n loading={props.loading}\n showSearch={showSearch}\n multiMode={true}\n onSelectAll={handleSelectAll}\n onClearAll={handleClearAllDropdown}\n />\n\n {errorDisplay && <InputError error={String(errorDisplay)} className={props.classNames?.error} />}\n </InputField>\n );\n};\n","import { useNotificationContext, type NotificationOptions } from \"./notification\";\n\nexport const useNotification = () => {\n const { add } = useNotificationContext();\n return {\n success: (message: string, options?: NotificationOptions) => add(\"success\", message, options),\n error: (message: string, options?: NotificationOptions) => add(\"error\", message, options),\n warning: (message: string, options?: NotificationOptions) => add(\"warning\", message, options),\n info: (message: string, options?: NotificationOptions) => add(\"info\", message, options),\n };\n};\n","import { twMerge } from \"tailwind-merge\";\n\nexport type PrettyProps = {\n data: unknown;\n className?: string;\n};\n\nexport const Pretty = ({ data, className }: PrettyProps) => (\n <pre\n className={twMerge(\n \"overflow-auto rounded-(--ui-radius-lg) border border-(--ui-border) bg-(--ui-surface-subtle) p-3 text-xs text-(--ui-text) whitespace-pre-wrap wrap-anywhere\",\n className,\n )}\n >\n {JSON.stringify(data, null, 2)}\n </pre>\n);\n","import { ReactNode, useEffect, useId, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { twMerge } from \"tailwind-merge\";\nimport { popupLayoutClasses } from \"../theme\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport type TooltipProps = {\n title?: ReactNode;\n children: ReactNode;\n placement?: TooltipPlacement;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n maxWidth?: number;\n className?: string;\n contentClassName?: string;\n arrow?: boolean;\n classNames?: {\n trigger?: string;\n panel?: string;\n arrow?: string;\n };\n};\n\ntype TooltipPos = {\n top: number;\n left: number;\n placement: TooltipPlacement;\n};\n\nconst GAP = 10;\nconst VIEWPORT_MARGIN = 8;\n\nfunction calcPosition(trigger: DOMRect, tooltip: DOMRect, placement: TooltipPlacement): TooltipPos {\n let resolvedPlacement = placement;\n\n if (placement === \"top\" && trigger.top < tooltip.height + GAP + VIEWPORT_MARGIN) {\n resolvedPlacement = \"bottom\";\n } else if (placement === \"bottom\" && window.innerHeight - trigger.bottom < tooltip.height + GAP + VIEWPORT_MARGIN) {\n resolvedPlacement = \"top\";\n } else if (placement === \"left\" && trigger.left < tooltip.width + GAP + VIEWPORT_MARGIN) {\n resolvedPlacement = \"right\";\n } else if (placement === \"right\" && window.innerWidth - trigger.right < tooltip.width + GAP + VIEWPORT_MARGIN) {\n resolvedPlacement = \"left\";\n }\n\n let top = 0;\n let left = 0;\n\n switch (resolvedPlacement) {\n case \"bottom\":\n top = trigger.bottom + GAP;\n left = trigger.left + (trigger.width - tooltip.width) / 2;\n break;\n case \"left\":\n top = trigger.top + (trigger.height - tooltip.height) / 2;\n left = trigger.left - tooltip.width - GAP;\n break;\n case \"right\":\n top = trigger.top + (trigger.height - tooltip.height) / 2;\n left = trigger.right + GAP;\n break;\n case \"top\":\n default:\n top = trigger.top - tooltip.height - GAP;\n left = trigger.left + (trigger.width - tooltip.width) / 2;\n break;\n }\n\n return {\n top: Math.min(\n Math.max(top, VIEWPORT_MARGIN),\n Math.max(window.innerHeight - tooltip.height - VIEWPORT_MARGIN, VIEWPORT_MARGIN),\n ),\n left: Math.min(\n Math.max(left, VIEWPORT_MARGIN),\n Math.max(window.innerWidth - tooltip.width - VIEWPORT_MARGIN, VIEWPORT_MARGIN),\n ),\n placement: resolvedPlacement,\n };\n}\n\nconst arrowClasses: Record<TooltipPlacement, string> = {\n top: \"left-1/2 -bottom-1.5 -translate-x-1/2 border-l-transparent border-r-transparent border-b-0 border-t-white\",\n bottom: \"left-1/2 -top-1.5 -translate-x-1/2 border-l-transparent border-r-transparent border-t-0 border-b-white\",\n left: \"top-1/2 -right-1.5 -translate-y-1/2 border-t-transparent border-b-transparent border-r-0 border-l-white\",\n right: \"top-1/2 -left-1.5 -translate-y-1/2 border-t-transparent border-b-transparent border-l-0 border-r-white\",\n};\n\nexport const Tooltip = ({\n title,\n children,\n placement = \"top\",\n open: controlledOpen,\n onOpenChange,\n maxWidth = 320,\n className,\n contentClassName,\n arrow = true,\n classNames,\n}: TooltipProps) => {\n const tooltipId = useId();\n const triggerRef = useRef<HTMLSpanElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const [position, setPosition] = useState<TooltipPos | null>(null);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (next: boolean) => {\n if (controlledOpen === undefined) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n };\n\n useEffect(() => {\n if (!open || !triggerRef.current || !tooltipRef.current) {\n return;\n }\n\n const updatePosition = () => {\n if (!triggerRef.current || !tooltipRef.current) {\n return;\n }\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const next = calcPosition(triggerRect, tooltipRect, placement);\n\n setPosition(next);\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [open, placement, title]);\n\n if (!title) {\n return <>{children}</>;\n }\n\n return (\n <>\n <span\n ref={triggerRef}\n aria-describedby={open ? tooltipId : undefined}\n className={twMerge(\"inline-flex\", className, classNames?.trigger)}\n onMouseEnter={() => setOpen(true)}\n onMouseLeave={() => setOpen(false)}\n onFocus={() => setOpen(true)}\n onBlur={() => setOpen(false)}\n >\n {children}\n </span>\n\n {open && createPortal(\n <div\n id={tooltipId}\n ref={tooltipRef}\n data-ui-floating-root=\"\"\n role=\"tooltip\"\n className={twMerge(\n \"fixed z-1100 rounded-(--ui-radius-md) border border-(--ui-border) bg-white text-gray-700 shadow-md\",\n popupLayoutClasses.tooltip,\n contentClassName,\n classNames?.panel,\n )}\n style={{\n top: position?.top ?? -9999,\n left: position?.left ?? -9999,\n maxWidth,\n }}\n onMouseEnter={() => setOpen(true)}\n onMouseLeave={() => setOpen(false)}\n >\n {title}\n {arrow && (\n <span\n className={twMerge(\n \"absolute h-0 w-0 border-[6px]\",\n arrowClasses[position?.placement ?? placement],\n classNames?.arrow,\n )}\n />\n )}\n </div>,\n document.body,\n )}\n </>\n );\n};\n","import { uiTheme } from \"./theme\";\nimport { registerIcons } from \"./icons\";\nimport { IconProps } from \"./button/button\";\nimport { ComponentType } from \"react\";\n\ntype ColorConfig = { bg: string; hover: string; text: string };\ntype BorderConfig = { color?: string; input?: string; focus?: string; width?: string };\ntype SizeConfig = { height?: string; px?: string; text?: string };\ntype RadiusConfig = { sm?: string; md?: string; lg?: string };\ntype GrayConfig = {\n 50?: string;\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n};\ntype LayoutSizeConfig = { cellPx?: string; thPy?: string; tdPy?: string; emptyPy?: string };\ntype PanelLayoutConfig = { headerHeight?: string; headerPx?: string; bodyPadding?: string; footerPx?: string; footerPy?: string };\ntype DrawerLayoutConfig = { headerHeight?: string; headerPx?: string; bodyPadding?: string; footerPx?: string; footerPy?: string };\ntype PopupLayoutConfig = { panelPadding?: string; compactPaddingX?: string; compactPaddingY?: string; compactGap?: string; text?: string };\ntype EmptyLayoutConfig = {\n defaultPy?: string;\n compactPy?: string;\n defaultIconBox?: string;\n compactIconBox?: string;\n defaultIcon?: string;\n compactIcon?: string;\n compactText?: string;\n compactDescription?: string;\n};\n\nexport type UiThemeConfig = {\n icons?: Record<string, ComponentType<IconProps>>;\n colors?: {\n primary?: Partial<ColorConfig>;\n danger?: Partial<ColorConfig>;\n success?: Partial<ColorConfig>;\n warning?: Partial<ColorConfig>;\n info?: Partial<ColorConfig>;\n };\n border?: BorderConfig;\n radius?: RadiusConfig;\n gray?: GrayConfig;\n size?: {\n small?: SizeConfig;\n middle?: SizeConfig;\n large?: SizeConfig;\n };\n layout?: {\n panel?: PanelLayoutConfig;\n drawer?: DrawerLayoutConfig;\n popup?: PopupLayoutConfig;\n empty?: EmptyLayoutConfig;\n table?: {\n small?: LayoutSizeConfig;\n middle?: LayoutSizeConfig;\n large?: LayoutSizeConfig;\n };\n };\n};\n\nexport function initUI(config?: UiThemeConfig): void {\n const d = uiTheme;\n const c = config ?? {};\n\n const colors = {\n primary: { ...d.colors.primary, ...c.colors?.primary },\n danger: { ...d.colors.danger, ...c.colors?.danger },\n success: { ...d.colors.success, ...c.colors?.success },\n warning: { ...d.colors.warning, ...c.colors?.warning },\n info: { ...d.colors.info, ...c.colors?.info },\n };\n const border = { ...d.border, ...c.border };\n const radius = { ...d.radius, ...c.radius };\n const gray = { ...d.gray, ...c.gray };\n const size = {\n small: { ...d.size.small, ...c.size?.small },\n middle: { ...d.size.middle, ...c.size?.middle },\n large: { ...d.size.large, ...c.size?.large },\n };\n const layout = {\n panel: { ...d.layout.panel, ...c.layout?.panel },\n drawer: { ...d.layout.drawer, ...c.layout?.drawer },\n popup: { ...d.layout.popup, ...c.layout?.popup },\n empty: { ...d.layout.empty, ...c.layout?.empty },\n table: {\n small: { ...d.layout.table.small, ...c.layout?.table?.small },\n middle: { ...d.layout.table.middle, ...c.layout?.table?.middle },\n large: { ...d.layout.table.large, ...c.layout?.table?.large },\n },\n };\n\n if (c.icons) {\n registerIcons(c.icons);\n }\n\n const r = document.documentElement;\n\n // Colors\n r.style.setProperty(\"--ui-primary\", colors.primary.bg);\n r.style.setProperty(\"--ui-primary-hover\", colors.primary.hover);\n r.style.setProperty(\"--ui-primary-active\", colors.primary.hover);\n r.style.setProperty(\"--ui-primary-text\", colors.primary.text);\n\n r.style.setProperty(\"--ui-danger\", colors.danger.bg);\n r.style.setProperty(\"--ui-danger-hover\", colors.danger.hover);\n r.style.setProperty(\"--ui-danger-text\", colors.danger.text);\n\n r.style.setProperty(\"--ui-success\", colors.success.bg);\n r.style.setProperty(\"--ui-success-hover\", colors.success.hover);\n r.style.setProperty(\"--ui-success-text\", colors.success.text);\n\n r.style.setProperty(\"--ui-warning\", colors.warning.bg);\n r.style.setProperty(\"--ui-warning-hover\", colors.warning.hover);\n r.style.setProperty(\"--ui-warning-text\", colors.warning.text);\n\n r.style.setProperty(\"--ui-info\", colors.info.bg);\n r.style.setProperty(\"--ui-info-hover\", colors.info.hover);\n r.style.setProperty(\"--ui-info-text\", colors.info.text);\n\n // Border\n r.style.setProperty(\"--ui-border\", border.color);\n r.style.setProperty(\"--ui-border-input\", border.input);\n r.style.setProperty(\"--ui-border-focus\", border.focus);\n r.style.setProperty(\"--ui-border-width\", border.width);\n r.style.setProperty(\"--ui-border-strong\", gray[300]);\n\n // Neutral / Gray\n r.style.setProperty(\"--ui-surface-subtle\", gray[50]);\n r.style.setProperty(\"--ui-surface-muted\", gray[100]);\n r.style.setProperty(\"--ui-surface-selected\", \"#eff6ff\");\n r.style.setProperty(\"--ui-text-strong\", gray[800]);\n r.style.setProperty(\"--ui-text\", gray[700]);\n r.style.setProperty(\"--ui-text-muted\", gray[500]);\n r.style.setProperty(\"--ui-text-soft\", gray[400]);\n r.style.setProperty(\"--ui-text-disabled\", gray[400]);\n\n // Radius\n r.style.setProperty(\"--ui-radius-sm\", radius.sm);\n r.style.setProperty(\"--ui-radius-md\", radius.md);\n r.style.setProperty(\"--ui-radius-lg\", radius.lg);\n\n // Size\n r.style.setProperty(\"--ui-h-sm\", size.small.height);\n r.style.setProperty(\"--ui-px-sm\", size.small.px);\n r.style.setProperty(\"--ui-text-sm\", size.small.text);\n\n r.style.setProperty(\"--ui-h-md\", size.middle.height);\n r.style.setProperty(\"--ui-px-md\", size.middle.px);\n r.style.setProperty(\"--ui-text-md\", size.middle.text);\n\n r.style.setProperty(\"--ui-h-lg\", size.large.height);\n r.style.setProperty(\"--ui-px-lg\", size.large.px);\n r.style.setProperty(\"--ui-text-lg\", size.large.text);\n\n // Layout\n r.style.setProperty(\"--ui-panel-header-h\", layout.panel.headerHeight);\n r.style.setProperty(\"--ui-panel-header-px\", layout.panel.headerPx);\n r.style.setProperty(\"--ui-panel-body-p\", layout.panel.bodyPadding);\n r.style.setProperty(\"--ui-panel-footer-px\", layout.panel.footerPx);\n r.style.setProperty(\"--ui-panel-footer-py\", layout.panel.footerPy);\n\n r.style.setProperty(\"--ui-drawer-header-h\", layout.drawer.headerHeight);\n r.style.setProperty(\"--ui-drawer-header-px\", layout.drawer.headerPx);\n r.style.setProperty(\"--ui-drawer-body-p\", layout.drawer.bodyPadding);\n r.style.setProperty(\"--ui-drawer-footer-px\", layout.drawer.footerPx);\n r.style.setProperty(\"--ui-drawer-footer-py\", layout.drawer.footerPy);\n\n r.style.setProperty(\"--ui-popup-panel-p\", layout.popup.panelPadding);\n r.style.setProperty(\"--ui-popup-row-px\", layout.popup.compactPaddingX);\n r.style.setProperty(\"--ui-popup-row-py\", layout.popup.compactPaddingY);\n r.style.setProperty(\"--ui-popup-gap\", layout.popup.compactGap);\n r.style.setProperty(\"--ui-popup-text\", layout.popup.text);\n\n r.style.setProperty(\"--ui-table-cell-x-sm\", layout.table.small.cellPx);\n r.style.setProperty(\"--ui-table-th-y-sm\", layout.table.small.thPy);\n r.style.setProperty(\"--ui-table-td-y-sm\", layout.table.small.tdPy);\n r.style.setProperty(\"--ui-table-empty-y-sm\", layout.table.small.emptyPy);\n r.style.setProperty(\"--ui-table-cell-x-md\", layout.table.middle.cellPx);\n r.style.setProperty(\"--ui-table-th-y-md\", layout.table.middle.thPy);\n r.style.setProperty(\"--ui-table-td-y-md\", layout.table.middle.tdPy);\n r.style.setProperty(\"--ui-table-empty-y-md\", layout.table.middle.emptyPy);\n r.style.setProperty(\"--ui-table-cell-x-lg\", layout.table.large.cellPx);\n r.style.setProperty(\"--ui-table-th-y-lg\", layout.table.large.thPy);\n r.style.setProperty(\"--ui-table-td-y-lg\", layout.table.large.tdPy);\n r.style.setProperty(\"--ui-table-empty-y-lg\", layout.table.large.emptyPy);\n\n r.style.setProperty(\"--ui-empty-py\", layout.empty.defaultPy);\n r.style.setProperty(\"--ui-empty-compact-py\", layout.empty.compactPy);\n r.style.setProperty(\"--ui-empty-icon-box\", layout.empty.defaultIconBox);\n r.style.setProperty(\"--ui-empty-compact-icon-box\", layout.empty.compactIconBox);\n r.style.setProperty(\"--ui-empty-icon\", layout.empty.defaultIcon);\n r.style.setProperty(\"--ui-empty-compact-icon\", layout.empty.compactIcon);\n r.style.setProperty(\"--ui-empty-compact-text\", layout.empty.compactText);\n r.style.setProperty(\"--ui-empty-compact-description\", layout.empty.compactDescription);\n}\n"]}