kz-design-system 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +57 -1
- package/dist/table.js +1 -1
- package/dist/table.js.map +1 -1
- package/dist/table.mjs +1 -1
- package/dist/table.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/button/Button.tsx","../src/constants/enum.ts","../src/components/button/button.variants.ts","../src/icon/icon-sizes.ts","../src/utils/cn.ts","../src/icon/Icon.tsx","../src/icon/icon-registry.tsx","../src/components/toggle-button/ToggleButton.tsx","../src/components/toggle-button/toggle-button.variants.ts","../src/components/checkbox/Checkbox.tsx","../src/components/checkbox/checkbox.variants.ts","../src/components/radio-button/RadioButton.tsx","../src/components/radio-button/radio-button.variants.ts","../src/components/typography/Typography.tsx","../src/components/typography/typography-variants.ts","../src/components/text-input/TextInput.tsx","../src/components/text-area/TextArea.tsx","../src/components/number-input/NumberInput.tsx","../src/components/range-slider/RangeSlider.tsx","../src/components/sidesheet/Sidesheet.tsx","../src/components/sidemenu/SideMenu.tsx","../src/components/tooltip/Tooltip.tsx","../src/components/tabs/Tabs.tsx","../src/components/table/Table.tsx","../src/components/pagination/Pagination.tsx","../src/components/dropdown/dropdown.tsx","../src/components/dropdown/DropdownButton.tsx","../src/components/dialog/Dialog.tsx","../src/providers/KezelThemeProvider.tsx","../src/tokens/contract/css-var-maps.ts","../src/tokens/validate/validateTokenValue.ts","../src/tokens/apply/applyTokenOverrides.ts","../src/components/avatar/Avatar.tsx","../src/components/avatar/avatar.variants.ts","../src/components/date-time-picker/DateTimePicker.tsx","../src/components/date-time-picker/Calendar.tsx","../src/components/date-time-picker/TimeSelector.tsx","../src/components/date-range-picker/DateRangePicker.tsx","../src/components/color-picker/ColorPicker.tsx","../src/components/icon-picker/IconPicker.tsx","../src/components/file-uploader/FileUploader.tsx","../src/components/select/Select.tsx","../src/components/sidepanel/SidePanel.tsx","../src/components/form-group/FormGroup.tsx","../src/components/modal/Modal.tsx","../src/components/toast/Toast.tsx","../src/components/card/Card.tsx","../src/components/sql-editor/SqlEditor.tsx","../src/components/qr-renderer/QrRenderer.tsx","../src/components/loader/Loader.tsx","../src/components/screen-loader/ScreenLoader.tsx","../src/components/error-page/ErrorPage.tsx","../src/components/skeleton/Skeleton.tsx","../src/tokens/contract/token-keys.ts"],"sourcesContent":["export {\n Button,\n buttonVariants,\n ButtonVariant,\n ButtonSize,\n ButtonStatus,\n ButtonType,\n ButtonAspectRatio,\n} from \"./components/button\";\nexport type { ButtonProps, ButtonVariants } from \"./components/button\";\nexport {\n ToggleButton,\n toggleButtonVariants,\n ToggleButtonVariant,\n ToggleButtonSize,\n} from \"./components/toggle-button\";\nexport type {\n ToggleButtonProps,\n ToggleButtonVariants,\n} from \"./components/toggle-button\";\nexport {\n Checkbox,\n checkboxVariants,\n CheckboxSize,\n CheckboxVariant,\n} from \"./components/checkbox\";\nexport type { CheckboxProps, CheckboxVariants } from \"./components/checkbox\";\nexport {\n RadioButton,\n radioButtonVariants,\n RadioSize,\n} from \"./components/radio-button\";\nexport type {\n RadioButtonProps,\n RadioButtonVariants,\n} from \"./components/radio-button\";\nexport {\n Typography,\n typographyVariants,\n getTypographyClass,\n getDefaultElement,\n TypographyVariantEnum,\n TypographyToneEnum,\n TypographyAlignEnum,\n TypographyWeightEnum,\n} from \"./components/typography\";\nexport type {\n TypographyProps,\n TypographyTone,\n TypographyAlign,\n TypographyWeight,\n TypographyVariant,\n TypographyAsElement,\n} from \"./components/typography\";\nexport {\n TextInput,\n TextInputVariant,\n TextInputSize,\n TextInputState,\n TextInputType,\n} from \"./components/text-input\";\nexport type { TextInputProps } from \"./components/text-input\";\nexport { TextArea } from \"./components/text-area\";\nexport type { TextAreaProps } from \"./components/text-area\";\nexport { NumberInput } from \"./components/number-input\";\nexport type { NumberInputProps } from \"./components/number-input\";\nexport { RangeSlider } from \"./components/range-slider\";\nexport type { RangeSliderProps } from \"./components/range-slider\";\nexport { Sidesheet } from \"./components/sidesheet\";\nexport type { SidesheetProps } from \"./components/sidesheet\";\nexport { SideMenu } from \"./components/sidemenu\";\nexport type {\n SideMenuProps,\n SideMenuNode,\n SideMenuSectionNode,\n SideMenuLinkNode,\n SideMenuGroupNode,\n SideMenuGroupItem,\n SideMenuGroupItemSubItem,\n SideMenuNavigatePayload,\n SideMenuFlyoutSide,\n} from \"./components/sidemenu\";\nexport {\n Tooltip,\n TooltipSize,\n TooltipPosition,\n TooltipAlign,\n TooltipColor,\n} from \"./components/tooltip\";\nexport type { TooltipProps } from \"./components/tooltip\";\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n SubTabsTrigger,\n} from \"./components/tabs\";\nexport type {\n TabsVariant,\n TabsOrientation,\n TabsSize,\n TabsProps,\n TabsListProps,\n TabsTriggerProps,\n TabsContentProps,\n SubTabsTriggerProps,\n SubTabOption,\n} from \"./components/tabs\";\nexport { Table } from \"./components/table\";\nexport type {\n TableProps,\n TableColumn,\n TableSortState,\n TablePaginationState,\n TableCellChange,\n TableSize,\n TableAlign,\n SortDirection,\n} from \"./components/table\";\nexport { Pagination } from \"./components/pagination\";\nexport type { PaginationProps } from \"./components/pagination\";\nexport { Icon, iconRegistry, iconSize, IconName, size } from \"./icon\";\nexport type { IconProps, IconSizeKey } from \"./icon\";\nexport {\n DropdownButton,\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n DropdownLabel,\n DropdownCheckboxItem,\n DropdownRadioGroup,\n DropdownRadioItem,\n DropdownSub,\n DropdownSubTrigger,\n DropdownSubContent,\n DropdownTriggerVariant,\n} from \"./components/dropdown\";\nexport type {\n DropdownButtonProps,\n DropdownButtonTrigger,\n DropdownButtonItem,\n DropdownTriggerProps,\n} from \"./components/dropdown\";\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from \"./components/dialog\";\nexport {\n KezelThemeProvider,\n KezelVariant,\n KezelMode,\n OverrideMode,\n} from \"./providers/KezelThemeProvider\";\nexport type { KezelThemeProviderProps } from \"./providers/KezelThemeProvider\";\nexport {\n Avatar,\n avatarVariants,\n AvatarSize,\n AvatarStatus,\n} from \"./components/avatar\";\nexport type { AvatarProps, AvatarVariants } from \"./components/avatar\";\nexport {\n DateTimePicker,\n Calendar,\n TimeSelector,\n} from \"./components/date-time-picker\";\nexport type {\n DateTimePickerProps,\n DateTimePickerMode,\n DateTimePickerFormat,\n CalendarProps,\n TimeSelectorProps,\n} from \"./components/date-time-picker\";\nexport { DateRangePicker } from \"./components/date-range-picker\";\nexport type {\n DateRangePickerProps,\n DateRange,\n} from \"./components/date-range-picker\";\nexport { ColorPicker } from \"./components/color-picker\";\nexport type { ColorPickerProps } from \"./components/color-picker\";\nexport { IconPicker } from \"./components/icon-picker\";\nexport type { IconPickerProps } from \"./components/icon-picker\";\nexport { FileUploader } from \"./components/file-uploader\";\nexport type { FileUploaderProps } from \"./components/file-uploader\";\nexport { Select } from \"./components/select\";\nexport type { SelectProps, SelectOption } from \"./components/select\";\nexport { SidePanel, SidePanelTrigger } from \"./components/sidepanel\";\nexport type { SidePanelProps, SidePanelSide } from \"./components/sidepanel\";\nexport { FormGroup, FormGroupDirection } from \"./components/form-group\";\nexport type { FormGroupProps } from \"./components/form-group\";\nexport { Modal, ModalTrigger, ModalSize } from \"./components/modal\";\nexport type { ModalProps } from \"./components/modal\";\nexport { ToastProvider, Toaster, useToast } from \"./components/toast\";\nexport type {\n ToastData,\n ToasterProps,\n ToastContextValue,\n} from \"./components/toast\";\nexport { ToastVariant, ToastPosition } from \"./constants/enum\";\nexport { Card, CardShadow } from \"./components/card\";\nexport type { CardProps, CardSize, CardPadding } from \"./components/card\";\nexport { SqlEditor } from \"./components/sql-editor\";\nexport type {\n SqlEditorProps,\n SqlEditorQueryResult,\n SqlEditorSize,\n} from \"./components/sql-editor\";\nexport { QrRenderer, QrPattern } from \"./components/qr-renderer\";\nexport type {\n QrRendererProps,\n QrRendererImageProps,\n QrRendererDataProps,\n QrRendererDebugInfo,\n QrErrorCorrectionLevel,\n} from \"./components/qr-renderer\";\nexport { Loader } from \"./components/loader\";\nexport type {\n LoaderProps,\n LoaderSize,\n LoaderVariant,\n} from \"./components/loader\";\nexport { ScreenLoader } from \"./components/screen-loader\";\nexport type { ScreenLoaderProps } from \"./components/screen-loader\";\nexport { ErrorPage } from \"./components/error-page\";\nexport type { ErrorPageProps, ErrorPageStatus } from \"./components/error-page\";\nexport { Skeleton, TableSkeleton, CardSkeleton } from \"./components/skeleton\";\nexport type {\n SkeletonProps,\n SkeletonVariant,\n TableSkeletonProps,\n TableSkeletonSize,\n CardSkeletonProps,\n CardSkeletonLayout,\n} from \"./components/skeleton\";\nexport { TOKEN_KEYS } from \"./tokens/contract/token-keys\";\nexport { tokenToCssVar } from \"./tokens/contract/css-var-maps\";\nexport type { TokenKey } from \"./tokens/contract/token-keys\";\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n ButtonVariant,\n ButtonSize,\n ButtonStatus,\n ButtonType,\n ButtonAspectRatio,\n} from \"../../constants/enum\";\nimport { buttonVariants, type ButtonVariants } from \"./button.variants\";\nimport { Loader2 } from \"lucide-react\";\nimport { iconSize } from \"../../icon/icon-sizes\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, type IconProps } from \"../../icon/Icon\";\n\nexport interface ButtonProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onClick\"\n> {\n variant: ButtonVariant;\n size: ButtonSize;\n status?: ButtonStatus;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n asChild?: boolean;\n children: React.ReactNode;\n type?: ButtonType;\n loading?: boolean;\n aspectRatio?: ButtonAspectRatio;\n leftIcon?: IconProps;\n rightIcon?: IconProps;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n status,\n onClick,\n asChild = false,\n children,\n type = ButtonType.Button,\n loading = false,\n aspectRatio = ButtonAspectRatio.Auto,\n disabled,\n leftIcon,\n rightIcon,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const isDisabled = disabled || loading;\n\n const buttonClassName = cn(\n buttonVariants({ variant, size, status }),\n loading && \"opacity-[var(--kz-component-button-loading-opacity,0.8)]\",\n aspectRatio === ButtonAspectRatio.Square && \"kz-button--aspect-1-1\",\n className\n );\n\n if (asChild) {\n return (\n <Comp\n ref={ref}\n type={asChild ? undefined : type}\n className={buttonClassName}\n onClick={onClick}\n disabled={isDisabled}\n aria-busy={loading}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n ref={ref}\n type={type}\n className={buttonClassName}\n onClick={onClick}\n disabled={isDisabled}\n aria-busy={loading}\n {...props}\n >\n {loading && (\n <Loader2\n className=\"kz-button-spinner\"\n size={iconSize.md}\n color=\"currentColor\"\n />\n )}\n {leftIcon && <Icon {...leftIcon} />}\n {children}\n {rightIcon && <Icon {...rightIcon} />}\n </Comp>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\nexport type { ButtonVariants };\n","export enum Theme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\nexport enum ThemeStyle {\n Enterprise = \"enterprise\",\n Neumorphic = \"neumorphic\",\n Standard = \"standard\",\n Glassmorphic = \"glassmorphic\",\n}\n\nexport enum KezelVariant {\n Standard = \"standard\",\n Neumorphic = \"neumorphic\",\n}\n\nexport enum KezelMode {\n Light,\n Dark,\n}\n\nexport enum ButtonVariant {\n Primary = \"primary\",\n Ghost = \"ghost\",\n Container = \"container\",\n}\n\nexport enum ButtonStatus {\n Default = \"default\",\n Brand = \"brand\",\n Success = \"success\",\n Warning = \"warning\",\n Error = \"error\",\n Info = \"info\",\n}\n\nexport enum ButtonSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum ButtonType {\n Button = \"button\",\n Submit = \"submit\",\n Reset = \"reset\",\n}\n\nexport enum ButtonAspectRatio {\n Auto = \"auto\",\n Square = \"square\",\n}\n\nexport enum DropdownTriggerVariant {\n Default = \"default\",\n Ghost = \"ghost\",\n}\n\nexport enum TypographyVariant {\n H1 = \"h1\",\n H2 = \"h2\",\n H3 = \"h3\",\n H4 = \"h4\",\n H5 = \"h5\",\n Body = \"body\",\n Small = \"small\",\n Caption = \"caption\",\n Label = \"label\",\n Link = \"link\",\n Error = \"error\",\n Success = \"success\",\n Warning = \"warning\",\n}\n\nexport enum TypographyTone {\n Primary = \"primary\",\n Secondary = \"secondary\",\n Muted = \"muted\",\n Disabled = \"disabled\",\n Inverse = \"inverse\",\n Link = \"link\",\n}\n\nexport enum TypographyAlign {\n Left = \"left\",\n Center = \"center\",\n Right = \"right\",\n}\n\nexport enum TypographyWeight {\n Regular = \"regular\",\n Medium = \"medium\",\n Semibold = \"semibold\",\n Bold = \"bold\",\n}\n\nexport enum TokenCategory {\n Color = \"color\",\n Shadow = \"shadow\",\n Length = \"length\",\n Number = \"number\",\n LineHeight = \"lineHeight\",\n FontFamily = \"fontFamily\",\n FontWeight = \"fontWeight\",\n Duration = \"duration\",\n Easing = \"easing\",\n}\n\nexport enum OverrideMode {\n Safe = \"safe\",\n Strict = \"strict\",\n}\n\nexport enum TextInputVariant {\n Default = \"default\",\n Container = \"container\",\n Ghost = \"ghost\",\n}\n\nexport enum TextInputSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum TextInputState {\n Default = \"default\",\n Error = \"error\",\n Success = \"success\",\n Warning = \"warning\",\n}\n\nexport enum TextInputType {\n Text = \"text\",\n Email = \"email\",\n Password = \"password\",\n Number = \"number\",\n Search = \"search\",\n Tel = \"tel\",\n Url = \"url\",\n}\n\nexport enum TooltipSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum TooltipPosition {\n Top = \"top\",\n Right = \"right\",\n Bottom = \"bottom\",\n Left = \"left\",\n}\n\nexport enum TooltipAlign {\n Start = \"start\",\n Center = \"center\",\n End = \"end\",\n}\n\nexport enum TooltipColor {\n Default = \"default\",\n Inverse = \"inverse\",\n Success = \"success\",\n Warning = \"warning\",\n Error = \"error\",\n}\n\nexport enum ToggleButtonVariant {\n Default = \"default\",\n Primary = \"primary\",\n Container = \"container\",\n}\n\nexport enum ToggleButtonSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum CheckboxSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum CheckboxVariant {\n Default = \"default\",\n Container = \"container\",\n}\n\nexport enum RadioSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum AvatarSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n Xl = \"xl\",\n}\n\nexport enum AvatarStatus {\n Online = \"online\",\n Busy = \"busy\",\n Away = \"away\",\n Offline = \"offline\",\n}\n\nexport enum ToastVariant {\n Success = \"success\",\n Error = \"error\",\n Warning = \"warning\",\n Info = \"info\",\n}\n\nexport enum CardShadow {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum ToastPosition {\n TopRight = \"top-right\",\n TopLeft = \"top-left\",\n BottomRight = \"bottom-right\",\n BottomLeft = \"bottom-left\",\n}\n\nexport enum QrPattern {\n Square = \"square\",\n Circle = \"circle\",\n Diamond = \"diamond\",\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { ButtonVariant, ButtonSize } from \"../../constants/enum\";\n\nconst base = [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium\",\n \"transition-all duration-150 ease-out\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--kz-color-border-focus)]\",\n \"disabled:cursor-not-allowed disabled:opacity-[var(--kz-component-button-disabled-opacity,0.5)]\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n].join(\" \");\n\nexport const buttonVariants = cva(base, {\n variants: {\n variant: {\n primary: [\n \"bg-[var(--kz-component-button-secondary-bg)]\",\n \"text-[var(--kz-component-button-secondary-text)]\",\n \"rounded-[var(--kz-component-button-radius,8px)]\",\n \"[border:var(--kz-component-button-secondary-border,none)]\",\n \"[box-shadow:var(--kz-component-button-secondary-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-secondary-bg-hover)]\",\n \"hover:[box-shadow:var(--kz-component-button-secondary-shadow-hover,var(--kz-component-button-secondary-shadow,none))]\",\n \"active:bg-[var(--kz-component-button-secondary-bg-active)]\",\n ].join(\" \"),\n ghost: [\n \"bg-[var(--kz-component-button-ghost-bg)]\",\n \"text-[var(--kz-component-button-ghost-text)]\",\n \"rounded-[var(--kz-component-button-radius,8px)]\",\n \"border border-transparent\",\n \"[box-shadow:none]\",\n \"hover:bg-[var(--kz-component-button-ghost-bg-hover,transparent)]\",\n \"active:opacity-80\",\n ].join(\" \"),\n container: [\n \"bg-[var(--kz-component-button-container-bg)]\",\n \"text-[var(--kz-component-button-container-text)]\",\n \"border border-[var(--kz-component-button-container-border)]\",\n \"rounded-[var(--kz-component-button-radius,8px)]\",\n \"[box-shadow:var(--kz-component-button-container-shadow)]\",\n \"hover:bg-[var(--kz-component-button-ghost-bg-hover,transparent)]\",\n \"hover:[box-shadow:var(--kz-component-button-container-shadow-hover)]\",\n ].join(\" \"),\n },\n status: {\n default: \"\",\n brand: [\n \"bg-[var(--kz-component-button-brand-bg)]\",\n \"text-[var(--kz-component-button-brand-text)]\",\n \"[box-shadow:var(--kz-component-button-brand-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-brand-bg-hover,var(--kz-component-button-brand-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-brand-shadow-hover,var(--kz-component-button-brand-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-brand-bg-hover,var(--kz-component-button-brand-bg))]\",\n ].join(\" \"),\n success: [\n \"bg-[var(--kz-component-button-success-bg)]\",\n \"text-[var(--kz-component-button-success-text)]\",\n \"[box-shadow:var(--kz-component-button-success-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-success-bg-hover,var(--kz-component-button-success-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-success-shadow-hover,var(--kz-component-button-success-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-success-bg-hover,var(--kz-component-button-success-bg))]\",\n ].join(\" \"),\n warning: [\n \"bg-[var(--kz-component-button-warning-bg)]\",\n \"text-[var(--kz-component-button-warning-text)]\",\n \"[box-shadow:var(--kz-component-button-warning-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-warning-bg-hover,var(--kz-component-button-warning-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-warning-shadow-hover,var(--kz-component-button-warning-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-warning-bg-hover,var(--kz-component-button-warning-bg))]\",\n ].join(\" \"),\n error: [\n \"bg-[var(--kz-component-button-error-bg)]\",\n \"text-[var(--kz-component-button-error-text)]\",\n \"[box-shadow:var(--kz-component-button-error-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-error-bg-hover,var(--kz-component-button-error-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-error-shadow-hover,var(--kz-component-button-error-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-error-bg-hover,var(--kz-component-button-error-bg))]\",\n ].join(\" \"),\n info: [\n \"bg-[var(--kz-component-button-info-bg)]\",\n \"text-[var(--kz-component-button-info-text)]\",\n \"[box-shadow:var(--kz-component-button-info-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-info-bg-hover,var(--kz-component-button-info-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-info-shadow-hover,var(--kz-component-button-info-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-info-bg-hover,var(--kz-component-button-info-bg))]\",\n ].join(\" \"),\n },\n size: {\n sm: [\n \"h-[var(--kz-component-button-height-sm,2rem)]\",\n \"px-[var(--kz-component-button-px-sm,0.75rem)]\",\n \"text-[length:var(--kz-component-button-text-sm,0.875rem)]\",\n \"[&_svg]:size-[var(--kz-component-button-icon-sm,1rem)]\",\n ].join(\" \"),\n md: [\n \"h-[var(--kz-component-button-height-md,2.5rem)]\",\n \"px-[var(--kz-component-button-px-md,1rem)]\",\n \"text-[length:var(--kz-component-button-text-md,0.875rem)]\",\n \"[&_svg]:size-[var(--kz-component-button-icon-md,1rem)]\",\n ].join(\" \"),\n lg: [\n \"h-[var(--kz-component-button-height-lg,3rem)]\",\n \"px-[var(--kz-component-button-px-lg,1.25rem)]\",\n \"text-[length:var(--kz-component-button-text-lg,1rem)]\",\n \"[&_svg]:size-[var(--kz-component-button-icon-lg,1.25rem)]\",\n ].join(\" \"),\n },\n },\n compoundVariants: [\n // Ghost + brand: brand text, transparent bg, brand-tinted hover\n {\n variant: \"ghost\",\n status: \"brand\",\n className: [\n \"!bg-transparent text-[var(--kz-color-brand-accent)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-brand-bg-hover,rgba(0,150,137,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n // Ghost + status: text color = status, bg transparent, hover = light tint\n {\n variant: \"ghost\",\n status: \"success\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-success)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-success-bg-hover,rgba(0,201,80,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n {\n variant: \"ghost\",\n status: \"warning\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-warning)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-warning-bg-hover,rgba(245,158,11,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n {\n variant: \"ghost\",\n status: \"error\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-error)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-error-bg-hover,rgba(251,44,54,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n {\n variant: \"ghost\",\n status: \"info\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-info)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-info-bg-hover,rgba(37,99,235,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n // Container + brand: brand text, brand border, no shadow, brand-tinted hover\n {\n variant: \"container\",\n status: \"brand\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-component-button-container-brand-text,var(--kz-color-brand-accent))]\",\n \"!border-[var(--kz-component-button-container-brand-border,var(--kz-color-brand-accent))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-container-brand-bg-hover,rgba(0,150,137,0.08))]\",\n ].join(\" \"),\n },\n // Container + status: keep container shape/shadow, override bg/text with status colors\n {\n variant: \"container\",\n status: \"success\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-success)]\",\n \"!border-[var(--kz-color-status-success)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-success-bg-hover,rgba(0,201,80,0.1))]\",\n ].join(\" \"),\n },\n {\n variant: \"container\",\n status: \"warning\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-warning)]\",\n \"!border-[var(--kz-color-status-warning)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-warning-bg-hover,rgba(245,158,11,0.1))]\",\n ].join(\" \"),\n },\n {\n variant: \"container\",\n status: \"error\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-error)]\",\n \"!border-[var(--kz-color-status-error)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-error-bg-hover,rgba(251,44,54,0.1))]\",\n ].join(\" \"),\n },\n {\n variant: \"container\",\n status: \"info\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-info)]\",\n \"!border-[var(--kz-color-status-info)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-info-bg-hover,rgba(37,99,235,0.1))]\",\n ].join(\" \"),\n },\n ],\n defaultVariants: {\n variant: ButtonVariant.Primary,\n size: ButtonSize.Md,\n },\n});\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","/** Preset icon sizes (px). Use with Icon size prop. */\nexport const iconSize = {\n xs: 12,\n sm: 16,\n md: 24,\n lg: 32,\n xl: 40,\n} as const;\n\nexport type IconSizeKey = keyof typeof iconSize;\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { iconRegistry, IconName } from \"./icon-registry\";\nimport { iconSize, type IconSizeKey } from \"./icon-sizes\";\nimport { cn } from \"../utils/cn\";\n\nexport interface IconProps extends Omit<\n React.SVGAttributes<SVGSVGElement>,\n \"color\"\n> {\n name: IconName;\n size?: IconSizeKey | number;\n color?: string;\n className?: string;\n}\n\nconst Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ name, size = \"md\", color, className, ...props }, ref) => {\n const Component = iconRegistry[name];\n if (!Component) return null;\n const sizePx = typeof size === \"number\" ? size : iconSize[size];\n const resolvedColor = color ?? \"var(--kz-color-icon-default, currentColor)\";\n return (\n <Component\n ref={ref}\n size={sizePx}\n color={resolvedColor}\n className={cn(\"shrink-0\", className)}\n {...props}\n />\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n\nexport { Icon, iconRegistry, iconSize, IconName };\nexport type { IconSizeKey };\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n Search,\n CircleAlert,\n CheckCircle,\n TriangleAlert,\n Loader2,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n BarChart2,\n Shield,\n ArrowLeft,\n ArrowUp,\n ArrowDown,\n ArrowUpDown,\n EllipsisVertical,\n Sun,\n Moon,\n Settings,\n LogOut,\n User,\n FileText,\n LockOpen,\n Calendar,\n ChartArea,\n ChartBar,\n ChartBarBig,\n ChartBarDecreasing,\n ChartBarIncreasing,\n ChartBarStacked,\n ChartCandlestick,\n ChartColumn,\n ChartColumnBig,\n ChartColumnDecreasing,\n ChartColumnIncreasing,\n ChartColumnStacked,\n ChartGantt,\n ChartLine,\n ChartNetwork,\n ChartNoAxesColumn,\n ChartNoAxesColumnDecreasing,\n ChartNoAxesColumnIncreasing,\n ChartNoAxesCombined,\n ChartNoAxesGantt,\n ChartPie,\n ChartScatter,\n ChartSpline,\n FolderKanban,\n Kanban,\n SquareChartGantt,\n SquareDashedKanban,\n SquareKanban,\n TrendingDown,\n TrendingUp,\n TrendingUpDown,\n Atom,\n GitBranch,\n Clipboard,\n Palette,\n Gauge,\n Filter,\n Grid3x3,\n RadioTower,\n BadgeCheck,\n Wallet,\n DollarSign,\n Plus,\n Building2,\n X,\n FilePlus,\n UserPlus2,\n UserRoundPlus,\n List,\n CircleAlert as AlertCircleIcon,\n Layers,\n Badge,\n MapPin,\n Puzzle,\n Globe,\n ShoppingBag,\n QrCode,\n Brush,\n FileSpreadsheet,\n Tag,\n Scan,\n Clock3,\n UserPlus,\n Users,\n Files,\n Group,\n CheckSquare,\n ClipboardList,\n ListTodo,\n BarChart3,\n FileBarChart,\n FileSearch,\n Lock,\n Settings2,\n LayoutGrid,\n Terminal,\n Pencil,\n Trash2,\n Eye,\n EyeOff,\n Pin,\n PinOff,\n Save,\n RotateCcw,\n} from \"lucide-react\";\n\n/** Use IconName.* so users discover available icons. Values match registry keys. */\nexport enum IconName {\n Search = \"search\",\n CircleAlert = \"circle-alert\",\n CheckCircle = \"check-circle\",\n TriangleAlert = \"triangle-alert\",\n Loader2 = \"loader-2\",\n ChevronDown = \"chevron-down\",\n ChevronLeft = \"chevron-left\",\n ChevronRight = \"chevron-right\",\n BarChart2 = \"bar-chart-2\",\n Shield = \"shield\",\n ArrowLeft = \"arrow-left\",\n ArrowUp = \"arrow-up\",\n ArrowDown = \"arrow-down\",\n ArrowUpDown = \"arrow-up-down\",\n EllipsisVertical = \"ellipsis-vertical\",\n Sun = \"sun\",\n Moon = \"moon\",\n LogOut = \"log-out\",\n Settings = \"settings\",\n User = \"user\",\n FileText = \"file-text\",\n LockOpen = \"lock-open\",\n Calendar = \"calendar\",\n ChartArea = \"chart-area\",\n ChartBar = \"chart-bar\",\n ChartBarBig = \"chart-bar-big\",\n ChartBarDecreasing = \"chart-bar-decreasing\",\n ChartBarIncreasing = \"chart-bar-increasing\",\n ChartBarStacked = \"chart-bar-stacked\",\n ChartCandlestick = \"chart-candlestick\",\n ChartColumn = \"chart-column\",\n ChartColumnBig = \"chart-column-big\",\n ChartColumnDecreasing = \"chart-column-decreasing\",\n ChartColumnIncreasing = \"chart-column-increasing\",\n ChartColumnStacked = \"chart-column-stacked\",\n ChartGantt = \"chart-gantt\",\n ChartLine = \"chart-line\",\n ChartNetwork = \"chart-network\",\n ChartNoAxesColumn = \"chart-no-axes-column\",\n ChartNoAxesColumnDecreasing = \"chart-no-axes-column-decreasing\",\n ChartNoAxesColumnIncreasing = \"chart-no-axes-column-increasing\",\n ChartNoAxesCombined = \"chart-no-axes-combined\",\n ChartNoAxesGantt = \"chart-no-axes-gantt\",\n ChartPie = \"chart-pie\",\n ChartScatter = \"chart-scatter\",\n ChartSpline = \"chart-spline\",\n FolderKanban = \"folder-kanban\",\n Kanban = \"kanban\",\n SquareChartGantt = \"square-chart-gantt\",\n SquareDashedKanban = \"square-dashed-kanban\",\n SquareKanban = \"square-kanban\",\n TrendingDown = \"trending-down\",\n TrendingUp = \"trending-up\",\n TrendingUpDown = \"trending-up-down\",\n Atom = \"atom\",\n GitBranch = \"git-branch\",\n Clipboard = \"clipboard\",\n Palette = \"palette\",\n Gauge = \"gauge\",\n Filter = \"filter\",\n Grid3x3 = \"grid-3x3\",\n RadioTower = \"radio-tower\",\n BadgeCheck = \"badge-check\",\n Wallet = \"wallet\",\n DollarSign = \"dollar-sign\",\n Plus = \"plus\",\n Building2 = \"building-2\",\n X = \"x\",\n FilePlus = \"file-plus\",\n UserPlus2 = \"user-plus-2\",\n UserRoundPlus = \"user-round-plus\",\n List = \"list\",\n AlertCircle = \"alert-circle\",\n Layers = \"layers\",\n Badge = \"badge\",\n MapPin = \"map-pin\",\n Puzzle = \"puzzle\",\n Globe = \"globe\",\n ShoppingBag = \"shopping-bag\",\n QrCode = \"qr-code\",\n Brush = \"brush\",\n FileSpreadsheet = \"file-spreadsheet\",\n Tag = \"tag\",\n Scan = \"scan\",\n Clock3 = \"clock-3\",\n UserPlus = \"user-plus\",\n Users = \"users\",\n Files = \"files\",\n Group = \"group\",\n CheckSquare = \"check-square\",\n ClipboardList = \"clipboard-list\",\n ListTodo = \"list-todo\",\n BarChart3 = \"bar-chart-3\",\n FileBarChart = \"file-bar-chart\",\n FileSearch = \"file-search\",\n Lock = \"lock\",\n Settings2 = \"settings-2\",\n LayoutGrid = \"layout-grid\",\n Terminal = \"terminal\",\n Pencil = \"pencil\",\n Trash2 = \"trash-2\",\n Eye = \"eye\",\n EyeOff = \"eye-off\",\n Pin = \"pin\",\n PinOff = \"pin-off\",\n Save = \"save\",\n RotateCcw = \"rotate-ccw\",\n}\n\nexport const iconRegistry: Record<IconName, LucideIcon> = {\n [IconName.Search]: Search,\n [IconName.CircleAlert]: CircleAlert,\n [IconName.CheckCircle]: CheckCircle,\n [IconName.TriangleAlert]: TriangleAlert,\n [IconName.Loader2]: Loader2,\n [IconName.ChevronDown]: ChevronDown,\n [IconName.ChevronLeft]: ChevronLeft,\n [IconName.ChevronRight]: ChevronRight,\n [IconName.BarChart2]: BarChart2,\n [IconName.Shield]: Shield,\n [IconName.ArrowLeft]: ArrowLeft,\n [IconName.ArrowUp]: ArrowUp,\n [IconName.ArrowDown]: ArrowDown,\n [IconName.ArrowUpDown]: ArrowUpDown,\n [IconName.EllipsisVertical]: EllipsisVertical,\n [IconName.Sun]: Sun,\n [IconName.Moon]: Moon,\n [IconName.LogOut]: LogOut,\n [IconName.Settings]: Settings,\n [IconName.User]: User,\n [IconName.FileText]: FileText,\n [IconName.LockOpen]: LockOpen,\n [IconName.Calendar]: Calendar,\n [IconName.ChartArea]: ChartArea,\n [IconName.ChartBar]: ChartBar,\n [IconName.ChartBarBig]: ChartBarBig,\n [IconName.ChartBarDecreasing]: ChartBarDecreasing,\n [IconName.ChartBarIncreasing]: ChartBarIncreasing,\n [IconName.ChartBarStacked]: ChartBarStacked,\n [IconName.ChartCandlestick]: ChartCandlestick,\n [IconName.ChartColumn]: ChartColumn,\n [IconName.ChartColumnBig]: ChartColumnBig,\n [IconName.ChartColumnDecreasing]: ChartColumnDecreasing,\n [IconName.ChartColumnIncreasing]: ChartColumnIncreasing,\n [IconName.ChartColumnStacked]: ChartColumnStacked,\n [IconName.ChartGantt]: ChartGantt,\n [IconName.ChartLine]: ChartLine,\n [IconName.ChartNetwork]: ChartNetwork,\n [IconName.ChartNoAxesColumn]: ChartNoAxesColumn,\n [IconName.ChartNoAxesColumnDecreasing]: ChartNoAxesColumnDecreasing,\n [IconName.ChartNoAxesColumnIncreasing]: ChartNoAxesColumnIncreasing,\n [IconName.ChartNoAxesCombined]: ChartNoAxesCombined,\n [IconName.ChartNoAxesGantt]: ChartNoAxesGantt,\n [IconName.ChartPie]: ChartPie,\n [IconName.ChartScatter]: ChartScatter,\n [IconName.ChartSpline]: ChartSpline,\n [IconName.FolderKanban]: FolderKanban,\n [IconName.Kanban]: Kanban,\n [IconName.SquareChartGantt]: SquareChartGantt,\n [IconName.SquareDashedKanban]: SquareDashedKanban,\n [IconName.SquareKanban]: SquareKanban,\n [IconName.TrendingDown]: TrendingDown,\n [IconName.TrendingUp]: TrendingUp,\n [IconName.TrendingUpDown]: TrendingUpDown,\n [IconName.Atom]: Atom,\n [IconName.GitBranch]: GitBranch,\n [IconName.Clipboard]: Clipboard,\n [IconName.Palette]: Palette,\n [IconName.Gauge]: Gauge,\n [IconName.Filter]: Filter,\n [IconName.Grid3x3]: Grid3x3,\n [IconName.RadioTower]: RadioTower,\n [IconName.BadgeCheck]: BadgeCheck,\n [IconName.Wallet]: Wallet,\n [IconName.DollarSign]: DollarSign,\n [IconName.Plus]: Plus,\n [IconName.Building2]: Building2,\n [IconName.X]: X,\n [IconName.FilePlus]: FilePlus,\n [IconName.UserPlus2]: UserPlus2,\n [IconName.UserRoundPlus]: UserRoundPlus,\n [IconName.List]: List,\n [IconName.AlertCircle]: AlertCircleIcon,\n [IconName.Layers]: Layers,\n [IconName.Badge]: Badge,\n [IconName.MapPin]: MapPin,\n [IconName.Puzzle]: Puzzle,\n [IconName.Globe]: Globe,\n [IconName.ShoppingBag]: ShoppingBag,\n [IconName.QrCode]: QrCode,\n [IconName.Brush]: Brush,\n [IconName.FileSpreadsheet]: FileSpreadsheet,\n [IconName.Tag]: Tag,\n [IconName.Scan]: Scan,\n [IconName.Clock3]: Clock3,\n [IconName.UserPlus]: UserPlus,\n [IconName.Users]: Users,\n [IconName.Files]: Files,\n [IconName.Group]: Group,\n [IconName.CheckSquare]: CheckSquare,\n [IconName.ClipboardList]: ClipboardList,\n [IconName.ListTodo]: ListTodo,\n [IconName.BarChart3]: BarChart3,\n [IconName.FileBarChart]: FileBarChart,\n [IconName.FileSearch]: FileSearch,\n [IconName.Lock]: Lock,\n [IconName.Settings2]: Settings2,\n [IconName.LayoutGrid]: LayoutGrid,\n [IconName.Terminal]: Terminal,\n [IconName.Pencil]: Pencil,\n [IconName.Trash2]: Trash2,\n [IconName.Eye]: Eye,\n [IconName.EyeOff]: EyeOff,\n [IconName.Pin]: Pin,\n [IconName.PinOff]: PinOff,\n [IconName.Save]: Save,\n [IconName.RotateCcw]: RotateCcw,\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { ToggleButtonVariant, ToggleButtonSize } from \"../../constants/enum\";\nimport { toggleButtonVariants } from \"./toggle-button.variants\";\nimport { Icon, IconName } from \"../../icon/Icon\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ToggleButtonProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\"\n> {\n variant?: ToggleButtonVariant;\n size?: ToggleButtonSize;\n fullWidth?: boolean;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n asChild?: boolean;\n loading?: boolean;\n className?: string;\n}\n\nconst ToggleButton = React.forwardRef<HTMLButtonElement, ToggleButtonProps>(\n (\n {\n className,\n variant = ToggleButtonVariant.Default,\n size = ToggleButtonSize.Md,\n fullWidth = false,\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n asChild = false,\n loading = false,\n disabled,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledPressed, setUncontrolledPressed] =\n React.useState(defaultPressed);\n\n const isControlled = controlledPressed !== undefined;\n const pressed = isControlled ? controlledPressed : uncontrolledPressed;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!isControlled) {\n setUncontrolledPressed((prev) => !prev);\n }\n const nextPressed = !pressed;\n onPressedChange?.(nextPressed);\n onClick?.(e);\n };\n\n const isDisabled = disabled || loading;\n\n const trackClassName = cn(\n toggleButtonVariants({ variant, size, fullWidth }),\n \"inline-flex\"\n );\n\n const wrapperClassName = cn(\n \"group relative inline-flex items-center gap-2\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--kz-color-border-focus)]\",\n \"disabled:cursor-not-allowed disabled:opacity-[var(--kz-component-toggle-button-disabled-opacity,0.5)]\",\n fullWidth && \"w-full\",\n loading &&\n \"opacity-[var(--kz-component-toggle-button-loading-opacity,0.8)]\",\n className\n );\n\n const thumbClassName = cn(\n \"kz-toggle-button-thumb\",\n \"absolute top-1 left-1 h-[calc(100%-0.5rem)] aspect-square shrink-0 rounded-full\",\n \"translate-x-0 group-data-[state=on]:translate-x-4\",\n \"transition-[background,transform,box-shadow] duration-200 ease-in-out\",\n (variant === ToggleButtonVariant.Default ||\n variant === ToggleButtonVariant.Primary) &&\n (variant === ToggleButtonVariant.Default\n ? \"kz-toggle-button-thumb--default\"\n : \"kz-toggle-button-thumb--primary\"),\n variant === ToggleButtonVariant.Container &&\n \"bg-[var(--kz-color-surface-raised)]\"\n );\n\n if (asChild) {\n const slotProps = {\n ...props,\n ref,\n type: \"button\" as const,\n role: \"switch\" as const,\n \"aria-pressed\": pressed,\n \"aria-checked\": pressed,\n \"data-state\": pressed ? \"on\" : \"off\",\n className: wrapperClassName,\n onClick: handleClick,\n disabled: isDisabled,\n \"aria-busy\": loading,\n };\n return (\n <Slot {...(slotProps as React.ComponentProps<typeof Slot>)}>\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-pressed={pressed}\n aria-checked={pressed}\n data-state={pressed ? \"on\" : \"off\"}\n className={wrapperClassName}\n onClick={handleClick}\n disabled={isDisabled}\n aria-busy={loading}\n {...props}\n >\n <span className={trackClassName}>\n <span className={thumbClassName} aria-hidden />\n </span>\n {children ? (\n <span className=\"truncate text-sm font-medium text-[var(--kz-color-text-primary)]\">\n {children}\n </span>\n ) : null}\n {loading && (\n <span className=\"pointer-events-none absolute inset-0 flex items-center justify-center rounded-lg bg-[var(--kz-color-surface-base)]/80\">\n <Icon\n name={IconName.Loader2}\n className=\"kz-button-spinner size-5\"\n size=\"md\"\n color=\"currentColor\"\n />\n </span>\n )}\n </button>\n );\n }\n);\n\nToggleButton.displayName = \"ToggleButton\";\n\nexport { ToggleButton, toggleButtonVariants };\nexport type { ToggleButtonVariants } from \"./toggle-button.variants\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { ToggleButtonVariant, ToggleButtonSize } from \"../../constants/enum\";\n\nconst trackBase = [\n \"kz-toggle-button\",\n \"relative inline-flex shrink-0 rounded-full p-1\",\n \"transition-colors duration-200 ease-in-out\",\n].join(\" \");\n\nexport const toggleButtonVariants = cva(trackBase, {\n variants: {\n variant: {\n [ToggleButtonVariant.Default]:\n \"kz-toggle-button-track kz-toggle-button-track--default\",\n [ToggleButtonVariant.Primary]:\n \"kz-toggle-button-track kz-toggle-button-track--primary\",\n [ToggleButtonVariant.Container]: [\n \"kz-toggle-button-track\",\n \"bg-[var(--kz-color-surface-base)] border border-[var(--kz-color-border-default)]\",\n \"group-data-[state=on]:bg-[var(--kz-component-button-success-bg)]\",\n ].join(\" \"),\n },\n size: {\n [ToggleButtonSize.Sm]: \"h-5 w-9 min-w-[2.25rem]\",\n [ToggleButtonSize.Md]: \"h-6 w-10 min-w-[2.5rem]\",\n [ToggleButtonSize.Lg]: \"h-7 w-11 min-w-[2.75rem]\",\n },\n fullWidth: {\n true: \"w-full min-w-0\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: ToggleButtonVariant.Default,\n size: ToggleButtonSize.Md,\n fullWidth: false,\n },\n});\n\nexport type ToggleButtonVariants = VariantProps<typeof toggleButtonVariants>;\n","import * as React from \"react\";\nimport { CheckboxSize, CheckboxVariant } from \"../../constants/enum\";\nimport { checkboxVariants } from \"./checkbox.variants\";\nimport { cn } from \"../../utils/cn\";\n\nconst CheckIcon = () => (\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"var(--kz-component-checkbox-icon-color)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"kz-checkbox-icon kz-checkbox-icon--check\"\n aria-hidden\n >\n <path d=\"M2 6l3 3 5-6\" />\n </svg>\n);\n\nconst MinusIcon = () => (\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"var(--kz-component-checkbox-icon-color)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n className=\"kz-checkbox-icon kz-checkbox-icon--minus\"\n aria-hidden\n >\n <path d=\"M2 6h8\" />\n </svg>\n);\n\nexport interface CheckboxProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"onChange\"\n> {\n size?: CheckboxSize;\n variant?: CheckboxVariant;\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n className?: string;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n size = CheckboxSize.Md,\n variant = CheckboxVariant.Default,\n checked: controlledChecked,\n defaultChecked = false,\n indeterminate = false,\n onCheckedChange,\n onChange,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledChecked, setUncontrolledChecked] =\n React.useState(defaultChecked);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const mergedRef = (el: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n el;\n if (typeof ref === \"function\") ref(el);\n else if (ref)\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = el;\n };\n\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n React.useEffect(() => {\n const el = inputRef.current;\n if (el) el.indeterminate = indeterminate;\n }, [indeterminate]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledChecked(e.target.checked);\n onCheckedChange?.(e.target.checked);\n onChange?.(e);\n };\n\n const state = indeterminate\n ? \"indeterminate\"\n : checked\n ? \"checked\"\n : \"unchecked\";\n\n const rootClassName = cn(checkboxVariants({ size, variant }), className);\n\n const boxSizeClass = {\n [CheckboxSize.Sm]: \"kz-checkbox-box--sm\",\n [CheckboxSize.Md]: \"kz-checkbox-box--md\",\n [CheckboxSize.Lg]: \"kz-checkbox-box--lg\",\n }[size];\n\n return (\n <label className={rootClassName}>\n <input\n ref={mergedRef}\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n aria-checked={indeterminate ? \"mixed\" : checked}\n aria-disabled={disabled}\n className=\"sr-only peer\"\n {...props}\n />\n <span\n className={cn(\"kz-checkbox-box\", boxSizeClass)}\n data-state={state}\n aria-hidden\n >\n {checked && !indeterminate && <CheckIcon />}\n {indeterminate && <MinusIcon />}\n </span>\n {children != null && (\n <span className=\"text-sm font-medium text-[var(--kz-color-text-primary)] select-none\">\n {children}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox, checkboxVariants };\nexport type { CheckboxVariants } from \"./checkbox.variants\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { CheckboxSize, CheckboxVariant } from \"../../constants/enum\";\n\nconst rootBase = [\n \"kz-checkbox\",\n \"inline-flex items-center gap-2 cursor-pointer\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-[var(--kz-color-border-focus)] focus-within:rounded-[var(--kz-component-checkbox-radius,4px)]\",\n].join(\" \");\n\nexport const checkboxVariants = cva(rootBase, {\n variants: {\n size: {\n [CheckboxSize.Sm]:\n \"min-h-[var(--kz-component-checkbox-size-sm)] min-w-[var(--kz-component-checkbox-size-sm)]\",\n [CheckboxSize.Md]:\n \"min-h-[var(--kz-component-checkbox-size-md)] min-w-[var(--kz-component-checkbox-size-md)]\",\n [CheckboxSize.Lg]:\n \"min-h-[var(--kz-component-checkbox-size-lg)] min-w-[var(--kz-component-checkbox-size-lg)]\",\n },\n variant: {\n [CheckboxVariant.Default]: \"kz-checkbox--default\",\n [CheckboxVariant.Container]: \"kz-checkbox--container\",\n },\n },\n defaultVariants: {\n size: CheckboxSize.Md,\n variant: CheckboxVariant.Default,\n },\n});\n\nexport type CheckboxVariants = VariantProps<typeof checkboxVariants>;\n","import * as React from \"react\";\nimport { RadioSize } from \"../../constants/enum\";\nimport { radioButtonVariants } from \"./radio-button.variants\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RadioButtonProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"onChange\"\n> {\n size?: RadioSize;\n value: string;\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n className?: string;\n}\n\nconst RadioButton = React.forwardRef<HTMLInputElement, RadioButtonProps>(\n (\n {\n className,\n size = RadioSize.Md,\n value,\n checked,\n defaultChecked,\n onChange,\n disabled,\n children,\n name,\n ...props\n },\n ref\n ) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const mergedRef = (el: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n el;\n if (typeof ref === \"function\") ref(el);\n else if (ref)\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = el;\n };\n\n const rootClassName = cn(radioButtonVariants({ size }), className);\n\n const circleSizeClass = {\n [RadioSize.Sm]: \"kz-radio-button-circle--sm\",\n [RadioSize.Md]: \"kz-radio-button-circle--md\",\n [RadioSize.Lg]: \"kz-radio-button-circle--lg\",\n }[size];\n\n return (\n <label className={rootClassName}>\n <input\n ref={mergedRef}\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChange}\n disabled={disabled}\n aria-checked={checked}\n aria-disabled={disabled}\n className=\"sr-only peer\"\n {...props}\n />\n <span\n className={cn(\"kz-radio-button-circle\", circleSizeClass)}\n aria-hidden\n >\n <span className=\"kz-radio-button-dot\" aria-hidden />\n </span>\n {children != null && (\n <span className=\"text-sm font-medium text-[var(--kz-color-text-primary)] select-none\">\n {children}\n </span>\n )}\n </label>\n );\n }\n);\n\nRadioButton.displayName = \"RadioButton\";\n\nexport { RadioButton, radioButtonVariants };\nexport type { RadioButtonVariants } from \"./radio-button.variants\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { RadioSize } from \"../../constants/enum\";\n\nconst rootBase = [\n \"kz-radio-button\",\n \"inline-flex items-center gap-2 cursor-pointer\",\n \"focus-within:outline-none\",\n].join(\" \");\n\nexport const radioButtonVariants = cva(rootBase, {\n variants: {\n size: {\n [RadioSize.Sm]:\n \"min-h-[var(--kz-component-radio-size-sm)] min-w-[var(--kz-component-radio-size-sm)]\",\n [RadioSize.Md]:\n \"min-h-[var(--kz-component-radio-size-md)] min-w-[var(--kz-component-radio-size-md)]\",\n [RadioSize.Lg]:\n \"min-h-[var(--kz-component-radio-size-lg)] min-w-[var(--kz-component-radio-size-lg)]\",\n },\n },\n defaultVariants: {\n size: RadioSize.Md,\n },\n});\n\nexport type RadioButtonVariants = VariantProps<typeof radioButtonVariants>;\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n getTypographyClass,\n getDefaultElement,\n type TypographyVariant,\n} from \"./typography-variants\";\nimport {\n TypographyTone as TypographyToneEnum,\n TypographyAlign as TypographyAlignEnum,\n TypographyWeight as TypographyWeightEnum,\n} from \"../../constants/enum\";\n\nexport {\n TypographyTone as TypographyToneEnum,\n TypographyAlign as TypographyAlignEnum,\n TypographyWeight as TypographyWeightEnum,\n} from \"../../constants/enum\";\n\nexport type TypographyTone = TypographyToneEnum;\nexport type TypographyAlign = TypographyAlignEnum;\nexport type TypographyWeight = TypographyWeightEnum;\n\nexport type TypographyAsElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"div\"\n | \"a\"\n | \"label\"\n | \"figcaption\";\n\nexport interface TypographyProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"color\"\n> {\n children: React.ReactNode;\n variant: TypographyVariant;\n href?: string;\n tone?: TypographyTone;\n as?: TypographyAsElement;\n align?: TypographyAlign;\n truncate?: boolean;\n lines?: number;\n weight?: TypographyWeight;\n className?: string;\n}\n\nconst alignClass: Record<TypographyAlignEnum, string> = {\n [TypographyAlignEnum.Left]: \"text-left\",\n [TypographyAlignEnum.Center]: \"text-center\",\n [TypographyAlignEnum.Right]: \"text-right\",\n};\n\nconst weightClass: Record<TypographyWeightEnum, string> = {\n [TypographyWeightEnum.Regular]: \"font-normal\",\n [TypographyWeightEnum.Medium]: \"font-medium\",\n [TypographyWeightEnum.Semibold]: \"font-semibold\",\n [TypographyWeightEnum.Bold]: \"font-bold\",\n};\n\nconst Typography = React.forwardRef<HTMLElement, TypographyProps>(\n (\n {\n children,\n variant,\n href,\n tone,\n as,\n align,\n truncate,\n lines,\n weight,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const Comp = href !== undefined ? \"a\" : (as ?? getDefaultElement(variant));\n const typographyClass = getTypographyClass(variant);\n\n const toneClass =\n tone !== undefined ? `kz-typography-tone-${tone}` : undefined;\n\n const lineClampStyle: React.CSSProperties | undefined =\n lines !== undefined && lines > 0\n ? {\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: lines,\n overflow: \"hidden\",\n }\n : undefined;\n\n const combinedStyle = lineClampStyle\n ? { ...style, ...lineClampStyle }\n : style;\n\n return React.createElement(\n Comp as \"p\",\n {\n ref,\n ...(href !== undefined && { href }),\n className: cn(\n typographyClass,\n toneClass,\n align !== undefined && alignClass[align],\n truncate && \"truncate\",\n weight !== undefined && weightClass[weight],\n className\n ),\n style: combinedStyle,\n ...props,\n },\n children\n );\n }\n);\n\nTypography.displayName = \"Typography\";\n\nexport { Typography };\nexport type { TypographyVariant };\n","import { TypographyVariant as TypographyVariantEnum } from \"../../constants/enum\";\n\nexport { TypographyVariant as TypographyVariantEnum } from \"../../constants/enum\";\n\nexport type TypographyVariant = TypographyVariantEnum;\n\nexport const typographyVariants: TypographyVariant[] = [\n TypographyVariantEnum.H1,\n TypographyVariantEnum.H2,\n TypographyVariantEnum.H3,\n TypographyVariantEnum.H4,\n TypographyVariantEnum.H5,\n TypographyVariantEnum.Body,\n TypographyVariantEnum.Small,\n TypographyVariantEnum.Caption,\n TypographyVariantEnum.Label,\n TypographyVariantEnum.Link,\n TypographyVariantEnum.Error,\n TypographyVariantEnum.Success,\n TypographyVariantEnum.Warning,\n];\n\nconst variantToClass: Record<TypographyVariant, string> = {\n [TypographyVariantEnum.H1]: \"kz-typography-h1\",\n [TypographyVariantEnum.H2]: \"kz-typography-h2\",\n [TypographyVariantEnum.H3]: \"kz-typography-h3\",\n [TypographyVariantEnum.H4]: \"kz-typography-h4\",\n [TypographyVariantEnum.H5]: \"kz-typography-h5\",\n [TypographyVariantEnum.Body]: \"kz-typography-body\",\n [TypographyVariantEnum.Small]: \"kz-typography-small\",\n [TypographyVariantEnum.Caption]: \"kz-typography-caption\",\n [TypographyVariantEnum.Label]: \"kz-typography-label\",\n [TypographyVariantEnum.Link]: \"kz-typography-link\",\n [TypographyVariantEnum.Error]: \"kz-typography-error\",\n [TypographyVariantEnum.Success]: \"kz-typography-success\",\n [TypographyVariantEnum.Warning]: \"kz-typography-warning\",\n};\n\nexport function getTypographyClass(variant: TypographyVariant): string {\n return variantToClass[variant];\n}\n\nconst defaultElement: Record<TypographyVariant, keyof JSX.IntrinsicElements> = {\n [TypographyVariantEnum.H1]: \"h1\",\n [TypographyVariantEnum.H2]: \"h2\",\n [TypographyVariantEnum.H3]: \"h3\",\n [TypographyVariantEnum.H4]: \"h4\",\n [TypographyVariantEnum.H5]: \"h5\",\n [TypographyVariantEnum.Body]: \"p\",\n [TypographyVariantEnum.Small]: \"span\",\n [TypographyVariantEnum.Caption]: \"span\",\n [TypographyVariantEnum.Label]: \"span\",\n [TypographyVariantEnum.Link]: \"a\",\n [TypographyVariantEnum.Error]: \"span\",\n [TypographyVariantEnum.Success]: \"span\",\n [TypographyVariantEnum.Warning]: \"span\",\n};\n\nexport function getDefaultElement(\n variant: TypographyVariant\n): keyof JSX.IntrinsicElements {\n return defaultElement[variant];\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n TextInputType,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { TypographyAlignEnum } from \"../typography\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport interface TextInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\"\n> {\n size?: TextInputSize;\n variant?: TextInputVariant;\n type?: TextInputType;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n value: string;\n placeHolder: string;\n onValueChange: (value: string) => void;\n\n startAdornment?: React.ReactNode;\n endAdornment?: React.ReactNode;\n\n loading?: boolean;\n clearable?: boolean;\n showCount?: boolean;\n maxLength?: number;\n\n containerClassName?: string;\n inputClassName?: string;\n showStateIcon?: boolean;\n\n inputMode?: React.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n\n /** Email: trim and lowercase value before calling onValueChange */\n normalizeEmail?: boolean;\n /** Number: allow negative values (default false) */\n allowNegative?: boolean;\n /** Number: allow decimal values (default false) */\n allowDecimal?: boolean;\n}\n\nconst stateIcon: Record<\n TextInputState.Error | TextInputState.Success | TextInputState.Warning,\n IconName\n> = {\n [TextInputState.Error]: IconName.CircleAlert,\n [TextInputState.Success]: IconName.CheckCircle,\n [TextInputState.Warning]: IconName.TriangleAlert,\n};\n\n/** Regex to strip characters invalid for the configured number mode. */\nconst buildNumberPattern = (\n allowNegative: boolean,\n allowDecimal: boolean\n): RegExp => {\n let allowed = \"0-9\";\n if (allowNegative) allowed += \"\\\\-\";\n if (allowDecimal) allowed += \".\";\n return new RegExp(`[^${allowed}]`, \"g\");\n};\n\n/** Returns true if the string is a structurally valid number for the given mode. */\nconst isValidNumber = (\n val: string,\n allowNegative: boolean,\n allowDecimal: boolean\n): boolean => {\n if (val === \"\" || val === \"-\") return true;\n let pattern = \"^\";\n if (allowNegative) pattern += \"-?\";\n pattern += \"\\\\d*\";\n if (allowDecimal) pattern += \"(\\\\.\\\\d*)?\";\n pattern += \"$\";\n return new RegExp(pattern).test(val);\n};\n\nconst TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n type = TextInputType.Text,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n placeHolder,\n onValueChange,\n startAdornment,\n endAdornment,\n loading = false,\n clearable = false,\n showCount = false,\n maxLength,\n containerClassName,\n inputClassName,\n disabled,\n showStateIcon = true,\n inputMode: inputModeProp,\n normalizeEmail = false,\n allowNegative = false,\n allowDecimal = false,\n ...inputProps\n },\n ref\n ) => {\n const uniqueId = React.useId();\n const inputId = inputProps.id ?? `kz-text-input-${uniqueId}`;\n const messageId = `kz-text-input-message-${uniqueId}`;\n const helperId = `kz-text-input-helper-${uniqueId}`;\n\n const [isPasswordVisible, setIsPasswordVisible] = React.useState(false);\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let next = e.target.value;\n\n if (maxLength != null && next.length > maxLength) return;\n\n if (type === TextInputType.Number) {\n next = next.replace(\n buildNumberPattern(allowNegative, allowDecimal),\n \"\"\n );\n if (!isValidNumber(next, allowNegative, allowDecimal)) return;\n }\n\n if (type === TextInputType.Email && normalizeEmail) {\n next = next.trim().toLowerCase();\n }\n\n onValueChange(next);\n };\n\n const handleClear = () => {\n onValueChange(\"\");\n };\n\n const togglePasswordVisibility = () => {\n setIsPasswordVisible((prev) => !prev);\n };\n\n // Resolve the actual HTML input type\n let resolvedType: string = type;\n if (type === TextInputType.Password) {\n resolvedType = isPasswordVisible ? \"text\" : \"password\";\n }\n\n // Resolve inputMode: explicit prop wins, otherwise derive from type\n let resolvedInputMode = inputModeProp;\n if (resolvedInputMode == null) {\n if (type === TextInputType.Email) resolvedInputMode = \"email\";\n else if (type === TextInputType.Tel) resolvedInputMode = \"tel\";\n else if (type === TextInputType.Url) resolvedInputMode = \"url\";\n else if (type === TextInputType.Number) resolvedInputMode = \"decimal\";\n else if (type === TextInputType.Search) resolvedInputMode = \"search\";\n }\n\n // Resolve autoComplete for email\n const resolvedAutoComplete =\n type === TextInputType.Email && inputProps.autoComplete == null\n ? \"email\"\n : inputProps.autoComplete;\n\n const isDisabled = disabled ?? loading;\n\n const wrapperClass = cn(\n \"kz-text-input-wrapper\",\n `kz-text-input-wrapper--${variant}`,\n `kz-text-input-wrapper--${size}`,\n state !== TextInputState.Default && `kz-text-input-wrapper--${state}`\n );\n\n const inputClass = cn(\n \"kz-text-input-input\",\n `kz-text-input-input--${size}`,\n inputClassName\n );\n\n const rootClass = cn(\"kz-text-input-root\", containerClassName);\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-text-input-label\" htmlFor={inputId}>\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n <div className={wrapperClass}>\n {startAdornment != null && (\n <span className=\"kz-text-input-adornment kz-text-input-adornment--start\">\n {startAdornment}\n </span>\n )}\n <input\n ref={ref}\n id={inputId}\n type={resolvedType}\n value={value}\n placeholder={placeHolder}\n onChange={handleChange}\n disabled={isDisabled}\n maxLength={maxLength}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? messageId\n : helperText != null\n ? helperId\n : undefined\n }\n {...(resolvedInputMode != null\n ? { inputMode: resolvedInputMode }\n : {})}\n {...(resolvedAutoComplete != null\n ? { autoComplete: resolvedAutoComplete }\n : {})}\n {...inputProps}\n />\n {clearable && value.length > 0 && !loading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"kz-text-input-adornment kz-text-input-clear\"\n aria-label=\"Clear\"\n >\n ×\n </button>\n )}\n {type === TextInputType.Password && !isDisabled && (\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n className=\"kz-text-input-adornment kz-text-input-adornment--end\"\n aria-label={isPasswordVisible ? \"Hide password\" : \"Show password\"}\n >\n <Icon\n name={isPasswordVisible ? IconName.EyeOff : IconName.Eye}\n size={size === TextInputSize.Sm ? 14 : 16}\n />\n </button>\n )}\n {endAdornment != null && (\n <span className=\"kz-text-input-adornment kz-text-input-adornment--end\">\n {endAdornment}\n </span>\n )}\n {showStateIcon && (\n <span\n className=\"kz-text-input-adornment kz-text-input-state-icon\"\n aria-hidden\n >\n <Icon\n name={\n stateIcon[\n state as\n | TextInputState.Error\n | TextInputState.Success\n | TextInputState.Warning\n ]\n }\n size={size === TextInputSize.Sm ? 14 : 16}\n color={\n state === TextInputState.Error\n ? \"var(--kz-typography-error-color)\"\n : state === TextInputState.Success\n ? \"var(--kz-typography-success-color)\"\n : \"var(--kz-typography-warning-color)\"\n }\n />\n </span>\n )}\n </div>\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id={messageId}\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography id={helperId} variant={TypographyVariantEnum.Caption}>\n {helperText}\n </Typography>\n )}\n {showCount && maxLength != null && (\n <Typography\n variant={TypographyVariantEnum.Caption}\n align={TypographyAlignEnum.Right}\n >\n {value.length}/{maxLength}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nTextInput.displayName = \"TextInput\";\n\nexport { TextInput };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { TypographyAlignEnum } from \"../typography\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport interface TextAreaProps extends Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"size\"\n> {\n size?: TextInputSize;\n variant?: TextInputVariant;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n value: string;\n placeHolder: string;\n onValueChange: (value: string) => void;\n\n startAdornment?: React.ReactNode;\n endAdornment?: React.ReactNode;\n\n loading?: boolean;\n clearable?: boolean;\n showCount?: boolean;\n maxLength?: number;\n\n autoResize?: boolean;\n\n containerClassName?: string;\n textareaClassName?: string;\n showStateIcon?: boolean;\n}\n\nconst stateIcon: Record<\n TextInputState.Error | TextInputState.Success | TextInputState.Warning,\n IconName\n> = {\n [TextInputState.Error]: IconName.CircleAlert,\n [TextInputState.Success]: IconName.CheckCircle,\n [TextInputState.Warning]: IconName.TriangleAlert,\n};\n\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n placeHolder,\n onValueChange,\n startAdornment,\n endAdornment,\n loading = false,\n clearable = false,\n showCount = false,\n maxLength,\n autoResize = true,\n containerClassName,\n textareaClassName,\n disabled,\n showStateIcon = true,\n rows = 3,\n ...textareaProps\n },\n ref\n ) => {\n const textareaRef = React.useRef<HTMLTextAreaElement | null>(null);\n\n React.useImperativeHandle(ref, () => textareaRef.current!);\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = e.target.value;\n if (maxLength != null && next.length > maxLength) return;\n onValueChange(next);\n };\n\n const handleClear = () => {\n onValueChange(\"\");\n };\n\n React.useEffect(() => {\n if (autoResize && textareaRef.current) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height =\n textareaRef.current.scrollHeight + \"px\";\n }\n }, [value, autoResize]);\n\n const wrapperClass = cn(\n \"kz-textarea-wrapper\",\n `kz-textarea-wrapper--${variant}`,\n `kz-textarea-wrapper--${size}`,\n state !== TextInputState.Default && `kz-textarea-wrapper--${state}`\n );\n\n const textareaClass = cn(\n \"kz-textarea-input\",\n `kz-textarea-input--${size}`,\n textareaClassName\n );\n\n const rootClass = cn(\"kz-textarea-root\", containerClassName);\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-textarea-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <div className={wrapperClass}>\n {startAdornment != null && (\n <span className=\"kz-textarea-adornment kz-textarea-adornment--start\">\n {startAdornment}\n </span>\n )}\n\n <textarea\n ref={textareaRef}\n value={value}\n placeholder={placeHolder}\n onChange={handleChange}\n disabled={disabled ?? loading}\n maxLength={maxLength}\n rows={rows}\n className={textareaClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"textarea-message\"\n : helperText != null\n ? \"textarea-helper\"\n : undefined\n }\n style={{ resize: autoResize ? \"none\" : \"vertical\" }}\n {...textareaProps}\n />\n\n {clearable && value.length > 0 && !loading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"kz-textarea-adornment kz-textarea-clear\"\n aria-label=\"Clear\"\n >\n ×\n </button>\n )}\n\n {endAdornment != null && (\n <span className=\"kz-textarea-adornment kz-textarea-adornment--end\">\n {endAdornment}\n </span>\n )}\n\n {showStateIcon && state !== TextInputState.Default && (\n <span className=\"kz-textarea-state-icon\" aria-hidden>\n <Icon\n name={\n stateIcon[\n state as\n | TextInputState.Error\n | TextInputState.Success\n | TextInputState.Warning\n ]\n }\n size={size === TextInputSize.Sm ? 14 : 16}\n color={\n state === TextInputState.Error\n ? \"var(--kz-typography-error-color)\"\n : state === TextInputState.Success\n ? \"var(--kz-typography-success-color)\"\n : \"var(--kz-typography-warning-color)\"\n }\n />\n </span>\n )}\n </div>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"textarea-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"textarea-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n\n {showCount && maxLength != null && (\n <Typography\n variant={TypographyVariantEnum.Caption}\n align={TypographyAlignEnum.Right}\n >\n {value.length}/{maxLength}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nTextArea.displayName = \"TextArea\";\n\nexport { TextArea };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n ButtonAspectRatio,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Button } from \"../button\";\n\nconst sizeToButtonSize: Record<TextInputSize, ButtonSize> = {\n [TextInputSize.Sm]: ButtonSize.Sm,\n [TextInputSize.Md]: ButtonSize.Sm,\n [TextInputSize.Lg]: ButtonSize.Md,\n};\n\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"value\" | \"onChange\" | \"type\"\n> {\n size?: TextInputSize;\n variant?: TextInputVariant;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n value: number | undefined;\n onValueChange: (value: number | undefined) => void;\n\n min?: number;\n max?: number;\n step?: number;\n allowNegative?: boolean;\n allowDecimal?: boolean;\n\n containerClassName?: string;\n inputClassName?: string;\n}\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n onValueChange,\n min,\n max,\n step = 1,\n allowNegative = true,\n allowDecimal = true,\n containerClassName,\n inputClassName,\n disabled,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(\n value?.toString() ?? \"\"\n );\n\n React.useEffect(() => {\n setInternalValue(value?.toString() ?? \"\");\n }, [value]);\n\n const clamp = (num: number) => {\n if (min != null && num < min) return min;\n if (max != null && num > max) return max;\n return num;\n };\n\n const parseAndUpdate = (val: string) => {\n if (val === \"\") {\n onValueChange(undefined);\n return;\n }\n\n const parsed = allowDecimal ? parseFloat(val) : parseInt(val, 10);\n if (!isNaN(parsed)) {\n onValueChange(clamp(parsed));\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n\n const regex = allowDecimal\n ? allowNegative\n ? /^-?\\d*\\.?\\d*$/\n : /^\\d*\\.?\\d*$/\n : allowNegative\n ? /^-?\\d*$/\n : /^\\d*$/;\n\n if (!regex.test(next)) return;\n\n setInternalValue(next);\n parseAndUpdate(next);\n };\n\n const increment = () => {\n const current = value ?? 0;\n const next = clamp(current + step);\n onValueChange(next);\n };\n\n const decrement = () => {\n const current = value ?? 0;\n const next = clamp(current - step);\n onValueChange(next);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-number-input-root\", containerClassName);\n\n const wrapperClass = cn(\n \"kz-number-input-wrapper\",\n `kz-number-input-wrapper--${variant}`,\n `kz-number-input-wrapper--${size}`,\n state !== TextInputState.Default && `kz-number-input-wrapper--${state}`\n );\n\n const inputClass = cn(\n \"kz-number-input-input\",\n `kz-number-input-input--${size}`,\n inputClassName\n );\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-number-input-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <div className={wrapperClass}>\n <Button\n variant={ButtonVariant.Ghost}\n size={sizeToButtonSize[size]}\n aspectRatio={ButtonAspectRatio.Square}\n onClick={decrement}\n disabled={disabled}\n className=\"kz-number-input-stepper\"\n aria-label=\"Decrease value\"\n >\n −\n </Button>\n\n <input\n ref={ref}\n type=\"text\"\n inputMode={allowDecimal ? \"decimal\" : \"numeric\"}\n value={internalValue}\n onChange={handleChange}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"number-input-message\"\n : helperText != null\n ? \"number-input-helper\"\n : undefined\n }\n {...props}\n />\n\n <Button\n variant={ButtonVariant.Ghost}\n size={sizeToButtonSize[size]}\n aspectRatio={ButtonAspectRatio.Square}\n onClick={increment}\n disabled={disabled}\n className=\"kz-number-input-stepper\"\n aria-label=\"Increase value\"\n >\n +\n </Button>\n </div>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"number-input-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"number-input-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nNumberInput.displayName = \"NumberInput\";\n\nexport { NumberInput };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\n\nexport interface RangeSliderProps {\n size?: TextInputSize;\n variant?: TextInputVariant;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n /** Single-thumb mode value */\n value?: number;\n /** Dual-thumb mode value: [min, max] */\n rangeValue?: [number, number];\n onValueChange?: (value: number) => void;\n onRangeChange?: (value: [number, number]) => void;\n\n min?: number;\n max?: number;\n step?: number;\n\n /** Show current value tooltip above thumb */\n showValue?: boolean;\n /** Show min/max labels below the track */\n showMinMax?: boolean;\n /** Custom value formatter for display */\n formatValue?: (value: number) => string;\n /** Show manual input fields above the slider */\n showInputs?: boolean;\n /** Visual variant for the manual input fields (defaults to the slider's variant) */\n inputVariant?: TextInputVariant;\n\n disabled?: boolean;\n containerClassName?: string;\n}\n\nconst clamp = (val: number, min: number, max: number) =>\n Math.min(Math.max(val, min), max);\n\nconst snapToStep = (val: number, min: number, step: number) => {\n const steps = Math.round((val - min) / step);\n return min + steps * step;\n};\n\nconst RangeSlider = React.forwardRef<HTMLDivElement, RangeSliderProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n rangeValue,\n onValueChange,\n onRangeChange,\n min = 0,\n max = 100,\n step = 1,\n showValue = false,\n showMinMax = false,\n formatValue,\n showInputs = false,\n inputVariant,\n disabled = false,\n containerClassName,\n },\n ref\n ) => {\n const resolvedInputVariant = inputVariant ?? variant;\n const isRange = rangeValue != null;\n const trackRef = React.useRef<HTMLDivElement>(null);\n const [dragging, setDragging] = React.useState<\n null | \"single\" | \"start\" | \"end\"\n >(null);\n\n // Internal text state for manual inputs so user can type freely\n const [startText, setStartText] = React.useState(\n String(isRange ? rangeValue[0] : (value ?? min))\n );\n const [endText, setEndText] = React.useState(\n String(isRange ? rangeValue[1] : max)\n );\n\n // Sync internal text when value/rangeValue changes externally (e.g. via slider drag)\n React.useEffect(() => {\n if (isRange && rangeValue) {\n setStartText(String(rangeValue[0]));\n setEndText(String(rangeValue[1]));\n } else if (value != null) {\n setStartText(String(value));\n }\n }, [isRange, value, rangeValue]);\n\n const commitInput = (which: \"start\" | \"end\", raw: string) => {\n const parsed = parseFloat(raw);\n if (isNaN(parsed)) return;\n const clamped = clamp(snapToStep(parsed, min, step), min, max);\n\n if (isRange && rangeValue) {\n if (which === \"start\") {\n const safe = Math.min(clamped, rangeValue[1]);\n onRangeChange?.([safe, rangeValue[1]]);\n } else {\n const safe = Math.max(clamped, rangeValue[0]);\n onRangeChange?.([rangeValue[0], safe]);\n }\n } else {\n onValueChange?.(clamped);\n }\n };\n\n const format = formatValue ?? ((v: number) => String(v));\n\n const getPercent = (val: number) => ((val - min) / (max - min)) * 100;\n\n const getValueFromPosition = (clientX: number) => {\n const track = trackRef.current;\n if (!track) return min;\n const rect = track.getBoundingClientRect();\n const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);\n const raw = min + ratio * (max - min);\n return clamp(snapToStep(raw, min, step), min, max);\n };\n\n const handlePointerDown =\n (thumb: \"single\" | \"start\" | \"end\") => (e: React.PointerEvent) => {\n if (disabled) return;\n e.preventDefault();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n setDragging(thumb);\n const val = getValueFromPosition(e.clientX);\n applyValue(thumb, val);\n };\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (!dragging || disabled) return;\n const val = getValueFromPosition(e.clientX);\n applyValue(dragging, val);\n };\n\n const handlePointerUp = () => {\n setDragging(null);\n };\n\n const applyValue = (thumb: \"single\" | \"start\" | \"end\", val: number) => {\n if (thumb === \"single\") {\n onValueChange?.(val);\n } else if (rangeValue) {\n if (thumb === \"start\") {\n const clamped = Math.min(val, rangeValue[1]);\n onRangeChange?.([clamped, rangeValue[1]]);\n } else {\n const clamped = Math.max(val, rangeValue[0]);\n onRangeChange?.([rangeValue[0], clamped]);\n }\n }\n };\n\n const handleTrackClick = (e: React.MouseEvent) => {\n if (disabled) return;\n const val = getValueFromPosition(e.clientX);\n if (isRange && rangeValue) {\n const distStart = Math.abs(val - rangeValue[0]);\n const distEnd = Math.abs(val - rangeValue[1]);\n if (distStart <= distEnd) {\n onRangeChange?.([Math.min(val, rangeValue[1]), rangeValue[1]]);\n } else {\n onRangeChange?.([rangeValue[0], Math.max(val, rangeValue[0])]);\n }\n } else {\n onValueChange?.(val);\n }\n };\n\n const handleKeyDown =\n (thumb: \"single\" | \"start\" | \"end\") => (e: React.KeyboardEvent) => {\n if (disabled) return;\n let delta = 0;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") delta = step;\n else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") delta = -step;\n else if (e.key === \"Home\") {\n applyValue(thumb, min);\n return;\n } else if (e.key === \"End\") {\n applyValue(thumb, max);\n return;\n } else return;\n\n e.preventDefault();\n if (thumb === \"single\" && value != null) {\n applyValue(thumb, clamp(value + delta, min, max));\n } else if (rangeValue) {\n const current = thumb === \"start\" ? rangeValue[0] : rangeValue[1];\n applyValue(thumb, clamp(current + delta, min, max));\n }\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const uniqueId = React.useId();\n const messageId = `kz-range-slider-message-${uniqueId}`;\n\n // Percentages\n const singlePercent = value != null ? getPercent(value) : 0;\n const startPercent = rangeValue ? getPercent(rangeValue[0]) : 0;\n const endPercent = rangeValue ? getPercent(rangeValue[1]) : 100;\n\n const rootClass = cn(\"kz-range-slider-root\", containerClassName);\n\n const wrapperClass = cn(\n \"kz-range-slider-wrapper\",\n `kz-range-slider-wrapper--${variant}`,\n `kz-range-slider-wrapper--${size}`,\n state !== TextInputState.Default && `kz-range-slider-wrapper--${state}`,\n disabled && \"kz-range-slider-wrapper--disabled\"\n );\n\n const renderThumb = (\n thumb: \"single\" | \"start\" | \"end\",\n percent: number,\n currentValue: number\n ) => (\n <div\n className={cn(\n \"kz-range-slider-thumb\",\n `kz-range-slider-thumb--${size}`,\n dragging === thumb && \"kz-range-slider-thumb--active\"\n )}\n style={{ left: `${percent}%` }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-disabled={disabled}\n aria-label={\n thumb === \"start\"\n ? \"Range start\"\n : thumb === \"end\"\n ? \"Range end\"\n : \"Value\"\n }\n onPointerDown={handlePointerDown(thumb)}\n onKeyDown={handleKeyDown(thumb)}\n >\n {showValue && (\n <span className=\"kz-range-slider-value-tooltip\">\n {format(currentValue)}\n </span>\n )}\n </div>\n );\n\n return (\n <div className={rootClass} ref={ref}>\n {label != null && label !== \"\" && (\n <label className=\"kz-range-slider-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n {showInputs && (\n <div className=\"kz-range-slider-inputs\">\n <input\n type=\"text\"\n inputMode=\"decimal\"\n className={cn(\n \"kz-range-slider-input\",\n `kz-range-slider-input--${size}`,\n `kz-range-slider-input--${resolvedInputVariant}`\n )}\n value={startText}\n onChange={(e) => setStartText(e.target.value)}\n onBlur={() => commitInput(\"start\", startText)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitInput(\"start\", startText);\n }}\n disabled={disabled}\n aria-label={isRange ? \"Range start value\" : \"Value\"}\n />\n {isRange && (\n <>\n <Typography variant={TypographyVariantEnum.Caption}>\n to\n </Typography>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n className={cn(\n \"kz-range-slider-input\",\n `kz-range-slider-input--${size}`\n )}\n value={endText}\n onChange={(e) => setEndText(e.target.value)}\n onBlur={() => commitInput(\"end\", endText)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitInput(\"end\", endText);\n }}\n disabled={disabled}\n aria-label=\"Range end value\"\n />\n </>\n )}\n </div>\n )}\n\n <div\n className={wrapperClass}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerLeave={handlePointerUp}\n >\n <div\n className=\"kz-range-slider-track\"\n ref={trackRef}\n onClick={handleTrackClick}\n >\n <div\n className=\"kz-range-slider-fill\"\n style={\n isRange\n ? {\n left: `${startPercent}%`,\n width: `${endPercent - startPercent}%`,\n }\n : { left: \"0%\", width: `${singlePercent}%` }\n }\n />\n {isRange && rangeValue ? (\n <>\n {renderThumb(\"start\", startPercent, rangeValue[0])}\n {renderThumb(\"end\", endPercent, rangeValue[1])}\n </>\n ) : (\n value != null && renderThumb(\"single\", singlePercent, value)\n )}\n </div>\n </div>\n\n {showMinMax && (\n <div className=\"kz-range-slider-minmax\">\n <Typography variant={TypographyVariantEnum.Caption}>\n {format(min)}\n </Typography>\n <Typography variant={TypographyVariantEnum.Caption}>\n {format(max)}\n </Typography>\n </div>\n )}\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id={messageId}\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nRangeSlider.displayName = \"RangeSlider\";\n\nexport { RangeSlider };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SidesheetProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Content (e.g. NavButton list). */\n children: React.ReactNode;\n /** Optional class for the panel. */\n className?: string;\n}\n\nconst Sidesheet = React.forwardRef<HTMLDivElement, SidesheetProps>(\n ({ className, children, ...props }, ref) => (\n <aside ref={ref} className={cn(\"kz-sidesheet\", className)} {...props}>\n {children}\n </aside>\n )\n);\n\nSidesheet.displayName = \"Sidesheet\";\n\nexport { Sidesheet };\n","import * as React from \"react\";\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon } from \"../../icon\";\nimport type {\n SideMenuSectionNode,\n SideMenuLinkNode,\n SideMenuGroupNode,\n SideMenuGroupItem,\n SideMenuGroupItemSubItem,\n SideMenuProps,\n SideMenuFlyoutSide,\n} from \"./sidemenu-types\";\n\nfunction resolveIcon(\n icon: IconName | React.ReactNode | undefined,\n className?: string\n): React.ReactNode {\n if (icon == null) return null;\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon as IconName}\n size={14}\n color=\"currentColor\"\n className={className}\n />\n );\n }\n return icon;\n}\n\ntype IconName = import(\"../../icon\").IconName;\n\nconst SIDE_MAP: Record<SideMenuFlyoutSide, \"left\" | \"right\"> = {\n right: \"right\",\n left: \"left\",\n};\n\nfunction SideMenuLinkExpanded({\n node,\n selectedId,\n onNavigate,\n iconGap,\n style,\n}: {\n node: SideMenuLinkNode;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n iconGap: number | string;\n style?: React.CSSProperties;\n}) {\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n const selected = selectedId === node.id;\n const content = (\n <>\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{node.label}</span>\n </>\n );\n const rowClass = cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-item--link\",\n selected && \"kz-sidemenu-item--active\",\n node.disabled && \"kz-sidemenu-item--disabled\"\n );\n const rowStyle = { gap: iconGap, ...style };\n\n if (node.href && !node.disabled) {\n return (\n <a\n href={node.external ? node.href : undefined}\n target={node.external ? \"_blank\" : undefined}\n rel={node.external ? \"noopener noreferrer\" : undefined}\n className={rowClass}\n style={rowStyle}\n onClick={(e) => {\n if (!node.external && node.href && onNavigate) {\n e.preventDefault();\n onNavigate({\n id: node.id,\n href: node.href,\n actionId: node.actionId,\n });\n }\n }}\n >\n {content}\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n className={rowClass}\n style={rowStyle}\n disabled={node.disabled}\n onClick={() =>\n onNavigate?.({ id: node.id, href: node.href, actionId: node.actionId })\n }\n >\n {content}\n </button>\n );\n}\n\nfunction SideMenuGroupExpanded({\n node,\n selectedId,\n onNavigate,\n iconGap,\n indentBg,\n open,\n onOpenChange,\n}: {\n node: SideMenuGroupNode;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n iconGap: number | string;\n indentBg: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const hasSelectedInGroup = node.items.some(\n (item) =>\n selectedId === item.id ||\n item.subItems?.some((sub) => selectedId === sub.id)\n );\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n\n return (\n <Collapsible.Root open={open} onOpenChange={onOpenChange}>\n <Collapsible.Trigger\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-group-trigger\",\n hasSelectedInGroup && \"kz-sidemenu-item--active\",\n node.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ gap: iconGap }}\n disabled={node.disabled}\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{node.label}</span>\n <ChevronDown\n className=\"kz-sidemenu-group-chevron\"\n size={14}\n aria-hidden\n />\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div\n className=\"kz-sidemenu-group-content\"\n style={{ background: indentBg }}\n >\n {node.items.map((item) => (\n <SideMenuGroupItemRow\n key={item.id}\n item={item}\n selectedId={selectedId}\n onNavigate={onNavigate}\n level={0}\n />\n ))}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n}\n\nfunction SideMenuGroupItemRow({\n item,\n selectedId,\n onNavigate,\n level,\n}: {\n item: SideMenuGroupItem;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n level: number;\n}) {\n const selected = selectedId === item.id;\n const hasSub = item.subItems && item.subItems.length > 0;\n const [subOpen, setSubOpen] = React.useState(false);\n const icon = resolveIcon(item.icon, \"kz-sidemenu-item-icon\");\n\n const paddingLeft = 12 + level * 12;\n\n const labelContent = (\n <>\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{item.label}</span>\n </>\n );\n\n if (hasSub && item.subItems!.length > 0) {\n return (\n <Collapsible.Root open={subOpen} onOpenChange={setSubOpen}>\n <Collapsible.Trigger\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-group-item-trigger\",\n selected && \"kz-sidemenu-item--active\",\n item.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n disabled={item.disabled}\n >\n {labelContent}\n <ChevronDown\n className=\"kz-sidemenu-group-chevron\"\n size={12}\n aria-hidden\n />\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div className=\"kz-sidemenu-sublist\">\n {item.subItems!.map((sub) => (\n <SideMenuGroupSubItemRow\n key={sub.id}\n sub={sub}\n selectedId={selectedId}\n onNavigate={onNavigate}\n paddingLeft={paddingLeft + 12}\n />\n ))}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n }\n\n const el = item.href ? (\n <a\n href={item.href}\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n selected && \"kz-sidemenu-item--active\",\n item.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.({ id: item.id, href: item.href, actionId: item.actionId });\n }}\n >\n {labelContent}\n </a>\n ) : (\n <button\n type=\"button\"\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n selected && \"kz-sidemenu-item--active\",\n item.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n disabled={item.disabled}\n onClick={() =>\n onNavigate?.({ id: item.id, href: item.href, actionId: item.actionId })\n }\n >\n {labelContent}\n </button>\n );\n return el;\n}\n\nfunction SideMenuGroupSubItemRow({\n sub,\n selectedId,\n onNavigate,\n paddingLeft,\n}: {\n sub: SideMenuGroupItemSubItem;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n paddingLeft: number;\n}) {\n const selected = selectedId === sub.id;\n const icon = resolveIcon(sub.icon, \"kz-sidemenu-item-icon\");\n const labelContent = (\n <>\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{sub.label}</span>\n </>\n );\n const el = sub.href ? (\n <a\n href={sub.href}\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-subitem\",\n selected && \"kz-sidemenu-item--active\",\n sub.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.({ id: sub.id, href: sub.href, actionId: sub.actionId });\n }}\n >\n {labelContent}\n </a>\n ) : (\n <button\n type=\"button\"\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-subitem\",\n selected && \"kz-sidemenu-item--active\",\n sub.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n disabled={sub.disabled}\n onClick={() =>\n onNavigate?.({ id: sub.id, href: sub.href, actionId: sub.actionId })\n }\n >\n {labelContent}\n </button>\n );\n return el;\n}\n\nfunction CollapsedFlyout({\n node,\n onNavigate,\n side,\n sideOffset,\n closeOnSelect,\n children,\n}: {\n node: SideMenuGroupNode;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n side: SideMenuFlyoutSide;\n sideOffset: number;\n closeOnSelect: boolean;\n children: React.ReactNode;\n}) {\n const [open, setOpen] = React.useState(false);\n const sideVal = SIDE_MAP[side];\n\n return (\n <DropdownMenuPrimitive.Root open={open} onOpenChange={setOpen}>\n <DropdownMenuPrimitive.Trigger asChild>\n {children}\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n className=\"kz-sidemenu-flyout\"\n side={sideVal}\n sideOffset={sideOffset}\n align=\"start\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n {node.items.map((item) =>\n item.subItems && item.subItems.length > 0 ? (\n <DropdownMenuPrimitive.Sub key={item.id}>\n <DropdownMenuPrimitive.SubTrigger className=\"kz-sidemenu-flyout-item\">\n {item.label}\n </DropdownMenuPrimitive.SubTrigger>\n <DropdownMenuPrimitive.SubContent\n className=\"kz-sidemenu-flyout kz-sidemenu-flyout-sub\"\n sideOffset={4}\n >\n {item.subItems.map((sub) => (\n <DropdownMenuPrimitive.Item\n key={sub.id}\n className=\"kz-sidemenu-flyout-item\"\n disabled={sub.disabled}\n onSelect={() => {\n onNavigate?.({\n id: sub.id,\n href: sub.href,\n actionId: sub.actionId,\n });\n if (closeOnSelect) setOpen(false);\n }}\n asChild={!!sub.href}\n >\n {sub.href ? (\n <a href={sub.href}>{sub.label}</a>\n ) : (\n <span>{sub.label}</span>\n )}\n </DropdownMenuPrimitive.Item>\n ))}\n </DropdownMenuPrimitive.SubContent>\n </DropdownMenuPrimitive.Sub>\n ) : (\n <DropdownMenuPrimitive.Item\n key={item.id}\n className=\"kz-sidemenu-flyout-item\"\n disabled={item.disabled}\n onSelect={() => {\n onNavigate?.({\n id: item.id,\n href: item.href,\n actionId: item.actionId,\n });\n if (closeOnSelect) setOpen(false);\n }}\n asChild={!!item.href}\n >\n {item.href ? (\n <a href={item.href}>{item.label}</a>\n ) : (\n <span>{item.label}</span>\n )}\n </DropdownMenuPrimitive.Item>\n )\n )}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n );\n}\n\nconst SideMenu = React.forwardRef<HTMLDivElement, SideMenuProps>(\n (\n {\n data,\n selectedId,\n onNavigate,\n collapsible = true,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n expandedWidth = 280,\n collapsedWidth = 72,\n header,\n headerWidth,\n footer,\n gap = 4,\n iconGap = 10,\n showTooltipsWhenCollapsed = true,\n flyoutSide = \"right\",\n flyoutOffset = 8,\n closeFlyoutOnSelect = true,\n className,\n },\n ref\n ) => {\n const [uncontrolledCollapsed, setUncontrolledCollapsed] =\n React.useState(defaultCollapsed);\n const collapsed =\n controlledCollapsed !== undefined\n ? controlledCollapsed\n : uncontrolledCollapsed;\n const setCollapsed = (v: boolean) => {\n if (controlledCollapsed === undefined) setUncontrolledCollapsed(v);\n onCollapsedChange?.(v);\n };\n\n const [openGroups, setOpenGroups] = React.useState<Set<string>>(new Set());\n const toggleGroup = React.useCallback((id: string, isOpen: boolean) => {\n setOpenGroups((prev) => {\n const next = new Set(prev);\n if (isOpen) next.add(id);\n else next.delete(id);\n return next;\n });\n }, []);\n\n const width = collapsed ? collapsedWidth : expandedWidth;\n const widthStyle =\n typeof width === \"number\" ? { width: `${width}px` } : { width };\n const gapStyle = typeof gap === \"number\" ? { gap: `${gap}px` } : { gap };\n const indentBg =\n \"var(--kz-component-sidemenu-group-indent-bg, rgba(0,0,0,0.02))\";\n\n const renderItem = (node: SideMenuLinkNode | SideMenuGroupNode) => {\n if (node.type === \"link\") {\n if (collapsed) {\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n const triggerClass = cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-item--link\",\n \"kz-sidemenu-item--collapsed\",\n \"kz-sidemenu-tooltip-trigger\",\n selectedId === node.id && \"kz-sidemenu-item--active\"\n );\n if (node.href && !node.disabled) {\n return (\n <a\n href={node.external ? node.href : undefined}\n target={node.external ? \"_blank\" : undefined}\n rel={node.external ? \"noopener noreferrer\" : undefined}\n className={triggerClass}\n onClick={(e) => {\n if (!node.external && onNavigate) {\n e.preventDefault();\n onNavigate({\n id: node.id,\n href: node.href,\n actionId: node.actionId,\n });\n }\n }}\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n className={triggerClass}\n disabled={node.disabled}\n onClick={() =>\n onNavigate?.({\n id: node.id,\n href: node.href,\n actionId: node.actionId,\n })\n }\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n </button>\n );\n }\n return (\n <SideMenuLinkExpanded\n node={node}\n selectedId={selectedId}\n onNavigate={onNavigate}\n iconGap={iconGap}\n />\n );\n }\n\n if (node.type === \"group\") {\n if (collapsed) {\n const hasSelectedInFlyout = node.items.some(\n (item) =>\n selectedId === item.id ||\n item.subItems?.some((sub) => selectedId === sub.id)\n );\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n const trigger = (\n <div\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-item--collapsed\",\n hasSelectedInFlyout && \"kz-sidemenu-item--active\"\n )}\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n </div>\n );\n return (\n <CollapsedFlyout\n node={node}\n selectedId={selectedId}\n onNavigate={onNavigate}\n side={flyoutSide}\n sideOffset={flyoutOffset}\n closeOnSelect={closeFlyoutOnSelect}\n >\n <button\n type=\"button\"\n className=\"kz-sidemenu-tooltip-trigger kz-sidemenu-flyout-trigger\"\n >\n {showTooltipsWhenCollapsed ? (\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"kz-sidemenu-tooltip-trigger-inner\">\n {trigger}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side=\"right\"\n sideOffset={8}\n className=\"kz-tooltip-content kz-tooltip-content--size-sm\"\n >\n {node.label}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n ) : (\n trigger\n )}\n </button>\n </CollapsedFlyout>\n );\n }\n return (\n <SideMenuGroupExpanded\n node={node}\n selectedId={selectedId}\n onNavigate={onNavigate}\n iconGap={iconGap}\n indentBg={indentBg}\n open={openGroups.has(node.id)}\n onOpenChange={(v) => toggleGroup(node.id, v)}\n />\n );\n }\n\n return null;\n };\n\n const wrapWithTooltip = (child: React.ReactNode, label: string) => {\n if (!collapsed || !showTooltipsWhenCollapsed) return child;\n return (\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{child}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side=\"right\"\n sideOffset={8}\n className=\"kz-tooltip-content kz-tooltip-content--size-sm\"\n >\n {label}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n };\n\n const renderSection = (section: SideMenuSectionNode) => (\n <div key={section.id} className=\"kz-sidemenu-section\">\n {!collapsed && section.label && (\n <div className=\"kz-sidemenu-section-label\">{section.label}</div>\n )}\n <div className=\"kz-sidemenu-section-items\" style={gapStyle}>\n {section.items.map((node) => {\n if (node.type === \"section\") {\n return (\n <React.Fragment key={node.id}>\n {renderSection(node)}\n </React.Fragment>\n );\n }\n const el = renderItem(node as SideMenuLinkNode | SideMenuGroupNode);\n if (\n collapsed &&\n showTooltipsWhenCollapsed &&\n node.type === \"link\"\n ) {\n return (\n <div key={node.id} className=\"kz-sidemenu-tooltip-wrapper\">\n {wrapWithTooltip(el, node.label)}\n </div>\n );\n }\n return <React.Fragment key={node.id}>{el}</React.Fragment>;\n })}\n </div>\n </div>\n );\n\n return (\n <TooltipPrimitive.Provider delayDuration={300}>\n <div\n style={{\n ...widthStyle,\n flexShrink: 0,\n position: \"relative\",\n height: \"100%\",\n transition: \"width 0.25s ease\",\n }}\n >\n <aside\n ref={ref}\n className={cn(\n \"kz-sidemenu\",\n collapsed && \"kz-sidemenu--collapsed\",\n className\n )}\n style={{ width: \"100%\", height: \"100%\" }}\n >\n {header && (\n <div className=\"kz-sidemenu-top\">\n <div\n className=\"kz-sidemenu-header\"\n style={\n headerWidth !== undefined\n ? typeof headerWidth === \"number\"\n ? { width: `${headerWidth}px` }\n : { width: headerWidth }\n : undefined\n }\n >\n {header}\n </div>\n </div>\n )}\n <nav className=\"kz-sidemenu-nav\" style={gapStyle}>\n {data.map((node) => {\n if (node.type === \"section\") {\n return (\n <React.Fragment key={node.id}>\n {renderSection(node)}\n </React.Fragment>\n );\n }\n const el = renderItem(\n node as SideMenuLinkNode | SideMenuGroupNode\n );\n if (\n collapsed &&\n showTooltipsWhenCollapsed &&\n node.type === \"link\"\n ) {\n return (\n <div key={node.id} className=\"kz-sidemenu-tooltip-wrapper\">\n {wrapWithTooltip(el, node.label)}\n </div>\n );\n }\n return <React.Fragment key={node.id}>{el}</React.Fragment>;\n })}\n </nav>\n {footer && <div className=\"kz-sidemenu-footer\">{footer}</div>}\n </aside>\n {collapsible && (\n <div className=\"kz-sidemenu-collapse-btn-wrap kz-sidemenu-collapse-btn-wrap--outer\">\n <button\n type=\"button\"\n className=\"kz-sidemenu-collapse-btn\"\n onClick={() => setCollapsed(!collapsed)}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n <ChevronDown\n size={16}\n style={{\n transform: collapsed ? \"rotate(-90deg)\" : \"rotate(90deg)\",\n }}\n aria-hidden\n />\n </button>\n </div>\n )}\n </div>\n </TooltipPrimitive.Provider>\n );\n }\n);\n\nSideMenu.displayName = \"SideMenu\";\n\nexport { SideMenu };\nexport type {\n SideMenuProps,\n SideMenuNode,\n SideMenuSectionNode,\n SideMenuLinkNode,\n SideMenuGroupNode,\n SideMenuGroupItem,\n SideMenuGroupItemSubItem,\n SideMenuNavigatePayload,\n SideMenuFlyoutSide,\n} from \"./sidemenu-types\";\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TooltipSize,\n TooltipPosition,\n TooltipAlign,\n TooltipColor,\n} from \"../../constants/enum\";\n\nconst SIDE_MAP: Record<TooltipPosition, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n [TooltipPosition.Top]: \"top\",\n [TooltipPosition.Right]: \"right\",\n [TooltipPosition.Bottom]: \"bottom\",\n [TooltipPosition.Left]: \"left\",\n};\n\nconst ALIGN_MAP: Record<TooltipAlign, \"start\" | \"center\" | \"end\"> = {\n [TooltipAlign.Start]: \"start\",\n [TooltipAlign.Center]: \"center\",\n [TooltipAlign.End]: \"end\",\n};\n\nexport interface TooltipProps {\n /** Tooltip content (text or ReactNode). */\n content: React.ReactNode;\n /** Trigger element(s). */\n children: React.ReactNode;\n /** Size: sm, md, lg. */\n size?: TooltipSize;\n /** Position (side) of the tooltip relative to trigger. */\n position?: TooltipPosition;\n /** Alignment along the cross axis. */\n align?: TooltipAlign;\n /** Color variant: default, inverse, success, warning, error. */\n color?: TooltipColor;\n /** Optional icon shown before content. */\n icon?: React.ReactNode;\n /** Delay in ms before showing (default from provider). */\n delayDuration?: number;\n /** Skip delay when closing. */\n skipDelayDuration?: number;\n /** Additional class for the content container. */\n className?: string;\n}\n\nconst Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n content,\n children,\n size = TooltipSize.Md,\n position = TooltipPosition.Top,\n align = TooltipAlign.Center,\n color = TooltipColor.Default,\n icon,\n delayDuration = 300,\n skipDelayDuration = 0,\n className,\n },\n ref\n ) => {\n return (\n <TooltipPrimitive.Provider\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n >\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n {children}\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n side={SIDE_MAP[position]}\n align={ALIGN_MAP[align]}\n sideOffset={6}\n avoidCollisions\n className={cn(\n \"kz-tooltip-content\",\n `kz-tooltip-content--size-${size}`,\n `kz-tooltip-content--color-${color}`,\n className\n )}\n data-size={size}\n data-color={color}\n >\n {icon != null ? (\n <span className=\"kz-tooltip-content-inner\">\n <span className=\"kz-tooltip-icon\" aria-hidden>\n {icon}\n </span>\n <span className=\"kz-tooltip-text\">{content}</span>\n </span>\n ) : (\n content\n )}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n }\n);\n\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip, TooltipSize, TooltipPosition, TooltipAlign, TooltipColor };\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport type TabsVariant = \"pill\" | \"underline\";\nexport type TabsOrientation = \"horizontal\" | \"vertical\";\nexport type TabsSize = \"sm\" | \"md\" | \"lg\";\n\ninterface TabsContextValue {\n variant: TabsVariant;\n orientation: TabsOrientation;\n size: TabsSize;\n fullWidth: boolean;\n onValueChange?: (value: string) => void;\n}\n\nconst TabsContext = React.createContext<TabsContextValue>({\n variant: \"pill\",\n orientation: \"horizontal\",\n size: \"md\",\n fullWidth: false,\n});\n\nfunction useTabsContext(): TabsContextValue {\n return React.useContext(TabsContext);\n}\n\nexport interface TabsProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.Root\n> {\n variant?: TabsVariant;\n orientation?: TabsOrientation;\n size?: TabsSize;\n fullWidth?: boolean;\n className?: string;\n}\n\nconst Tabs = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Root>,\n TabsProps\n>(\n (\n {\n variant = \"pill\",\n orientation = \"horizontal\",\n size = \"md\",\n fullWidth = false,\n className,\n onValueChange,\n ...props\n },\n ref\n ) => {\n const ctx: TabsContextValue = React.useMemo(\n () => ({ variant, orientation, size, fullWidth, onValueChange }),\n [variant, orientation, size, fullWidth, onValueChange]\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n ref={ref}\n activationMode=\"manual\"\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n data-tabs-full-width={fullWidth ? \"\" : undefined}\n className={cn(\"kz-tabs\", className)}\n onValueChange={onValueChange}\n {...props}\n />\n </TabsContext.Provider>\n );\n }\n);\nTabs.displayName = TabsPrimitive.Root.displayName;\n\nexport interface TabsListProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.List\n> {\n className?: string;\n}\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, ...props }, ref) => {\n const { variant, orientation, size, fullWidth } = useTabsContext();\n const listRef = React.useRef<HTMLDivElement>(null);\n\n // Override Radix's roving tabindex so Tab key moves between triggers.\n // Radix sets tabIndex={-1} on inactive triggers; we force them all to 0.\n React.useEffect(() => {\n const node = listRef.current;\n if (!node) return;\n\n const forceTabIndex = () => {\n node.querySelectorAll<HTMLElement>('[role=\"tab\"]').forEach((el) => {\n if (el.getAttribute(\"tabindex\") !== \"0\") {\n el.setAttribute(\"tabindex\", \"0\");\n }\n });\n };\n\n forceTabIndex();\n\n const observer = new MutationObserver(forceTabIndex);\n observer.observe(node, {\n attributes: true,\n attributeFilter: [\"tabindex\"],\n subtree: true,\n });\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <TabsPrimitive.List\n ref={(node) => {\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n data-tabs-full-width={fullWidth ? \"\" : undefined}\n className={cn(\"kz-tabs-list\", className)}\n {...props}\n />\n );\n});\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nexport interface TabsTriggerProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.Trigger\n> {\n icon?: React.ReactNode;\n className?: string;\n}\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, icon, children, ...props }, ref) => {\n const { variant, orientation, size } = useTabsContext();\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n className={cn(\"kz-tabs-trigger\", className)}\n {...props}\n >\n {icon != null ? (\n <span className=\"kz-tabs-trigger-icon\" aria-hidden>\n {icon}\n </span>\n ) : null}\n {children}\n </TabsPrimitive.Trigger>\n );\n});\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nexport interface TabsContentProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.Content\n> {\n className?: string;\n}\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n TabsContentProps\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n tabIndex={-1}\n className={cn(\"kz-tabs-content\", className)}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\n/* ── SubTabsTrigger ── */\n\nexport interface SubTabOption {\n value: string;\n label: string;\n}\n\nexport interface SubTabsTriggerProps {\n label: string;\n subTabs: SubTabOption[];\n activeValue?: string;\n className?: string;\n}\n\nconst SubTabsTrigger = React.forwardRef<HTMLButtonElement, SubTabsTriggerProps>(\n ({ label, subTabs, activeValue, className }, ref) => {\n const { variant, orientation, size, onValueChange } = useTabsContext();\n const isActive = subTabs.some((st) => st.value === activeValue);\n\n const [open, setOpen] = React.useState(false);\n const btnRef = React.useRef<HTMLButtonElement>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n\n // Merge refs\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n (btnRef as React.MutableRefObject<HTMLButtonElement | null>).current =\n node;\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n node;\n },\n [ref]\n );\n\n // Position menu relative to button, close on scroll\n const [menuStyle, setMenuStyle] = React.useState<React.CSSProperties>({});\n\n const updatePosition = React.useCallback(() => {\n if (!btnRef.current) return;\n const rect = btnRef.current.getBoundingClientRect();\n setMenuStyle({\n position: \"fixed\",\n top: rect.bottom + 4,\n left: rect.left,\n minWidth: rect.width,\n });\n }, []);\n\n React.useEffect(() => {\n if (!open) return;\n updatePosition();\n\n // Close on scroll so the menu doesn't float in wrong position\n const closeOnScroll = () => setOpen(false);\n window.addEventListener(\"scroll\", closeOnScroll, { capture: true });\n return () =>\n window.removeEventListener(\"scroll\", closeOnScroll, {\n capture: true,\n } as EventListenerOptions);\n }, [open, updatePosition]);\n\n // Close on outside click or Escape\n React.useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n btnRef.current?.contains(target) ||\n menuRef.current?.contains(target)\n )\n return;\n setOpen(false);\n };\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n btnRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [open]);\n\n const handleSelect = (value: string) => {\n onValueChange?.(value);\n setOpen(false);\n btnRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n if (e.key === \"ArrowDown\" && open && menuRef.current) {\n e.preventDefault();\n const first = menuRef.current.querySelector<HTMLElement>(\n \".kz-tabs-subtrigger-option\"\n );\n first?.focus();\n }\n };\n\n const handleOptionKeyDown = (\n e: React.KeyboardEvent,\n value: string,\n index: number\n ) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSelect(value);\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = menuRef.current?.querySelectorAll<HTMLElement>(\n \".kz-tabs-subtrigger-option\"\n )[index + 1];\n next?.focus();\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (index === 0) {\n btnRef.current?.focus();\n } else {\n const prev = menuRef.current?.querySelectorAll<HTMLElement>(\n \".kz-tabs-subtrigger-option\"\n )[index - 1];\n prev?.focus();\n }\n }\n if (e.key === \"Escape\") {\n setOpen(false);\n btnRef.current?.focus();\n }\n };\n\n return (\n <>\n <button\n ref={mergedRef}\n type=\"button\"\n className={cn(\"kz-tabs-subtrigger-group\", className)}\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n data-state={isActive ? \"active\" : \"inactive\"}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((prev) => !prev)}\n onKeyDown={handleKeyDown}\n >\n <span className=\"kz-tabs-subtrigger-label\">{label}</span>\n <span\n className=\"kz-tabs-subtrigger-chevron\"\n data-open={open ? \"\" : undefined}\n >\n <Icon name={IconName.ChevronDown} size={14} color=\"currentColor\" />\n </span>\n </button>\n\n {open &&\n ReactDOM.createPortal(\n <div\n ref={menuRef}\n className=\"kz-tabs-subtrigger-menu\"\n role=\"listbox\"\n style={menuStyle}\n >\n {subTabs.map((st, i) => (\n <div\n key={st.value}\n className={cn(\n \"kz-tabs-subtrigger-option\",\n st.value === activeValue &&\n \"kz-tabs-subtrigger-option--active\"\n )}\n role=\"option\"\n tabIndex={0}\n aria-selected={st.value === activeValue}\n onClick={(e) => {\n e.stopPropagation();\n handleSelect(st.value);\n }}\n onKeyDown={(e) => handleOptionKeyDown(e, st.value, i)}\n >\n {st.label}\n </div>\n ))}\n </div>,\n document.body\n )}\n </>\n );\n }\n);\nSubTabsTrigger.displayName = \"SubTabsTrigger\";\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, SubTabsTrigger };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Checkbox, CheckboxSize, CheckboxVariant } from \"../checkbox\";\nimport { TextInput, TextInputSize, TextInputVariant } from \"../text-input\";\nimport { Button, ButtonVariant, ButtonSize, ButtonStatus } from \"../button\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Pagination } from \"../pagination\";\nimport type {\n TableProps,\n TableColumn,\n TableCellChange,\n SortDirection,\n} from \"./Table.types\";\n\nfunction nextSortDirection(current: SortDirection): SortDirection {\n if (current === null) return \"asc\";\n if (current === \"asc\") return \"desc\";\n return null;\n}\n\nfunction getCellContent<TData, TEditValue = string>(\n row: TData,\n column: TableColumn<TData, TEditValue>\n): React.ReactNode {\n if (column.cell) return column.cell(row);\n if (column.accessor) return column.accessor(row);\n return null;\n}\n\nfunction TableInner<TData, TEditValue = string>(\n {\n data,\n columns,\n size = \"md\",\n horizontalScroll = false,\n stickyColumns = false,\n stickyHeader = false,\n maxHeight,\n getRowSticky,\n getRowClassName,\n getRowStyle,\n caption,\n header: headerProp,\n title,\n description,\n searchable,\n searchValue = \"\",\n onSearchChange,\n searchPlaceholder = \"Search…\",\n headerRight,\n selectableRows,\n selectedRowIds = {},\n getRowId,\n onRowSelectionChange,\n onToggleRow,\n onToggleAll,\n actions,\n actionsHeader,\n sort = null,\n onSortChange,\n pagination,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50],\n loading,\n emptyState,\n onDeleteSelected,\n editingCell,\n onEditingCellChange,\n onSave,\n onCancel,\n editingCells,\n onEditingCellsChange,\n onSaveAll,\n className,\n tableClassName,\n headerClassName,\n footerClassName,\n containerClassName,\n }: TableProps<TData, TEditValue>,\n ref: React.Ref<HTMLDivElement>\n) {\n const captionId = React.useId();\n const tableId = React.useId();\n\n const allRowIds = React.useMemo(\n () => data.map((row, i) => getRowId(row, i)),\n [data, getRowId]\n );\n\n const visibleColumns = React.useMemo(\n () => columns.filter((col) => !col.hidden),\n [columns]\n );\n\n const selectedCount = React.useMemo(\n () => Object.keys(selectedRowIds).filter((id) => selectedRowIds[id]).length,\n [selectedRowIds]\n );\n const allSelected =\n allRowIds.length > 0 && selectedCount === allRowIds.length;\n const someSelected = selectedCount > 0;\n\n const handleToggleAll = React.useCallback(\n (checked: boolean) => {\n if (onToggleAll) {\n onToggleAll(checked, allRowIds);\n return;\n }\n if (onRowSelectionChange) {\n const next: Record<string, boolean> = {};\n allRowIds.forEach((id) => (next[id] = checked));\n onRowSelectionChange(next);\n }\n },\n [allRowIds, onToggleAll, onRowSelectionChange]\n );\n\n const handleToggleRow = React.useCallback(\n (rowId: string, checked: boolean) => {\n if (onToggleRow) {\n onToggleRow(rowId, checked);\n return;\n }\n if (onRowSelectionChange) {\n const next = { ...selectedRowIds, [rowId]: checked };\n onRowSelectionChange(next);\n }\n },\n [selectedRowIds, onToggleRow, onRowSelectionChange]\n );\n\n const handleSortClick = React.useCallback(\n (key: string) => {\n if (!onSortChange) return;\n const currentDir = sort?.key === key ? sort.direction : null;\n const nextDir = nextSortDirection(currentDir ?? null);\n onSortChange({ key, direction: nextDir });\n },\n [sort, onSortChange]\n );\n\n const hasPagination = pagination != null && onPageChange != null;\n\n /* ── Inline cell editing ── */\n\n // Detect which mode we're in: multi-cell takes precedence\n const isMultiCellMode = editingCells != null;\n\n // --- Single-cell draft (legacy) ---\n const [draftValue, setDraftValue] = React.useState<TEditValue | null>(null);\n\n React.useEffect(() => {\n if (isMultiCellMode) return; // skip in multi-cell mode\n if (editingCell == null) {\n setDraftValue(null);\n return;\n }\n const row = data.find((r, i) => getRowId(r, i) === editingCell.rowId);\n if (!row) return;\n const col = columns.find((c) => c.key === editingCell.columnKey);\n if (!col) return;\n\n let val: TEditValue;\n if (col.getEditValue) {\n val = col.getEditValue(row);\n } else if (col.accessor) {\n val = col.accessor(row) as TEditValue;\n } else {\n val = \"\" as TEditValue;\n }\n setDraftValue(val ?? (\"\" as TEditValue));\n }, [editingCell, data, columns, getRowId, isMultiCellMode]);\n\n // --- Multi-cell drafts ---\n // Map: rowId → columnKey → draft value\n const [draftValues, setDraftValues] = React.useState<\n Record<string, Record<string, TEditValue>>\n >({});\n\n /** Seed a draft value for a cell when it enters edit mode (multi-cell). */\n const seedDraft = React.useCallback(\n (rowId: string, columnKey: string) => {\n const row = data.find((r, i) => getRowId(r, i) === rowId);\n if (!row) return;\n const col = columns.find((c) => c.key === columnKey);\n if (!col) return;\n\n let val: TEditValue;\n if (col.getEditValue) {\n val = col.getEditValue(row);\n } else if (col.accessor) {\n val = col.accessor(row) as TEditValue;\n } else {\n val = \"\" as TEditValue;\n }\n\n setDraftValues((prev) => ({\n ...prev,\n [rowId]: { ...prev[rowId], [columnKey]: val ?? (\"\" as TEditValue) },\n }));\n },\n [data, columns, getRowId]\n );\n\n const handleEditCellClick = React.useCallback(\n (rowId: string, columnKey: string) => {\n if (isMultiCellMode) {\n // Add to the editing set\n const next = {\n ...editingCells,\n [rowId]: { ...editingCells[rowId], [columnKey]: true },\n };\n onEditingCellsChange?.(next);\n seedDraft(rowId, columnKey);\n } else {\n onEditingCellChange?.({ rowId, columnKey });\n }\n },\n [\n isMultiCellMode,\n editingCells,\n onEditingCellsChange,\n onEditingCellChange,\n seedDraft,\n ]\n );\n\n const handleCellSave = React.useCallback(() => {\n if (isMultiCellMode) {\n // Collect all changes\n const changes: TableCellChange<TEditValue>[] = [];\n for (const rowId of Object.keys(draftValues)) {\n for (const columnKey of Object.keys(draftValues[rowId])) {\n changes.push({\n rowId,\n columnKey,\n value: draftValues[rowId][columnKey],\n });\n }\n }\n onSaveAll?.(changes);\n onEditingCellsChange?.({});\n setDraftValues({});\n } else {\n if (editingCell != null && draftValue != null) {\n onSave?.(editingCell.rowId, editingCell.columnKey, draftValue);\n onEditingCellChange?.(null);\n }\n }\n }, [\n isMultiCellMode,\n draftValues,\n onSaveAll,\n onEditingCellsChange,\n editingCell,\n draftValue,\n onSave,\n onEditingCellChange,\n ]);\n\n const handleCellCancel = React.useCallback(() => {\n if (isMultiCellMode) {\n onEditingCellsChange?.({});\n setDraftValues({});\n } else {\n onEditingCellChange?.(null);\n }\n onCancel?.();\n }, [isMultiCellMode, onEditingCellsChange, onEditingCellChange, onCancel]);\n\n const handleDeleteSelected = React.useCallback(() => {\n if (!onDeleteSelected) return;\n const ids = Object.keys(selectedRowIds).filter((id) => selectedRowIds[id]);\n if (ids.length > 0) onDeleteSelected(ids);\n }, [selectedRowIds, onDeleteSelected]);\n\n const defaultHeader = (\n <div\n className={cn(\n \"flex flex-wrap items-center justify-between gap-3 w-full m-[kz-space-4]\",\n headerClassName\n )}\n >\n <div className=\"flex flex-col gap-0.5 min-w-0\">\n {title != null && (\n <span className=\"text-base font-medium text-[var(--kz-color-text-primary)]\">\n {title}\n </span>\n )}\n {description != null && (\n <span className=\"text-sm text-[var(--kz-color-text-secondary)]\">\n {description}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2 flex-1 justify-end min-w-0\">\n {searchable && (\n <div className=\"w-full max-w-xs\">\n <TextInput\n label=\"\"\n value={searchValue}\n onValueChange={(v) => onSearchChange?.(v)}\n placeHolder={searchPlaceholder}\n size={TextInputSize.Sm}\n variant={TextInputVariant.Default}\n />\n </div>\n )}\n {headerRight != null && <div className=\"shrink-0\">{headerRight}</div>}\n </div>\n </div>\n );\n\n const sizeClasses = {\n sm: \"py-1.5 px-2 text-xs\",\n md: \"py-2 px-3 text-sm\",\n lg: \"py-3 px-4 text-base\",\n };\n const sizeClass = sizeClasses[size];\n\n const alignClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n\n const hasHeader =\n headerProp != null ||\n title != null ||\n description != null ||\n searchable ||\n headerRight != null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-table-root kz-table-surface flex flex-col w-full min-w-0 overflow-hidden rounded-[var(--kz-radius-md)] bg-[var(--kz-component-table-surface)] border border-[var(--kz-color-border-default)]\",\n className,\n containerClassName\n )}\n >\n {hasHeader && (\n <div\n className={cn(\n \"kz-table-header border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)] px-[var(--kz-space-6)] py-[var(--kz-space-4)]\",\n headerClassName\n )}\n >\n {headerProp != null ? headerProp : defaultHeader}\n </div>\n )}\n <div\n className={cn(\n \"kz-table-scroll overflow-auto flex-1\",\n stickyHeader && !maxHeight && \"max-h-full\"\n )}\n style={maxHeight ? { maxHeight } : undefined}\n >\n <table\n id={tableId}\n aria-describedby={caption ? captionId : undefined}\n className={cn(\n \"border-separate border-spacing-0 bg-[var(--kz-component-table-surface)]\",\n horizontalScroll ? \"min-w-full w-max\" : \"w-full\",\n tableClassName\n )}\n >\n {caption && (\n <caption id={captionId} className=\"sr-only\">\n {caption}\n </caption>\n )}\n <thead>\n <tr>\n {selectableRows && (\n <th\n scope=\"col\"\n className={cn(\n \"kz-table-th w-[var(--kz-space-10)] border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)]\",\n sizeClass,\n stickyHeader &&\n \"sticky top-0 z-10 bg-[var(--kz-component-table-header-bg)]\",\n stickyColumns &&\n horizontalScroll &&\n \"sticky left-0 z-20 bg-[var(--kz-component-table-header-bg)]\"\n )}\n style={{ width: \"var(--kz-space-10)\" }}\n >\n <Checkbox\n size={CheckboxSize.Sm}\n variant={CheckboxVariant.Default}\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onCheckedChange={(checked) => handleToggleAll(!!checked)}\n aria-label=\"Toggle all rows\"\n />\n </th>\n )}\n {visibleColumns.map((col) => {\n const thStyle: React.CSSProperties = {\n ...col.headerStyle,\n };\n if (col.width) thStyle.width = col.width;\n if (col.minWidth) thStyle.minWidth = col.minWidth;\n if (col.maxWidth) thStyle.maxWidth = col.maxWidth;\n const align = col.align ?? \"left\";\n const isSortable = col.sortable && onSortChange != null;\n const isActive = sort?.key === col.key;\n const ariaSort: \"ascending\" | \"descending\" | \"none\" =\n isActive && sort?.direction === \"asc\"\n ? \"ascending\"\n : isActive && sort?.direction === \"desc\"\n ? \"descending\"\n : \"none\";\n return (\n <th\n key={col.key}\n scope=\"col\"\n aria-sort={isSortable ? ariaSort : undefined}\n className={cn(\n \"kz-table-th border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)]\",\n sizeClass,\n alignClasses[align],\n stickyHeader &&\n \"sticky top-0 z-10 bg-[var(--kz-component-table-header-bg)]\",\n col.headerClassName\n )}\n style={thStyle}\n >\n {isSortable ? (\n <button\n type=\"button\"\n onClick={() => handleSortClick(col.key)}\n className=\"inline-flex items-center gap-1 w-full text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--kz-color-border-focus)] rounded-[var(--kz-radius-sm)]\"\n >\n {col.header}\n <span\n className=\"inline-flex text-[var(--kz-color-text-muted)]\"\n aria-hidden\n >\n {isActive && sort?.direction === \"asc\" && (\n <Icon\n name={IconName.ArrowUp}\n size=\"sm\"\n color=\"currentColor\"\n />\n )}\n {isActive && sort?.direction === \"desc\" && (\n <Icon\n name={IconName.ArrowDown}\n size=\"sm\"\n color=\"currentColor\"\n />\n )}\n {!isActive && (\n <Icon\n name={IconName.ArrowUpDown}\n size=\"sm\"\n color=\"currentColor\"\n />\n )}\n </span>\n </button>\n ) : (\n col.header\n )}\n </th>\n );\n })}\n {actions && (\n <th\n scope=\"col\"\n className={cn(\n \"kz-table-th text-right w-[var(--kz-space-24)] border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)]\",\n sizeClass,\n stickyHeader &&\n \"sticky top-0 z-10 bg-[var(--kz-component-table-header-bg)]\",\n stickyColumns &&\n horizontalScroll &&\n \"sticky right-0 z-20 bg-[var(--kz-component-table-header-bg)]\"\n )}\n >\n {actionsHeader ?? \"\"}\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {loading ? (\n <tr>\n <td\n colSpan={\n visibleColumns.length +\n (selectableRows ? 1 : 0) +\n (actions ? 1 : 0)\n }\n className={cn(\n \"kz-table-td text-center text-[var(--kz-color-text-muted)]\",\n sizeClass\n )}\n >\n Loading…\n </td>\n </tr>\n ) : data.length === 0 ? (\n <tr>\n <td\n colSpan={\n visibleColumns.length +\n (selectableRows ? 1 : 0) +\n (actions ? 1 : 0)\n }\n className={cn(\n \"kz-table-td text-center text-[var(--kz-color-text-muted)]\",\n sizeClass\n )}\n >\n {emptyState ?? \"No data\"}\n </td>\n </tr>\n ) : (\n data.map((row, index) => {\n const rowId = getRowId(row, index);\n const isSelected = !!selectedRowIds[rowId];\n const isSticky = getRowSticky?.(row, index) ?? false;\n const hasEditingCell = isMultiCellMode\n ? editingCells[rowId] != null &&\n Object.keys(editingCells[rowId]).some(\n (k) => editingCells[rowId][k]\n )\n : editingCell != null && editingCell.rowId === rowId;\n return (\n <tr\n key={rowId}\n className={cn(\n \"kz-table-tr border-b border-[var(--kz-component-table-row-border)] last:border-b-0 hover:bg-[var(--kz-component-table-row-hover-bg)] transition-colors duration-[var(--kz-motion-duration-normal)]\",\n isSticky && \"kz-table-tr--sticky\",\n hasEditingCell && \"kz-table-tr--editing\",\n getRowClassName?.(row, index)\n )}\n style={getRowStyle?.(row, index)}\n >\n {selectableRows && (\n <td\n className={cn(\n \"kz-table-td\",\n sizeClass,\n stickyColumns &&\n horizontalScroll &&\n \"sticky left-0 z-10 bg-[var(--kz-component-table-surface)]\"\n )}\n >\n <Checkbox\n size={CheckboxSize.Sm}\n variant={CheckboxVariant.Default}\n checked={isSelected}\n onCheckedChange={(checked) =>\n handleToggleRow(rowId, !!checked)\n }\n aria-label={`Select row ${rowId}`}\n />\n </td>\n )}\n {visibleColumns.map((col) => {\n const tdStyle: React.CSSProperties = {\n ...col.cellStyle,\n };\n if (col.width) tdStyle.width = col.width;\n if (col.minWidth) tdStyle.minWidth = col.minWidth;\n if (col.maxWidth) tdStyle.maxWidth = col.maxWidth;\n const align = col.align ?? \"left\";\n const isCellEditing = isMultiCellMode\n ? !!editingCells[rowId]?.[col.key]\n : editingCell != null &&\n editingCell.rowId === rowId &&\n editingCell.columnKey === col.key;\n\n if (isCellEditing) {\n // In multi-cell mode read/write from draftValues map;\n // in single-cell mode use draftValue.\n const cellDraft = isMultiCellMode\n ? (draftValues[rowId]?.[col.key] ??\n (\"\" as TEditValue))\n : (draftValue ?? (\"\" as TEditValue));\n\n const onChange = (v: TEditValue) => {\n if (isMultiCellMode) {\n setDraftValues((prev) => ({\n ...prev,\n [rowId]: { ...prev[rowId], [col.key]: v },\n }));\n } else {\n setDraftValue(v);\n }\n };\n\n return (\n <td\n key={col.key}\n className={cn(\n \"kz-table-td text-[var(--kz-color-text-primary)]\",\n sizeClass,\n alignClasses[align],\n col.cellClassName\n )}\n style={tdStyle}\n >\n {col.editCell ? (\n col.editCell(row, cellDraft, onChange)\n ) : (\n <TextInput\n label=\"\"\n placeHolder=\"\"\n value={String(cellDraft ?? \"\")}\n onValueChange={(v) => onChange(v as TEditValue)}\n size={TextInputSize.Sm}\n variant={TextInputVariant.Default}\n />\n )}\n </td>\n );\n }\n\n return (\n <td\n key={col.key}\n className={cn(\n \"kz-table-td text-[var(--kz-color-text-primary)]\",\n sizeClass,\n alignClasses[align],\n col.editable && \"kz-table-td--editable\",\n col.cellClassName\n )}\n style={tdStyle}\n >\n {getCellContent(row, col)}\n {col.editable && (\n <button\n type=\"button\"\n className=\"kz-table-cell-edit-icon\"\n aria-label={`Edit ${col.header}`}\n onClick={() =>\n handleEditCellClick(rowId, col.key)\n }\n >\n <Icon\n name={IconName.Pencil}\n size={14}\n color=\"currentColor\"\n />\n </button>\n )}\n </td>\n );\n })}\n {actions && (\n <td\n className={cn(\n \"kz-table-td text-right\",\n sizeClass,\n stickyColumns &&\n horizontalScroll &&\n \"sticky right-0 z-10 bg-[var(--kz-component-table-surface)]\"\n )}\n >\n {actions(row)}\n </td>\n )}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n {(hasPagination ||\n (someSelected && onDeleteSelected) ||\n editingCell != null ||\n (isMultiCellMode &&\n Object.keys(editingCells).some((rid) =>\n Object.values(editingCells[rid]).some(Boolean)\n ))) && (\n <div\n className={cn(\n \"kz-table-footer flex items-center border-t border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-footer-bg)] px-[var(--kz-space-6)] py-[var(--kz-space-4)]\",\n footerClassName\n )}\n >\n {/* Left: delete selected */}\n <div className=\"flex items-center gap-[var(--kz-space-2)] shrink-0\">\n {someSelected && onDeleteSelected && (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={handleDeleteSelected}\n className=\"text-[var(--kz-color-error)] hover:text-[var(--kz-color-error)] hover:bg-[var(--kz-color-error-subtle)]\"\n aria-label=\"Delete selected rows\"\n >\n <Icon\n name={IconName.Trash2}\n size={14}\n color=\"currentColor\"\n aria-hidden\n />\n <span className=\"ml-1\">Delete ({selectedCount})</span>\n </Button>\n )}\n </div>\n {/* Center: pagination */}\n {hasPagination ? (\n <div className=\"flex-1 min-w-0\">\n <Pagination\n page={pagination.page}\n total={pagination.total}\n pageSize={pagination.pageSize}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n pageSizeOptions={pageSizeOptions}\n />\n </div>\n ) : (\n <div className=\"flex-1\" />\n )}\n {/* Right: save / cancel */}\n <div className=\"flex items-center gap-[var(--kz-space-2)] shrink-0 ml-[var(--kz-space-3)]\">\n {(editingCell != null ||\n (isMultiCellMode &&\n Object.keys(editingCells).some((rid) =>\n Object.values(editingCells[rid]).some(Boolean)\n ))) && (\n <>\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleCellCancel}\n >\n Cancel\n </Button>\n <Button\n variant={ButtonVariant.Primary}\n status={ButtonStatus.Success}\n size={ButtonSize.Sm}\n onClick={handleCellSave}\n >\n Save\n </Button>\n </>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nconst Table = React.forwardRef(TableInner) as <TData, TEditValue = string>(\n props: TableProps<TData, TEditValue> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement;\n\nexport { Table };\nexport type {\n TableProps,\n TableColumn,\n TableSortState,\n TablePaginationState,\n} from \"./Table.types\";\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\nimport { DropdownButton } from \"../dropdown\";\nimport type { DropdownButtonItem } from \"../dropdown\";\nimport type { PaginationProps } from \"./Pagination.types\";\n\nfunction buildPageRange(page: number, pageSize: number, total: number) {\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const delta = 2;\n let start = Math.max(1, page - delta);\n let end = Math.min(totalPages, page + delta);\n if (end - start < 2 * delta) {\n if (start === 1) end = Math.min(totalPages, start + 2 * delta);\n else end = Math.min(totalPages, end);\n start = Math.max(1, end - 2 * delta);\n }\n const pages: (number | \"ellipsis\")[] = [];\n if (start > 1) {\n pages.push(1);\n if (start > 2) pages.push(\"ellipsis\");\n }\n for (let p = start; p <= end; p++) pages.push(p);\n if (end < totalPages) {\n if (end < totalPages - 1) pages.push(\"ellipsis\");\n pages.push(totalPages);\n }\n return {\n pages,\n totalPages,\n startItem: (page - 1) * pageSize + 1,\n endItem: Math.min(page * pageSize, total),\n };\n}\n\nconst Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n page,\n total,\n pageSize,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50],\n showItemRange = true,\n className,\n },\n ref\n ) => {\n const range = React.useMemo(\n () => buildPageRange(page, pageSize, total),\n [page, pageSize, total]\n );\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn(\n \"kz-pagination flex flex-wrap items-center justify-center gap-3\",\n className\n )}\n >\n {showItemRange && total > 0 && (\n <div className=\"kz-pagination-range text-sm text-[var(--kz-color-text-secondary)]\">\n {range.totalPages <= 1\n ? `${total} items`\n : `${range.startItem}–${range.endItem} of ${total}`}\n </div>\n )}\n\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n className=\"kz-pagination-btn kz-pagination-nav\"\n aria-label=\"Previous page\"\n >\n <Icon\n name={IconName.ChevronLeft}\n size=\"sm\"\n color=\"currentColor\"\n aria-hidden\n />\n </button>\n\n {range.pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span\n key={`e-${i}`}\n className=\"kz-pagination-ellipsis px-2 text-[var(--kz-color-text-muted)]\"\n >\n …\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n data-active={p === page || undefined}\n onClick={() => onPageChange(p)}\n className=\"kz-pagination-btn kz-pagination-page\"\n aria-label={`Page ${p}`}\n aria-current={p === page ? \"page\" : undefined}\n >\n {p}\n </button>\n )\n )}\n\n <button\n type=\"button\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= range.totalPages}\n className=\"kz-pagination-btn kz-pagination-nav\"\n aria-label=\"Next page\"\n >\n <Icon\n name={IconName.ChevronRight}\n size=\"sm\"\n color=\"currentColor\"\n aria-hidden\n />\n </button>\n </div>\n\n {onPageSizeChange && (\n <DropdownButton\n trigger={{\n label: String(pageSize),\n showChevron: true,\n }}\n items={pageSizeOptions.map(\n (n): DropdownButtonItem => ({\n key: String(n),\n label: String(n),\n onSelect: () => onPageSizeChange(n),\n })\n )}\n />\n )}\n </nav>\n );\n }\n);\n\nPagination.displayName = \"Pagination\";\n\nexport { Pagination, buildPageRange };\nexport type { PaginationProps } from \"./Pagination.types\";\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\nimport { DropdownTriggerVariant } from \"../../constants/enum\";\n\nconst Dropdown = DropdownMenuPrimitive.Root;\n\nexport interface DropdownTriggerProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Trigger\n> {\n variant?: DropdownTriggerVariant;\n\n showChevron?: boolean;\n\n startIcon?: React.ReactNode;\n\n endIcon?: React.ReactNode;\n}\n\nconst DropdownTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Trigger>,\n DropdownTriggerProps\n>(\n (\n {\n asChild = false,\n disabled,\n className,\n variant = DropdownTriggerVariant.Default,\n showChevron = true,\n startIcon,\n endIcon,\n children,\n ...props\n },\n ref\n ) => {\n const isGhost = variant === DropdownTriggerVariant.Ghost;\n const triggerContent = asChild ? (\n children\n ) : (\n <>\n {startIcon ? (\n <span className=\"kz-dropdown-trigger-icon-start\">{startIcon}</span>\n ) : null}\n {children}\n {endIcon ? (\n <span className=\"kz-dropdown-trigger-icon-end\">{endIcon}</span>\n ) : null}\n {showChevron ? (\n <Icon\n name={IconName.ChevronDown}\n className=\"kz-dropdown-trigger-chevron\"\n size=\"sm\"\n aria-hidden\n />\n ) : null}\n </>\n );\n\n return (\n <DropdownMenuPrimitive.Trigger\n ref={ref}\n asChild={asChild}\n disabled={disabled}\n className={cn(\n \"kz-dropdown-trigger\",\n isGhost && \"kz-dropdown-trigger-ghost\",\n className\n )}\n {...props}\n >\n {triggerContent}\n </DropdownMenuPrimitive.Trigger>\n );\n }\n);\nDropdownTrigger.displayName = DropdownMenuPrimitive.Trigger.displayName;\n\ninterface DropdownContentProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Content\n> {\n className?: string;\n align?: \"start\" | \"center\" | \"end\";\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n alignOffset?: number;\n avoidCollisions?: boolean;\n}\n\nconst DropdownContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n DropdownContentProps\n>(\n (\n {\n className,\n align = \"center\",\n side = \"bottom\",\n sideOffset = 4,\n alignOffset = 0,\n avoidCollisions = true,\n ...props\n },\n ref\n ) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n className={cn(\"kz-dropdown-content\", className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n);\nDropdownContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\ninterface DropdownItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Item\n> {\n onSelect?: (event: Event) => void;\n disabled?: boolean;\n destructive?: boolean;\n inset?: boolean;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n shortcut?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n DropdownItemProps\n>(\n (\n {\n className,\n onSelect,\n disabled,\n destructive,\n inset,\n startIcon,\n endIcon,\n shortcut,\n children,\n ...props\n },\n ref\n ) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n onSelect={onSelect}\n disabled={disabled}\n className={cn(\n \"kz-dropdown-item\",\n inset && \"kz-dropdown-item-inset\",\n destructive && \"kz-dropdown-item-destructive\",\n className\n )}\n {...props}\n >\n {startIcon ? (\n <span className=\"kz-dropdown-item-icon-start\">{startIcon}</span>\n ) : null}\n <span className=\"kz-dropdown-item-text\">{children}</span>\n {shortcut ? (\n <span className=\"kz-dropdown-item-shortcut\">{shortcut}</span>\n ) : null}\n {endIcon ? (\n <span className=\"kz-dropdown-item-icon-end\">{endIcon}</span>\n ) : null}\n </DropdownMenuPrimitive.Item>\n )\n);\nDropdownItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> & {\n className?: string;\n }\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"kz-dropdown-separator\", className)}\n {...props}\n />\n));\nDropdownSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\ninterface DropdownLabelProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Label\n> {\n inset?: boolean;\n className?: string;\n}\n\nconst DropdownLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n DropdownLabelProps\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"kz-dropdown-label\",\n inset && \"kz-dropdown-label-inset\",\n className\n )}\n {...props}\n />\n));\nDropdownLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\ninterface DropdownCheckboxItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.CheckboxItem\n> {\n checked?: boolean | \"indeterminate\";\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n DropdownCheckboxItemProps\n>(\n (\n { className, checked, onCheckedChange, disabled, children, ...props },\n ref\n ) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n className={cn(\"kz-dropdown-checkbox-item\", className)}\n {...props}\n >\n <DropdownMenuPrimitive.ItemIndicator className=\"kz-dropdown-item-indicator\">\n {checked === \"indeterminate\" ? (\n <span className=\"kz-dropdown-item-indicator-minus\">−</span>\n ) : (\n <Check className=\"kz-dropdown-item-indicator-check\" />\n )}\n </DropdownMenuPrimitive.ItemIndicator>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n);\nDropdownCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownRadioGroup = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioGroup>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioGroup>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioGroup\n ref={ref}\n className={cn(\"kz-dropdown-radio-group\", className)}\n {...props}\n />\n));\nDropdownRadioGroup.displayName = DropdownMenuPrimitive.RadioGroup.displayName;\n\ninterface DropdownRadioItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.RadioItem\n> {\n value: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n DropdownRadioItemProps\n>(({ className, value, disabled, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n value={value}\n disabled={disabled}\n className={cn(\"kz-dropdown-radio-item\", className)}\n {...props}\n >\n <DropdownMenuPrimitive.ItemIndicator className=\"kz-dropdown-item-indicator\">\n <Circle className=\"kz-dropdown-item-indicator-dot\" />\n </DropdownMenuPrimitive.ItemIndicator>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownSub = DropdownMenuPrimitive.Sub;\n\ninterface DropdownSubTriggerProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.SubTrigger\n> {\n inset?: boolean;\n disabled?: boolean;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n DropdownSubTriggerProps\n>(\n (\n { className, inset, disabled, startIcon, endIcon, children, ...props },\n ref\n ) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n disabled={disabled}\n className={cn(\n \"kz-dropdown-sub-trigger\",\n inset && \"kz-dropdown-sub-trigger-inset\",\n className\n )}\n {...props}\n >\n {startIcon ? (\n <span className=\"kz-dropdown-item-icon-start\">{startIcon}</span>\n ) : null}\n <span className=\"kz-dropdown-item-text\">{children}</span>\n {endIcon ?? (\n <ChevronRight className=\"kz-dropdown-sub-trigger-chevron\" aria-hidden />\n )}\n </DropdownMenuPrimitive.SubTrigger>\n )\n);\nDropdownSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\ninterface DropdownSubContentProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.SubContent\n> {\n className?: string;\n sideOffset?: number;\n alignOffset?: number;\n children: React.ReactNode;\n}\n\nconst DropdownSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n DropdownSubContentProps\n>(({ className, sideOffset = 8, alignOffset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className={cn(\"kz-dropdown-sub-content\", className)}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.SubContent>\n));\nDropdownSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nexport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n DropdownLabel,\n DropdownCheckboxItem,\n DropdownRadioGroup,\n DropdownRadioItem,\n DropdownSub,\n DropdownSubTrigger,\n DropdownSubContent,\n};\n","import * as React from \"react\";\nimport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n DropdownLabel,\n DropdownSub,\n DropdownSubTrigger,\n DropdownSubContent,\n} from \"./dropdown\";\nimport { DropdownTriggerVariant } from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport {\n ButtonVariant,\n ButtonSize,\n ButtonAspectRatio,\n} from \"../../constants/enum\";\nimport { Icon, IconName } from \"../../icon\";\nimport type {\n DropdownButtonProps,\n DropdownButtonItem,\n DropdownButtonVariant,\n} from \"./dropdown.types\";\n\nfunction mapVariant(\n v: DropdownButtonVariant | undefined\n): DropdownTriggerVariant {\n return v === \"ghost\"\n ? DropdownTriggerVariant.Ghost\n : DropdownTriggerVariant.Default;\n}\n\nfunction renderItems(items: DropdownButtonItem[]): React.ReactNode {\n return items.map((item) => {\n if (item.type === \"label\") {\n return <DropdownLabel key={item.key}>{item.label}</DropdownLabel>;\n }\n if (item.type === \"separator\") {\n return <DropdownSeparator key={item.key} />;\n }\n if (item.type === \"submenu\") {\n return (\n <DropdownSub key={item.key}>\n <DropdownSubTrigger\n disabled={item.disabled}\n startIcon={item.icon}\n endIcon={item.endIcon}\n >\n {item.label}\n </DropdownSubTrigger>\n <DropdownSubContent>{renderItems(item.items)}</DropdownSubContent>\n </DropdownSub>\n );\n }\n const it = item as Extract<DropdownButtonItem, { type?: \"item\" }>;\n return (\n <DropdownItem\n key={it.key}\n disabled={it.disabled}\n onSelect={() => {\n it.onSelect?.();\n }}\n startIcon={it.icon}\n endIcon={it.endIcon}\n shortcut={it.shortcut}\n >\n {it.label}\n </DropdownItem>\n );\n });\n}\n\nconst DropdownButton: React.FC<DropdownButtonProps> = ({\n trigger,\n items,\n align = \"center\",\n side = \"bottom\",\n sideOffset = 4,\n disabled = false,\n contentClassName,\n}) => {\n const triggerVariant = mapVariant(trigger.variant);\n const showChevron = trigger.showChevron !== false;\n const iconOnly = trigger.iconOnly === true;\n const triggerContent = iconOnly ? (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n aspectRatio={ButtonAspectRatio.Square}\n aria-label={trigger.ariaLabel ?? \"Actions\"}\n >\n <Icon\n name={IconName.EllipsisVertical}\n size=\"sm\"\n color=\"currentColor\"\n aria-hidden\n />\n </Button>\n ) : trigger.icon != null ? (\n <>\n {trigger.icon}\n {trigger.label != null ? trigger.label : null}\n </>\n ) : (\n trigger.label\n );\n\n return (\n <Dropdown>\n <DropdownTrigger\n variant={triggerVariant}\n showChevron={!iconOnly && showChevron}\n disabled={disabled}\n className={trigger.className}\n asChild={iconOnly}\n >\n {triggerContent}\n </DropdownTrigger>\n <DropdownContent\n align={align}\n side={side}\n sideOffset={sideOffset}\n className={contentClassName}\n >\n {renderItems(items)}\n </DropdownContent>\n </Dropdown>\n );\n};\n\nDropdownButton.displayName = \"DropdownButton\";\n\nexport { DropdownButton };\n","import * as React from \"react\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { cn } from \"../../utils/cn\";\n\nconst Dialog: typeof RadixDialog.Root = RadixDialog.Root;\nconst DialogTrigger: typeof RadixDialog.Trigger = RadixDialog.Trigger;\nconst DialogPortal = RadixDialog.Portal;\nconst DialogClose: typeof RadixDialog.Close = RadixDialog.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Overlay>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Overlay>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 transition-opacity data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = RadixDialog.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Content>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <RadixDialog.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-lg transition-opacity duration-200 data-[state=closed]:opacity-0 data-[state=open]:opacity-100 sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n </RadixDialog.Content>\n </DialogPortal>\n));\nDialogContent.displayName = RadixDialog.Content.displayName;\n\nconst DialogHeader = (props: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n props.className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = (props: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n props.className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Title>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = RadixDialog.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Description>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = RadixDialog.Description.displayName;\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n};\n","\"use client\";\n\nimport React, { useLayoutEffect } from \"react\";\nimport type { TokenOverrides } from \"../tokens/apply/applyTokenOverrides\";\nimport {\n applyTokenOverrides,\n clearTokenOverrides,\n} from \"../tokens/apply/applyTokenOverrides\";\nimport { KezelVariant, KezelMode, OverrideMode } from \"../constants/enum\";\n\nexport { KezelVariant, KezelMode, OverrideMode } from \"../constants/enum\";\n\nexport interface KezelThemeProviderProps {\n children: React.ReactNode;\n variant?: KezelVariant;\n mode?: KezelMode;\n\n /** Overrides applied to all variant+mode combinations */\n tokens?: TokenOverrides;\n\n /** Overrides applied only in light mode */\n lightTokens?: TokenOverrides;\n /** Overrides applied only in dark mode */\n darkTokens?: TokenOverrides;\n\n /** Overrides applied only when variant is standard */\n standardTokens?: TokenOverrides;\n /** Overrides applied only when variant is neumorphic */\n neumorphicTokens?: TokenOverrides;\n\n /**\n * Overrides scoped to a specific variant+mode pair.\n * e.g. { \"standard.dark\": { \"color.surface.base\": \"#111\" } }\n */\n variantModeTokens?: Partial<\n Record<`${KezelVariant}.${KezelMode}`, TokenOverrides>\n >;\n\n validation?: OverrideMode;\n}\n\nexport function KezelThemeProvider({\n children,\n variant = KezelVariant.Standard,\n mode = KezelMode.Light,\n tokens,\n lightTokens,\n darkTokens,\n standardTokens,\n neumorphicTokens,\n variantModeTokens,\n validation = OverrideMode.Safe,\n}: KezelThemeProviderProps) {\n useLayoutEffect(() => {\n const root = document.documentElement;\n\n root.dataset.variant = variant;\n root.dataset.mode = mode === KezelMode.Dark ? \"dark\" : \"light\";\n\n root.classList.toggle(\"dark\", mode === KezelMode.Dark);\n\n // Clear previous overrides before applying new ones\n clearTokenOverrides(root);\n\n // Resolution order: tokens → mode-scoped → variant-scoped → variantModeTokens\n // Later layers win (inline style last-write-wins)\n applyTokenOverrides(root, tokens, validation);\n\n // Mode-scoped\n if (mode === KezelMode.Light) {\n applyTokenOverrides(root, lightTokens, validation);\n } else {\n applyTokenOverrides(root, darkTokens, validation);\n }\n\n // Variant-scoped\n if (variant === KezelVariant.Standard) {\n applyTokenOverrides(root, standardTokens, validation);\n } else if (variant === KezelVariant.Neumorphic) {\n applyTokenOverrides(root, neumorphicTokens, validation);\n }\n\n // Variant+mode scoped (most specific)\n const vmKey = `${variant}.${mode}` as `${KezelVariant}.${KezelMode}`;\n applyTokenOverrides(root, variantModeTokens?.[vmKey], validation);\n }, [\n variant,\n mode,\n tokens,\n lightTokens,\n darkTokens,\n standardTokens,\n neumorphicTokens,\n variantModeTokens,\n validation,\n ]);\n\n return <>{children}</>;\n}\n","import type { TokenKey } from \"./token-keys\";\n\nexport const tokenToCssVar: Record<TokenKey, `--kz-${string}`> = {\n \"color.brand.primary\": \"--kz-color-brand-primary\",\n \"color.brand.primary.hover\": \"--kz-color-brand-primary-hover\",\n \"color.brand.primary.active\": \"--kz-color-brand-primary-active\",\n \"color.brand.secondary\": \"--kz-color-brand-secondary\",\n \"color.brand.accent\": \"--kz-color-brand-accent\",\n \"color.brand.accent.hover\": \"--kz-color-brand-accent-hover\",\n \"color.brand.accent.active\": \"--kz-color-brand-accent-active\",\n \"color.brand.accent.dark\": \"--kz-color-brand-accent-dark\",\n \"color.brand.inverse\": \"--kz-color-brand-inverse\",\n\n \"color.surface.background\": \"--kz-color-surface-background\",\n \"color.surface.base\": \"--kz-color-surface-base\",\n \"color.surface.raised\": \"--kz-color-surface-raised\",\n \"color.surface.sunken\": \"--kz-color-surface-sunken\",\n \"color.surface.overlay\": \"--kz-color-surface-overlay\",\n \"color.surface.glass\": \"--kz-color-surface-glass\",\n \"color.surface.muted\": \"--kz-color-surface-muted\",\n \"color.surface.inverse\": \"--kz-color-surface-inverse\",\n\n \"color.text.primary\": \"--kz-color-text-primary\",\n \"color.text.secondary\": \"--kz-color-text-secondary\",\n \"color.text.tertiary\": \"--kz-color-text-tertiary\",\n \"color.text.muted\": \"--kz-color-text-muted\",\n \"color.text.disabled\": \"--kz-color-text-disabled\",\n \"color.text.inverse\": \"--kz-color-text-inverse\",\n \"color.text.link\": \"--kz-color-text-link\",\n \"color.text.link.hover\": \"--kz-color-text-link-hover\",\n\n \"color.border.subtle\": \"--kz-color-border-subtle\",\n \"color.border.default\": \"--kz-color-border-default\",\n \"color.border.strong\": \"--kz-color-border-strong\",\n \"color.border.focus\": \"--kz-color-border-focus\",\n \"color.border.inverse\": \"--kz-color-border-inverse\",\n\n \"color.status.success\": \"--kz-color-status-success\",\n \"color.status.success.bg\": \"--kz-color-status-success-bg\",\n \"color.status.success.border\": \"--kz-color-status-success-border\",\n \"color.status.warning\": \"--kz-color-status-warning\",\n \"color.status.warning.bg\": \"--kz-color-status-warning-bg\",\n \"color.status.warning.border\": \"--kz-color-status-warning-border\",\n \"color.status.error\": \"--kz-color-status-error\",\n \"color.status.error.bg\": \"--kz-color-status-error-bg\",\n \"color.status.error.border\": \"--kz-color-status-error-border\",\n \"color.status.info\": \"--kz-color-status-info\",\n \"color.status.info.bg\": \"--kz-color-status-info-bg\",\n \"color.status.info.border\": \"--kz-color-status-info-border\",\n\n \"shadow.elevation.0\": \"--kz-shadow-elevation-0\",\n \"shadow.elevation.1\": \"--kz-shadow-elevation-1\",\n \"shadow.elevation.2\": \"--kz-shadow-elevation-2\",\n \"shadow.elevation.3\": \"--kz-shadow-elevation-3\",\n \"shadow.elevation.4\": \"--kz-shadow-elevation-4\",\n \"shadow.elevation.5\": \"--kz-shadow-elevation-5\",\n \"shadow.inset.1\": \"--kz-shadow-inset-1\",\n \"shadow.inset.2\": \"--kz-shadow-inset-2\",\n \"shadow.focus\": \"--kz-shadow-focus\",\n \"shadow.neumorphic.light\": \"--kz-shadow-neumorphic-light\",\n \"shadow.neumorphic.dark\": \"--kz-shadow-neumorphic-dark\",\n \"shadow.neumorphic.raised.sm\": \"--kz-shadow-neumorphic-raised-sm\",\n \"shadow.neumorphic.raised.md\": \"--kz-shadow-neumorphic-raised-md\",\n \"shadow.neumorphic.raised.lg\": \"--kz-shadow-neumorphic-raised-lg\",\n \"shadow.neumorphic.inset.sm\": \"--kz-shadow-neumorphic-inset-sm\",\n\n \"effect.blur.sm\": \"--kz-effect-blur-sm\",\n \"effect.blur.md\": \"--kz-effect-blur-md\",\n \"effect.blur.lg\": \"--kz-effect-blur-lg\",\n \"effect.glass.opacity\": \"--kz-effect-glass-opacity\",\n \"effect.glass.border.opacity\": \"--kz-effect-glass-border-opacity\",\n\n \"radius.none\": \"--kz-radius-none\",\n \"radius.xs\": \"--kz-radius-xs\",\n \"radius.sm\": \"--kz-radius-sm\",\n \"radius.md\": \"--kz-radius-md\",\n \"radius.lg\": \"--kz-radius-lg\",\n \"radius.xl\": \"--kz-radius-xl\",\n \"radius.full\": \"--kz-radius-full\",\n\n \"space.0\": \"--kz-space-0\",\n \"space.1\": \"--kz-space-1\",\n \"space.2\": \"--kz-space-2\",\n \"space.3\": \"--kz-space-3\",\n \"space.4\": \"--kz-space-4\",\n \"space.5\": \"--kz-space-5\",\n \"space.6\": \"--kz-space-6\",\n \"space.8\": \"--kz-space-8\",\n \"space.10\": \"--kz-space-10\",\n \"space.12\": \"--kz-space-12\",\n \"space.16\": \"--kz-space-16\",\n \"space.20\": \"--kz-space-20\",\n \"space.24\": \"--kz-space-24\",\n\n \"font.family.base\": \"--kz-font-family-base\",\n \"font.family.mono\": \"--kz-font-family-mono\",\n \"font.size.xs\": \"--kz-font-size-xs\",\n \"font.size.sm\": \"--kz-font-size-sm\",\n \"font.size.md\": \"--kz-font-size-md\",\n \"font.size.lg\": \"--kz-font-size-lg\",\n \"font.size.xl\": \"--kz-font-size-xl\",\n \"font.size.2xl\": \"--kz-font-size-2xl\",\n \"font.size.3xl\": \"--kz-font-size-3xl\",\n \"font.weight.regular\": \"--kz-font-weight-regular\",\n \"font.weight.medium\": \"--kz-font-weight-medium\",\n \"font.weight.semibold\": \"--kz-font-weight-semibold\",\n \"font.weight.bold\": \"--kz-font-weight-bold\",\n \"line.height.sm\": \"--kz-line-height-sm\",\n \"line.height.md\": \"--kz-line-height-md\",\n \"line.height.lg\": \"--kz-line-height-lg\",\n\n \"motion.duration.fast\": \"--kz-motion-duration-fast\",\n \"motion.duration.normal\": \"--kz-motion-duration-normal\",\n \"motion.duration.slow\": \"--kz-motion-duration-slow\",\n \"motion.easing.standard\": \"--kz-motion-easing-standard\",\n \"motion.easing.emphasized\": \"--kz-motion-easing-emphasized\",\n\n // Intent — semantic middle layer\n \"intent.interactive.bg\": \"--kz-intent-interactive-bg\",\n \"intent.interactive.bg.hover\": \"--kz-intent-interactive-bg-hover\",\n \"intent.interactive.text\": \"--kz-intent-interactive-text\",\n \"intent.interactive.text.selected\": \"--kz-intent-interactive-text-selected\",\n \"intent.interactive.shadow\": \"--kz-intent-interactive-shadow\",\n \"intent.interactive.shadow.active\": \"--kz-intent-interactive-shadow-active\",\n \"intent.interactive.border\": \"--kz-intent-interactive-border\",\n \"intent.interactive.radius\": \"--kz-intent-interactive-radius\",\n \"intent.container.bg\": \"--kz-intent-container-bg\",\n \"intent.container.border\": \"--kz-intent-container-border\",\n \"intent.container.shadow\": \"--kz-intent-container-shadow\",\n \"intent.container.radius\": \"--kz-intent-container-radius\",\n\n \"component.sidebar.bg\": \"--kz-component-sidebar-bg\",\n \"component.sidebar.border\": \"--kz-component-sidebar-border\",\n \"component.sidebar.item.bg\": \"--kz-component-sidebar-item-bg\",\n \"component.sidebar.item.bg.hover\": \"--kz-component-sidebar-item-bg-hover\",\n \"component.sidebar.item.bg.active\": \"--kz-component-sidebar-item-bg-active\",\n \"component.sidebar.item.text\": \"--kz-component-sidebar-item-text\",\n \"component.sidebar.item.text.active\":\n \"--kz-component-sidebar-item-text-active\",\n \"component.sidebar.indicator\": \"--kz-component-sidebar-indicator\",\n\n \"component.header.bg\": \"--kz-component-header-bg\",\n \"component.header.border\": \"--kz-component-header-border\",\n \"component.header.text\": \"--kz-component-header-text\",\n\n // Primary variant (reads secondary CSS tokens)\n \"component.button.secondary.bg\": \"--kz-component-button-secondary-bg\",\n \"component.button.secondary.bg.hover\":\n \"--kz-component-button-secondary-bg-hover\",\n \"component.button.secondary.bg.active\":\n \"--kz-component-button-secondary-bg-active\",\n \"component.button.secondary.text\": \"--kz-component-button-secondary-text\",\n \"component.button.secondary.shadow\": \"--kz-component-button-secondary-shadow\",\n \"component.button.secondary.shadow.hover\":\n \"--kz-component-button-secondary-shadow-hover\",\n\n // Ghost variant\n \"component.button.ghost.bg\": \"--kz-component-button-ghost-bg\",\n \"component.button.ghost.bg.hover\": \"--kz-component-button-ghost-bg-hover\",\n \"component.button.ghost.text\": \"--kz-component-button-ghost-text\",\n\n // Container variant\n \"component.button.container.bg\": \"--kz-component-button-container-bg\",\n \"component.button.container.bg.hover\":\n \"--kz-component-button-container-bg-hover\",\n \"component.button.container.text\": \"--kz-component-button-container-text\",\n \"component.button.container.border\": \"--kz-component-button-container-border\",\n \"component.button.container.shadow\": \"--kz-component-button-container-shadow\",\n \"component.button.container.shadow.hover\":\n \"--kz-component-button-container-shadow-hover\",\n\n // Brand status\n \"component.button.brand.bg\": \"--kz-component-button-brand-bg\",\n \"component.button.brand.bg.hover\": \"--kz-component-button-brand-bg-hover\",\n \"component.button.brand.text\": \"--kz-component-button-brand-text\",\n \"component.button.brand.shadow\": \"--kz-component-button-brand-shadow\",\n \"component.button.brand.shadow.hover\":\n \"--kz-component-button-brand-shadow-hover\",\n\n // Ghost + status hover backgrounds\n \"component.button.ghost.brand.bg.hover\":\n \"--kz-component-button-ghost-brand-bg-hover\",\n \"component.button.ghost.success.bg.hover\":\n \"--kz-component-button-ghost-success-bg-hover\",\n \"component.button.ghost.warning.bg.hover\":\n \"--kz-component-button-ghost-warning-bg-hover\",\n \"component.button.ghost.error.bg.hover\":\n \"--kz-component-button-ghost-error-bg-hover\",\n \"component.button.ghost.info.bg.hover\":\n \"--kz-component-button-ghost-info-bg-hover\",\n\n // Container + brand overrides\n \"component.button.container.brand.text\":\n \"--kz-component-button-container-brand-text\",\n \"component.button.container.brand.border\":\n \"--kz-component-button-container-brand-border\",\n \"component.button.container.brand.bg.hover\":\n \"--kz-component-button-container-brand-bg-hover\",\n\n // Success status\n \"component.button.success.bg\": \"--kz-component-button-success-bg\",\n \"component.button.success.bg.hover\": \"--kz-component-button-success-bg-hover\",\n \"component.button.success.text\": \"--kz-component-button-success-text\",\n \"component.button.success.shadow\": \"--kz-component-button-success-shadow\",\n \"component.button.success.shadow.hover\":\n \"--kz-component-button-success-shadow-hover\",\n\n // Warning status\n \"component.button.warning.bg\": \"--kz-component-button-warning-bg\",\n \"component.button.warning.bg.hover\": \"--kz-component-button-warning-bg-hover\",\n \"component.button.warning.text\": \"--kz-component-button-warning-text\",\n \"component.button.warning.shadow\": \"--kz-component-button-warning-shadow\",\n \"component.button.warning.shadow.hover\":\n \"--kz-component-button-warning-shadow-hover\",\n\n // Error status\n \"component.button.error.bg\": \"--kz-component-button-error-bg\",\n \"component.button.error.bg.hover\": \"--kz-component-button-error-bg-hover\",\n \"component.button.error.text\": \"--kz-component-button-error-text\",\n \"component.button.error.shadow\": \"--kz-component-button-error-shadow\",\n \"component.button.error.shadow.hover\":\n \"--kz-component-button-error-shadow-hover\",\n\n // Info status\n \"component.button.info.bg\": \"--kz-component-button-info-bg\",\n \"component.button.info.bg.hover\": \"--kz-component-button-info-bg-hover\",\n \"component.button.info.text\": \"--kz-component-button-info-text\",\n \"component.button.info.shadow\": \"--kz-component-button-info-shadow\",\n \"component.button.info.shadow.hover\":\n \"--kz-component-button-info-shadow-hover\",\n\n // Sizes\n \"component.button.height.sm\": \"--kz-component-button-height-sm\",\n \"component.button.px.sm\": \"--kz-component-button-px-sm\",\n \"component.button.text.sm\": \"--kz-component-button-text-sm\",\n \"component.button.icon.sm\": \"--kz-component-button-icon-sm\",\n \"component.button.height.md\": \"--kz-component-button-height-md\",\n \"component.button.px.md\": \"--kz-component-button-px-md\",\n \"component.button.text.md\": \"--kz-component-button-text-md\",\n \"component.button.icon.md\": \"--kz-component-button-icon-md\",\n \"component.button.height.lg\": \"--kz-component-button-height-lg\",\n \"component.button.px.lg\": \"--kz-component-button-px-lg\",\n \"component.button.text.lg\": \"--kz-component-button-text-lg\",\n \"component.button.icon.lg\": \"--kz-component-button-icon-lg\",\n // Common\n \"component.button.radius\": \"--kz-component-button-radius\",\n \"component.button.disabled.opacity\": \"--kz-component-button-disabled-opacity\",\n \"component.button.loading.opacity\": \"--kz-component-button-loading-opacity\",\n\n \"component.toggle-button.default.bg\":\n \"--kz-component-toggle-button-default-bg\",\n \"component.toggle-button.default.bg.pressed\":\n \"--kz-component-toggle-button-default-bg-pressed\",\n \"component.toggle-button.default.text\":\n \"--kz-component-toggle-button-default-text\",\n \"component.toggle-button.default.text.pressed\":\n \"--kz-component-toggle-button-default-text-pressed\",\n \"component.toggle-button.primary.bg\":\n \"--kz-component-toggle-button-primary-bg\",\n \"component.toggle-button.primary.bg.pressed\":\n \"--kz-component-toggle-button-primary-bg-pressed\",\n \"component.toggle-button.primary.text\":\n \"--kz-component-toggle-button-primary-text\",\n \"component.toggle-button.primary.text.pressed\":\n \"--kz-component-toggle-button-primary-text-pressed\",\n \"component.toggle-button.container.bg\":\n \"--kz-component-toggle-button-container-bg\",\n \"component.toggle-button.container.bg.pressed\":\n \"--kz-component-toggle-button-container-bg-pressed\",\n \"component.toggle-button.container.text\":\n \"--kz-component-toggle-button-container-text\",\n \"component.toggle-button.container.text.pressed\":\n \"--kz-component-toggle-button-container-text-pressed\",\n \"component.toggle-button.pressed.shadow\":\n \"--kz-component-toggle-button-pressed-shadow\",\n \"component.toggle-button.track.off.bg\":\n \"--kz-component-toggle-button-track-off-bg\",\n \"component.toggle-button.track.on.bg\":\n \"--kz-component-toggle-button-track-on-bg\",\n \"component.toggle-button.thumb.bg\": \"--kz-component-toggle-button-thumb-bg\",\n \"component.toggle-button.thumb.shadow\":\n \"--kz-component-toggle-button-thumb-shadow\",\n\n \"component.checkbox.size.sm\": \"--kz-component-checkbox-size-sm\",\n \"component.checkbox.size.md\": \"--kz-component-checkbox-size-md\",\n \"component.checkbox.size.lg\": \"--kz-component-checkbox-size-lg\",\n \"component.checkbox.radius\": \"--kz-component-checkbox-radius\",\n \"component.checkbox.off.bg\": \"--kz-component-checkbox-off-bg\",\n \"component.checkbox.off.border\": \"--kz-component-checkbox-off-border\",\n \"component.checkbox.off.shadow\": \"--kz-component-checkbox-off-shadow\",\n \"component.checkbox.on.bg\": \"--kz-component-checkbox-on-bg\",\n \"component.checkbox.on.border\": \"--kz-component-checkbox-on-border\",\n \"component.checkbox.on.shadow\": \"--kz-component-checkbox-on-shadow\",\n \"component.checkbox.icon.color\": \"--kz-component-checkbox-icon-color\",\n \"component.checkbox.disabled.opacity\":\n \"--kz-component-checkbox-disabled-opacity\",\n\n \"component.radio.size.sm\": \"--kz-component-radio-size-sm\",\n \"component.radio.size.md\": \"--kz-component-radio-size-md\",\n \"component.radio.size.lg\": \"--kz-component-radio-size-lg\",\n \"component.radio.radius\": \"--kz-component-radio-radius\",\n \"component.radio.off.bg\": \"--kz-component-radio-off-bg\",\n \"component.radio.off.border\": \"--kz-component-radio-off-border\",\n \"component.radio.off.shadow\": \"--kz-component-radio-off-shadow\",\n \"component.radio.on.bg\": \"--kz-component-radio-on-bg\",\n \"component.radio.on.border\": \"--kz-component-radio-on-border\",\n \"component.radio.on.shadow\": \"--kz-component-radio-on-shadow\",\n \"component.radio.dot.bg\": \"--kz-component-radio-dot-bg\",\n \"component.radio.dot.shadow\": \"--kz-component-radio-dot-shadow\",\n \"component.radio.disabled.opacity\": \"--kz-component-radio-disabled-opacity\",\n\n \"component.tabs.list.bg\": \"--kz-component-tabs-list-bg\",\n \"component.tabs.list.radius\": \"--kz-component-tabs-list-radius\",\n \"component.tabs.list.shadow\": \"--kz-component-tabs-list-shadow\",\n \"component.tabs.list.pill.bg\": \"--kz-component-tabs-list-pill-bg\",\n \"component.tabs.trigger.text\": \"--kz-component-tabs-trigger-text\",\n \"component.tabs.trigger.selected.text\":\n \"--kz-component-tabs-trigger-selected-text\",\n \"component.tabs.trigger.selected.underline\":\n \"--kz-component-tabs-trigger-selected-underline\",\n \"component.tabs.trigger.selected.bg\":\n \"--kz-component-tabs-trigger-selected-bg\",\n \"component.tabs.trigger.selected.shadow\":\n \"--kz-component-tabs-trigger-selected-shadow\",\n \"component.tabs.trigger.radius\": \"--kz-component-tabs-trigger-radius\",\n \"component.tabs.content.padding\": \"--kz-component-tabs-content-padding\",\n\n \"component.input.bg\": \"--kz-component-input-bg\",\n \"component.input.border\": \"--kz-component-input-border\",\n \"component.input.border.focus\": \"--kz-component-input-border-focus\",\n \"component.input.border.disabled\": \"--kz-component-input-border-disabled\",\n \"component.input.text\": \"--kz-component-input-text\",\n \"component.input.placeholder\": \"--kz-component-input-placeholder\",\n \"component.input.icon\": \"--kz-component-input-icon\",\n \"component.input.shadow\": \"--kz-component-input-shadow\",\n \"component.input.radius\": \"--kz-component-input-radius\",\n \"component.input.container.radius\": \"--kz-component-input-container-radius\",\n \"component.input.container.border\": \"--kz-component-input-container-border\",\n\n \"component.dropdown.trigger.bg\": \"--kz-component-dropdown-trigger-bg\",\n \"component.dropdown.trigger.border\": \"--kz-component-dropdown-trigger-border\",\n \"component.dropdown.trigger.border.open\":\n \"--kz-component-dropdown-trigger-border-open\",\n \"component.dropdown.trigger.text\": \"--kz-component-dropdown-trigger-text\",\n \"component.dropdown.trigger.text.selected\":\n \"--kz-component-dropdown-trigger-text-selected\",\n \"component.dropdown.trigger.shadow\": \"--kz-component-dropdown-trigger-shadow\",\n \"component.dropdown.trigger.shadow.open\":\n \"--kz-component-dropdown-trigger-shadow-open\",\n \"component.dropdown.trigger.radius\": \"--kz-component-dropdown-trigger-radius\",\n \"component.dropdown.trigger.focus.ring\":\n \"--kz-component-dropdown-trigger-focus-ring\",\n \"component.dropdown.content.bg\": \"--kz-component-dropdown-content-bg\",\n \"component.dropdown.content.border\": \"--kz-component-dropdown-content-border\",\n \"component.dropdown.content.shadow\": \"--kz-component-dropdown-content-shadow\",\n \"component.dropdown.content.radius\": \"--kz-component-dropdown-content-radius\",\n \"component.dropdown.item.text\": \"--kz-component-dropdown-item-text\",\n \"component.dropdown.item.text.selected\":\n \"--kz-component-dropdown-item-text-selected\",\n \"component.dropdown.item.bg.hover\": \"--kz-component-dropdown-item-bg-hover\",\n\n \"component.nav-button.icon\": \"--kz-component-nav-button-icon\",\n \"component.nav-button.text\": \"--kz-component-nav-button-text\",\n \"component.nav-button.gap\": \"--kz-component-nav-button-gap\",\n \"component.nav-button.chevron\": \"--kz-component-nav-button-chevron\",\n \"component.nav-button.hover.bg\": \"--kz-component-nav-button-hover-bg\",\n \"component.nav-button.selected.bg\": \"--kz-component-nav-button-selected-bg\",\n \"component.nav-button.selected.shadow\":\n \"--kz-component-nav-button-selected-shadow\",\n \"component.nav-button.selected.icon\":\n \"--kz-component-nav-button-selected-icon\",\n \"component.nav-button.selected.text\":\n \"--kz-component-nav-button-selected-text\",\n \"component.nav-button.radius\": \"--kz-component-nav-button-radius\",\n\n \"component.nav-dropdown.menu.bg\": \"--kz-component-nav-dropdown-menu-bg\",\n \"component.nav-dropdown.menu.shadow\":\n \"--kz-component-nav-dropdown-menu-shadow\",\n \"component.nav-dropdown.menu.radius\":\n \"--kz-component-nav-dropdown-menu-radius\",\n \"component.nav-dropdown.option.text\":\n \"--kz-component-nav-dropdown-option-text\",\n \"component.nav-dropdown.option.hover.bg\":\n \"--kz-component-nav-dropdown-option-hover-bg\",\n\n \"component.sidesheet.bg\": \"--kz-component-sidesheet-bg\",\n \"component.sidesheet.width\": \"--kz-component-sidesheet-width\",\n \"component.sidesheet.border\": \"--kz-component-sidesheet-border\",\n\n \"component.sidemenu.bg\": \"--kz-component-sidemenu-bg\",\n \"component.sidemenu.border\": \"--kz-component-sidemenu-border\",\n \"component.sidemenu.shadow\": \"--kz-component-sidemenu-shadow\",\n \"component.sidemenu.section.label.text\":\n \"--kz-component-sidemenu-section-label-text\",\n \"component.sidemenu.item.text\": \"--kz-component-sidemenu-item-text\",\n \"component.sidemenu.item.bg.hover\": \"--kz-component-sidemenu-item-bg-hover\",\n \"component.sidemenu.item.bg.active\": \"--kz-component-sidemenu-item-bg-active\",\n \"component.sidemenu.item.active.text\":\n \"--kz-component-sidemenu-item-active-text\",\n \"component.sidemenu.item.active.link.bg\":\n \"--kz-component-sidemenu-item-active-link-bg\",\n \"component.sidemenu.item.active.link.shadow\":\n \"--kz-component-sidemenu-item-active-link-shadow\",\n \"component.sidemenu.group.indent.bg\":\n \"--kz-component-sidemenu-group-indent-bg\",\n \"component.sidemenu.gap\": \"--kz-component-sidemenu-gap\",\n \"component.sidemenu.icon.gap\": \"--kz-component-sidemenu-icon-gap\",\n\n \"component.tooltip.bg\": \"--kz-component-tooltip-bg\",\n \"component.tooltip.text\": \"--kz-component-tooltip-text\",\n \"component.tooltip.border\": \"--kz-component-tooltip-border\",\n \"component.tooltip.shadow\": \"--kz-component-tooltip-shadow\",\n \"component.tooltip.radius\": \"--kz-component-tooltip-radius\",\n \"component.tooltip.padding.sm\": \"--kz-component-tooltip-padding-sm\",\n \"component.tooltip.padding.md\": \"--kz-component-tooltip-padding-md\",\n \"component.tooltip.padding.lg\": \"--kz-component-tooltip-padding-lg\",\n \"component.tooltip.maxWidth.sm\": \"--kz-component-tooltip-max-width-sm\",\n \"component.tooltip.maxWidth.md\": \"--kz-component-tooltip-max-width-md\",\n \"component.tooltip.maxWidth.lg\": \"--kz-component-tooltip-max-width-lg\",\n \"component.tooltip.inverse.bg\": \"--kz-component-tooltip-inverse-bg\",\n \"component.tooltip.inverse.text\": \"--kz-component-tooltip-inverse-text\",\n \"component.tooltip.success.bg\": \"--kz-component-tooltip-success-bg\",\n \"component.tooltip.success.text\": \"--kz-component-tooltip-success-text\",\n \"component.tooltip.warning.bg\": \"--kz-component-tooltip-warning-bg\",\n \"component.tooltip.warning.text\": \"--kz-component-tooltip-warning-text\",\n \"component.tooltip.error.bg\": \"--kz-component-tooltip-error-bg\",\n \"component.tooltip.error.text\": \"--kz-component-tooltip-error-text\",\n\n \"component.card.bg\": \"--kz-component-card-bg\",\n \"component.card.border\": \"--kz-component-card-border\",\n \"component.card.shadow\": \"--kz-component-card-shadow\",\n \"component.card.radius\": \"--kz-component-card-radius\",\n\n \"component.canvas.bg\": \"--kz-component-canvas-bg\",\n \"component.canvas.grid.line\": \"--kz-component-canvas-grid-line\",\n \"component.tile.bg\": \"--kz-component-tile-bg\",\n \"component.tile.border\": \"--kz-component-tile-border\",\n \"component.tile.shadow\": \"--kz-component-tile-shadow\",\n \"component.tile.header.bg\": \"--kz-component-tile-header-bg\",\n \"component.tile.header.text\": \"--kz-component-tile-header-text\",\n\n \"component.table.surface\": \"--kz-component-table-surface\",\n \"component.table.header.bg\": \"--kz-component-table-header-bg\",\n \"component.table.header.border\": \"--kz-component-table-header-border\",\n \"component.table.row.border\": \"--kz-component-table-row-border\",\n \"component.table.row.hover.bg\": \"--kz-component-table-row-hover-bg\",\n \"component.table.sticky.row.top\": \"--kz-component-table-sticky-row-top\",\n \"component.table.footer.bg\": \"--kz-component-table-footer-bg\",\n \"component.table.pagination.bg\": \"--kz-component-table-pagination-bg\",\n \"component.table.pagination.active.bg\":\n \"--kz-component-table-pagination-active-bg\",\n \"component.table.pagination.active.shadow\":\n \"--kz-component-table-pagination-active-shadow\",\n \"component.table.pagination.hover.shadow\":\n \"--kz-component-table-pagination-hover-shadow\",\n\n \"component.filter.panel.bg\": \"--kz-component-filter-panel-bg\",\n \"component.filter.panel.border\": \"--kz-component-filter-panel-border\",\n \"component.filter.label.text\": \"--kz-component-filter-label-text\",\n \"component.filter.control.bg\": \"--kz-component-filter-control-bg\",\n \"component.filter.control.border\": \"--kz-component-filter-control-border\",\n\n \"typography.error.color\": \"--kz-typography-error-color\",\n \"typography.success.color\": \"--kz-typography-success-color\",\n \"typography.warning.color\": \"--kz-typography-warning-color\",\n};\n","import type { TokenKey } from \"../contract/token-keys\";\nimport { TokenCategory } from \"../../constants/enum\";\n\nfunction categoryForToken(key: TokenKey): TokenCategory {\n if (key.startsWith(\"color.\")) return TokenCategory.Color;\n if (key.startsWith(\"typography.\") && key.endsWith(\".color\"))\n return TokenCategory.Color;\n if (key.startsWith(\"shadow.\")) return TokenCategory.Shadow;\n if (\n key.startsWith(\"radius.\") ||\n key.startsWith(\"space.\") ||\n key.startsWith(\"effect.blur.\")\n )\n return TokenCategory.Length;\n if (key.startsWith(\"effect.glass.\")) return TokenCategory.Number;\n if (key.startsWith(\"font.family.\")) return TokenCategory.FontFamily;\n if (key.startsWith(\"font.weight.\")) return TokenCategory.FontWeight;\n if (key.startsWith(\"line.height.\")) return TokenCategory.LineHeight;\n if (key.startsWith(\"motion.duration.\")) return TokenCategory.Duration;\n if (key.startsWith(\"motion.easing.\")) return TokenCategory.Easing;\n if (key.startsWith(\"intent.\") || key.startsWith(\"component.\")) {\n if (key.includes(\".shadow\") || key.includes(\".focus.ring\"))\n return TokenCategory.Shadow;\n if (\n key.includes(\".radius\") ||\n key.includes(\".blur\") ||\n key.includes(\".gap\") ||\n key.includes(\".width\")\n )\n return TokenCategory.Length;\n if (key.includes(\"opacity\")) return TokenCategory.Number;\n return TokenCategory.Color;\n }\n return TokenCategory.Length;\n}\n\nconst re = {\n length: /^-?\\d*\\.?\\d+(px|rem|em|%|vh|vw|vmin|vmax|ch|ex)$/i,\n number: /^-?\\d*\\.?\\d+$/i,\n duration: /^-?\\d*\\.?\\d+(ms|s)$/i,\n fontWeight: /^(100|200|300|400|500|600|700|800|900)$/i,\n easing:\n /^cubic-bezier\\(\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*\\)$/i,\n};\n\nexport function validateTokenValue(\n key: TokenKey,\n value: string\n): { ok: true } | { ok: false; reason: string } {\n const category = categoryForToken(key);\n const v = value.trim();\n\n // In the browser, CSS.supports is the best “real” validator.\n const canUseCssSupports =\n typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\";\n\n if (category === TokenCategory.Color) {\n if (canUseCssSupports && CSS.supports(\"color\", v)) return { ok: true };\n // fallback: allow hex/rgb(a)/hsl(a)/oklch/var(...)\n const basic =\n /^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(v) ||\n /^rgb(a)?\\(/i.test(v) ||\n /^hsl(a)?\\(/i.test(v) ||\n /^oklch\\(/i.test(v) ||\n /^var\\(--/i.test(v);\n return basic\n ? { ok: true }\n : { ok: false, reason: `Invalid color: \"${value}\"` };\n }\n\n if (category === TokenCategory.Shadow) {\n if (v === \"none\") return { ok: true };\n if (canUseCssSupports && CSS.supports(\"box-shadow\", v)) return { ok: true };\n // fallback: accept most shadows & var(...)\n return /^var\\(--/i.test(v) || v.includes(\"px\")\n ? { ok: true }\n : { ok: false, reason: `Invalid shadow: \"${value}\"` };\n }\n\n if (category === TokenCategory.Length) {\n if (v === \"0\") return { ok: true };\n if (re.length.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid length: \"${value}\"` };\n }\n\n if (category === TokenCategory.Number) {\n if (re.number.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid number: \"${value}\"` };\n }\n\n if (category === TokenCategory.FontFamily) {\n // allow raw font stacks + var()\n if (v.length > 0) return { ok: true };\n return { ok: false, reason: \"Font family cannot be empty\" };\n }\n\n if (category === TokenCategory.FontWeight) {\n if (re.fontWeight.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid font weight: \"${value}\"` };\n }\n\n if (category === TokenCategory.Duration) {\n if (re.duration.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid duration: \"${value}\"` };\n }\n\n if (category === TokenCategory.Easing) {\n if (re.easing.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid easing: \"${value}\"` };\n }\n\n if (category === TokenCategory.LineHeight) {\n if (re.number.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid line height: \"${value}\"` };\n }\n\n return { ok: false, reason: `Unknown token category for ${key}` };\n}\n","import type { TokenKey } from \"../contract/token-keys\";\nimport { tokenToCssVar } from \"../contract/css-var-maps\";\nimport { validateTokenValue } from \"../validate/validateTokenValue\";\nimport { OverrideMode } from \"../../constants/enum\";\n\nexport type TokenOverrides = Partial<Record<TokenKey, string>>;\n\n/** Remove all previously applied token overrides from an element's inline style */\nexport function clearTokenOverrides(el: HTMLElement) {\n const vars = Object.values(tokenToCssVar);\n for (const cssVar of vars) {\n el.style.removeProperty(cssVar);\n }\n}\n\nexport function applyTokenOverrides(\n el: HTMLElement,\n overrides: TokenOverrides | undefined,\n mode: OverrideMode = OverrideMode.Safe\n) {\n if (!overrides) return;\n\n for (const [key, value] of Object.entries(overrides) as Array<\n [TokenKey, string]\n >) {\n const cssVar = tokenToCssVar[key];\n const result = validateTokenValue(key, value);\n\n if (!result.ok) {\n const msg = `[Kezel] Invalid token override ${key}: ${result.reason}`;\n if (mode === OverrideMode.Strict) throw new Error(msg);\n continue;\n }\n\n el.style.setProperty(cssVar, value.trim());\n }\n}\n","import * as React from \"react\";\nimport { User } from \"lucide-react\";\nimport { AvatarSize, AvatarStatus } from \"../../constants/enum\";\nimport { avatarVariants, type AvatarVariants } from \"./avatar.variants\";\nimport { cn } from \"../../utils/cn\";\n\nconst ICON_SIZE_MAP: Record<AvatarSize, number> = {\n [AvatarSize.Sm]: 16,\n [AvatarSize.Md]: 20,\n [AvatarSize.Lg]: 24,\n [AvatarSize.Xl]: 32,\n};\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n initials?: string;\n fallbackIcon?: React.ReactNode;\n size?: AvatarSize;\n status?: AvatarStatus;\n className?: string;\n}\n\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n src,\n alt = \"\",\n initials,\n fallbackIcon,\n size = AvatarSize.Md,\n status,\n className,\n ...props\n },\n ref\n ) => {\n const [imgError, setImgError] = React.useState(false);\n\n React.useEffect(() => {\n setImgError(false);\n }, [src]);\n\n const showImage = src && !imgError;\n const showIndicator = status === AvatarStatus.Online;\n\n return (\n <div\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n role=\"img\"\n aria-label={alt || initials || \"Avatar\"}\n {...props}\n >\n {showImage ? (\n <span className=\"kz-avatar-image\">\n <img\n src={src}\n alt={alt}\n className=\"h-full w-full object-cover\"\n onError={() => setImgError(true)}\n draggable={false}\n />\n </span>\n ) : initials ? (\n <span className=\"kz-avatar-initials\" aria-hidden=\"true\">\n {initials}\n </span>\n ) : (\n <span className=\"kz-avatar-fallback-icon\" aria-hidden=\"true\">\n {fallbackIcon ?? <User size={ICON_SIZE_MAP[size]} />}\n </span>\n )}\n\n {showIndicator && (\n <span\n className={cn(\"kz-avatar-status\", `kz-avatar-status--${size}`)}\n aria-label=\"Online\"\n role=\"status\"\n />\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = \"Avatar\";\n\nexport { Avatar, avatarVariants };\nexport type { AvatarVariants };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { AvatarSize } from \"../../constants/enum\";\n\nconst base = [\n \"kz-avatar\",\n \"relative inline-flex items-center justify-center\",\n \"rounded-full\",\n \"shrink-0\",\n \"[box-shadow:none]\",\n].join(\" \");\n\nexport const avatarVariants = cva(base, {\n variants: {\n size: {\n [AvatarSize.Sm]: \"size-8 text-xs\",\n [AvatarSize.Md]: \"size-10 text-sm\",\n [AvatarSize.Lg]: \"size-12 text-base\",\n [AvatarSize.Xl]: \"size-16 text-lg\",\n },\n },\n defaultVariants: {\n size: AvatarSize.Md,\n },\n});\n\nexport type AvatarVariants = VariantProps<typeof avatarVariants>;\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Calendar } from \"./Calendar\";\nimport { TimeSelector } from \"./TimeSelector\";\n\nexport type DateTimePickerMode = \"date\" | \"time\" | \"datetime\";\nexport type DateTimePickerFormat = \"12h\" | \"24h\";\n\nexport interface DateTimePickerProps {\n /** Controlled value. Omit for uncontrolled mode. */\n value?: Date | null;\n /** Fires when the date changes (controlled & uncontrolled). */\n onChange?: (value: Date | undefined) => void;\n /** @deprecated Use `onChange`. Kept for backward compatibility. */\n onValueChange?: (value: Date | undefined) => void;\n /** Initial value for uncontrolled mode. */\n defaultValue?: Date;\n\n mode?: DateTimePickerMode;\n format?: DateTimePickerFormat;\n\n minDate?: Date;\n maxDate?: Date;\n\n /** Show seconds column in the time selector. */\n showSeconds?: boolean;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n showTodayButton?: boolean;\n showClearButton?: boolean;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Formatting helpers ── */\n\nfunction formatDate(date: Date): string {\n const m = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const d = date.getDate().toString().padStart(2, \"0\");\n const y = date.getFullYear();\n return `${m}/${d}/${y}`;\n}\n\nfunction formatTime12(date: Date, seconds: boolean): string {\n let h = date.getHours() % 12;\n if (h === 0) h = 12;\n const m = date.getMinutes().toString().padStart(2, \"0\");\n const period = date.getHours() >= 12 ? \"PM\" : \"AM\";\n const base = `${h.toString().padStart(2, \"0\")}:${m}`;\n if (seconds) {\n const s = date.getSeconds().toString().padStart(2, \"0\");\n return `${base}:${s} ${period}`;\n }\n return `${base} ${period}`;\n}\n\nfunction formatTime24(date: Date, seconds: boolean): string {\n const h = date.getHours().toString().padStart(2, \"0\");\n const m = date.getMinutes().toString().padStart(2, \"0\");\n if (seconds) {\n const s = date.getSeconds().toString().padStart(2, \"0\");\n return `${h}:${m}:${s}`;\n }\n return `${h}:${m}`;\n}\n\nfunction formatDateTime(\n date: Date,\n mode: DateTimePickerMode,\n fmt: DateTimePickerFormat,\n seconds: boolean\n): string {\n if (mode === \"date\") return formatDate(date);\n if (mode === \"time\")\n return fmt === \"12h\"\n ? formatTime12(date, seconds)\n : formatTime24(date, seconds);\n const datePart = formatDate(date);\n const timePart =\n fmt === \"12h\" ? formatTime12(date, seconds) : formatTime24(date, seconds);\n return `${datePart} ${timePart}`;\n}\n\n/* ── Parsing helpers ── */\n\nfunction parseInputValue(\n raw: string,\n mode: DateTimePickerMode,\n fmt: DateTimePickerFormat,\n seconds: boolean\n): Date | null {\n const trimmed = raw.trim();\n if (trimmed === \"\") return null;\n\n if (mode === \"date\") {\n const match = trimmed.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (match == null) return null;\n const [, mm, dd, yyyy] = match;\n const d = new Date(parseInt(yyyy), parseInt(mm) - 1, parseInt(dd));\n if (isNaN(d.getTime())) return null;\n return d;\n }\n\n if (mode === \"time\") {\n if (fmt === \"12h\") {\n const pattern = seconds\n ? /^(\\d{1,2}):(\\d{2}):(\\d{2})\\s*(AM|PM)$/i\n : /^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i;\n const match = trimmed.match(pattern);\n if (match == null) return null;\n let h = parseInt(match[1]);\n const m = parseInt(match[2]);\n const s = seconds ? parseInt(match[3]) : 0;\n const p = (seconds ? match[4] : match[3]).toUpperCase();\n if (h < 1 || h > 12 || m < 0 || m > 59) return null;\n if (seconds && (s < 0 || s > 59)) return null;\n if (p === \"AM\" && h === 12) h = 0;\n else if (p === \"PM\" && h !== 12) h += 12;\n const d = new Date();\n d.setHours(h, m, s, 0);\n return d;\n } else {\n const pattern = seconds\n ? /^(\\d{1,2}):(\\d{2}):(\\d{2})$/\n : /^(\\d{1,2}):(\\d{2})$/;\n const match = trimmed.match(pattern);\n if (match == null) return null;\n const h = parseInt(match[1]);\n const m = parseInt(match[2]);\n const s = seconds ? parseInt(match[3]) : 0;\n if (h < 0 || h > 23 || m < 0 || m > 59) return null;\n if (seconds && (s < 0 || s > 59)) return null;\n const d = new Date();\n d.setHours(h, m, s, 0);\n return d;\n }\n }\n\n // datetime\n const pattern =\n fmt === \"12h\"\n ? seconds\n ? /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2}):(\\d{2})\\s*(AM|PM)$/i\n : /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i\n : seconds\n ? /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2}):(\\d{2})$/\n : /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2})$/;\n\n const parts = trimmed.match(pattern);\n if (parts == null) return null;\n\n const month = parseInt(parts[1]) - 1;\n const day = parseInt(parts[2]);\n const year = parseInt(parts[3]);\n let hours = parseInt(parts[4]);\n const mins = parseInt(parts[5]);\n const secs = seconds ? parseInt(parts[6]) : 0;\n\n if (fmt === \"12h\") {\n const period = (seconds ? parts[7] : parts[6]).toUpperCase();\n if (hours < 1 || hours > 12) return null;\n if (period === \"AM\" && hours === 12) hours = 0;\n else if (period === \"PM\" && hours !== 12) hours += 12;\n } else {\n if (hours < 0 || hours > 23) return null;\n }\n\n if (mins < 0 || mins > 59) return null;\n if (seconds && (secs < 0 || secs > 59)) return null;\n\n const d = new Date(year, month, day, hours, mins, secs, 0);\n if (isNaN(d.getTime())) return null;\n return d;\n}\n\nfunction getDefaultPlaceholder(\n mode: DateTimePickerMode,\n fmt: DateTimePickerFormat,\n seconds: boolean\n): string {\n const sec = seconds ? \":SS\" : \"\";\n if (mode === \"date\") return \"MM/DD/YYYY\";\n if (mode === \"time\") return fmt === \"12h\" ? `HH:MM${sec} AM` : `HH:MM${sec}`;\n return fmt === \"12h\" ? `MM/DD/YYYY HH:MM${sec} AM` : `MM/DD/YYYY HH:MM${sec}`;\n}\n\n/* ── Component ── */\n\nconst DateTimePicker = React.forwardRef<HTMLInputElement, DateTimePickerProps>(\n (\n {\n value: valueProp,\n onChange,\n onValueChange,\n defaultValue,\n mode = \"datetime\",\n format = \"12h\",\n minDate,\n maxDate,\n showSeconds = false,\n placeholder,\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n showTodayButton = true,\n showClearButton = true,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(\n defaultValue\n );\n\n const value = isControlled\n ? valueProp === null\n ? undefined\n : valueProp\n : internalValue;\n\n const fireChange = React.useCallback(\n (next: Date | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n onValueChange?.(next);\n },\n [isControlled, onChange, onValueChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(\n value != null ? formatDateTime(value, mode, format, showSeconds) : \"\"\n );\n\n React.useEffect(() => {\n setInputValue(\n value != null ? formatDateTime(value, mode, format, showSeconds) : \"\"\n );\n }, [value, mode, format, showSeconds]);\n\n const currentHour = value?.getHours() ?? 0;\n const currentMinute = value?.getMinutes() ?? 0;\n const currentSecond = value?.getSeconds() ?? 0;\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputBlur = () => {\n if (inputValue.trim() === \"\") {\n fireChange(undefined);\n return;\n }\n const parsed = parseInputValue(inputValue, mode, format, showSeconds);\n if (parsed != null) {\n fireChange(parsed);\n } else {\n setInputValue(\n value != null ? formatDateTime(value, mode, format, showSeconds) : \"\"\n );\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleInputBlur();\n setOpen(false);\n }\n if (e.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n const handleDateSelect = (date: Date) => {\n const next = new Date(date);\n if (value != null) {\n next.setHours(\n value.getHours(),\n value.getMinutes(),\n value.getSeconds(),\n 0\n );\n } else {\n next.setHours(0, 0, 0, 0);\n }\n fireChange(next);\n if (mode === \"date\") {\n setOpen(false);\n }\n };\n\n const handleHourChange = (h: number) => {\n const base = value ?? new Date();\n const next = new Date(base);\n next.setHours(h);\n next.setMilliseconds(0);\n fireChange(next);\n };\n\n const handleMinuteChange = (m: number) => {\n const base = value ?? new Date();\n const next = new Date(base);\n next.setMinutes(m);\n next.setMilliseconds(0);\n fireChange(next);\n };\n\n const handleSecondChange = (s: number) => {\n const base = value ?? new Date();\n const next = new Date(base);\n next.setSeconds(s);\n next.setMilliseconds(0);\n fireChange(next);\n };\n\n const handleToday = () => {\n const now = new Date();\n if (mode === \"date\") {\n now.setHours(0, 0, 0, 0);\n }\n fireChange(now);\n if (mode === \"date\") {\n setOpen(false);\n }\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setOpen(false);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-date-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-date-picker-wrapper\",\n `kz-date-picker-wrapper--${variant}`,\n `kz-date-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-date-picker-wrapper--${state}`,\n open && \"kz-date-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-date-picker-input\",\n `kz-date-picker-input--${size}`,\n inputClassName\n );\n\n const showCalendar = mode === \"date\" || mode === \"datetime\";\n const showTime = mode === \"time\" || mode === \"datetime\";\n\n const iconName = mode === \"time\" ? IconName.Clock3 : IconName.Calendar;\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-date-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-date-picker-icon\">\n <Icon name={iconName} size={iconSize} />\n </span>\n <input\n ref={ref}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={\n placeholder ??\n getDefaultPlaceholder(mode, format, showSeconds)\n }\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"date-picker-message\"\n : helperText != null\n ? \"date-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-date-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle calendar\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-date-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"kz-date-picker-body\">\n {showCalendar && (\n <Calendar\n selected={value}\n onSelect={handleDateSelect}\n minDate={minDate}\n maxDate={maxDate}\n />\n )}\n\n {showTime && (\n <TimeSelector\n hour={currentHour}\n minute={currentMinute}\n second={showSeconds ? currentSecond : undefined}\n onHourChange={handleHourChange}\n onMinuteChange={handleMinuteChange}\n onSecondChange={\n showSeconds ? handleSecondChange : undefined\n }\n format={format}\n />\n )}\n </div>\n\n {(showTodayButton || showClearButton) && (\n <div className=\"kz-date-picker-footer\">\n {showTodayButton && (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={handleToday}\n >\n {mode === \"time\" ? \"Now\" : \"Today\"}\n </Button>\n )}\n {showClearButton && (\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n )}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"date-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"date-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nDateTimePicker.displayName = \"DateTimePicker\";\n\nexport { DateTimePicker };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport interface CalendarProps {\n /** Single-date selection (used by DateTimePicker). */\n selected?: Date;\n onSelect: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n\n /** Range mode — start of range. */\n selectedStart?: Date;\n /** Range mode — end of range. */\n selectedEnd?: Date;\n /** Range mode — date currently hovered (for preview highlight). */\n hoverDate?: Date;\n /** Range mode — fires on cell mouse enter/leave. */\n onHover?: (date: Date | null) => void;\n\n /** Hide the prev-month nav button (used by DateRangePicker right panel). */\n hidePrev?: boolean;\n /** Hide the next-month nav button (used by DateRangePicker left panel). */\n hideNext?: boolean;\n /** External control of the displayed month. */\n viewMonth?: Date;\n /** Fires when nav buttons change the displayed month. */\n onViewMonthChange?: (date: Date) => void;\n}\n\nconst DAYS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nfunction getDaysInMonth(year: number, month: number) {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(year: number, month: number) {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: Date, b: Date) {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction isToday(date: Date) {\n return isSameDay(date, new Date());\n}\n\nfunction isDateDisabled(date: Date, minDate?: Date, maxDate?: Date) {\n if (minDate != null) {\n const min = new Date(\n minDate.getFullYear(),\n minDate.getMonth(),\n minDate.getDate()\n );\n if (date < min) return true;\n }\n if (maxDate != null) {\n const max = new Date(\n maxDate.getFullYear(),\n maxDate.getMonth(),\n maxDate.getDate()\n );\n if (date > max) return true;\n }\n return false;\n}\n\nfunction addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n}\n\nfunction isWithinRange(date: Date, start?: Date, end?: Date): boolean {\n if (start == null || end == null) return false;\n const d = date.getTime();\n const s = new Date(\n start.getFullYear(),\n start.getMonth(),\n start.getDate()\n ).getTime();\n const e = new Date(\n end.getFullYear(),\n end.getMonth(),\n end.getDate()\n ).getTime();\n const lo = Math.min(s, e);\n const hi = Math.max(s, e);\n return d > lo && d < hi;\n}\n\nconst Calendar: React.FC<CalendarProps> = ({\n selected,\n onSelect,\n minDate,\n maxDate,\n className,\n selectedStart,\n selectedEnd,\n hoverDate,\n onHover,\n hidePrev = false,\n hideNext = false,\n viewMonth: viewMonthProp,\n onViewMonthChange,\n}) => {\n const isRangeMode = selectedStart !== undefined || selectedEnd !== undefined;\n\n const [internalViewDate, setInternalViewDate] = React.useState(\n () => viewMonthProp ?? selected ?? selectedStart ?? new Date()\n );\n const viewDate = viewMonthProp ?? internalViewDate;\n\n const setViewDate = React.useCallback(\n (d: Date) => {\n if (onViewMonthChange != null) {\n onViewMonthChange(d);\n } else {\n setInternalViewDate(d);\n }\n },\n [onViewMonthChange]\n );\n\n const [focusedDate, setFocusedDate] = React.useState<Date | null>(null);\n const gridRef = React.useRef<HTMLDivElement>(null);\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n const daysInPrevMonth = getDaysInMonth(year, month - 1);\n\n const prevMonth = () => setViewDate(new Date(year, month - 1, 1));\n const nextMonth = () => setViewDate(new Date(year, month + 1, 1));\n\n const cells: { date: Date; inMonth: boolean }[] = [];\n\n for (let i = firstDay - 1; i >= 0; i--) {\n cells.push({\n date: new Date(year, month - 1, daysInPrevMonth - i),\n inMonth: false,\n });\n }\n\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push({ date: new Date(year, month, d), inMonth: true });\n }\n\n const remaining = 42 - cells.length;\n for (let d = 1; d <= remaining; d++) {\n cells.push({ date: new Date(year, month + 1, d), inMonth: false });\n }\n\n // Focus the correct button when focusedDate changes\n React.useEffect(() => {\n if (focusedDate == null || gridRef.current == null) return;\n const dateStr = focusedDate.toISOString().split(\"T\")[0];\n const btn = gridRef.current.querySelector(\n `[data-date=\"${dateStr}\"]`\n ) as HTMLButtonElement | null;\n btn?.focus();\n }, [focusedDate]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const current =\n focusedDate ?? selected ?? selectedStart ?? new Date(year, month, 1);\n let next: Date | null = null;\n\n switch (e.key) {\n case \"ArrowLeft\":\n next = addDays(current, -1);\n break;\n case \"ArrowRight\":\n next = addDays(current, 1);\n break;\n case \"ArrowUp\":\n next = addDays(current, -7);\n break;\n case \"ArrowDown\":\n next = addDays(current, 7);\n break;\n case \"Enter\":\n case \" \":\n if (!isDateDisabled(current, minDate, maxDate)) {\n onSelect(current);\n }\n e.preventDefault();\n return;\n default:\n return;\n }\n\n e.preventDefault();\n\n if (next != null) {\n if (!isDateDisabled(next, minDate, maxDate)) {\n setFocusedDate(next);\n if (next.getMonth() !== month || next.getFullYear() !== year) {\n setViewDate(new Date(next.getFullYear(), next.getMonth(), 1));\n }\n }\n }\n };\n\n // Determine the effective range end for highlighting (hover preview or actual end)\n const rangeEnd = hoverDate ?? selectedEnd;\n\n return (\n <div\n className={cn(\"kz-calendar\", className)}\n role=\"grid\"\n aria-label=\"Calendar\"\n >\n <div className=\"kz-calendar-header\">\n {hidePrev ? (\n <span className=\"kz-calendar-nav\" style={{ visibility: \"hidden\" }} />\n ) : (\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"kz-calendar-nav\"\n aria-label=\"Previous month\"\n >\n <Icon name={IconName.ChevronLeft} size={16} />\n </button>\n )}\n <span className=\"kz-calendar-title\" aria-live=\"polite\">\n {MONTHS[month]} {year}\n </span>\n {hideNext ? (\n <span className=\"kz-calendar-nav\" style={{ visibility: \"hidden\" }} />\n ) : (\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"kz-calendar-nav\"\n aria-label=\"Next month\"\n >\n <Icon name={IconName.ChevronRight} size={16} />\n </button>\n )}\n </div>\n\n <div\n className=\"kz-calendar-grid\"\n ref={gridRef}\n onKeyDown={handleKeyDown}\n role=\"grid\"\n >\n {DAYS.map((day) => (\n <div key={day} className=\"kz-calendar-day-name\" role=\"columnheader\">\n {day}\n </div>\n ))}\n {cells.map((cell, i) => {\n const disabled =\n !cell.inMonth || isDateDisabled(cell.date, minDate, maxDate);\n const today = isToday(cell.date) && cell.inMonth;\n const isFocused =\n focusedDate != null && isSameDay(cell.date, focusedDate);\n const dateStr = cell.date.toISOString().split(\"T\")[0];\n\n // Single-date selection\n const isSelected =\n !isRangeMode &&\n selected != null &&\n cell.inMonth &&\n isSameDay(cell.date, selected);\n\n // Range selection\n const isStart =\n isRangeMode &&\n selectedStart != null &&\n cell.inMonth &&\n isSameDay(cell.date, selectedStart);\n const isEnd =\n isRangeMode &&\n rangeEnd != null &&\n cell.inMonth &&\n isSameDay(cell.date, rangeEnd);\n const inRange =\n isRangeMode &&\n cell.inMonth &&\n isWithinRange(cell.date, selectedStart, rangeEnd);\n\n return (\n <button\n key={i}\n type=\"button\"\n disabled={disabled}\n data-date={dateStr}\n onClick={() => {\n onSelect(cell.date);\n setFocusedDate(cell.date);\n }}\n onMouseEnter={() => onHover?.(cell.date)}\n onMouseLeave={() => onHover?.(null)}\n className={cn(\n \"kz-calendar-cell\",\n !cell.inMonth && \"kz-calendar-cell--outside\",\n isSelected && \"kz-calendar-cell--selected\",\n isStart && \"kz-calendar-cell--range-start\",\n isEnd && \"kz-calendar-cell--range-end\",\n inRange && \"kz-calendar-cell--in-range\",\n today && \"kz-calendar-cell--today\",\n disabled && \"kz-calendar-cell--disabled\"\n )}\n tabIndex={\n isFocused\n ? 0\n : (isSelected || isStart) && focusedDate == null\n ? 0\n : -1\n }\n role=\"gridcell\"\n aria-selected={isSelected || isStart || isEnd}\n aria-label={cell.date.toLocaleDateString(undefined, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n })}\n >\n {cell.date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TimeSelectorProps {\n hour: number;\n minute: number;\n /** Pass a number (0-59) to show the seconds column. Omit to hide it. */\n second?: number;\n onHourChange: (hour: number) => void;\n onMinuteChange: (minute: number) => void;\n onSecondChange?: (second: number) => void;\n format?: \"12h\" | \"24h\";\n className?: string;\n}\n\nfunction to12Hour(h24: number): { hour12: number; period: \"AM\" | \"PM\" } {\n const period: \"AM\" | \"PM\" = h24 >= 12 ? \"PM\" : \"AM\";\n let hour12 = h24 % 12;\n if (hour12 === 0) hour12 = 12;\n return { hour12, period };\n}\n\nfunction to24Hour(hour12: number, period: \"AM\" | \"PM\"): number {\n if (period === \"AM\") return hour12 === 12 ? 0 : hour12;\n return hour12 === 12 ? 12 : hour12 + 12;\n}\n\nconst SIXTY = Array.from({ length: 60 }, (_, i) => i);\n\nconst TimeSelector: React.FC<TimeSelectorProps> = ({\n hour,\n minute,\n second,\n onHourChange,\n onMinuteChange,\n onSecondChange,\n format = \"12h\",\n className,\n}) => {\n const is12h = format === \"12h\";\n const showSeconds = second !== undefined && onSecondChange !== undefined;\n const { hour12, period } = to12Hour(hour);\n const [currentPeriod, setCurrentPeriod] = React.useState<\"AM\" | \"PM\">(period);\n\n React.useEffect(() => {\n setCurrentPeriod(period);\n }, [period]);\n\n const hourRef = React.useRef<HTMLDivElement>(null);\n const minuteRef = React.useRef<HTMLDivElement>(null);\n const secondRef = React.useRef<HTMLDivElement>(null);\n\n const hours = is12h\n ? Array.from({ length: 12 }, (_, i) => i + 1)\n : Array.from({ length: 24 }, (_, i) => i);\n\n const selectedHourDisplay = is12h ? hour12 : hour;\n\n const handleHourSelect = (h: number) => {\n if (is12h) {\n onHourChange(to24Hour(h, currentPeriod));\n } else {\n onHourChange(h);\n }\n };\n\n const handlePeriodSelect = (p: \"AM\" | \"PM\") => {\n setCurrentPeriod(p);\n if (is12h) {\n onHourChange(to24Hour(hour12, p));\n }\n };\n\n const scrollToSelected = React.useCallback(\n (ref: React.RefObject<HTMLDivElement | null>, value: number) => {\n if (ref.current == null) return;\n const selected = ref.current.querySelector(\n `[data-value=\"${value}\"]`\n ) as HTMLElement | null;\n if (selected != null) {\n selected.scrollIntoView({ block: \"center\", behavior: \"instant\" });\n }\n },\n []\n );\n\n React.useEffect(() => {\n scrollToSelected(hourRef, selectedHourDisplay);\n }, [scrollToSelected, selectedHourDisplay]);\n\n React.useEffect(() => {\n scrollToSelected(minuteRef, minute);\n }, [scrollToSelected, minute]);\n\n React.useEffect(() => {\n if (showSeconds && second !== undefined) {\n scrollToSelected(secondRef, second);\n }\n }, [scrollToSelected, second, showSeconds]);\n\n return (\n <div className={cn(\"kz-time-selector\", className)}>\n <div className=\"kz-time-selector-columns\">\n {/* Hour column */}\n <div className=\"kz-time-selector-column\">\n <div className=\"kz-time-selector-label\">Hr</div>\n <div className=\"kz-time-selector-scroll\" ref={hourRef}>\n {hours.map((h) => (\n <button\n key={h}\n type=\"button\"\n data-value={h}\n onClick={() => handleHourSelect(h)}\n className={cn(\n \"kz-time-selector-option\",\n h === selectedHourDisplay &&\n \"kz-time-selector-option--selected\"\n )}\n >\n {h.toString().padStart(2, \"0\")}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"kz-time-selector-separator\">:</div>\n\n {/* Minute column */}\n <div className=\"kz-time-selector-column\">\n <div className=\"kz-time-selector-label\">Min</div>\n <div className=\"kz-time-selector-scroll\" ref={minuteRef}>\n {SIXTY.map((m) => (\n <button\n key={m}\n type=\"button\"\n data-value={m}\n onClick={() => onMinuteChange(m)}\n className={cn(\n \"kz-time-selector-option\",\n m === minute && \"kz-time-selector-option--selected\"\n )}\n >\n {m.toString().padStart(2, \"0\")}\n </button>\n ))}\n </div>\n </div>\n\n {/* Seconds column (optional) */}\n {showSeconds && (\n <>\n <div className=\"kz-time-selector-separator\">:</div>\n\n <div className=\"kz-time-selector-column\">\n <div className=\"kz-time-selector-label\">Sec</div>\n <div className=\"kz-time-selector-scroll\" ref={secondRef}>\n {SIXTY.map((s) => (\n <button\n key={s}\n type=\"button\"\n data-value={s}\n onClick={() => onSecondChange(s)}\n className={cn(\n \"kz-time-selector-option\",\n s === second && \"kz-time-selector-option--selected\"\n )}\n >\n {s.toString().padStart(2, \"0\")}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n\n {/* AM/PM column */}\n {is12h && (\n <div className=\"kz-time-selector-column kz-time-selector-column--period\">\n <div className=\"kz-time-selector-label\"> </div>\n <div className=\"kz-time-selector-scroll kz-time-selector-scroll--period\">\n {([\"AM\", \"PM\"] as const).map((p) => (\n <button\n key={p}\n type=\"button\"\n onClick={() => handlePeriodSelect(p)}\n className={cn(\n \"kz-time-selector-option\",\n p === currentPeriod && \"kz-time-selector-option--selected\"\n )}\n >\n {p}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nTimeSelector.displayName = \"TimeSelector\";\n\nexport { TimeSelector };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Calendar } from \"../date-time-picker/Calendar\";\n\nexport interface DateRange {\n start: Date | undefined;\n end: Date | undefined;\n}\n\nexport interface DateRangePickerProps {\n /** Controlled value. Omit for uncontrolled mode. */\n value?: DateRange | null;\n /** Fires when the range changes. */\n onChange?: (value: DateRange | undefined) => void;\n /** Initial value for uncontrolled mode. */\n defaultValue?: DateRange;\n\n minDate?: Date;\n maxDate?: Date;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n showTodayButton?: boolean;\n showClearButton?: boolean;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Formatting / parsing helpers ── */\n\nfunction formatDate(date: Date): string {\n const m = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const d = date.getDate().toString().padStart(2, \"0\");\n const y = date.getFullYear();\n return `${m}/${d}/${y}`;\n}\n\nfunction formatRange(range: DateRange): string {\n if (range.start == null && range.end == null) return \"\";\n if (range.start != null && range.end == null)\n return `${formatDate(range.start)} – ...`;\n if (range.start != null && range.end != null)\n return `${formatDate(range.start)} – ${formatDate(range.end)}`;\n return \"\";\n}\n\nfunction parseDate(raw: string): Date | null {\n const match = raw.trim().match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (match == null) return null;\n const d = new Date(\n parseInt(match[3]),\n parseInt(match[1]) - 1,\n parseInt(match[2])\n );\n if (isNaN(d.getTime())) return null;\n return d;\n}\n\nfunction parseRangeInput(raw: string): DateRange | null {\n const trimmed = raw.trim();\n if (trimmed === \"\") return null;\n\n // Try \"MM/DD/YYYY – MM/DD/YYYY\" or \"MM/DD/YYYY - MM/DD/YYYY\"\n const parts = trimmed.split(/\\s*[–-]\\s*/);\n if (parts.length !== 2) return null;\n\n const start = parseDate(parts[0]);\n const end = parseDate(parts[1]);\n if (start == null || end == null) return null;\n if (start > end) return null;\n\n return { start, end };\n}\n\n/* ── Component ── */\n\nconst DateRangePicker = React.forwardRef<\n HTMLInputElement,\n DateRangePickerProps\n>(\n (\n {\n value: valueProp,\n onChange,\n defaultValue,\n minDate,\n maxDate,\n placeholder = \"Start date – End date\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n showTodayButton = true,\n showClearButton = true,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<\n DateRange | undefined\n >(defaultValue);\n\n const value: DateRange | undefined = isControlled\n ? valueProp === null\n ? undefined\n : valueProp\n : internalValue;\n\n const fireChange = React.useCallback(\n (next: DateRange | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [selectingEnd, setSelectingEnd] = React.useState(false);\n const [hoverDate, setHoverDate] = React.useState<Date | null>(null);\n\n // Pending start (before end is picked)\n const [pendingStart, setPendingStart] = React.useState<Date | undefined>(\n undefined\n );\n\n const [inputValue, setInputValue] = React.useState(\n value != null ? formatRange(value) : \"\"\n );\n\n React.useEffect(() => {\n if (!selectingEnd) {\n setInputValue(value != null ? formatRange(value) : \"\");\n }\n }, [value, selectingEnd]);\n\n // Left calendar shows month of start date or current month\n const [leftMonth, setLeftMonth] = React.useState(\n () => value?.start ?? defaultValue?.start ?? new Date()\n );\n\n // Right calendar is always left + 1 month\n const rightMonth = new Date(\n leftMonth.getFullYear(),\n leftMonth.getMonth() + 1,\n 1\n );\n\n const handlePrevMonth = React.useCallback(() => {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() - 1, 1)\n );\n }, []);\n\n const handleNextMonth = React.useCallback(() => {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + 1, 1)\n );\n }, []);\n\n const handleDateSelect = (date: Date) => {\n if (!selectingEnd) {\n // First click: set start\n setPendingStart(date);\n setSelectingEnd(true);\n setHoverDate(null);\n // Show partial range in input\n setInputValue(`${formatDate(date)} – ...`);\n } else {\n // Second click: set end\n const start = pendingStart!;\n if (date < start) {\n // Clicked before start — treat as new start\n setPendingStart(date);\n setInputValue(`${formatDate(date)} – ...`);\n return;\n }\n const range: DateRange = { start, end: date };\n fireChange(range);\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n }\n };\n\n const handleHover = (date: Date | null) => {\n if (selectingEnd) {\n setHoverDate(date);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputBlur = () => {\n if (inputValue.trim() === \"\") {\n fireChange(undefined);\n setSelectingEnd(false);\n setPendingStart(undefined);\n return;\n }\n const parsed = parseRangeInput(inputValue);\n if (parsed != null) {\n fireChange(parsed);\n setSelectingEnd(false);\n setPendingStart(undefined);\n } else {\n setInputValue(value != null ? formatRange(value) : \"\");\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleInputBlur();\n setOpen(false);\n }\n if (e.key === \"Escape\") {\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n }\n };\n\n const handleToday = () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n fireChange({ start: now, end: now });\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n };\n\n // The displayed range in the calendars\n const displayStart = selectingEnd ? pendingStart : value?.start;\n const displayEnd = selectingEnd ? undefined : value?.end;\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-date-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-date-picker-wrapper\",\n `kz-date-picker-wrapper--${variant}`,\n `kz-date-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-date-picker-wrapper--${state}`,\n open && \"kz-date-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-date-picker-input\",\n `kz-date-picker-input--${size}`,\n inputClassName\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-date-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root\n open={open}\n onOpenChange={(nextOpen) => {\n if (!nextOpen) {\n // Closing — reset selection state if mid-selection\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n }\n setOpen(nextOpen);\n }}\n >\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-date-picker-icon\">\n <Icon name={IconName.Calendar} size={iconSize} />\n </span>\n <input\n ref={ref}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"date-range-picker-message\"\n : helperText != null\n ? \"date-range-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-date-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle calendar\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-date-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"kz-date-range-picker-calendars\">\n <Calendar\n onSelect={handleDateSelect}\n selectedStart={displayStart}\n selectedEnd={displayEnd}\n hoverDate={hoverDate ?? undefined}\n onHover={handleHover}\n minDate={minDate}\n maxDate={maxDate}\n viewMonth={leftMonth}\n onViewMonthChange={handlePrevMonth}\n hideNext\n />\n <div className=\"kz-date-range-picker-divider\" />\n <Calendar\n onSelect={handleDateSelect}\n selectedStart={displayStart}\n selectedEnd={displayEnd}\n hoverDate={hoverDate ?? undefined}\n onHover={handleHover}\n minDate={minDate}\n maxDate={maxDate}\n viewMonth={rightMonth}\n onViewMonthChange={handleNextMonth}\n hidePrev\n />\n </div>\n\n {(showTodayButton || showClearButton) && (\n <div className=\"kz-date-picker-footer\">\n {showTodayButton && (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={handleToday}\n >\n Today\n </Button>\n )}\n {showClearButton && (\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n )}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"date-range-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"date-range-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nDateRangePicker.displayName = \"DateRangePicker\";\n\nexport { DateRangePicker };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Hardcoded palette (10 hues × 10 shades) ── */\n\nconst COLOR_PALETTE: string[] = [\n // Grays\n \"#f8f9fa\",\n \"#e9ecef\",\n \"#dee2e6\",\n \"#ced4da\",\n \"#adb5bd\",\n \"#6c757d\",\n \"#495057\",\n \"#343a40\",\n \"#212529\",\n \"#0d1117\",\n // Reds\n \"#fff5f5\",\n \"#ffe3e3\",\n \"#ffc9c9\",\n \"#ffa8a8\",\n \"#ff8787\",\n \"#ff6b6b\",\n \"#fa5252\",\n \"#f03e3e\",\n \"#e03131\",\n \"#c92a2a\",\n // Oranges\n \"#fff4e6\",\n \"#ffe8cc\",\n \"#ffd8a8\",\n \"#ffc078\",\n \"#ffa94d\",\n \"#ff922b\",\n \"#fd7e14\",\n \"#e8590c\",\n \"#d9480f\",\n \"#bf4000\",\n // Yellows\n \"#fff9db\",\n \"#fff3bf\",\n \"#ffec99\",\n \"#ffe066\",\n \"#ffd43b\",\n \"#fcc419\",\n \"#fab005\",\n \"#f59f00\",\n \"#f08c00\",\n \"#e67700\",\n // Greens\n \"#ebfbee\",\n \"#d3f9d8\",\n \"#b2f2bb\",\n \"#8ce99a\",\n \"#69db7c\",\n \"#51cf66\",\n \"#40c057\",\n \"#37b24d\",\n \"#2f9e44\",\n \"#2b8a3e\",\n // Teals\n \"#e6fcf5\",\n \"#c3fae8\",\n \"#96f2d7\",\n \"#63e6be\",\n \"#38d9a9\",\n \"#20c997\",\n \"#12b886\",\n \"#0ca678\",\n \"#099268\",\n \"#087f5b\",\n // Blues\n \"#e7f5ff\",\n \"#d0ebff\",\n \"#a5d8ff\",\n \"#74c0fc\",\n \"#4dabf7\",\n \"#339af0\",\n \"#228be6\",\n \"#1c7ed6\",\n \"#1971c2\",\n \"#1864ab\",\n // Indigos\n \"#edf2ff\",\n \"#dbe4ff\",\n \"#bac8ff\",\n \"#91a7ff\",\n \"#748ffc\",\n \"#5c7cfa\",\n \"#4c6ef5\",\n \"#4263eb\",\n \"#3b5bdb\",\n \"#364fc7\",\n // Purples\n \"#f8f0fc\",\n \"#f3d9fa\",\n \"#eebefa\",\n \"#e599f7\",\n \"#da77f2\",\n \"#cc5de8\",\n \"#be4bdb\",\n \"#ae3ec9\",\n \"#9c36b5\",\n \"#862e9c\",\n // Pinks\n \"#fff0f6\",\n \"#ffdeeb\",\n \"#fcc2d7\",\n \"#faa2c1\",\n \"#f783ac\",\n \"#f06595\",\n \"#e64980\",\n \"#d6336c\",\n \"#c2255c\",\n \"#a61e4d\",\n];\n\n/* ── Hex helpers ── */\n\nconst HEX_RE = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\n\nfunction isValidHex(v: string): boolean {\n return HEX_RE.test(v);\n}\n\nfunction normalizeHex(v: string): string {\n const m = v.match(HEX_RE);\n if (m == null) return v;\n const hex = m[1];\n if (hex.length === 3) {\n return `#${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`.toLowerCase();\n }\n return `#${hex}`.toLowerCase();\n}\n\n/* ── Props ── */\n\nexport interface ColorPickerProps {\n /** Controlled value (hex string). Omit for uncontrolled. */\n value?: string;\n /** Initial value for uncontrolled mode. */\n defaultValue?: string;\n /** Fires when a color is picked or cleared. */\n onChange?: (value: string | undefined) => void;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Component ── */\n\nconst ColorPicker = React.forwardRef<HTMLInputElement, ColorPickerProps>(\n (\n {\n value: valueProp,\n defaultValue,\n onChange,\n placeholder = \"#000000\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<\n string | undefined\n >(defaultValue);\n\n const value = isControlled ? valueProp : internalValue;\n\n const fireChange = React.useCallback(\n (next: string | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(value ?? \"\");\n\n React.useEffect(() => {\n setInputValue(value ?? \"\");\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputBlur = () => {\n const trimmed = inputValue.trim();\n if (trimmed === \"\") {\n fireChange(undefined);\n return;\n }\n if (isValidHex(trimmed)) {\n fireChange(normalizeHex(trimmed));\n } else {\n setInputValue(value ?? \"\");\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleInputBlur();\n setOpen(false);\n }\n if (e.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n const handleSwatchClick = (hex: string) => {\n fireChange(hex);\n setOpen(false);\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setOpen(false);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-color-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-color-picker-wrapper\",\n `kz-color-picker-wrapper--${variant}`,\n `kz-color-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-color-picker-wrapper--${state}`,\n open && \"kz-color-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-color-picker-input\",\n `kz-color-picker-input--${size}`,\n inputClassName\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-color-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-color-picker-icon\">\n <Icon name={IconName.Palette} size={iconSize} />\n </span>\n {value != null && value !== \"\" && (\n <span\n className=\"kz-color-picker-swatch-preview\"\n style={{ backgroundColor: value }}\n />\n )}\n <input\n ref={ref}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"color-picker-message\"\n : helperText != null\n ? \"color-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-color-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle color picker\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-color-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"kz-color-picker-grid\">\n {COLOR_PALETTE.map((hex) => (\n <button\n key={hex}\n type=\"button\"\n className={cn(\n \"kz-color-picker-swatch\",\n value === hex && \"kz-color-picker-swatch--selected\"\n )}\n style={{ backgroundColor: hex }}\n title={hex}\n onClick={() => handleSwatchClick(hex)}\n />\n ))}\n </div>\n\n <div className=\"kz-color-picker-footer\">\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"color-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"color-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nColorPicker.displayName = \"ColorPicker\";\n\nexport { ColorPicker };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── All icon names for the grid ── */\nconst ALL_ICONS = Object.values(IconName) as IconName[];\n\n/* ── Props ── */\n\nexport interface IconPickerProps {\n /** Controlled value (IconName). Omit for uncontrolled. */\n value?: IconName;\n /** Initial value for uncontrolled mode. */\n defaultValue?: IconName;\n /** Fires when an icon is picked or cleared. */\n onChange?: (value: IconName | undefined) => void;\n\n /** Subset of icon names to display. Defaults to all icons. */\n icons?: IconName[];\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Component ── */\n\nconst IconPicker = React.forwardRef<HTMLInputElement, IconPickerProps>(\n (\n {\n value: valueProp,\n defaultValue,\n onChange,\n icons,\n placeholder = \"Select icon…\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<\n IconName | undefined\n >(defaultValue);\n\n const value = isControlled ? valueProp : internalValue;\n\n const fireChange = React.useCallback(\n (next: IconName | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n\n const availableIcons = icons ?? ALL_ICONS;\n\n const filteredIcons = React.useMemo(() => {\n if (searchQuery.trim() === \"\") return availableIcons;\n const q = searchQuery.toLowerCase();\n return availableIcons.filter((name) => name.includes(q));\n }, [searchQuery, availableIcons]);\n\n const handleIconClick = (name: IconName) => {\n fireChange(name);\n setOpen(false);\n setSearchQuery(\"\");\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setOpen(false);\n setSearchQuery(\"\");\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n setOpen(nextOpen);\n if (!nextOpen) {\n setSearchQuery(\"\");\n }\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-icon-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-icon-picker-wrapper\",\n `kz-icon-picker-wrapper--${variant}`,\n `kz-icon-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-icon-picker-wrapper--${state}`,\n open && \"kz-icon-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-icon-picker-input\",\n `kz-icon-picker-input--${size}`,\n inputClassName\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-icon-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-icon-picker-icon\">\n <Icon name={value ?? IconName.LayoutGrid} size={iconSize} />\n </span>\n <input\n ref={ref}\n type=\"text\"\n value={value ?? \"\"}\n readOnly\n placeholder={placeholder}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"icon-picker-message\"\n : helperText != null\n ? \"icon-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-icon-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle icon picker\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-icon-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {/* Search */}\n <div className=\"kz-icon-picker-search-wrapper\">\n <Icon name={IconName.Search} size={14} />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search icons…\"\n className=\"kz-icon-picker-search-input\"\n />\n </div>\n\n {/* Grid */}\n <div className=\"kz-icon-picker-grid-wrapper\">\n <div className=\"kz-icon-picker-grid\">\n {filteredIcons.length === 0 ? (\n <span className=\"kz-icon-picker-empty\">No icons found</span>\n ) : (\n filteredIcons.map((name) => (\n <button\n key={name}\n type=\"button\"\n className={cn(\n \"kz-icon-picker-cell\",\n value === name && \"kz-icon-picker-cell--selected\"\n )}\n title={name}\n onClick={() => handleIconClick(name)}\n >\n <Icon name={name} size=\"sm\" />\n </button>\n ))\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"kz-icon-picker-footer\">\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"icon-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"icon-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nIconPicker.displayName = \"IconPicker\";\n\nexport { IconPicker };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Helpers ── */\n\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n const size = bytes / Math.pow(1024, i);\n return `${size.toFixed(i === 0 ? 0 : 1)} ${units[i]}`;\n}\n\n/* ── Props ── */\n\nexport interface FileUploaderProps {\n /** Controlled value (File[]). Omit for uncontrolled. */\n value?: File[];\n /** Initial value for uncontrolled mode. */\n defaultValue?: File[];\n /** Fires when files change (added or removed). */\n onChange?: (files: File[]) => void;\n\n /** MIME type accept string, e.g. \"image/*,.pdf\" */\n accept?: string;\n /** Allow multiple files. Default: true */\n multiple?: boolean;\n /** Max file size in bytes per file. */\n maxSize?: number;\n /** Max number of files allowed. */\n maxFiles?: number;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n className?: string;\n}\n\n/* ── Component ── */\n\nconst FileUploader = React.forwardRef<HTMLInputElement, FileUploaderProps>(\n (\n {\n value: valueProp,\n defaultValue,\n onChange,\n accept,\n multiple = true,\n maxSize,\n maxFiles,\n placeholder = \"Choose files…\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n className,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<File[]>(\n defaultValue ?? []\n );\n\n const files = isControlled ? valueProp : internalValue;\n\n const fireChange = React.useCallback(\n (next: File[]) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [isDragOver, setIsDragOver] = React.useState(false);\n const dragCounterRef = React.useRef(0);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const validateAndAdd = (incoming: File[]) => {\n let filtered = incoming;\n if (maxSize != null) {\n filtered = filtered.filter((f) => f.size <= maxSize);\n }\n let merged = [...files, ...filtered];\n if (maxFiles != null) {\n merged = merged.slice(0, maxFiles);\n }\n fireChange(merged);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n validateAndAdd(Array.from(e.target.files));\n }\n e.target.value = \"\";\n };\n\n const handleWrapperClick = () => {\n if (!disabled) {\n inputRef.current?.click();\n }\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current += 1;\n if (!disabled) setIsDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current -= 1;\n if (dragCounterRef.current === 0) setIsDragOver(false);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current = 0;\n setIsDragOver(false);\n if (disabled) return;\n if (e.dataTransfer.files) {\n validateAndAdd(Array.from(e.dataTransfer.files));\n }\n };\n\n const handleRemove = (index: number) => {\n const next = files.filter((_, i) => i !== index);\n fireChange(next);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-file-uploader-root\", className);\n\n const wrapperClass = cn(\n \"kz-file-uploader-wrapper\",\n `kz-file-uploader-wrapper--${variant}`,\n `kz-file-uploader-wrapper--${size}`,\n state !== TextInputState.Default && `kz-file-uploader-wrapper--${state}`,\n isDragOver && \"kz-file-uploader-wrapper--dragover\",\n disabled && \"kz-file-uploader-wrapper--disabled\"\n );\n\n const textClass = cn(\n \"kz-file-uploader-text\",\n `kz-file-uploader-text--${size}`,\n files.length > 0 && \"kz-file-uploader-text--has-files\"\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n const itemIconSize = size === TextInputSize.Sm ? 14 : 16;\n const removeIconSize = size === TextInputSize.Sm ? 12 : 14;\n\n const displayText =\n files.length === 0\n ? placeholder\n : files.length === 1\n ? files[0].name\n : `${files.length} files selected`;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-file-uploader-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"kz-file-uploader-input\"\n tabIndex={-1}\n aria-hidden\n />\n\n <div\n className={wrapperClass}\n onClick={handleWrapperClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <span className={textClass}>{displayText}</span>\n <span className=\"kz-file-uploader-icon\">\n <Icon name={IconName.FilePlus} size={iconSize} />\n </span>\n </div>\n\n {files.length > 0 && (\n <ul className=\"kz-file-uploader-list\">\n {files.map((file, index) => (\n <li\n key={`${file.name}-${file.size}-${index}`}\n className=\"kz-file-uploader-item\"\n >\n <Icon\n name={IconName.FileText}\n size={itemIconSize}\n className=\"kz-file-uploader-item-icon\"\n />\n <span className=\"kz-file-uploader-item-name\">{file.name}</span>\n <span className=\"kz-file-uploader-item-size\">\n {formatFileSize(file.size)}\n </span>\n <button\n type=\"button\"\n className=\"kz-file-uploader-item-remove\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(index);\n }}\n aria-label={`Remove ${file.name}`}\n disabled={disabled}\n >\n <Icon name={IconName.X} size={removeIconSize} />\n </button>\n </li>\n ))}\n </ul>\n )}\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"file-uploader-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"file-uploader-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nFileUploader.displayName = \"FileUploader\";\n\nexport { FileUploader };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Checkbox } from \"../checkbox\";\nimport { CheckboxSize } from \"../../constants/enum\";\n\n/* ── Types ── */\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps {\n /** Available options. */\n options: SelectOption[];\n /** Enable multi-select mode. Default: false */\n multiple?: boolean;\n\n /** Controlled value. Single: string; Multi: string[]. Omit for uncontrolled. */\n value?: string | string[];\n /** Initial value for uncontrolled mode. */\n defaultValue?: string | string[];\n /** Fires when selection changes. */\n onChange?: (value: string | string[]) => void;\n\n placeholder?: string;\n /** Show a search input inside the popover. Default: false */\n searchable?: boolean;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n /** Shows a fixed label in the trigger instead of the selected value/tags. In multi mode, appends the count. */\n triggerLabel?: string;\n\n /** Custom render function for the trigger display. Receives selected values and all options. Overrides triggerLabel and default rendering. */\n renderValue?: (\n selected: string[],\n options: SelectOption[]\n ) => React.ReactNode;\n\n /** Max height of the options panel in px. Default: 200 */\n panelHeight?: number;\n\n /** Called when \"Select All\" is clicked. When provided, shows the Select All button in the footer. */\n onSelectAll?: () => void;\n\n /** Called when \"Remove All\" is clicked. When provided, shows the Remove All button in the footer. */\n onRemoveAll?: () => void;\n\n className?: string;\n}\n\n/* ── Helpers ── */\n\nfunction normalizeValue(\n v: string | string[] | undefined,\n multiple: boolean\n): string[] {\n if (v === undefined) return [];\n if (Array.isArray(v)) return v;\n return multiple ? [v] : [v];\n}\n\n/* ── Component ── */\n\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n placeholder = \"Select\\u2026\",\n searchable = false,\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n triggerLabel,\n renderValue,\n panelHeight = 200,\n onSelectAll,\n onRemoveAll,\n className,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<string[]>(\n normalizeValue(defaultValue, multiple)\n );\n\n const selected = normalizeValue(\n isControlled\n ? valueProp\n : multiple\n ? internalValue\n : (internalValue[0] as string | undefined),\n multiple\n );\n\n const fireChange = React.useCallback(\n (next: string[]) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(multiple ? next : (next[0] ?? \"\"));\n },\n [isControlled, multiple, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const searchRef = React.useRef<HTMLInputElement>(null);\n const popoverContentRef = React.useRef<HTMLDivElement>(null);\n\n // Document-level capture listeners to unblock scroll inside the portaled\n // popover when rendered inside a Radix Dialog. react-remove-scroll adds\n // its own capture-phase listener on document that blocks wheel/touchmove\n // for elements outside the Dialog. We register ours to run first and call\n // stopImmediatePropagation when the target is inside our popover.\n React.useEffect(() => {\n if (!open) return;\n\n const allow = (e: Event) => {\n const node = popoverContentRef.current;\n if (node && node.contains(e.target as Node)) {\n e.stopImmediatePropagation();\n }\n };\n\n document.addEventListener(\"wheel\", allow, { capture: true });\n document.addEventListener(\"touchmove\", allow, { capture: true });\n\n return () => {\n document.removeEventListener(\"wheel\", allow, {\n capture: true,\n } as EventListenerOptions);\n document.removeEventListener(\"touchmove\", allow, {\n capture: true,\n } as EventListenerOptions);\n };\n }, [open]);\n\n const filteredOptions = React.useMemo(() => {\n if (!search) return options;\n const lower = search.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, search]);\n\n const handleItemClick = (optionValue: string) => {\n if (multiple) {\n const idx = selected.indexOf(optionValue);\n const next =\n idx >= 0\n ? selected.filter((v) => v !== optionValue)\n : [...selected, optionValue];\n fireChange(next);\n } else {\n fireChange([optionValue]);\n setOpen(false);\n }\n };\n\n const handleTagRemove = (e: React.MouseEvent, optionValue: string) => {\n e.stopPropagation();\n fireChange(selected.filter((v) => v !== optionValue));\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (disabled) return;\n setOpen(nextOpen);\n if (!nextOpen) setSearch(\"\");\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-select-root\", className);\n\n const wrapperClass = cn(\n \"kz-select-wrapper\",\n `kz-select-wrapper--${variant}`,\n `kz-select-wrapper--${size}`,\n state !== TextInputState.Default && `kz-select-wrapper--${state}`,\n open && \"kz-select-wrapper--open\",\n disabled && \"kz-select-wrapper--disabled\"\n );\n\n const valueClass = cn(\n \"kz-select-value\",\n `kz-select-value--${size}`,\n selected.length === 0 && \"kz-select-value--placeholder\"\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n const getLabel = (val: string) =>\n options.find((o) => o.value === val)?.label ?? val;\n\n return (\n <div className={rootClass} ref={ref}>\n {label != null && label !== \"\" && (\n <label className=\"kz-select-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={wrapperClass}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n >\n {renderValue != null ? (\n <span className={valueClass}>\n {selected.length > 0\n ? renderValue(selected, options)\n : placeholder}\n </span>\n ) : multiple ? (\n triggerLabel != null ? (\n <span className={valueClass}>\n {selected.length > 0\n ? `${triggerLabel} (${selected.length})`\n : triggerLabel}\n </span>\n ) : (\n <div className=\"kz-select-tags\">\n {selected.length === 0 && (\n <span className=\"kz-select-tags-placeholder\">\n {placeholder}\n </span>\n )}\n {selected.map((val) => (\n <span key={val} className=\"kz-select-tag\">\n {getLabel(val)}\n <span\n role=\"button\"\n tabIndex={-1}\n className=\"kz-select-tag-remove\"\n onClick={(e) => handleTagRemove(e, val)}\n aria-label={`Remove ${getLabel(val)}`}\n >\n <Icon name={IconName.X} size={10} />\n </span>\n </span>\n ))}\n </div>\n )\n ) : triggerLabel != null ? (\n <span className={valueClass}>{triggerLabel}</span>\n ) : (\n <span className={valueClass}>\n {selected.length > 0 ? getLabel(selected[0]) : placeholder}\n </span>\n )}\n <span className=\"kz-select-toggle\">\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n ref={popoverContentRef}\n className=\"kz-select-popover\"\n sideOffset={4}\n align=\"start\"\n style={\n {\n width: \"var(--radix-popover-trigger-width)\",\n height: \"auto\",\n \"--kz-select-popover-height\": panelHeight\n ? `${panelHeight}px`\n : \"auto\",\n } as React.CSSProperties\n }\n onOpenAutoFocus={(e) => {\n if (searchable) {\n e.preventDefault();\n searchRef.current?.focus();\n }\n }}\n >\n {searchable && (\n <div className=\"kz-select-search\">\n <Icon\n name={IconName.Search}\n size={14}\n className=\"kz-select-search-icon\"\n />\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search\\u2026\"\n className=\"kz-select-search-input\"\n />\n </div>\n )}\n\n <ul\n className=\"kz-select-list\"\n role=\"listbox\"\n style={{ maxHeight: panelHeight }}\n >\n {filteredOptions.length === 0 && (\n <li className=\"kz-select-empty\">No options</li>\n )}\n {filteredOptions.map((opt) => {\n const isSelected = selected.includes(opt.value);\n return (\n <li\n key={opt.value}\n role=\"option\"\n aria-selected={isSelected}\n className={cn(\n \"kz-select-item\",\n isSelected && \"kz-select-item--selected\"\n )}\n onClick={() => handleItemClick(opt.value)}\n >\n {multiple ? (\n <span className=\"pointer-events-none\">\n <Checkbox\n size={CheckboxSize.Sm}\n checked={isSelected}\n tabIndex={-1}\n />\n </span>\n ) : (\n <span className=\"kz-select-item-check\">\n {isSelected && (\n <Icon name={IconName.CheckCircle} size={14} />\n )}\n </span>\n )}\n <span className=\"kz-select-item-label\">{opt.label}</span>\n </li>\n );\n })}\n </ul>\n\n {(onSelectAll || onRemoveAll) && (\n <div className=\"kz-select-footer\">\n {onSelectAll && (\n <button\n type=\"button\"\n className=\"kz-select-footer-action\"\n onClick={onSelectAll}\n >\n Select All\n </button>\n )}\n {onRemoveAll && (\n <button\n type=\"button\"\n className=\"kz-select-footer-action kz-select-footer-action--remove\"\n onClick={onRemoveAll}\n aria-label=\"Remove All\"\n >\n <Icon name={IconName.Trash2} size={14} />\n </button>\n )}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"select-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"select-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n","import * as React from \"react\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { Icon, IconName } from \"../../icon\";\nimport { cn } from \"../../utils/cn\";\n\n/* ── Types ── */\n\nexport type SidePanelSide = \"left\" | \"right\";\n\nexport interface SidePanelProps {\n /** Controlled open state. */\n open?: boolean;\n /** Fires when the panel wants to open/close. */\n onOpenChange?: (open: boolean) => void;\n\n /** Which side to slide from. Default: \"right\" */\n side?: SidePanelSide;\n /** Width of the panel. Accepts any CSS value: \"50%\", \"400px\", \"30vw\", etc. Default: \"400px\" */\n width?: string | number;\n\n /** Show the overlay backdrop. Default: true */\n overlay?: boolean;\n /** Close when clicking the overlay. Default: true */\n closeOnOverlayClick?: boolean;\n /** Close when pressing Escape. Default: true */\n closeOnEscape?: boolean;\n\n /** Accessible title for screen readers. Default: \"Panel\" */\n title?: string;\n /** Fully customisable header area — accepts any ReactNode (buttons, breadcrumbs, etc.). Rendered left of the close button. */\n header?: React.ReactNode;\n /** Fully customisable footer area — accepts any ReactNode. */\n footer?: React.ReactNode;\n /** Keep the header pinned at the top while the body scrolls. Default: true */\n stickyHeader?: boolean;\n /** Keep the footer pinned at the bottom while the body scrolls. Default: true */\n stickyFooter?: boolean;\n /** Hide the built-in close button. Default: false */\n hideCloseButton?: boolean;\n\n children?: React.ReactNode;\n className?: string;\n}\n\n/* ── Component ── */\n\nconst SidePanel = React.forwardRef<HTMLDivElement, SidePanelProps>(\n (\n {\n open,\n onOpenChange,\n side = \"right\",\n width = \"400px\",\n overlay = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n title = \"Panel\",\n header,\n footer,\n stickyHeader = true,\n stickyFooter = true,\n hideCloseButton = false,\n children,\n className,\n },\n ref\n ) => {\n const resolvedWidth = typeof width === \"number\" ? `${width}px` : width;\n\n const headerEl =\n header != null || !hideCloseButton ? (\n <div className=\"kz-sidepanel-header\">\n <div className=\"kz-sidepanel-header-content\">{header}</div>\n {!hideCloseButton && (\n <RadixDialog.Close asChild>\n <button\n type=\"button\"\n className=\"kz-sidepanel-close\"\n aria-label=\"Close panel\"\n >\n <Icon name={IconName.X} size={16} />\n </button>\n </RadixDialog.Close>\n )}\n </div>\n ) : null;\n\n const footerEl =\n footer != null ? (\n <div className=\"kz-sidepanel-footer\">{footer}</div>\n ) : null;\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange} modal={overlay}>\n <RadixDialog.Portal>\n {overlay && (\n <RadixDialog.Overlay\n className=\"kz-sidepanel-overlay\"\n onClick={\n closeOnOverlayClick ? undefined : (e) => e.preventDefault()\n }\n />\n )}\n <RadixDialog.Content\n ref={ref}\n className={cn(\n \"kz-sidepanel\",\n `kz-sidepanel--${side}`,\n !overlay && \"kz-sidepanel--no-overlay\",\n className\n )}\n style={{ width: resolvedWidth }}\n aria-describedby={undefined}\n onEscapeKeyDown={\n closeOnEscape ? undefined : (e) => e.preventDefault()\n }\n onInteractOutside={\n !overlay || !closeOnOverlayClick\n ? (e) => e.preventDefault()\n : undefined\n }\n >\n <RadixDialog.Title\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n >\n {title}\n </RadixDialog.Title>\n {stickyHeader && headerEl}\n <div className=\"kz-sidepanel-scroll\">\n {!stickyHeader && headerEl}\n <div className=\"kz-sidepanel-body\">{children}</div>\n {!stickyFooter && footerEl}\n </div>\n {stickyFooter && footerEl}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n }\n);\n\nSidePanel.displayName = \"SidePanel\";\n\n/* ── Trigger ── */\n\nconst SidePanelTrigger = RadixDialog.Trigger;\nSidePanelTrigger.displayName = \"SidePanelTrigger\";\n\nexport { SidePanel, SidePanelTrigger };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TextInputState } from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\n\n/* ── Enums ── */\n\nexport enum FormGroupDirection {\n Vertical = \"vertical\",\n Horizontal = \"horizontal\",\n}\n\n/* ── Types ── */\n\nexport interface FormGroupProps {\n /** Label text rendered above the group. */\n label?: string;\n /** Description text below the label. */\n description?: string;\n\n /** Validation state. */\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n helperText?: string;\n\n /** Layout direction for children. Default: FormGroupDirection.Vertical */\n direction?: FormGroupDirection;\n /** Gap between children. Accepts any CSS value. Default: uses CSS token. */\n gap?: string | number;\n\n /** Render as <fieldset> + <legend>. Default: false */\n fieldset?: boolean;\n /** Show required asterisk after label. Default: false */\n required?: boolean;\n /** Disable the group visually. Default: false */\n disabled?: boolean;\n\n children?: React.ReactNode;\n className?: string;\n}\n\n/* ── Component ── */\n\nconst FormGroup = React.forwardRef<HTMLDivElement, FormGroupProps>(\n (\n {\n label,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n helperText,\n direction = FormGroupDirection.Vertical,\n gap,\n fieldset = false,\n required = false,\n disabled = false,\n children,\n className,\n },\n ref\n ) => {\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const Root = fieldset ? \"fieldset\" : \"div\";\n const LabelTag = fieldset ? \"legend\" : \"label\";\n\n const resolvedGap =\n gap != null ? (typeof gap === \"number\" ? `${gap}px` : gap) : undefined;\n\n return (\n <Root\n ref={ref as React.Ref<HTMLFieldSetElement & HTMLDivElement>}\n className={cn(\n \"kz-form-group\",\n required && \"kz-form-group--required\",\n disabled && \"kz-form-group--disabled\",\n className\n )}\n disabled={fieldset ? disabled : undefined}\n >\n {label != null && label !== \"\" && (\n <LabelTag className=\"kz-form-group-legend\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </LabelTag>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <div\n className={cn(\n \"kz-form-group-content\",\n `kz-form-group-content--${direction}`\n )}\n style={resolvedGap != null ? { gap: resolvedGap } : undefined}\n >\n {children}\n </div>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {helperText}\n </Typography>\n )}\n </Root>\n );\n }\n);\n\nFormGroup.displayName = \"FormGroup\";\n\nexport { FormGroup };\n","import * as React from \"react\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Enums ── */\n\nexport enum ModalSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n Xl = \"xl\",\n Full = \"full\",\n}\n\n/* ── Types ── */\n\nexport interface ModalProps {\n /** Controlled open state. */\n open?: boolean;\n /** Fires when the modal wants to open/close. */\n onOpenChange?: (open: boolean) => void;\n\n /** Size of the modal. Default: ModalSize.Md */\n size?: ModalSize;\n\n /** Show the overlay backdrop. Default: true */\n overlay?: boolean;\n /** Close when clicking the overlay. Default: true */\n closeOnOverlayClick?: boolean;\n /** Close when pressing Escape. Default: true */\n closeOnEscape?: boolean;\n\n /** Accessible title for screen readers. Default: \"Modal\" */\n title?: string;\n /** Content for the header area (left of close button). */\n header?: React.ReactNode;\n /** Content for the footer area. */\n footer?: React.ReactNode;\n\n children?: React.ReactNode;\n className?: string;\n}\n\n/* ── Component ── */\n\nconst Modal = React.forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n open,\n onOpenChange,\n size = ModalSize.Md,\n overlay = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n title = \"Modal\",\n header,\n footer,\n children,\n className,\n },\n ref\n ) => {\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n {overlay && (\n <RadixDialog.Overlay\n className=\"kz-modal-overlay\"\n onClick={\n closeOnOverlayClick ? undefined : (e) => e.preventDefault()\n }\n />\n )}\n <RadixDialog.Content\n ref={ref}\n className={cn(\"kz-modal\", `kz-modal--${size}`, className)}\n aria-describedby={undefined}\n onEscapeKeyDown={\n closeOnEscape ? undefined : (e) => e.preventDefault()\n }\n onInteractOutside={\n closeOnOverlayClick ? undefined : (e) => e.preventDefault()\n }\n >\n <RadixDialog.Title\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n >\n {title}\n </RadixDialog.Title>\n\n {header != null && (\n <div className=\"kz-modal-header\">\n <div className=\"kz-modal-header-content\">{header}</div>\n <RadixDialog.Close asChild>\n <button\n type=\"button\"\n className=\"kz-modal-close\"\n aria-label=\"Close modal\"\n >\n <Icon name={IconName.X} size={16} />\n </button>\n </RadixDialog.Close>\n </div>\n )}\n\n <div className=\"kz-modal-body\">{children}</div>\n\n {footer != null && <div className=\"kz-modal-footer\">{footer}</div>}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n }\n);\n\nModal.displayName = \"Modal\";\n\n/* ── Trigger ── */\n\nconst ModalTrigger = RadixDialog.Trigger;\nModalTrigger.displayName = \"ModalTrigger\";\n\nexport { Modal, ModalTrigger };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\nimport { ToastVariant, ToastPosition } from \"../../constants/enum\";\n\n/* ── Types ── */\n\nexport interface ToastData {\n id: string;\n variant: ToastVariant;\n title: string;\n description?: string;\n duration?: number;\n}\n\nexport interface ToasterProps {\n position?: ToastPosition;\n className?: string;\n}\n\nexport interface ToastContextValue {\n toast: (opts: Omit<ToastData, \"id\">) => string;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n}\n\n/* ── Icon mapping ── */\n\nconst TOAST_ICONS: Record<ToastVariant, IconName> = {\n [ToastVariant.Success]: IconName.CheckCircle,\n [ToastVariant.Error]: IconName.CircleAlert,\n [ToastVariant.Warning]: IconName.TriangleAlert,\n [ToastVariant.Info]: IconName.CircleAlert,\n};\n\n/* ── Context ── */\n\nconst ToastContext = React.createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const ctx = React.useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within a <ToastProvider>\");\n return ctx;\n}\n\n/* ── Provider ── */\n\nlet toastCounter = 0;\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = React.useState<ToastData[]>([]);\n const timersRef = React.useRef<Map<string, ReturnType<typeof setTimeout>>>(\n new Map()\n );\n\n const dismiss = React.useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n }, []);\n\n const dismissAll = React.useCallback(() => {\n setToasts([]);\n timersRef.current.forEach((timer) => clearTimeout(timer));\n timersRef.current.clear();\n }, []);\n\n const toast = React.useCallback(\n (opts: Omit<ToastData, \"id\">) => {\n const id = `toast-${++toastCounter}`;\n const data: ToastData = { ...opts, id };\n setToasts((prev) => [...prev, data]);\n const duration = opts.duration ?? 5000;\n if (duration > 0) {\n const timer = setTimeout(() => dismiss(id), duration);\n timersRef.current.set(id, timer);\n }\n return id;\n },\n [dismiss]\n );\n\n React.useEffect(() => {\n const timers = timersRef.current;\n return () => {\n timers.forEach((timer) => clearTimeout(timer));\n };\n }, []);\n\n const value = React.useMemo(\n () => ({ toast, dismiss, dismissAll }),\n [toast, dismiss, dismissAll]\n );\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <ToastViewportInternal toasts={toasts} onDismiss={dismiss} />\n </ToastContext.Provider>\n );\n}\n\n/* ── Internal viewport (rendered inside provider) ── */\n\nfunction ToastViewportInternal({\n toasts,\n onDismiss,\n}: {\n toasts: ToastData[];\n onDismiss: (id: string) => void;\n}) {\n const [position, setPosition] = React.useState<ToastPosition>(\n ToastPosition.TopRight\n );\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => setMounted(true), []);\n\n // Allow Toaster to set position via a custom event\n React.useEffect(() => {\n const handler = (e: Event) => {\n const pos = (e as CustomEvent<ToastPosition>).detail;\n setPosition(pos);\n };\n window.addEventListener(\"kz-toast-position\", handler);\n return () => window.removeEventListener(\"kz-toast-position\", handler);\n }, []);\n\n if (!mounted || toasts.length === 0) return null;\n\n return ReactDOM.createPortal(\n <div\n className={cn(\"kz-toast-viewport\", `kz-toast-viewport--${position}`)}\n role=\"region\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} data={t} onDismiss={onDismiss} />\n ))}\n </div>,\n document.body\n );\n}\n\n/* ── Toaster (position configurator) ── */\n\nexport function Toaster({ position = ToastPosition.TopRight }: ToasterProps) {\n React.useEffect(() => {\n window.dispatchEvent(\n new CustomEvent(\"kz-toast-position\", { detail: position })\n );\n }, [position]);\n\n return null;\n}\n\n/* ── Toast item ── */\n\nfunction ToastItem({\n data,\n onDismiss,\n}: {\n data: ToastData;\n onDismiss: (id: string) => void;\n}) {\n return (\n <div className={cn(\"kz-toast\", `kz-toast--${data.variant}`)} role=\"alert\">\n <span className=\"kz-toast-icon shrink-0 mt-0.5\">\n <Icon name={TOAST_ICONS[data.variant]} size={18} color=\"currentColor\" />\n </span>\n <div className=\"flex flex-col gap-0.5 flex-1 min-w-0\">\n <span className=\"text-sm font-medium text-[var(--kz-color-text-primary)]\">\n {data.title}\n </span>\n {data.description && (\n <span className=\"text-xs text-[var(--kz-color-text-secondary)]\">\n {data.description}\n </span>\n )}\n </div>\n <button\n type=\"button\"\n className=\"kz-toast-close shrink-0\"\n onClick={() => onDismiss(data.id)}\n aria-label=\"Dismiss\"\n >\n <Icon name={IconName.X} size={14} color=\"currentColor\" />\n </button>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { CardShadow } from \"../../constants/enum\";\nimport type { CardProps } from \"./Card.types\";\n\nconst shadowClasses = {\n [CardShadow.Sm]: \"kz-card--shadow-sm\",\n [CardShadow.Md]: \"kz-card--shadow-md\",\n [CardShadow.Lg]: \"kz-card--shadow-lg\",\n} as const;\n\nconst paddingClasses = {\n none: \"\",\n sm: \"kz-card-padding--sm\",\n md: \"kz-card-padding--md\",\n lg: \"kz-card-padding--lg\",\n} as const;\n\nconst sizeToPadding = {\n sm: \"sm\",\n md: \"md\",\n lg: \"lg\",\n} as const;\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n size = \"md\",\n shadow = CardShadow.Sm,\n padding,\n width,\n height,\n aspectRatio,\n flat = false,\n hoverable = false,\n clickable = false,\n header,\n footer,\n cover,\n className,\n children,\n onClick,\n style,\n ...props\n },\n ref\n ) => {\n const resolvedPadding = padding ?? sizeToPadding[size];\n\n const customStyle: React.CSSProperties = {\n ...style,\n ...(width ? { width } : {}),\n ...(height ? { height } : {}),\n ...(aspectRatio ? { aspectRatio } : {}),\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-card\",\n !flat && shadowClasses[shadow],\n flat && \"kz-card--flat\",\n hoverable && \"kz-card--hoverable\",\n clickable && \"kz-card--clickable\",\n className\n )}\n style={customStyle}\n onClick={onClick}\n tabIndex={clickable ? 0 : undefined}\n role={clickable ? \"button\" : undefined}\n {...props}\n >\n {cover != null && <div className=\"kz-card-cover\">{cover}</div>}\n {header != null && (\n <div\n className={cn(\"kz-card-header\", paddingClasses[resolvedPadding])}\n >\n {header}\n </div>\n )}\n <div className={cn(\"kz-card-body\", paddingClasses[resolvedPadding])}>\n {children}\n </div>\n {footer != null && (\n <div\n className={cn(\"kz-card-footer\", paddingClasses[resolvedPadding])}\n >\n {footer}\n </div>\n )}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\nexport { Card };\nexport type { CardProps, CardSize, CardPadding } from \"./Card.types\";\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button, ButtonVariant, ButtonSize, ButtonStatus } from \"../button\";\nimport { Icon, IconName } from \"../../icon\";\nimport type { SqlEditorProps } from \"./SqlEditor.types\";\n\nconst sizeClasses = {\n sm: {\n toolbar: \"px-2 py-1\",\n textarea: \"px-2 py-1.5 text-xs leading-4\",\n status: \"px-2 py-1 text-[11px]\",\n result: \"text-xs\",\n resultCell: \"px-2 py-1\",\n },\n md: {\n toolbar: \"px-3 py-1.5\",\n textarea: \"px-3 py-3 text-sm leading-[22px]\",\n status: \"px-3 py-1 text-xs\",\n result: \"text-[13px]\",\n resultCell: \"px-3 py-1.5\",\n },\n lg: {\n toolbar: \"px-4 py-2\",\n textarea: \"px-4 py-3.5 text-base leading-6\",\n status: \"px-4 py-1.5 text-sm\",\n result: \"text-sm\",\n resultCell: \"px-4 py-2\",\n },\n};\n\nfunction SqlEditorInner(\n {\n value,\n onValueChange,\n onExecute,\n result,\n placeholder = \"SELECT * FROM ...\",\n toolbarLabel = \"Query\",\n runButtonLabel = \"Run\",\n rows = 5,\n size = \"md\",\n disabled = false,\n loading = false,\n resultsMaxHeight = \"300px\",\n toolbarRight,\n className,\n }: SqlEditorProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const sc = sizeClasses[size];\n\n const handleRun = React.useCallback(() => {\n if (!disabled && !loading) {\n onExecute(value);\n }\n }, [value, onExecute, disabled, loading]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Cmd/Ctrl + Enter to run\n if ((e.metaKey || e.ctrlKey) && e.key === \"Enter\") {\n e.preventDefault();\n handleRun();\n }\n // Tab inserts two spaces\n if (e.key === \"Tab\") {\n e.preventDefault();\n const textarea = e.currentTarget;\n const start = textarea.selectionStart;\n const end = textarea.selectionEnd;\n const newValue =\n value.substring(0, start) + \" \" + value.substring(end);\n onValueChange(newValue);\n requestAnimationFrame(() => {\n textarea.selectionStart = textarea.selectionEnd = start + 2;\n });\n }\n },\n [handleRun, value, onValueChange]\n );\n\n const hasResult = result != null;\n const hasRows = hasResult && !result.error && result.rows.length > 0;\n\n return (\n <div ref={ref} className={cn(\"kz-sql-editor-root\", className)}>\n {/* Toolbar */}\n <div className={cn(\"kz-sql-editor-toolbar\", sc.toolbar)}>\n <span className=\"kz-sql-editor-toolbar-label\">{toolbarLabel}</span>\n <div className=\"flex items-center gap-2\">\n {toolbarRight}\n <Button\n variant={ButtonVariant.Primary}\n status={ButtonStatus.Brand}\n size={size === \"lg\" ? ButtonSize.Md : ButtonSize.Sm}\n onClick={handleRun}\n disabled={disabled || loading}\n >\n <Icon name={IconName.ChevronRight} size={14} color=\"currentColor\" />\n <span className=\"ml-1\">\n {loading ? \"Running…\" : runButtonLabel}\n </span>\n </Button>\n </div>\n </div>\n\n {/* Textarea */}\n <textarea\n ref={textareaRef}\n className={cn(\"kz-sql-editor-textarea\", sc.textarea)}\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n spellCheck={false}\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n rows={rows}\n disabled={disabled}\n />\n\n {/* Status bar */}\n {hasResult && (\n <div className={cn(\"kz-sql-editor-status\", sc.status)}>\n <span\n className={cn(\n \"kz-sql-editor-status-text\",\n result.error && \"kz-sql-editor-status-text--error\",\n !result.error && \"kz-sql-editor-status-text--success\"\n )}\n >\n {result.message}\n </span>\n </div>\n )}\n\n {/* Results table */}\n {hasRows && (\n <div\n className=\"kz-sql-editor-results\"\n style={{ maxHeight: resultsMaxHeight }}\n >\n <table>\n <thead>\n <tr>\n {result.columns.map((col) => (\n <th key={col} className={sc.resultCell}>\n {col}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {result.rows.map((row, i) => (\n <tr key={i}>\n {result.columns.map((col) => (\n <td key={col} className={sc.resultCell}>\n {row[col] == null ? \"\" : String(row[col])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {hasResult && !result.error && result.rows.length === 0 && (\n <div className=\"kz-sql-editor-empty\">No rows returned</div>\n )}\n </div>\n );\n}\n\nconst SqlEditor = React.forwardRef(SqlEditorInner);\nSqlEditor.displayName = \"SqlEditor\";\n\nexport { SqlEditor };\n","import * as React from \"react\";\nimport QRCode from \"qrcode\";\nimport { cn } from \"../../utils/cn\";\nimport { Button, ButtonVariant, ButtonSize } from \"../button\";\nimport { Icon, IconName } from \"../../icon\";\nimport { QrPattern } from \"../../constants/enum\";\nimport type { QrRendererProps } from \"./QrRenderer.types\";\n\nfunction resolveImageSrc(image: string): string {\n if (image.startsWith(\"data:\") || image.startsWith(\"http\")) {\n return image;\n }\n return `data:image/png;base64,${image}`;\n}\n\n/**\n * Draw a single QR module on the canvas with the given pattern shape.\n */\nfunction drawModule(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n moduleSize: number,\n pattern: QrPattern\n) {\n const center = moduleSize / 2;\n\n switch (pattern) {\n case QrPattern.Circle: {\n ctx.beginPath();\n ctx.arc(x + center, y + center, center * 0.85, 0, Math.PI * 2);\n ctx.fill();\n break;\n }\n case QrPattern.Diamond: {\n ctx.beginPath();\n ctx.moveTo(x + center, y + moduleSize * 0.05);\n ctx.lineTo(x + moduleSize * 0.95, y + center);\n ctx.lineTo(x + center, y + moduleSize * 0.95);\n ctx.lineTo(x + moduleSize * 0.05, y + center);\n ctx.closePath();\n ctx.fill();\n break;\n }\n case QrPattern.Square:\n default: {\n ctx.fillRect(x, y, moduleSize, moduleSize);\n break;\n }\n }\n}\n\n/**\n * Render the QR matrix onto a canvas with custom dot patterns.\n * Returns a data URL of the rendered image.\n */\nfunction renderQrToCanvas(\n modules: boolean[][],\n size: number,\n pattern: QrPattern,\n fgColor: string,\n bgColor: string,\n logo: string | undefined,\n logoScale: number\n): Promise<string> {\n const moduleCount = modules.length;\n const margin = 1;\n const totalModules = moduleCount + margin * 2;\n const moduleSize = size / totalModules;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n const ctx = canvas.getContext(\"2d\")!;\n\n // Background\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, size, size);\n\n // Foreground modules\n ctx.fillStyle = fgColor;\n for (let row = 0; row < moduleCount; row++) {\n for (let col = 0; col < moduleCount; col++) {\n if (modules[row][col]) {\n const x = (col + margin) * moduleSize;\n const y = (row + margin) * moduleSize;\n drawModule(ctx, x, y, moduleSize, pattern);\n }\n }\n }\n\n // Logo overlay\n if (logo) {\n return new Promise<string>((resolve) => {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.onload = () => {\n const logoPixelSize = Math.round(size * logoScale);\n const logoX = (size - logoPixelSize) / 2;\n const logoY = (size - logoPixelSize) / 2;\n const padding = 4;\n\n // White background behind logo\n ctx.fillStyle = bgColor;\n ctx.beginPath();\n const bgSize = logoPixelSize + padding * 2;\n const bgX = logoX - padding;\n const bgY = logoY - padding;\n const radius = 6;\n ctx.moveTo(bgX + radius, bgY);\n ctx.lineTo(bgX + bgSize - radius, bgY);\n ctx.quadraticCurveTo(bgX + bgSize, bgY, bgX + bgSize, bgY + radius);\n ctx.lineTo(bgX + bgSize, bgY + bgSize - radius);\n ctx.quadraticCurveTo(\n bgX + bgSize,\n bgY + bgSize,\n bgX + bgSize - radius,\n bgY + bgSize\n );\n ctx.lineTo(bgX + radius, bgY + bgSize);\n ctx.quadraticCurveTo(bgX, bgY + bgSize, bgX, bgY + bgSize - radius);\n ctx.lineTo(bgX, bgY + radius);\n ctx.quadraticCurveTo(bgX, bgY, bgX + radius, bgY);\n ctx.closePath();\n ctx.fill();\n\n ctx.drawImage(img, logoX, logoY, logoPixelSize, logoPixelSize);\n resolve(canvas.toDataURL(\"image/png\"));\n };\n img.onerror = () => {\n resolve(canvas.toDataURL(\"image/png\"));\n };\n img.src = resolveImageSrc(logo);\n });\n }\n\n return Promise.resolve(canvas.toDataURL(\"image/png\"));\n}\n\nfunction QrRendererInner(\n props: QrRendererProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const {\n size = 200,\n alt = \"QR Code\",\n logo,\n logoScale = 0.2,\n pattern = QrPattern.Square,\n label,\n caption,\n debug,\n showDebug = false,\n foregroundColor = \"#000000\",\n backgroundColor = \"#ffffff\",\n downloadable = false,\n downloadFilename = \"qr-code.png\",\n className,\n } = props;\n\n const [generatedSrc, setGeneratedSrc] = React.useState<string | null>(null);\n\n const isDataMode = \"data\" in props && !!props.data;\n const data = isDataMode ? props.data : undefined;\n const image = !isDataMode && \"image\" in props ? props.image : undefined;\n const errorCorrectionLevel =\n isDataMode && \"errorCorrectionLevel\" in props\n ? props.errorCorrectionLevel\n : undefined;\n\n // Use high error correction when logo is present to maintain scannability\n const effectiveECL = errorCorrectionLevel || (logo ? \"H\" : \"M\");\n\n React.useEffect(() => {\n if (!isDataMode || !data) {\n setGeneratedSrc(null);\n return;\n }\n\n let cancelled = false;\n\n // Generate QR matrix using qrcode library\n const qr = QRCode.create(data, {\n errorCorrectionLevel: effectiveECL,\n });\n\n const moduleCount = qr.modules.size;\n const modules: boolean[][] = [];\n for (let row = 0; row < moduleCount; row++) {\n const rowData: boolean[] = [];\n for (let col = 0; col < moduleCount; col++) {\n rowData.push(qr.modules.get(row, col) === 1);\n }\n modules.push(rowData);\n }\n\n renderQrToCanvas(\n modules,\n size,\n pattern,\n foregroundColor,\n backgroundColor,\n logo,\n logoScale\n )\n .then((url) => {\n if (!cancelled) setGeneratedSrc(url);\n })\n .catch(() => {\n if (!cancelled) setGeneratedSrc(null);\n });\n\n return () => {\n cancelled = true;\n };\n }, [\n data,\n size,\n foregroundColor,\n backgroundColor,\n effectiveECL,\n isDataMode,\n pattern,\n logo,\n logoScale,\n ]);\n\n const imgSrc = isDataMode\n ? generatedSrc\n : image\n ? resolveImageSrc(image)\n : null;\n\n const handleDownload = React.useCallback(() => {\n if (!imgSrc) return;\n const link = document.createElement(\"a\");\n link.href = imgSrc;\n link.download = downloadFilename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }, [imgSrc, downloadFilename]);\n\n return (\n <div ref={ref} className={cn(\"kz-qr-renderer-root\", className)}>\n {/* QR image container */}\n <div\n className=\"kz-qr-renderer-image-container\"\n style={{\n width: size,\n height: size,\n backgroundColor: backgroundColor || undefined,\n }}\n >\n {imgSrc ? (\n <img\n src={imgSrc}\n alt={alt}\n width={size}\n height={size}\n className=\"kz-qr-renderer-image\"\n style={{\n width: size,\n height: size,\n }}\n />\n ) : (\n <div\n style={{\n width: size,\n height: size,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--kz-component-input-placeholder)\",\n fontSize: 12,\n }}\n >\n {isDataMode ? \"Generating…\" : \"No image\"}\n </div>\n )}\n\n {/* Logo overlay for image mode (canvas handles it for data mode) */}\n {logo && imgSrc && !isDataMode && (\n <div\n className=\"kz-qr-renderer-logo\"\n style={{\n width: Math.round(size * logoScale),\n height: Math.round(size * logoScale),\n }}\n >\n <img\n src={resolveImageSrc(logo)}\n alt=\"Logo\"\n width={Math.round(size * logoScale)}\n height={Math.round(size * logoScale)}\n className=\"kz-qr-renderer-logo-img\"\n />\n </div>\n )}\n </div>\n\n {/* Label and caption */}\n {(label || caption || downloadable) && (\n <div className=\"kz-qr-renderer-footer\">\n {label && <div className=\"kz-qr-renderer-label\">{label}</div>}\n {caption && <div className=\"kz-qr-renderer-caption\">{caption}</div>}\n {downloadable && (\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleDownload}\n >\n <Icon name={IconName.ArrowDown} size={14} color=\"currentColor\" />\n <span className=\"ml-1\">Download</span>\n </Button>\n )}\n </div>\n )}\n\n {/* Debug info */}\n {showDebug && debug && (\n <div className=\"kz-qr-renderer-debug\">\n <div className=\"kz-qr-renderer-debug-title\">Debug Info</div>\n <div className=\"kz-qr-renderer-debug-grid\">\n {Object.entries(debug).map(([key, value]) => (\n <React.Fragment key={key}>\n <span className=\"kz-qr-renderer-debug-key\">{key}</span>\n <span className=\"kz-qr-renderer-debug-value\">\n {typeof value === \"boolean\"\n ? value\n ? \"true\"\n : \"false\"\n : String(value)}\n </span>\n </React.Fragment>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nconst QrRenderer = React.forwardRef(QrRendererInner);\nQrRenderer.displayName = \"QrRenderer\";\n\nexport { QrRenderer };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type LoaderSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type LoaderVariant = \"spinner\" | \"dots\" | \"pulse\";\n\nexport interface LoaderProps {\n /** Size of the loader. Default: \"md\" */\n size?: LoaderSize;\n /** Visual variant. Default: \"spinner\" */\n variant?: LoaderVariant;\n /** When true, renders a full-page centered overlay. Default: false */\n fullPage?: boolean;\n /** Optional label shown below the loader. */\n label?: string;\n className?: string;\n}\n\nconst Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\n (\n { size = \"md\", variant = \"spinner\", fullPage = false, label, className },\n ref\n ) => {\n const content = (\n <div\n ref={fullPage ? undefined : ref}\n className={cn(\"kz-loader\", `kz-loader--${size}`, className)}\n role=\"status\"\n aria-label={label ?? \"Loading\"}\n >\n {variant === \"spinner\" && (\n <svg\n className=\"kz-loader-spinner\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n className=\"kz-loader-track\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n strokeWidth=\"3\"\n />\n <circle\n className=\"kz-loader-indicator\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n\n {variant === \"dots\" && (\n <div className=\"kz-loader-dots\">\n <span className=\"kz-loader-dot\" />\n <span className=\"kz-loader-dot\" />\n <span className=\"kz-loader-dot\" />\n </div>\n )}\n\n {variant === \"pulse\" && <div className=\"kz-loader-pulse\" />}\n\n {label != null && label !== \"\" && (\n <span className=\"kz-loader-label\">{label}</span>\n )}\n </div>\n );\n\n if (fullPage) {\n return (\n <div ref={ref} className=\"kz-loader-overlay\">\n {content}\n </div>\n );\n }\n\n return content;\n }\n);\n\nLoader.displayName = \"Loader\";\n\nexport { Loader };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Loader } from \"../loader\";\nimport type { LoaderVariant, LoaderSize } from \"../loader\";\n\nexport interface ScreenLoaderProps {\n /** Controls overlay visibility. */\n loading: boolean;\n /** 0-100 for determinate progress bar. Omit for indeterminate. */\n progress?: number;\n /** Custom logo or ReactNode shown centered on the overlay. */\n logo?: React.ReactNode;\n /** Optional text label below the loader indicator. */\n label?: string;\n /** Backdrop blur in px. Default: 2 */\n blur?: number;\n /** Overlay opacity 0-1. Default: 0.6 */\n overlayOpacity?: number;\n /** Loader variant passed to internal Loader. Default: \"spinner\" */\n loaderVariant?: LoaderVariant;\n /** Loader size passed to internal Loader. Default: \"lg\" */\n loaderSize?: LoaderSize;\n /** Additional className on the wrapper. */\n className?: string;\n /** Content rendered beneath the overlay. */\n children: React.ReactNode;\n}\n\nconst ScreenLoader = React.forwardRef<HTMLDivElement, ScreenLoaderProps>(\n (\n {\n loading,\n progress,\n logo,\n label,\n blur = 2,\n overlayOpacity = 0.6,\n loaderVariant = \"spinner\",\n loaderSize = \"lg\",\n className,\n children,\n },\n ref\n ) => {\n const isDeterminate = progress !== undefined;\n\n return (\n <div ref={ref} className={cn(\"kz-screen-loader\", className)}>\n {children}\n\n {loading && (\n <div\n className=\"kz-screen-loader__overlay\"\n style={{\n backgroundColor: `rgba(255, 255, 255, ${overlayOpacity})`,\n backdropFilter: `blur(${blur}px)`,\n WebkitBackdropFilter: `blur(${blur}px)`,\n }}\n aria-busy=\"true\"\n role=\"status\"\n >\n <div className=\"kz-screen-loader__content\">\n {logo != null && (\n <div className=\"kz-screen-loader__logo\">{logo}</div>\n )}\n\n <Loader variant={loaderVariant} size={loaderSize} />\n\n <div className=\"kz-screen-loader__progress-track\">\n <div\n className={cn(\n \"kz-screen-loader__progress-bar\",\n !isDeterminate &&\n \"kz-screen-loader__progress-bar--indeterminate\"\n )}\n style={\n isDeterminate\n ? {\n width: `${Math.min(100, Math.max(0, progress))}%`,\n }\n : undefined\n }\n />\n </div>\n\n {label != null && label !== \"\" && (\n <span className=\"kz-screen-loader__label\">{label}</span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n }\n);\n\nScreenLoader.displayName = \"ScreenLoader\";\n\nexport { ScreenLoader };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Types ── */\n\nexport type ErrorPageStatus =\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"not-found\"\n | \"forbidden\"\n | \"server-error\";\n\nexport interface ErrorPageProps {\n /** Determines default icon and color scheme. Default: \"error\" */\n status?: ErrorPageStatus;\n /** Large status code display, e.g. \"404\", \"500\". */\n statusCode?: string | number;\n /** Main heading text. */\n title: string;\n /** Body text below the heading. */\n description?: string;\n /** Override the default status icon with any ReactNode. */\n icon?: React.ReactNode;\n /** Slot for action button(s). */\n action?: React.ReactNode;\n /** Optional branding/logo rendered at the top. */\n logo?: React.ReactNode;\n /** If true (default), uses fixed positioning at 100vh. If false, fills parent. */\n fullPage?: boolean;\n /** Additional className on the root element. */\n className?: string;\n}\n\n/* ── Status defaults ── */\n\nconst STATUS_ICON: Record<ErrorPageStatus, IconName> = {\n error: IconName.CircleAlert,\n warning: IconName.TriangleAlert,\n info: IconName.CircleAlert,\n \"not-found\": IconName.Search,\n forbidden: IconName.Shield,\n \"server-error\": IconName.Globe,\n};\n\n/* ── Component ── */\n\nconst ErrorPage = React.forwardRef<HTMLDivElement, ErrorPageProps>(\n (\n {\n status = \"error\",\n statusCode,\n title,\n description,\n icon,\n action,\n logo,\n fullPage = true,\n className,\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-error-page\",\n `kz-error-page--${status}`,\n fullPage && \"kz-error-page--full\",\n className\n )}\n role=\"main\"\n aria-labelledby=\"kz-error-page-title\"\n >\n <div className=\"kz-error-page__bg\" aria-hidden=\"true\" />\n\n <div className=\"kz-error-page__content\">\n {logo != null && <div className=\"kz-error-page__logo\">{logo}</div>}\n\n <div className=\"kz-error-page__icon\">\n {icon ?? (\n <Icon name={STATUS_ICON[status]} size={48} color=\"currentColor\" />\n )}\n </div>\n\n {statusCode != null && (\n <div className=\"kz-error-page__code\">{statusCode}</div>\n )}\n\n <h1 id=\"kz-error-page-title\" className=\"kz-error-page__title\">\n {title}\n </h1>\n\n {description != null && description !== \"\" && (\n <p className=\"kz-error-page__description\">{description}</p>\n )}\n\n {action != null && (\n <div className=\"kz-error-page__action\">{action}</div>\n )}\n </div>\n </div>\n );\n }\n);\n\nErrorPage.displayName = \"ErrorPage\";\n\nexport { ErrorPage };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape variant. Default: \"text\" */\n variant?: SkeletonVariant;\n /** Width (CSS value). Default: \"100%\" */\n width?: string | number;\n /** Height (CSS value). Default: depends on variant */\n height?: string | number;\n /** Number of text lines to render (only for variant=\"text\"). Default: 1 */\n lines?: number;\n /** Disable the shimmer animation. Default: false */\n static?: boolean;\n className?: string;\n}\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n width,\n height,\n lines = 1,\n static: isStatic = false,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const resolvedStyle: React.CSSProperties = {\n ...style,\n ...(width != null ? { width } : {}),\n ...(height != null ? { height } : {}),\n };\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n ref={ref}\n className={cn(\"kz-skeleton-lines\", className)}\n style={width != null ? { width } : undefined}\n {...props}\n >\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n className={cn(\n \"kz-skeleton\",\n \"kz-skeleton--text\",\n isStatic && \"kz-skeleton--static\",\n i === lines - 1 && \"kz-skeleton--last-line\"\n )}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-skeleton\",\n `kz-skeleton--${variant}`,\n isStatic && \"kz-skeleton--static\",\n className\n )}\n style={resolvedStyle}\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = \"Skeleton\";\n\n/* ── TableSkeleton ── */\n\nexport type TableSkeletonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface TableSkeletonProps {\n /** Number of columns. Default: 4 */\n columns?: number;\n /** Number of rows. Default: 5 */\n rows?: number;\n /** Show a header bar (title area). Default: true */\n showHeader?: boolean;\n /** Show pagination area. Default: true */\n showPagination?: boolean;\n /** Show checkbox column. Default: false */\n showCheckbox?: boolean;\n /** Show actions column. Default: false */\n showActions?: boolean;\n /** Table size. Default: \"md\" */\n size?: TableSkeletonSize;\n className?: string;\n}\n\nconst TableSkeleton = React.forwardRef<HTMLDivElement, TableSkeletonProps>(\n (\n {\n columns = 4,\n rows = 5,\n showHeader = true,\n showPagination = true,\n showCheckbox = false,\n showActions = false,\n size = \"md\",\n className,\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-table-skeleton\",\n `kz-table-skeleton--${size}`,\n className\n )}\n role=\"status\"\n aria-label=\"Loading table\"\n >\n {showHeader && (\n <div className=\"kz-table-skeleton-header\">\n <Skeleton variant=\"text\" width=\"140px\" height=\"20px\" />\n <Skeleton variant=\"rectangular\" width=\"160px\" height=\"32px\" />\n </div>\n )}\n\n <div className=\"kz-table-skeleton-table\">\n {/* Column headers */}\n <div className=\"kz-table-skeleton-row kz-table-skeleton-row--head\">\n {showCheckbox && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--checkbox\">\n <Skeleton variant=\"rectangular\" width={16} height={16} />\n </div>\n )}\n {Array.from({ length: columns }, (_, i) => (\n <div key={i} className=\"kz-table-skeleton-cell\">\n <Skeleton\n variant=\"text\"\n width={`${50 + ((i * 20) % 40)}%`}\n height=\"14px\"\n />\n </div>\n ))}\n {showActions && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--actions\">\n <Skeleton variant=\"text\" width=\"50px\" height=\"14px\" />\n </div>\n )}\n </div>\n\n {/* Data rows */}\n {Array.from({ length: rows }, (_, rowIdx) => (\n <div key={rowIdx} className=\"kz-table-skeleton-row\">\n {showCheckbox && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--checkbox\">\n <Skeleton variant=\"rectangular\" width={16} height={16} />\n </div>\n )}\n {Array.from({ length: columns }, (_, colIdx) => (\n <div key={colIdx} className=\"kz-table-skeleton-cell\">\n <Skeleton\n variant=\"text\"\n width={`${40 + (((rowIdx + colIdx) * 17) % 50)}%`}\n />\n </div>\n ))}\n {showActions && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--actions\">\n <Skeleton variant=\"circular\" width={24} height={24} />\n </div>\n )}\n </div>\n ))}\n </div>\n\n {showPagination && (\n <div className=\"kz-table-skeleton-footer\">\n <Skeleton variant=\"text\" width=\"100px\" height=\"14px\" />\n <div className=\"kz-table-skeleton-footer-right\">\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n <Skeleton variant=\"rectangular\" width=\"120px\" height=\"28px\" />\n </div>\n </div>\n )}\n </div>\n );\n }\n);\n\nTableSkeleton.displayName = \"TableSkeleton\";\n\n/* ── CardSkeleton ── */\n\nexport type CardSkeletonLayout = \"standard\" | \"horizontal\" | \"media\";\n\nexport interface CardSkeletonProps {\n /** Layout preset. Default: \"standard\" */\n layout?: CardSkeletonLayout;\n /** Show a cover/image area. Default: true for \"standard\" and \"media\" */\n showCover?: boolean;\n /** Number of text lines in the body. Default: 3 */\n lines?: number;\n /** Show a footer area. Default: false */\n showFooter?: boolean;\n /** Width (CSS value). Default: \"100%\" */\n width?: string | number;\n className?: string;\n}\n\nconst CardSkeleton = React.forwardRef<HTMLDivElement, CardSkeletonProps>(\n (\n {\n layout = \"standard\",\n showCover,\n lines = 3,\n showFooter = false,\n width,\n className,\n },\n ref\n ) => {\n const hasCover = showCover ?? (layout === \"standard\" || layout === \"media\");\n\n if (layout === \"horizontal\") {\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-card-skeleton\",\n \"kz-card-skeleton--horizontal\",\n className\n )}\n style={width != null ? { width } : undefined}\n role=\"status\"\n aria-label=\"Loading card\"\n >\n {hasCover && (\n <Skeleton\n variant=\"rectangular\"\n className=\"kz-card-skeleton-cover kz-card-skeleton-cover--side\"\n />\n )}\n <div className=\"kz-card-skeleton-content\">\n <Skeleton variant=\"text\" width=\"60%\" height=\"16px\" />\n <Skeleton variant=\"text\" lines={lines} />\n {showFooter && (\n <div className=\"kz-card-skeleton-footer\">\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\"kz-card-skeleton\", className)}\n style={width != null ? { width } : undefined}\n role=\"status\"\n aria-label=\"Loading card\"\n >\n {hasCover && (\n <Skeleton\n variant=\"rectangular\"\n className={cn(\n \"kz-card-skeleton-cover\",\n layout === \"media\" && \"kz-card-skeleton-cover--tall\"\n )}\n />\n )}\n <div className=\"kz-card-skeleton-content\">\n <Skeleton variant=\"text\" width=\"50%\" height=\"16px\" />\n <Skeleton variant=\"text\" lines={lines} />\n {showFooter && (\n <div className=\"kz-card-skeleton-footer\">\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCardSkeleton.displayName = \"CardSkeleton\";\n\nexport { Skeleton, TableSkeleton, CardSkeleton };\n","export const TOKEN_KEYS = [\n // Brand\n \"color.brand.primary\",\n \"color.brand.primary.hover\",\n \"color.brand.primary.active\",\n \"color.brand.secondary\",\n \"color.brand.accent\",\n \"color.brand.accent.hover\",\n \"color.brand.accent.active\",\n \"color.brand.accent.dark\",\n \"color.brand.inverse\",\n\n // Surface\n \"color.surface.background\",\n \"color.surface.base\",\n \"color.surface.raised\",\n \"color.surface.sunken\",\n \"color.surface.overlay\",\n \"color.surface.glass\",\n \"color.surface.muted\",\n \"color.surface.inverse\",\n\n // Text\n \"color.text.primary\",\n \"color.text.secondary\",\n \"color.text.tertiary\",\n \"color.text.muted\",\n \"color.text.disabled\",\n \"color.text.inverse\",\n \"color.text.link\",\n \"color.text.link.hover\",\n\n // Border\n \"color.border.subtle\",\n \"color.border.default\",\n \"color.border.strong\",\n \"color.border.focus\",\n \"color.border.inverse\",\n\n // Status\n \"color.status.success\",\n \"color.status.success.bg\",\n \"color.status.success.border\",\n \"color.status.warning\",\n \"color.status.warning.bg\",\n \"color.status.warning.border\",\n \"color.status.error\",\n \"color.status.error.bg\",\n \"color.status.error.border\",\n \"color.status.info\",\n \"color.status.info.bg\",\n \"color.status.info.border\",\n\n // Shadows\n \"shadow.elevation.0\",\n \"shadow.elevation.1\",\n \"shadow.elevation.2\",\n \"shadow.elevation.3\",\n \"shadow.elevation.4\",\n \"shadow.elevation.5\",\n \"shadow.inset.1\",\n \"shadow.inset.2\",\n \"shadow.focus\",\n \"shadow.neumorphic.light\",\n \"shadow.neumorphic.dark\",\n \"shadow.neumorphic.raised.sm\",\n \"shadow.neumorphic.raised.md\",\n \"shadow.neumorphic.raised.lg\",\n \"shadow.neumorphic.inset.sm\",\n\n // Effects\n \"effect.blur.sm\",\n \"effect.blur.md\",\n \"effect.blur.lg\",\n \"effect.glass.opacity\",\n \"effect.glass.border.opacity\",\n\n // Radius\n \"radius.none\",\n \"radius.xs\",\n \"radius.sm\",\n \"radius.md\",\n \"radius.lg\",\n \"radius.xl\",\n \"radius.full\",\n\n // Space\n \"space.0\",\n \"space.1\",\n \"space.2\",\n \"space.3\",\n \"space.4\",\n \"space.5\",\n \"space.6\",\n \"space.8\",\n \"space.10\",\n \"space.12\",\n \"space.16\",\n \"space.20\",\n \"space.24\",\n\n // Typography\n \"font.family.base\",\n \"font.family.mono\",\n \"font.size.xs\",\n \"font.size.sm\",\n \"font.size.md\",\n \"font.size.lg\",\n \"font.size.xl\",\n \"font.size.2xl\",\n \"font.size.3xl\",\n \"font.weight.regular\",\n \"font.weight.medium\",\n \"font.weight.semibold\",\n \"font.weight.bold\",\n \"line.height.sm\",\n \"line.height.md\",\n \"line.height.lg\",\n\n // Motion\n \"motion.duration.fast\",\n \"motion.duration.normal\",\n \"motion.duration.slow\",\n \"motion.easing.standard\",\n \"motion.easing.emphasized\",\n\n // Intent — semantic middle layer\n \"intent.interactive.bg\",\n \"intent.interactive.bg.hover\",\n \"intent.interactive.text\",\n \"intent.interactive.text.selected\",\n \"intent.interactive.shadow\",\n \"intent.interactive.shadow.active\",\n \"intent.interactive.border\",\n \"intent.interactive.radius\",\n \"intent.container.bg\",\n \"intent.container.border\",\n \"intent.container.shadow\",\n \"intent.container.radius\",\n\n // Component — Sidebar\n \"component.sidebar.bg\",\n \"component.sidebar.border\",\n \"component.sidebar.item.bg\",\n \"component.sidebar.item.bg.hover\",\n \"component.sidebar.item.bg.active\",\n \"component.sidebar.item.text\",\n \"component.sidebar.item.text.active\",\n \"component.sidebar.indicator\",\n\n // Component — Header\n \"component.header.bg\",\n \"component.header.border\",\n \"component.header.text\",\n\n // Component — Button (Primary variant reads secondary tokens)\n \"component.button.secondary.bg\",\n \"component.button.secondary.bg.hover\",\n \"component.button.secondary.bg.active\",\n \"component.button.secondary.text\",\n \"component.button.secondary.shadow\",\n \"component.button.secondary.shadow.hover\",\n // Ghost variant\n \"component.button.ghost.bg\",\n \"component.button.ghost.bg.hover\",\n \"component.button.ghost.text\",\n // Container variant\n \"component.button.container.bg\",\n \"component.button.container.bg.hover\",\n \"component.button.container.text\",\n \"component.button.container.border\",\n \"component.button.container.shadow\",\n \"component.button.container.shadow.hover\",\n // Brand status\n \"component.button.brand.bg\",\n \"component.button.brand.bg.hover\",\n \"component.button.brand.text\",\n \"component.button.brand.shadow\",\n \"component.button.brand.shadow.hover\",\n // Ghost + status hover backgrounds\n \"component.button.ghost.brand.bg.hover\",\n \"component.button.ghost.success.bg.hover\",\n \"component.button.ghost.warning.bg.hover\",\n \"component.button.ghost.error.bg.hover\",\n \"component.button.ghost.info.bg.hover\",\n // Container + brand overrides\n \"component.button.container.brand.text\",\n \"component.button.container.brand.border\",\n \"component.button.container.brand.bg.hover\",\n // Success status\n \"component.button.success.bg\",\n \"component.button.success.bg.hover\",\n \"component.button.success.text\",\n \"component.button.success.shadow\",\n \"component.button.success.shadow.hover\",\n // Warning status\n \"component.button.warning.bg\",\n \"component.button.warning.bg.hover\",\n \"component.button.warning.text\",\n \"component.button.warning.shadow\",\n \"component.button.warning.shadow.hover\",\n // Error status\n \"component.button.error.bg\",\n \"component.button.error.bg.hover\",\n \"component.button.error.text\",\n \"component.button.error.shadow\",\n \"component.button.error.shadow.hover\",\n // Info status\n \"component.button.info.bg\",\n \"component.button.info.bg.hover\",\n \"component.button.info.text\",\n \"component.button.info.shadow\",\n \"component.button.info.shadow.hover\",\n // Sizes\n \"component.button.height.sm\",\n \"component.button.px.sm\",\n \"component.button.text.sm\",\n \"component.button.icon.sm\",\n \"component.button.height.md\",\n \"component.button.px.md\",\n \"component.button.text.md\",\n \"component.button.icon.md\",\n \"component.button.height.lg\",\n \"component.button.px.lg\",\n \"component.button.text.lg\",\n \"component.button.icon.lg\",\n // Common\n \"component.button.radius\",\n \"component.button.disabled.opacity\",\n \"component.button.loading.opacity\",\n\n // Component — Toggle button\n \"component.toggle-button.default.bg\",\n \"component.toggle-button.default.bg.pressed\",\n \"component.toggle-button.default.text\",\n \"component.toggle-button.default.text.pressed\",\n \"component.toggle-button.primary.bg\",\n \"component.toggle-button.primary.bg.pressed\",\n \"component.toggle-button.primary.text\",\n \"component.toggle-button.primary.text.pressed\",\n \"component.toggle-button.container.bg\",\n \"component.toggle-button.container.bg.pressed\",\n \"component.toggle-button.container.text\",\n \"component.toggle-button.container.text.pressed\",\n \"component.toggle-button.pressed.shadow\",\n \"component.toggle-button.track.off.bg\",\n \"component.toggle-button.track.on.bg\",\n \"component.toggle-button.thumb.bg\",\n \"component.toggle-button.thumb.shadow\",\n\n // Component — Checkbox\n \"component.checkbox.size.sm\",\n \"component.checkbox.size.md\",\n \"component.checkbox.size.lg\",\n \"component.checkbox.radius\",\n \"component.checkbox.off.bg\",\n \"component.checkbox.off.border\",\n \"component.checkbox.off.shadow\",\n \"component.checkbox.on.bg\",\n \"component.checkbox.on.border\",\n \"component.checkbox.on.shadow\",\n \"component.checkbox.icon.color\",\n \"component.checkbox.disabled.opacity\",\n\n // Component — Radio\n \"component.radio.size.sm\",\n \"component.radio.size.md\",\n \"component.radio.size.lg\",\n \"component.radio.radius\",\n \"component.radio.off.bg\",\n \"component.radio.off.border\",\n \"component.radio.off.shadow\",\n \"component.radio.on.bg\",\n \"component.radio.on.border\",\n \"component.radio.on.shadow\",\n \"component.radio.dot.bg\",\n \"component.radio.dot.shadow\",\n \"component.radio.disabled.opacity\",\n\n // Component — Tabs\n \"component.tabs.list.bg\",\n \"component.tabs.list.radius\",\n \"component.tabs.list.shadow\",\n \"component.tabs.list.pill.bg\",\n \"component.tabs.trigger.text\",\n \"component.tabs.trigger.selected.text\",\n \"component.tabs.trigger.selected.underline\",\n \"component.tabs.trigger.selected.bg\",\n \"component.tabs.trigger.selected.shadow\",\n \"component.tabs.trigger.radius\",\n \"component.tabs.content.padding\",\n\n // Component — Input\n \"component.input.bg\",\n \"component.input.border\",\n \"component.input.border.focus\",\n \"component.input.border.disabled\",\n \"component.input.text\",\n \"component.input.placeholder\",\n \"component.input.icon\",\n \"component.input.shadow\",\n \"component.input.radius\",\n \"component.input.container.radius\",\n \"component.input.container.border\",\n\n // Component — Dropdown\n \"component.dropdown.trigger.bg\",\n \"component.dropdown.trigger.border\",\n \"component.dropdown.trigger.border.open\",\n \"component.dropdown.trigger.text\",\n \"component.dropdown.trigger.text.selected\",\n \"component.dropdown.trigger.shadow\",\n \"component.dropdown.trigger.shadow.open\",\n \"component.dropdown.trigger.radius\",\n \"component.dropdown.trigger.focus.ring\",\n \"component.dropdown.content.bg\",\n \"component.dropdown.content.border\",\n \"component.dropdown.content.shadow\",\n \"component.dropdown.content.radius\",\n \"component.dropdown.item.text\",\n \"component.dropdown.item.text.selected\",\n \"component.dropdown.item.bg.hover\",\n\n // Component — Nav button (sidesheet)\n \"component.nav-button.icon\",\n \"component.nav-button.text\",\n \"component.nav-button.gap\",\n \"component.nav-button.chevron\",\n \"component.nav-button.hover.bg\",\n \"component.nav-button.selected.bg\",\n \"component.nav-button.selected.shadow\",\n \"component.nav-button.selected.icon\",\n \"component.nav-button.selected.text\",\n \"component.nav-button.radius\",\n\n // Component — Nav dropdown menu\n \"component.nav-dropdown.menu.bg\",\n \"component.nav-dropdown.menu.shadow\",\n \"component.nav-dropdown.menu.radius\",\n \"component.nav-dropdown.option.text\",\n \"component.nav-dropdown.option.hover.bg\",\n\n // Component — Sidesheet\n \"component.sidesheet.bg\",\n \"component.sidesheet.width\",\n \"component.sidesheet.border\",\n\n // Component — Sidemenu\n \"component.sidemenu.bg\",\n \"component.sidemenu.border\",\n \"component.sidemenu.shadow\",\n \"component.sidemenu.section.label.text\",\n \"component.sidemenu.item.text\",\n \"component.sidemenu.item.bg.hover\",\n \"component.sidemenu.item.bg.active\",\n \"component.sidemenu.item.active.text\",\n \"component.sidemenu.item.active.link.bg\",\n \"component.sidemenu.item.active.link.shadow\",\n \"component.sidemenu.group.indent.bg\",\n \"component.sidemenu.gap\",\n \"component.sidemenu.icon.gap\",\n\n // Component — Tooltip\n \"component.tooltip.bg\",\n \"component.tooltip.text\",\n \"component.tooltip.border\",\n \"component.tooltip.shadow\",\n \"component.tooltip.radius\",\n \"component.tooltip.padding.sm\",\n \"component.tooltip.padding.md\",\n \"component.tooltip.padding.lg\",\n \"component.tooltip.maxWidth.sm\",\n \"component.tooltip.maxWidth.md\",\n \"component.tooltip.maxWidth.lg\",\n \"component.tooltip.inverse.bg\",\n \"component.tooltip.inverse.text\",\n \"component.tooltip.success.bg\",\n \"component.tooltip.success.text\",\n \"component.tooltip.warning.bg\",\n \"component.tooltip.warning.text\",\n \"component.tooltip.error.bg\",\n \"component.tooltip.error.text\",\n\n // Component — Card\n \"component.card.bg\",\n \"component.card.border\",\n \"component.card.shadow\",\n \"component.card.radius\",\n\n // Component — Canvas / Tile\n \"component.canvas.bg\",\n \"component.canvas.grid.line\",\n \"component.tile.bg\",\n \"component.tile.border\",\n \"component.tile.shadow\",\n \"component.tile.header.bg\",\n \"component.tile.header.text\",\n\n \"component.table.surface\",\n \"component.table.header.bg\",\n \"component.table.header.border\",\n \"component.table.row.border\",\n \"component.table.row.hover.bg\",\n \"component.table.sticky.row.top\",\n \"component.table.footer.bg\",\n \"component.table.pagination.bg\",\n \"component.table.pagination.active.bg\",\n \"component.table.pagination.active.shadow\",\n \"component.table.pagination.hover.shadow\",\n\n // Component — Filter panel\n \"component.filter.panel.bg\",\n \"component.filter.panel.border\",\n \"component.filter.label.text\",\n \"component.filter.control.bg\",\n \"component.filter.control.border\",\n\n // Typography status colors (overridable via KezelThemeProvider tokens)\n \"typography.error.color\",\n \"typography.success.color\",\n \"typography.warning.color\",\n] as const;\n\nexport type TokenKey = (typeof TOKEN_KEYS)[number];\n"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AACF;","names":["Calendar","React","KezelVariant","KezelMode","ButtonVariant","ButtonStatus","ButtonSize","ButtonType","ButtonAspectRatio","DropdownTriggerVariant","TypographyVariant","TypographyTone","TypographyAlign","TypographyWeight","OverrideMode","TextInputVariant","TextInputSize","TextInputState","TextInputType","TooltipSize","TooltipPosition","TooltipAlign","TooltipColor","ToggleButtonVariant","ToggleButtonSize","CheckboxSize","CheckboxVariant","RadioSize","AvatarSize","AvatarStatus","ToastVariant","CardShadow","ToastPosition","QrPattern","import_lucide_react","IconName","AlertCircleIcon","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","rootBase","import_jsx_runtime","React","React","import_jsx_runtime","React","import_jsx_runtime","stateIcon","React","import_jsx_runtime","clamp","React","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","TooltipPrimitive","import_jsx_runtime","SIDE_MAP","React","import_jsx_runtime","React","React","React","DropdownMenuPrimitive","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","sizeClasses","React","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","base","import_jsx_runtime","React","React","import_jsx_runtime","Calendar","React","import_jsx_runtime","import_jsx_runtime","base","d","pattern","iconSize","Calendar","React","Popover","import_jsx_runtime","formatDate","iconSize","Calendar","React","Popover","import_jsx_runtime","iconSize","React","Popover","import_jsx_runtime","iconSize","React","import_jsx_runtime","iconSize","React","Popover","import_jsx_runtime","iconSize","React","RadixDialog","import_jsx_runtime","React","import_jsx_runtime","FormGroupDirection","Root","React","RadixDialog","import_jsx_runtime","ModalSize","React","ReactDOM","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","QRCode","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","_"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/button/Button.tsx","../src/constants/enum.ts","../src/components/button/button.variants.ts","../src/icon/icon-sizes.ts","../src/utils/cn.ts","../src/icon/Icon.tsx","../src/icon/icon-registry.tsx","../src/components/toggle-button/ToggleButton.tsx","../src/components/toggle-button/toggle-button.variants.ts","../src/components/checkbox/Checkbox.tsx","../src/components/checkbox/checkbox.variants.ts","../src/components/radio-button/RadioButton.tsx","../src/components/radio-button/radio-button.variants.ts","../src/components/typography/Typography.tsx","../src/components/typography/typography-variants.ts","../src/components/text-input/TextInput.tsx","../src/components/text-area/TextArea.tsx","../src/components/number-input/NumberInput.tsx","../src/components/range-slider/RangeSlider.tsx","../src/components/sidesheet/Sidesheet.tsx","../src/components/sidemenu/SideMenu.tsx","../src/components/tooltip/Tooltip.tsx","../src/components/tabs/Tabs.tsx","../src/components/table/Table.tsx","../src/components/pagination/Pagination.tsx","../src/components/dropdown/dropdown.tsx","../src/components/dropdown/DropdownButton.tsx","../src/components/dialog/Dialog.tsx","../src/providers/KezelThemeProvider.tsx","../src/tokens/contract/css-var-maps.ts","../src/tokens/validate/validateTokenValue.ts","../src/tokens/apply/applyTokenOverrides.ts","../src/components/avatar/Avatar.tsx","../src/components/avatar/avatar.variants.ts","../src/components/date-time-picker/DateTimePicker.tsx","../src/components/date-time-picker/Calendar.tsx","../src/components/date-time-picker/TimeSelector.tsx","../src/components/date-range-picker/DateRangePicker.tsx","../src/components/color-picker/ColorPicker.tsx","../src/components/icon-picker/IconPicker.tsx","../src/components/file-uploader/FileUploader.tsx","../src/components/select/Select.tsx","../src/components/sidepanel/SidePanel.tsx","../src/components/form-group/FormGroup.tsx","../src/components/modal/Modal.tsx","../src/components/toast/Toast.tsx","../src/components/card/Card.tsx","../src/components/sql-editor/SqlEditor.tsx","../src/components/qr-renderer/QrRenderer.tsx","../src/components/loader/Loader.tsx","../src/components/screen-loader/ScreenLoader.tsx","../src/components/error-page/ErrorPage.tsx","../src/components/skeleton/Skeleton.tsx","../src/tokens/contract/token-keys.ts"],"sourcesContent":["export {\n Button,\n buttonVariants,\n ButtonVariant,\n ButtonSize,\n ButtonStatus,\n ButtonType,\n ButtonAspectRatio,\n} from \"./components/button\";\nexport type { ButtonProps, ButtonVariants } from \"./components/button\";\nexport {\n ToggleButton,\n toggleButtonVariants,\n ToggleButtonVariant,\n ToggleButtonSize,\n} from \"./components/toggle-button\";\nexport type {\n ToggleButtonProps,\n ToggleButtonVariants,\n} from \"./components/toggle-button\";\nexport {\n Checkbox,\n checkboxVariants,\n CheckboxSize,\n CheckboxVariant,\n} from \"./components/checkbox\";\nexport type { CheckboxProps, CheckboxVariants } from \"./components/checkbox\";\nexport {\n RadioButton,\n radioButtonVariants,\n RadioSize,\n} from \"./components/radio-button\";\nexport type {\n RadioButtonProps,\n RadioButtonVariants,\n} from \"./components/radio-button\";\nexport {\n Typography,\n typographyVariants,\n getTypographyClass,\n getDefaultElement,\n TypographyVariantEnum,\n TypographyToneEnum,\n TypographyAlignEnum,\n TypographyWeightEnum,\n} from \"./components/typography\";\nexport type {\n TypographyProps,\n TypographyTone,\n TypographyAlign,\n TypographyWeight,\n TypographyVariant,\n TypographyAsElement,\n} from \"./components/typography\";\nexport {\n TextInput,\n TextInputVariant,\n TextInputSize,\n TextInputState,\n TextInputType,\n} from \"./components/text-input\";\nexport type { TextInputProps } from \"./components/text-input\";\nexport { TextArea } from \"./components/text-area\";\nexport type { TextAreaProps } from \"./components/text-area\";\nexport { NumberInput } from \"./components/number-input\";\nexport type { NumberInputProps } from \"./components/number-input\";\nexport { RangeSlider } from \"./components/range-slider\";\nexport type { RangeSliderProps } from \"./components/range-slider\";\nexport { Sidesheet } from \"./components/sidesheet\";\nexport type { SidesheetProps } from \"./components/sidesheet\";\nexport { SideMenu } from \"./components/sidemenu\";\nexport type {\n SideMenuProps,\n SideMenuNode,\n SideMenuSectionNode,\n SideMenuLinkNode,\n SideMenuGroupNode,\n SideMenuGroupItem,\n SideMenuGroupItemSubItem,\n SideMenuNavigatePayload,\n SideMenuFlyoutSide,\n} from \"./components/sidemenu\";\nexport {\n Tooltip,\n TooltipSize,\n TooltipPosition,\n TooltipAlign,\n TooltipColor,\n} from \"./components/tooltip\";\nexport type { TooltipProps } from \"./components/tooltip\";\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n SubTabsTrigger,\n} from \"./components/tabs\";\nexport type {\n TabsVariant,\n TabsOrientation,\n TabsSize,\n TabsProps,\n TabsListProps,\n TabsTriggerProps,\n TabsContentProps,\n SubTabsTriggerProps,\n SubTabOption,\n} from \"./components/tabs\";\nexport { Table } from \"./components/table\";\nexport type {\n TableProps,\n TableColumn,\n TableSortState,\n TablePaginationState,\n TableCellChange,\n TableSize,\n TableAlign,\n SortDirection,\n} from \"./components/table\";\nexport { Pagination } from \"./components/pagination\";\nexport type { PaginationProps } from \"./components/pagination\";\nexport { Icon, iconRegistry, iconSize, IconName, size } from \"./icon\";\nexport type { IconProps, IconSizeKey } from \"./icon\";\nexport {\n DropdownButton,\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n DropdownLabel,\n DropdownCheckboxItem,\n DropdownRadioGroup,\n DropdownRadioItem,\n DropdownSub,\n DropdownSubTrigger,\n DropdownSubContent,\n DropdownTriggerVariant,\n} from \"./components/dropdown\";\nexport type {\n DropdownButtonProps,\n DropdownButtonTrigger,\n DropdownButtonItem,\n DropdownTriggerProps,\n} from \"./components/dropdown\";\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from \"./components/dialog\";\nexport {\n KezelThemeProvider,\n KezelVariant,\n KezelMode,\n OverrideMode,\n} from \"./providers/KezelThemeProvider\";\nexport type { KezelThemeProviderProps } from \"./providers/KezelThemeProvider\";\nexport {\n Avatar,\n avatarVariants,\n AvatarSize,\n AvatarStatus,\n} from \"./components/avatar\";\nexport type { AvatarProps, AvatarVariants } from \"./components/avatar\";\nexport {\n DateTimePicker,\n Calendar,\n TimeSelector,\n} from \"./components/date-time-picker\";\nexport type {\n DateTimePickerProps,\n DateTimePickerMode,\n DateTimePickerFormat,\n CalendarProps,\n TimeSelectorProps,\n} from \"./components/date-time-picker\";\nexport { DateRangePicker } from \"./components/date-range-picker\";\nexport type {\n DateRangePickerProps,\n DateRange,\n} from \"./components/date-range-picker\";\nexport { ColorPicker } from \"./components/color-picker\";\nexport type { ColorPickerProps } from \"./components/color-picker\";\nexport { IconPicker } from \"./components/icon-picker\";\nexport type { IconPickerProps } from \"./components/icon-picker\";\nexport { FileUploader } from \"./components/file-uploader\";\nexport type { FileUploaderProps } from \"./components/file-uploader\";\nexport { Select } from \"./components/select\";\nexport type { SelectProps, SelectOption } from \"./components/select\";\nexport { SidePanel, SidePanelTrigger } from \"./components/sidepanel\";\nexport type { SidePanelProps, SidePanelSide } from \"./components/sidepanel\";\nexport { FormGroup, FormGroupDirection } from \"./components/form-group\";\nexport type { FormGroupProps } from \"./components/form-group\";\nexport { Modal, ModalTrigger, ModalSize } from \"./components/modal\";\nexport type { ModalProps } from \"./components/modal\";\nexport { ToastProvider, Toaster, useToast } from \"./components/toast\";\nexport type {\n ToastData,\n ToasterProps,\n ToastContextValue,\n} from \"./components/toast\";\nexport { ToastVariant, ToastPosition } from \"./constants/enum\";\nexport { Card, CardShadow } from \"./components/card\";\nexport type { CardProps, CardSize, CardPadding } from \"./components/card\";\nexport { SqlEditor } from \"./components/sql-editor\";\nexport type {\n SqlEditorProps,\n SqlEditorQueryResult,\n SqlEditorSize,\n} from \"./components/sql-editor\";\nexport { QrRenderer, QrPattern } from \"./components/qr-renderer\";\nexport type {\n QrRendererProps,\n QrRendererImageProps,\n QrRendererDataProps,\n QrRendererDebugInfo,\n QrErrorCorrectionLevel,\n} from \"./components/qr-renderer\";\nexport { Loader } from \"./components/loader\";\nexport type {\n LoaderProps,\n LoaderSize,\n LoaderVariant,\n} from \"./components/loader\";\nexport { ScreenLoader } from \"./components/screen-loader\";\nexport type { ScreenLoaderProps } from \"./components/screen-loader\";\nexport { ErrorPage } from \"./components/error-page\";\nexport type { ErrorPageProps, ErrorPageStatus } from \"./components/error-page\";\nexport { Skeleton, TableSkeleton, CardSkeleton } from \"./components/skeleton\";\nexport type {\n SkeletonProps,\n SkeletonVariant,\n TableSkeletonProps,\n TableSkeletonSize,\n CardSkeletonProps,\n CardSkeletonLayout,\n} from \"./components/skeleton\";\nexport { TOKEN_KEYS } from \"./tokens/contract/token-keys\";\nexport { tokenToCssVar } from \"./tokens/contract/css-var-maps\";\nexport type { TokenKey } from \"./tokens/contract/token-keys\";\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n ButtonVariant,\n ButtonSize,\n ButtonStatus,\n ButtonType,\n ButtonAspectRatio,\n} from \"../../constants/enum\";\nimport { buttonVariants, type ButtonVariants } from \"./button.variants\";\nimport { Loader2 } from \"lucide-react\";\nimport { iconSize } from \"../../icon/icon-sizes\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, type IconProps } from \"../../icon/Icon\";\n\nexport interface ButtonProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onClick\"\n> {\n variant: ButtonVariant;\n size: ButtonSize;\n status?: ButtonStatus;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n asChild?: boolean;\n children: React.ReactNode;\n type?: ButtonType;\n loading?: boolean;\n aspectRatio?: ButtonAspectRatio;\n leftIcon?: IconProps;\n rightIcon?: IconProps;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n status,\n onClick,\n asChild = false,\n children,\n type = ButtonType.Button,\n loading = false,\n aspectRatio = ButtonAspectRatio.Auto,\n disabled,\n leftIcon,\n rightIcon,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const isDisabled = disabled || loading;\n\n const buttonClassName = cn(\n buttonVariants({ variant, size, status }),\n loading && \"opacity-[var(--kz-component-button-loading-opacity,0.8)]\",\n aspectRatio === ButtonAspectRatio.Square && \"kz-button--aspect-1-1\",\n className\n );\n\n if (asChild) {\n return (\n <Comp\n ref={ref}\n type={asChild ? undefined : type}\n className={buttonClassName}\n onClick={onClick}\n disabled={isDisabled}\n aria-busy={loading}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n ref={ref}\n type={type}\n className={buttonClassName}\n onClick={onClick}\n disabled={isDisabled}\n aria-busy={loading}\n {...props}\n >\n {loading && (\n <Loader2\n className=\"kz-button-spinner\"\n size={iconSize.md}\n color=\"currentColor\"\n />\n )}\n {leftIcon && <Icon {...leftIcon} />}\n {children}\n {rightIcon && <Icon {...rightIcon} />}\n </Comp>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\nexport type { ButtonVariants };\n","export enum Theme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\nexport enum ThemeStyle {\n Enterprise = \"enterprise\",\n Neumorphic = \"neumorphic\",\n Standard = \"standard\",\n Glassmorphic = \"glassmorphic\",\n}\n\nexport enum KezelVariant {\n Standard = \"standard\",\n Neumorphic = \"neumorphic\",\n}\n\nexport enum KezelMode {\n Light,\n Dark,\n}\n\nexport enum ButtonVariant {\n Primary = \"primary\",\n Ghost = \"ghost\",\n Container = \"container\",\n}\n\nexport enum ButtonStatus {\n Default = \"default\",\n Brand = \"brand\",\n Success = \"success\",\n Warning = \"warning\",\n Error = \"error\",\n Info = \"info\",\n}\n\nexport enum ButtonSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum ButtonType {\n Button = \"button\",\n Submit = \"submit\",\n Reset = \"reset\",\n}\n\nexport enum ButtonAspectRatio {\n Auto = \"auto\",\n Square = \"square\",\n}\n\nexport enum DropdownTriggerVariant {\n Default = \"default\",\n Ghost = \"ghost\",\n}\n\nexport enum TypographyVariant {\n H1 = \"h1\",\n H2 = \"h2\",\n H3 = \"h3\",\n H4 = \"h4\",\n H5 = \"h5\",\n Body = \"body\",\n Small = \"small\",\n Caption = \"caption\",\n Label = \"label\",\n Link = \"link\",\n Error = \"error\",\n Success = \"success\",\n Warning = \"warning\",\n}\n\nexport enum TypographyTone {\n Primary = \"primary\",\n Secondary = \"secondary\",\n Muted = \"muted\",\n Disabled = \"disabled\",\n Inverse = \"inverse\",\n Link = \"link\",\n}\n\nexport enum TypographyAlign {\n Left = \"left\",\n Center = \"center\",\n Right = \"right\",\n}\n\nexport enum TypographyWeight {\n Regular = \"regular\",\n Medium = \"medium\",\n Semibold = \"semibold\",\n Bold = \"bold\",\n}\n\nexport enum TokenCategory {\n Color = \"color\",\n Shadow = \"shadow\",\n Length = \"length\",\n Number = \"number\",\n LineHeight = \"lineHeight\",\n FontFamily = \"fontFamily\",\n FontWeight = \"fontWeight\",\n Duration = \"duration\",\n Easing = \"easing\",\n}\n\nexport enum OverrideMode {\n Safe = \"safe\",\n Strict = \"strict\",\n}\n\nexport enum TextInputVariant {\n Default = \"default\",\n Container = \"container\",\n Ghost = \"ghost\",\n}\n\nexport enum TextInputSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum TextInputState {\n Default = \"default\",\n Error = \"error\",\n Success = \"success\",\n Warning = \"warning\",\n}\n\nexport enum TextInputType {\n Text = \"text\",\n Email = \"email\",\n Password = \"password\",\n Number = \"number\",\n Search = \"search\",\n Tel = \"tel\",\n Url = \"url\",\n}\n\nexport enum TooltipSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum TooltipPosition {\n Top = \"top\",\n Right = \"right\",\n Bottom = \"bottom\",\n Left = \"left\",\n}\n\nexport enum TooltipAlign {\n Start = \"start\",\n Center = \"center\",\n End = \"end\",\n}\n\nexport enum TooltipColor {\n Default = \"default\",\n Inverse = \"inverse\",\n Success = \"success\",\n Warning = \"warning\",\n Error = \"error\",\n}\n\nexport enum ToggleButtonVariant {\n Default = \"default\",\n Primary = \"primary\",\n Container = \"container\",\n}\n\nexport enum ToggleButtonSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum CheckboxSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum CheckboxVariant {\n Default = \"default\",\n Container = \"container\",\n}\n\nexport enum RadioSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum AvatarSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n Xl = \"xl\",\n}\n\nexport enum AvatarStatus {\n Online = \"online\",\n Busy = \"busy\",\n Away = \"away\",\n Offline = \"offline\",\n}\n\nexport enum ToastVariant {\n Success = \"success\",\n Error = \"error\",\n Warning = \"warning\",\n Info = \"info\",\n}\n\nexport enum CardShadow {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n}\n\nexport enum ToastPosition {\n TopRight = \"top-right\",\n TopLeft = \"top-left\",\n BottomRight = \"bottom-right\",\n BottomLeft = \"bottom-left\",\n}\n\nexport enum QrPattern {\n Square = \"square\",\n Circle = \"circle\",\n Diamond = \"diamond\",\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { ButtonVariant, ButtonSize } from \"../../constants/enum\";\n\nconst base = [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium\",\n \"transition-all duration-150 ease-out\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--kz-color-border-focus)]\",\n \"disabled:cursor-not-allowed disabled:opacity-[var(--kz-component-button-disabled-opacity,0.5)]\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n].join(\" \");\n\nexport const buttonVariants = cva(base, {\n variants: {\n variant: {\n primary: [\n \"bg-[var(--kz-component-button-secondary-bg)]\",\n \"text-[var(--kz-component-button-secondary-text)]\",\n \"rounded-[var(--kz-component-button-radius,8px)]\",\n \"[border:var(--kz-component-button-secondary-border,none)]\",\n \"[box-shadow:var(--kz-component-button-secondary-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-secondary-bg-hover)]\",\n \"hover:[box-shadow:var(--kz-component-button-secondary-shadow-hover,var(--kz-component-button-secondary-shadow,none))]\",\n \"active:bg-[var(--kz-component-button-secondary-bg-active)]\",\n ].join(\" \"),\n ghost: [\n \"bg-[var(--kz-component-button-ghost-bg)]\",\n \"text-[var(--kz-component-button-ghost-text)]\",\n \"rounded-[var(--kz-component-button-radius,8px)]\",\n \"border border-transparent\",\n \"[box-shadow:none]\",\n \"hover:bg-[var(--kz-component-button-ghost-bg-hover,transparent)]\",\n \"active:opacity-80\",\n ].join(\" \"),\n container: [\n \"bg-[var(--kz-component-button-container-bg)]\",\n \"text-[var(--kz-component-button-container-text)]\",\n \"border border-[var(--kz-component-button-container-border)]\",\n \"rounded-[var(--kz-component-button-radius,8px)]\",\n \"[box-shadow:var(--kz-component-button-container-shadow)]\",\n \"hover:bg-[var(--kz-component-button-ghost-bg-hover,transparent)]\",\n \"hover:[box-shadow:var(--kz-component-button-container-shadow-hover)]\",\n ].join(\" \"),\n },\n status: {\n default: \"\",\n brand: [\n \"bg-[var(--kz-component-button-brand-bg)]\",\n \"text-[var(--kz-component-button-brand-text)]\",\n \"[box-shadow:var(--kz-component-button-brand-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-brand-bg-hover,var(--kz-component-button-brand-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-brand-shadow-hover,var(--kz-component-button-brand-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-brand-bg-hover,var(--kz-component-button-brand-bg))]\",\n ].join(\" \"),\n success: [\n \"bg-[var(--kz-component-button-success-bg)]\",\n \"text-[var(--kz-component-button-success-text)]\",\n \"[box-shadow:var(--kz-component-button-success-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-success-bg-hover,var(--kz-component-button-success-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-success-shadow-hover,var(--kz-component-button-success-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-success-bg-hover,var(--kz-component-button-success-bg))]\",\n ].join(\" \"),\n warning: [\n \"bg-[var(--kz-component-button-warning-bg)]\",\n \"text-[var(--kz-component-button-warning-text)]\",\n \"[box-shadow:var(--kz-component-button-warning-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-warning-bg-hover,var(--kz-component-button-warning-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-warning-shadow-hover,var(--kz-component-button-warning-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-warning-bg-hover,var(--kz-component-button-warning-bg))]\",\n ].join(\" \"),\n error: [\n \"bg-[var(--kz-component-button-error-bg)]\",\n \"text-[var(--kz-component-button-error-text)]\",\n \"[box-shadow:var(--kz-component-button-error-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-error-bg-hover,var(--kz-component-button-error-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-error-shadow-hover,var(--kz-component-button-error-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-error-bg-hover,var(--kz-component-button-error-bg))]\",\n ].join(\" \"),\n info: [\n \"bg-[var(--kz-component-button-info-bg)]\",\n \"text-[var(--kz-component-button-info-text)]\",\n \"[box-shadow:var(--kz-component-button-info-shadow,none)]\",\n \"hover:bg-[var(--kz-component-button-info-bg-hover,var(--kz-component-button-info-bg))]\",\n \"hover:[box-shadow:var(--kz-component-button-info-shadow-hover,var(--kz-component-button-info-shadow,none))]\",\n \"active:!bg-[var(--kz-component-button-info-bg-hover,var(--kz-component-button-info-bg))]\",\n ].join(\" \"),\n },\n size: {\n sm: [\n \"h-[var(--kz-component-button-height-sm,2rem)]\",\n \"px-[var(--kz-component-button-px-sm,0.75rem)]\",\n \"text-[length:var(--kz-component-button-text-sm,0.875rem)]\",\n \"[&_svg]:size-[var(--kz-component-button-icon-sm,1rem)]\",\n ].join(\" \"),\n md: [\n \"h-[var(--kz-component-button-height-md,2.5rem)]\",\n \"px-[var(--kz-component-button-px-md,1rem)]\",\n \"text-[length:var(--kz-component-button-text-md,0.875rem)]\",\n \"[&_svg]:size-[var(--kz-component-button-icon-md,1rem)]\",\n ].join(\" \"),\n lg: [\n \"h-[var(--kz-component-button-height-lg,3rem)]\",\n \"px-[var(--kz-component-button-px-lg,1.25rem)]\",\n \"text-[length:var(--kz-component-button-text-lg,1rem)]\",\n \"[&_svg]:size-[var(--kz-component-button-icon-lg,1.25rem)]\",\n ].join(\" \"),\n },\n },\n compoundVariants: [\n // Ghost + brand: brand text, transparent bg, brand-tinted hover\n {\n variant: \"ghost\",\n status: \"brand\",\n className: [\n \"!bg-transparent text-[var(--kz-color-brand-accent)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-brand-bg-hover,rgba(0,150,137,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n // Ghost + status: text color = status, bg transparent, hover = light tint\n {\n variant: \"ghost\",\n status: \"success\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-success)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-success-bg-hover,rgba(0,201,80,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n {\n variant: \"ghost\",\n status: \"warning\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-warning)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-warning-bg-hover,rgba(245,158,11,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n {\n variant: \"ghost\",\n status: \"error\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-error)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-error-bg-hover,rgba(251,44,54,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n {\n variant: \"ghost\",\n status: \"info\",\n className: [\n \"!bg-transparent text-[var(--kz-color-status-info)]\",\n \"hover:!bg-[var(--kz-component-button-ghost-info-bg-hover,rgba(37,99,235,0.1))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n ].join(\" \"),\n },\n // Container + brand: brand text, brand border, no shadow, brand-tinted hover\n {\n variant: \"container\",\n status: \"brand\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-component-button-container-brand-text,var(--kz-color-brand-accent))]\",\n \"!border-[var(--kz-component-button-container-brand-border,var(--kz-color-brand-accent))]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-container-brand-bg-hover,rgba(0,150,137,0.08))]\",\n ].join(\" \"),\n },\n // Container + status: keep container shape/shadow, override bg/text with status colors\n {\n variant: \"container\",\n status: \"success\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-success)]\",\n \"!border-[var(--kz-color-status-success)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-success-bg-hover,rgba(0,201,80,0.1))]\",\n ].join(\" \"),\n },\n {\n variant: \"container\",\n status: \"warning\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-warning)]\",\n \"!border-[var(--kz-color-status-warning)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-warning-bg-hover,rgba(245,158,11,0.1))]\",\n ].join(\" \"),\n },\n {\n variant: \"container\",\n status: \"error\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-error)]\",\n \"!border-[var(--kz-color-status-error)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-error-bg-hover,rgba(251,44,54,0.1))]\",\n ].join(\" \"),\n },\n {\n variant: \"container\",\n status: \"info\",\n className: [\n \"!bg-transparent\",\n \"!text-[var(--kz-color-status-info)]\",\n \"!border-[var(--kz-color-status-info)]\",\n \"[box-shadow:none] hover:[box-shadow:none]\",\n \"hover:!bg-[var(--kz-component-button-ghost-info-bg-hover,rgba(37,99,235,0.1))]\",\n ].join(\" \"),\n },\n ],\n defaultVariants: {\n variant: ButtonVariant.Primary,\n size: ButtonSize.Md,\n },\n});\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","/** Preset icon sizes (px). Use with Icon size prop. */\nexport const iconSize = {\n xs: 12,\n sm: 16,\n md: 24,\n lg: 32,\n xl: 40,\n} as const;\n\nexport type IconSizeKey = keyof typeof iconSize;\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { iconRegistry, IconName } from \"./icon-registry\";\nimport { iconSize, type IconSizeKey } from \"./icon-sizes\";\nimport { cn } from \"../utils/cn\";\n\nexport interface IconProps extends Omit<\n React.SVGAttributes<SVGSVGElement>,\n \"color\"\n> {\n name: IconName;\n size?: IconSizeKey | number;\n color?: string;\n className?: string;\n}\n\nconst Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ name, size = \"md\", color, className, ...props }, ref) => {\n const Component = iconRegistry[name];\n if (!Component) return null;\n const sizePx = typeof size === \"number\" ? size : iconSize[size];\n const resolvedColor = color ?? \"var(--kz-color-icon-default, currentColor)\";\n return (\n <Component\n ref={ref}\n size={sizePx}\n color={resolvedColor}\n className={cn(\"shrink-0\", className)}\n {...props}\n />\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n\nexport { Icon, iconRegistry, iconSize, IconName };\nexport type { IconSizeKey };\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n Search,\n CircleAlert,\n CheckCircle,\n TriangleAlert,\n Loader2,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n BarChart2,\n Shield,\n ArrowLeft,\n ArrowUp,\n ArrowDown,\n ArrowUpDown,\n EllipsisVertical,\n Sun,\n Moon,\n Settings,\n LogOut,\n User,\n FileText,\n LockOpen,\n Calendar,\n ChartArea,\n ChartBar,\n ChartBarBig,\n ChartBarDecreasing,\n ChartBarIncreasing,\n ChartBarStacked,\n ChartCandlestick,\n ChartColumn,\n ChartColumnBig,\n ChartColumnDecreasing,\n ChartColumnIncreasing,\n ChartColumnStacked,\n ChartGantt,\n ChartLine,\n ChartNetwork,\n ChartNoAxesColumn,\n ChartNoAxesColumnDecreasing,\n ChartNoAxesColumnIncreasing,\n ChartNoAxesCombined,\n ChartNoAxesGantt,\n ChartPie,\n ChartScatter,\n ChartSpline,\n FolderKanban,\n Kanban,\n SquareChartGantt,\n SquareDashedKanban,\n SquareKanban,\n TrendingDown,\n TrendingUp,\n TrendingUpDown,\n Atom,\n GitBranch,\n Clipboard,\n Palette,\n Gauge,\n Filter,\n Grid3x3,\n RadioTower,\n BadgeCheck,\n Wallet,\n DollarSign,\n Plus,\n Building2,\n X,\n FilePlus,\n UserPlus2,\n UserRoundPlus,\n List,\n CircleAlert as AlertCircleIcon,\n Layers,\n Badge,\n MapPin,\n Puzzle,\n Globe,\n ShoppingBag,\n QrCode,\n Brush,\n FileSpreadsheet,\n Tag,\n Scan,\n Clock3,\n UserPlus,\n Users,\n Files,\n Group,\n CheckSquare,\n ClipboardList,\n ListTodo,\n BarChart3,\n FileBarChart,\n FileSearch,\n Lock,\n Settings2,\n LayoutGrid,\n Terminal,\n Pencil,\n Trash2,\n Eye,\n EyeOff,\n Pin,\n PinOff,\n Save,\n RotateCcw,\n} from \"lucide-react\";\n\n/** Use IconName.* so users discover available icons. Values match registry keys. */\nexport enum IconName {\n Search = \"search\",\n CircleAlert = \"circle-alert\",\n CheckCircle = \"check-circle\",\n TriangleAlert = \"triangle-alert\",\n Loader2 = \"loader-2\",\n ChevronDown = \"chevron-down\",\n ChevronLeft = \"chevron-left\",\n ChevronRight = \"chevron-right\",\n BarChart2 = \"bar-chart-2\",\n Shield = \"shield\",\n ArrowLeft = \"arrow-left\",\n ArrowUp = \"arrow-up\",\n ArrowDown = \"arrow-down\",\n ArrowUpDown = \"arrow-up-down\",\n EllipsisVertical = \"ellipsis-vertical\",\n Sun = \"sun\",\n Moon = \"moon\",\n LogOut = \"log-out\",\n Settings = \"settings\",\n User = \"user\",\n FileText = \"file-text\",\n LockOpen = \"lock-open\",\n Calendar = \"calendar\",\n ChartArea = \"chart-area\",\n ChartBar = \"chart-bar\",\n ChartBarBig = \"chart-bar-big\",\n ChartBarDecreasing = \"chart-bar-decreasing\",\n ChartBarIncreasing = \"chart-bar-increasing\",\n ChartBarStacked = \"chart-bar-stacked\",\n ChartCandlestick = \"chart-candlestick\",\n ChartColumn = \"chart-column\",\n ChartColumnBig = \"chart-column-big\",\n ChartColumnDecreasing = \"chart-column-decreasing\",\n ChartColumnIncreasing = \"chart-column-increasing\",\n ChartColumnStacked = \"chart-column-stacked\",\n ChartGantt = \"chart-gantt\",\n ChartLine = \"chart-line\",\n ChartNetwork = \"chart-network\",\n ChartNoAxesColumn = \"chart-no-axes-column\",\n ChartNoAxesColumnDecreasing = \"chart-no-axes-column-decreasing\",\n ChartNoAxesColumnIncreasing = \"chart-no-axes-column-increasing\",\n ChartNoAxesCombined = \"chart-no-axes-combined\",\n ChartNoAxesGantt = \"chart-no-axes-gantt\",\n ChartPie = \"chart-pie\",\n ChartScatter = \"chart-scatter\",\n ChartSpline = \"chart-spline\",\n FolderKanban = \"folder-kanban\",\n Kanban = \"kanban\",\n SquareChartGantt = \"square-chart-gantt\",\n SquareDashedKanban = \"square-dashed-kanban\",\n SquareKanban = \"square-kanban\",\n TrendingDown = \"trending-down\",\n TrendingUp = \"trending-up\",\n TrendingUpDown = \"trending-up-down\",\n Atom = \"atom\",\n GitBranch = \"git-branch\",\n Clipboard = \"clipboard\",\n Palette = \"palette\",\n Gauge = \"gauge\",\n Filter = \"filter\",\n Grid3x3 = \"grid-3x3\",\n RadioTower = \"radio-tower\",\n BadgeCheck = \"badge-check\",\n Wallet = \"wallet\",\n DollarSign = \"dollar-sign\",\n Plus = \"plus\",\n Building2 = \"building-2\",\n X = \"x\",\n FilePlus = \"file-plus\",\n UserPlus2 = \"user-plus-2\",\n UserRoundPlus = \"user-round-plus\",\n List = \"list\",\n AlertCircle = \"alert-circle\",\n Layers = \"layers\",\n Badge = \"badge\",\n MapPin = \"map-pin\",\n Puzzle = \"puzzle\",\n Globe = \"globe\",\n ShoppingBag = \"shopping-bag\",\n QrCode = \"qr-code\",\n Brush = \"brush\",\n FileSpreadsheet = \"file-spreadsheet\",\n Tag = \"tag\",\n Scan = \"scan\",\n Clock3 = \"clock-3\",\n UserPlus = \"user-plus\",\n Users = \"users\",\n Files = \"files\",\n Group = \"group\",\n CheckSquare = \"check-square\",\n ClipboardList = \"clipboard-list\",\n ListTodo = \"list-todo\",\n BarChart3 = \"bar-chart-3\",\n FileBarChart = \"file-bar-chart\",\n FileSearch = \"file-search\",\n Lock = \"lock\",\n Settings2 = \"settings-2\",\n LayoutGrid = \"layout-grid\",\n Terminal = \"terminal\",\n Pencil = \"pencil\",\n Trash2 = \"trash-2\",\n Eye = \"eye\",\n EyeOff = \"eye-off\",\n Pin = \"pin\",\n PinOff = \"pin-off\",\n Save = \"save\",\n RotateCcw = \"rotate-ccw\",\n}\n\nexport const iconRegistry: Record<IconName, LucideIcon> = {\n [IconName.Search]: Search,\n [IconName.CircleAlert]: CircleAlert,\n [IconName.CheckCircle]: CheckCircle,\n [IconName.TriangleAlert]: TriangleAlert,\n [IconName.Loader2]: Loader2,\n [IconName.ChevronDown]: ChevronDown,\n [IconName.ChevronLeft]: ChevronLeft,\n [IconName.ChevronRight]: ChevronRight,\n [IconName.BarChart2]: BarChart2,\n [IconName.Shield]: Shield,\n [IconName.ArrowLeft]: ArrowLeft,\n [IconName.ArrowUp]: ArrowUp,\n [IconName.ArrowDown]: ArrowDown,\n [IconName.ArrowUpDown]: ArrowUpDown,\n [IconName.EllipsisVertical]: EllipsisVertical,\n [IconName.Sun]: Sun,\n [IconName.Moon]: Moon,\n [IconName.LogOut]: LogOut,\n [IconName.Settings]: Settings,\n [IconName.User]: User,\n [IconName.FileText]: FileText,\n [IconName.LockOpen]: LockOpen,\n [IconName.Calendar]: Calendar,\n [IconName.ChartArea]: ChartArea,\n [IconName.ChartBar]: ChartBar,\n [IconName.ChartBarBig]: ChartBarBig,\n [IconName.ChartBarDecreasing]: ChartBarDecreasing,\n [IconName.ChartBarIncreasing]: ChartBarIncreasing,\n [IconName.ChartBarStacked]: ChartBarStacked,\n [IconName.ChartCandlestick]: ChartCandlestick,\n [IconName.ChartColumn]: ChartColumn,\n [IconName.ChartColumnBig]: ChartColumnBig,\n [IconName.ChartColumnDecreasing]: ChartColumnDecreasing,\n [IconName.ChartColumnIncreasing]: ChartColumnIncreasing,\n [IconName.ChartColumnStacked]: ChartColumnStacked,\n [IconName.ChartGantt]: ChartGantt,\n [IconName.ChartLine]: ChartLine,\n [IconName.ChartNetwork]: ChartNetwork,\n [IconName.ChartNoAxesColumn]: ChartNoAxesColumn,\n [IconName.ChartNoAxesColumnDecreasing]: ChartNoAxesColumnDecreasing,\n [IconName.ChartNoAxesColumnIncreasing]: ChartNoAxesColumnIncreasing,\n [IconName.ChartNoAxesCombined]: ChartNoAxesCombined,\n [IconName.ChartNoAxesGantt]: ChartNoAxesGantt,\n [IconName.ChartPie]: ChartPie,\n [IconName.ChartScatter]: ChartScatter,\n [IconName.ChartSpline]: ChartSpline,\n [IconName.FolderKanban]: FolderKanban,\n [IconName.Kanban]: Kanban,\n [IconName.SquareChartGantt]: SquareChartGantt,\n [IconName.SquareDashedKanban]: SquareDashedKanban,\n [IconName.SquareKanban]: SquareKanban,\n [IconName.TrendingDown]: TrendingDown,\n [IconName.TrendingUp]: TrendingUp,\n [IconName.TrendingUpDown]: TrendingUpDown,\n [IconName.Atom]: Atom,\n [IconName.GitBranch]: GitBranch,\n [IconName.Clipboard]: Clipboard,\n [IconName.Palette]: Palette,\n [IconName.Gauge]: Gauge,\n [IconName.Filter]: Filter,\n [IconName.Grid3x3]: Grid3x3,\n [IconName.RadioTower]: RadioTower,\n [IconName.BadgeCheck]: BadgeCheck,\n [IconName.Wallet]: Wallet,\n [IconName.DollarSign]: DollarSign,\n [IconName.Plus]: Plus,\n [IconName.Building2]: Building2,\n [IconName.X]: X,\n [IconName.FilePlus]: FilePlus,\n [IconName.UserPlus2]: UserPlus2,\n [IconName.UserRoundPlus]: UserRoundPlus,\n [IconName.List]: List,\n [IconName.AlertCircle]: AlertCircleIcon,\n [IconName.Layers]: Layers,\n [IconName.Badge]: Badge,\n [IconName.MapPin]: MapPin,\n [IconName.Puzzle]: Puzzle,\n [IconName.Globe]: Globe,\n [IconName.ShoppingBag]: ShoppingBag,\n [IconName.QrCode]: QrCode,\n [IconName.Brush]: Brush,\n [IconName.FileSpreadsheet]: FileSpreadsheet,\n [IconName.Tag]: Tag,\n [IconName.Scan]: Scan,\n [IconName.Clock3]: Clock3,\n [IconName.UserPlus]: UserPlus,\n [IconName.Users]: Users,\n [IconName.Files]: Files,\n [IconName.Group]: Group,\n [IconName.CheckSquare]: CheckSquare,\n [IconName.ClipboardList]: ClipboardList,\n [IconName.ListTodo]: ListTodo,\n [IconName.BarChart3]: BarChart3,\n [IconName.FileBarChart]: FileBarChart,\n [IconName.FileSearch]: FileSearch,\n [IconName.Lock]: Lock,\n [IconName.Settings2]: Settings2,\n [IconName.LayoutGrid]: LayoutGrid,\n [IconName.Terminal]: Terminal,\n [IconName.Pencil]: Pencil,\n [IconName.Trash2]: Trash2,\n [IconName.Eye]: Eye,\n [IconName.EyeOff]: EyeOff,\n [IconName.Pin]: Pin,\n [IconName.PinOff]: PinOff,\n [IconName.Save]: Save,\n [IconName.RotateCcw]: RotateCcw,\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { ToggleButtonVariant, ToggleButtonSize } from \"../../constants/enum\";\nimport { toggleButtonVariants } from \"./toggle-button.variants\";\nimport { Icon, IconName } from \"../../icon/Icon\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ToggleButtonProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\"\n> {\n variant?: ToggleButtonVariant;\n size?: ToggleButtonSize;\n fullWidth?: boolean;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n asChild?: boolean;\n loading?: boolean;\n className?: string;\n}\n\nconst ToggleButton = React.forwardRef<HTMLButtonElement, ToggleButtonProps>(\n (\n {\n className,\n variant = ToggleButtonVariant.Default,\n size = ToggleButtonSize.Md,\n fullWidth = false,\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n asChild = false,\n loading = false,\n disabled,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledPressed, setUncontrolledPressed] =\n React.useState(defaultPressed);\n\n const isControlled = controlledPressed !== undefined;\n const pressed = isControlled ? controlledPressed : uncontrolledPressed;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!isControlled) {\n setUncontrolledPressed((prev) => !prev);\n }\n const nextPressed = !pressed;\n onPressedChange?.(nextPressed);\n onClick?.(e);\n };\n\n const isDisabled = disabled || loading;\n\n const trackClassName = cn(\n toggleButtonVariants({ variant, size, fullWidth }),\n \"inline-flex\"\n );\n\n const wrapperClassName = cn(\n \"group relative inline-flex items-center gap-2\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--kz-color-border-focus)]\",\n \"disabled:cursor-not-allowed disabled:opacity-[var(--kz-component-toggle-button-disabled-opacity,0.5)]\",\n fullWidth && \"w-full\",\n loading &&\n \"opacity-[var(--kz-component-toggle-button-loading-opacity,0.8)]\",\n className\n );\n\n const thumbClassName = cn(\n \"kz-toggle-button-thumb\",\n \"absolute top-1 left-1 h-[calc(100%-0.5rem)] aspect-square shrink-0 rounded-full\",\n \"translate-x-0 group-data-[state=on]:translate-x-4\",\n \"transition-[background,transform,box-shadow] duration-200 ease-in-out\",\n (variant === ToggleButtonVariant.Default ||\n variant === ToggleButtonVariant.Primary) &&\n (variant === ToggleButtonVariant.Default\n ? \"kz-toggle-button-thumb--default\"\n : \"kz-toggle-button-thumb--primary\"),\n variant === ToggleButtonVariant.Container &&\n \"bg-[var(--kz-color-surface-raised)]\"\n );\n\n if (asChild) {\n const slotProps = {\n ...props,\n ref,\n type: \"button\" as const,\n role: \"switch\" as const,\n \"aria-pressed\": pressed,\n \"aria-checked\": pressed,\n \"data-state\": pressed ? \"on\" : \"off\",\n className: wrapperClassName,\n onClick: handleClick,\n disabled: isDisabled,\n \"aria-busy\": loading,\n };\n return (\n <Slot {...(slotProps as React.ComponentProps<typeof Slot>)}>\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-pressed={pressed}\n aria-checked={pressed}\n data-state={pressed ? \"on\" : \"off\"}\n className={wrapperClassName}\n onClick={handleClick}\n disabled={isDisabled}\n aria-busy={loading}\n {...props}\n >\n <span className={trackClassName}>\n <span className={thumbClassName} aria-hidden />\n </span>\n {children ? (\n <span className=\"truncate text-sm font-medium text-[var(--kz-color-text-primary)]\">\n {children}\n </span>\n ) : null}\n {loading && (\n <span className=\"pointer-events-none absolute inset-0 flex items-center justify-center rounded-lg bg-[var(--kz-color-surface-base)]/80\">\n <Icon\n name={IconName.Loader2}\n className=\"kz-button-spinner size-5\"\n size=\"md\"\n color=\"currentColor\"\n />\n </span>\n )}\n </button>\n );\n }\n);\n\nToggleButton.displayName = \"ToggleButton\";\n\nexport { ToggleButton, toggleButtonVariants };\nexport type { ToggleButtonVariants } from \"./toggle-button.variants\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { ToggleButtonVariant, ToggleButtonSize } from \"../../constants/enum\";\n\nconst trackBase = [\n \"kz-toggle-button\",\n \"relative inline-flex shrink-0 rounded-full p-1\",\n \"transition-colors duration-200 ease-in-out\",\n].join(\" \");\n\nexport const toggleButtonVariants = cva(trackBase, {\n variants: {\n variant: {\n [ToggleButtonVariant.Default]:\n \"kz-toggle-button-track kz-toggle-button-track--default\",\n [ToggleButtonVariant.Primary]:\n \"kz-toggle-button-track kz-toggle-button-track--primary\",\n [ToggleButtonVariant.Container]: [\n \"kz-toggle-button-track\",\n \"bg-[var(--kz-color-surface-base)] border border-[var(--kz-color-border-default)]\",\n \"group-data-[state=on]:bg-[var(--kz-component-button-success-bg)]\",\n ].join(\" \"),\n },\n size: {\n [ToggleButtonSize.Sm]: \"h-5 w-9 min-w-[2.25rem]\",\n [ToggleButtonSize.Md]: \"h-6 w-10 min-w-[2.5rem]\",\n [ToggleButtonSize.Lg]: \"h-7 w-11 min-w-[2.75rem]\",\n },\n fullWidth: {\n true: \"w-full min-w-0\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: ToggleButtonVariant.Default,\n size: ToggleButtonSize.Md,\n fullWidth: false,\n },\n});\n\nexport type ToggleButtonVariants = VariantProps<typeof toggleButtonVariants>;\n","import * as React from \"react\";\nimport { CheckboxSize, CheckboxVariant } from \"../../constants/enum\";\nimport { checkboxVariants } from \"./checkbox.variants\";\nimport { cn } from \"../../utils/cn\";\n\nconst CheckIcon = () => (\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"var(--kz-component-checkbox-icon-color)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"kz-checkbox-icon kz-checkbox-icon--check\"\n aria-hidden\n >\n <path d=\"M2 6l3 3 5-6\" />\n </svg>\n);\n\nconst MinusIcon = () => (\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"var(--kz-component-checkbox-icon-color)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n className=\"kz-checkbox-icon kz-checkbox-icon--minus\"\n aria-hidden\n >\n <path d=\"M2 6h8\" />\n </svg>\n);\n\nexport interface CheckboxProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"onChange\"\n> {\n size?: CheckboxSize;\n variant?: CheckboxVariant;\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n className?: string;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n size = CheckboxSize.Md,\n variant = CheckboxVariant.Default,\n checked: controlledChecked,\n defaultChecked = false,\n indeterminate = false,\n onCheckedChange,\n onChange,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledChecked, setUncontrolledChecked] =\n React.useState(defaultChecked);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const mergedRef = (el: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n el;\n if (typeof ref === \"function\") ref(el);\n else if (ref)\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = el;\n };\n\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n React.useEffect(() => {\n const el = inputRef.current;\n if (el) el.indeterminate = indeterminate;\n }, [indeterminate]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledChecked(e.target.checked);\n onCheckedChange?.(e.target.checked);\n onChange?.(e);\n };\n\n const state = indeterminate\n ? \"indeterminate\"\n : checked\n ? \"checked\"\n : \"unchecked\";\n\n const rootClassName = cn(checkboxVariants({ size, variant }), className);\n\n const boxSizeClass = {\n [CheckboxSize.Sm]: \"kz-checkbox-box--sm\",\n [CheckboxSize.Md]: \"kz-checkbox-box--md\",\n [CheckboxSize.Lg]: \"kz-checkbox-box--lg\",\n }[size];\n\n return (\n <label className={rootClassName}>\n <input\n ref={mergedRef}\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n aria-checked={indeterminate ? \"mixed\" : checked}\n aria-disabled={disabled}\n className=\"sr-only peer\"\n {...props}\n />\n <span\n className={cn(\"kz-checkbox-box\", boxSizeClass)}\n data-state={state}\n aria-hidden\n >\n {checked && !indeterminate && <CheckIcon />}\n {indeterminate && <MinusIcon />}\n </span>\n {children != null && (\n <span className=\"text-sm font-medium text-[var(--kz-color-text-primary)] select-none\">\n {children}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox, checkboxVariants };\nexport type { CheckboxVariants } from \"./checkbox.variants\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { CheckboxSize, CheckboxVariant } from \"../../constants/enum\";\n\nconst rootBase = [\n \"kz-checkbox\",\n \"inline-flex items-center gap-2 cursor-pointer\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-[var(--kz-color-border-focus)] focus-within:rounded-[var(--kz-component-checkbox-radius,4px)]\",\n].join(\" \");\n\nexport const checkboxVariants = cva(rootBase, {\n variants: {\n size: {\n [CheckboxSize.Sm]:\n \"min-h-[var(--kz-component-checkbox-size-sm)] min-w-[var(--kz-component-checkbox-size-sm)]\",\n [CheckboxSize.Md]:\n \"min-h-[var(--kz-component-checkbox-size-md)] min-w-[var(--kz-component-checkbox-size-md)]\",\n [CheckboxSize.Lg]:\n \"min-h-[var(--kz-component-checkbox-size-lg)] min-w-[var(--kz-component-checkbox-size-lg)]\",\n },\n variant: {\n [CheckboxVariant.Default]: \"kz-checkbox--default\",\n [CheckboxVariant.Container]: \"kz-checkbox--container\",\n },\n },\n defaultVariants: {\n size: CheckboxSize.Md,\n variant: CheckboxVariant.Default,\n },\n});\n\nexport type CheckboxVariants = VariantProps<typeof checkboxVariants>;\n","import * as React from \"react\";\nimport { RadioSize } from \"../../constants/enum\";\nimport { radioButtonVariants } from \"./radio-button.variants\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RadioButtonProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"onChange\"\n> {\n size?: RadioSize;\n value: string;\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n className?: string;\n}\n\nconst RadioButton = React.forwardRef<HTMLInputElement, RadioButtonProps>(\n (\n {\n className,\n size = RadioSize.Md,\n value,\n checked,\n defaultChecked,\n onChange,\n disabled,\n children,\n name,\n ...props\n },\n ref\n ) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const mergedRef = (el: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n el;\n if (typeof ref === \"function\") ref(el);\n else if (ref)\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = el;\n };\n\n const rootClassName = cn(radioButtonVariants({ size }), className);\n\n const circleSizeClass = {\n [RadioSize.Sm]: \"kz-radio-button-circle--sm\",\n [RadioSize.Md]: \"kz-radio-button-circle--md\",\n [RadioSize.Lg]: \"kz-radio-button-circle--lg\",\n }[size];\n\n return (\n <label className={rootClassName}>\n <input\n ref={mergedRef}\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChange}\n disabled={disabled}\n aria-checked={checked}\n aria-disabled={disabled}\n className=\"sr-only peer\"\n {...props}\n />\n <span\n className={cn(\"kz-radio-button-circle\", circleSizeClass)}\n aria-hidden\n >\n <span className=\"kz-radio-button-dot\" aria-hidden />\n </span>\n {children != null && (\n <span className=\"text-sm font-medium text-[var(--kz-color-text-primary)] select-none\">\n {children}\n </span>\n )}\n </label>\n );\n }\n);\n\nRadioButton.displayName = \"RadioButton\";\n\nexport { RadioButton, radioButtonVariants };\nexport type { RadioButtonVariants } from \"./radio-button.variants\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { RadioSize } from \"../../constants/enum\";\n\nconst rootBase = [\n \"kz-radio-button\",\n \"inline-flex items-center gap-2 cursor-pointer\",\n \"focus-within:outline-none\",\n].join(\" \");\n\nexport const radioButtonVariants = cva(rootBase, {\n variants: {\n size: {\n [RadioSize.Sm]:\n \"min-h-[var(--kz-component-radio-size-sm)] min-w-[var(--kz-component-radio-size-sm)]\",\n [RadioSize.Md]:\n \"min-h-[var(--kz-component-radio-size-md)] min-w-[var(--kz-component-radio-size-md)]\",\n [RadioSize.Lg]:\n \"min-h-[var(--kz-component-radio-size-lg)] min-w-[var(--kz-component-radio-size-lg)]\",\n },\n },\n defaultVariants: {\n size: RadioSize.Md,\n },\n});\n\nexport type RadioButtonVariants = VariantProps<typeof radioButtonVariants>;\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n getTypographyClass,\n getDefaultElement,\n type TypographyVariant,\n} from \"./typography-variants\";\nimport {\n TypographyTone as TypographyToneEnum,\n TypographyAlign as TypographyAlignEnum,\n TypographyWeight as TypographyWeightEnum,\n} from \"../../constants/enum\";\n\nexport {\n TypographyTone as TypographyToneEnum,\n TypographyAlign as TypographyAlignEnum,\n TypographyWeight as TypographyWeightEnum,\n} from \"../../constants/enum\";\n\nexport type TypographyTone = TypographyToneEnum;\nexport type TypographyAlign = TypographyAlignEnum;\nexport type TypographyWeight = TypographyWeightEnum;\n\nexport type TypographyAsElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"div\"\n | \"a\"\n | \"label\"\n | \"figcaption\";\n\nexport interface TypographyProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"color\"\n> {\n children: React.ReactNode;\n variant: TypographyVariant;\n href?: string;\n tone?: TypographyTone;\n as?: TypographyAsElement;\n align?: TypographyAlign;\n truncate?: boolean;\n lines?: number;\n weight?: TypographyWeight;\n className?: string;\n}\n\nconst alignClass: Record<TypographyAlignEnum, string> = {\n [TypographyAlignEnum.Left]: \"text-left\",\n [TypographyAlignEnum.Center]: \"text-center\",\n [TypographyAlignEnum.Right]: \"text-right\",\n};\n\nconst weightClass: Record<TypographyWeightEnum, string> = {\n [TypographyWeightEnum.Regular]: \"font-normal\",\n [TypographyWeightEnum.Medium]: \"font-medium\",\n [TypographyWeightEnum.Semibold]: \"font-semibold\",\n [TypographyWeightEnum.Bold]: \"font-bold\",\n};\n\nconst Typography = React.forwardRef<HTMLElement, TypographyProps>(\n (\n {\n children,\n variant,\n href,\n tone,\n as,\n align,\n truncate,\n lines,\n weight,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const Comp = href !== undefined ? \"a\" : (as ?? getDefaultElement(variant));\n const typographyClass = getTypographyClass(variant);\n\n const toneClass =\n tone !== undefined ? `kz-typography-tone-${tone}` : undefined;\n\n const lineClampStyle: React.CSSProperties | undefined =\n lines !== undefined && lines > 0\n ? {\n display: \"-webkit-box\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: lines,\n overflow: \"hidden\",\n }\n : undefined;\n\n const combinedStyle = lineClampStyle\n ? { ...style, ...lineClampStyle }\n : style;\n\n return React.createElement(\n Comp as \"p\",\n {\n ref,\n ...(href !== undefined && { href }),\n className: cn(\n typographyClass,\n toneClass,\n align !== undefined && alignClass[align],\n truncate && \"truncate\",\n weight !== undefined && weightClass[weight],\n className\n ),\n style: combinedStyle,\n ...props,\n },\n children\n );\n }\n);\n\nTypography.displayName = \"Typography\";\n\nexport { Typography };\nexport type { TypographyVariant };\n","import { TypographyVariant as TypographyVariantEnum } from \"../../constants/enum\";\n\nexport { TypographyVariant as TypographyVariantEnum } from \"../../constants/enum\";\n\nexport type TypographyVariant = TypographyVariantEnum;\n\nexport const typographyVariants: TypographyVariant[] = [\n TypographyVariantEnum.H1,\n TypographyVariantEnum.H2,\n TypographyVariantEnum.H3,\n TypographyVariantEnum.H4,\n TypographyVariantEnum.H5,\n TypographyVariantEnum.Body,\n TypographyVariantEnum.Small,\n TypographyVariantEnum.Caption,\n TypographyVariantEnum.Label,\n TypographyVariantEnum.Link,\n TypographyVariantEnum.Error,\n TypographyVariantEnum.Success,\n TypographyVariantEnum.Warning,\n];\n\nconst variantToClass: Record<TypographyVariant, string> = {\n [TypographyVariantEnum.H1]: \"kz-typography-h1\",\n [TypographyVariantEnum.H2]: \"kz-typography-h2\",\n [TypographyVariantEnum.H3]: \"kz-typography-h3\",\n [TypographyVariantEnum.H4]: \"kz-typography-h4\",\n [TypographyVariantEnum.H5]: \"kz-typography-h5\",\n [TypographyVariantEnum.Body]: \"kz-typography-body\",\n [TypographyVariantEnum.Small]: \"kz-typography-small\",\n [TypographyVariantEnum.Caption]: \"kz-typography-caption\",\n [TypographyVariantEnum.Label]: \"kz-typography-label\",\n [TypographyVariantEnum.Link]: \"kz-typography-link\",\n [TypographyVariantEnum.Error]: \"kz-typography-error\",\n [TypographyVariantEnum.Success]: \"kz-typography-success\",\n [TypographyVariantEnum.Warning]: \"kz-typography-warning\",\n};\n\nexport function getTypographyClass(variant: TypographyVariant): string {\n return variantToClass[variant];\n}\n\nconst defaultElement: Record<TypographyVariant, keyof JSX.IntrinsicElements> = {\n [TypographyVariantEnum.H1]: \"h1\",\n [TypographyVariantEnum.H2]: \"h2\",\n [TypographyVariantEnum.H3]: \"h3\",\n [TypographyVariantEnum.H4]: \"h4\",\n [TypographyVariantEnum.H5]: \"h5\",\n [TypographyVariantEnum.Body]: \"p\",\n [TypographyVariantEnum.Small]: \"span\",\n [TypographyVariantEnum.Caption]: \"span\",\n [TypographyVariantEnum.Label]: \"span\",\n [TypographyVariantEnum.Link]: \"a\",\n [TypographyVariantEnum.Error]: \"span\",\n [TypographyVariantEnum.Success]: \"span\",\n [TypographyVariantEnum.Warning]: \"span\",\n};\n\nexport function getDefaultElement(\n variant: TypographyVariant\n): keyof JSX.IntrinsicElements {\n return defaultElement[variant];\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n TextInputType,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { TypographyAlignEnum } from \"../typography\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport interface TextInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\"\n> {\n size?: TextInputSize;\n variant?: TextInputVariant;\n type?: TextInputType;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n value: string;\n placeHolder: string;\n onValueChange: (value: string) => void;\n\n startAdornment?: React.ReactNode;\n endAdornment?: React.ReactNode;\n\n loading?: boolean;\n clearable?: boolean;\n showCount?: boolean;\n maxLength?: number;\n\n containerClassName?: string;\n inputClassName?: string;\n showStateIcon?: boolean;\n\n inputMode?: React.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n\n /** Email: trim and lowercase value before calling onValueChange */\n normalizeEmail?: boolean;\n /** Number: allow negative values (default false) */\n allowNegative?: boolean;\n /** Number: allow decimal values (default false) */\n allowDecimal?: boolean;\n}\n\nconst stateIcon: Record<\n TextInputState.Error | TextInputState.Success | TextInputState.Warning,\n IconName\n> = {\n [TextInputState.Error]: IconName.CircleAlert,\n [TextInputState.Success]: IconName.CheckCircle,\n [TextInputState.Warning]: IconName.TriangleAlert,\n};\n\n/** Regex to strip characters invalid for the configured number mode. */\nconst buildNumberPattern = (\n allowNegative: boolean,\n allowDecimal: boolean\n): RegExp => {\n let allowed = \"0-9\";\n if (allowNegative) allowed += \"\\\\-\";\n if (allowDecimal) allowed += \".\";\n return new RegExp(`[^${allowed}]`, \"g\");\n};\n\n/** Returns true if the string is a structurally valid number for the given mode. */\nconst isValidNumber = (\n val: string,\n allowNegative: boolean,\n allowDecimal: boolean\n): boolean => {\n if (val === \"\" || val === \"-\") return true;\n let pattern = \"^\";\n if (allowNegative) pattern += \"-?\";\n pattern += \"\\\\d*\";\n if (allowDecimal) pattern += \"(\\\\.\\\\d*)?\";\n pattern += \"$\";\n return new RegExp(pattern).test(val);\n};\n\nconst TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n type = TextInputType.Text,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n placeHolder,\n onValueChange,\n startAdornment,\n endAdornment,\n loading = false,\n clearable = false,\n showCount = false,\n maxLength,\n containerClassName,\n inputClassName,\n disabled,\n showStateIcon = true,\n inputMode: inputModeProp,\n normalizeEmail = false,\n allowNegative = false,\n allowDecimal = false,\n ...inputProps\n },\n ref\n ) => {\n const uniqueId = React.useId();\n const inputId = inputProps.id ?? `kz-text-input-${uniqueId}`;\n const messageId = `kz-text-input-message-${uniqueId}`;\n const helperId = `kz-text-input-helper-${uniqueId}`;\n\n const [isPasswordVisible, setIsPasswordVisible] = React.useState(false);\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let next = e.target.value;\n\n if (maxLength != null && next.length > maxLength) return;\n\n if (type === TextInputType.Number) {\n next = next.replace(\n buildNumberPattern(allowNegative, allowDecimal),\n \"\"\n );\n if (!isValidNumber(next, allowNegative, allowDecimal)) return;\n }\n\n if (type === TextInputType.Email && normalizeEmail) {\n next = next.trim().toLowerCase();\n }\n\n onValueChange(next);\n };\n\n const handleClear = () => {\n onValueChange(\"\");\n };\n\n const togglePasswordVisibility = () => {\n setIsPasswordVisible((prev) => !prev);\n };\n\n // Resolve the actual HTML input type\n let resolvedType: string = type;\n if (type === TextInputType.Password) {\n resolvedType = isPasswordVisible ? \"text\" : \"password\";\n }\n\n // Resolve inputMode: explicit prop wins, otherwise derive from type\n let resolvedInputMode = inputModeProp;\n if (resolvedInputMode == null) {\n if (type === TextInputType.Email) resolvedInputMode = \"email\";\n else if (type === TextInputType.Tel) resolvedInputMode = \"tel\";\n else if (type === TextInputType.Url) resolvedInputMode = \"url\";\n else if (type === TextInputType.Number) resolvedInputMode = \"decimal\";\n else if (type === TextInputType.Search) resolvedInputMode = \"search\";\n }\n\n // Resolve autoComplete for email\n const resolvedAutoComplete =\n type === TextInputType.Email && inputProps.autoComplete == null\n ? \"email\"\n : inputProps.autoComplete;\n\n const isDisabled = disabled ?? loading;\n\n const wrapperClass = cn(\n \"kz-text-input-wrapper\",\n `kz-text-input-wrapper--${variant}`,\n `kz-text-input-wrapper--${size}`,\n state !== TextInputState.Default && `kz-text-input-wrapper--${state}`\n );\n\n const inputClass = cn(\n \"kz-text-input-input\",\n `kz-text-input-input--${size}`,\n inputClassName\n );\n\n const rootClass = cn(\"kz-text-input-root\", containerClassName);\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-text-input-label\" htmlFor={inputId}>\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n <div className={wrapperClass}>\n {startAdornment != null && (\n <span className=\"kz-text-input-adornment kz-text-input-adornment--start\">\n {startAdornment}\n </span>\n )}\n <input\n ref={ref}\n id={inputId}\n type={resolvedType}\n value={value}\n placeholder={placeHolder}\n onChange={handleChange}\n disabled={isDisabled}\n maxLength={maxLength}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? messageId\n : helperText != null\n ? helperId\n : undefined\n }\n {...(resolvedInputMode != null\n ? { inputMode: resolvedInputMode }\n : {})}\n {...(resolvedAutoComplete != null\n ? { autoComplete: resolvedAutoComplete }\n : {})}\n {...inputProps}\n />\n {clearable && value.length > 0 && !loading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"kz-text-input-adornment kz-text-input-clear\"\n aria-label=\"Clear\"\n >\n ×\n </button>\n )}\n {type === TextInputType.Password && !isDisabled && (\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n className=\"kz-text-input-adornment kz-text-input-adornment--end\"\n aria-label={isPasswordVisible ? \"Hide password\" : \"Show password\"}\n >\n <Icon\n name={isPasswordVisible ? IconName.EyeOff : IconName.Eye}\n size={size === TextInputSize.Sm ? 14 : 16}\n />\n </button>\n )}\n {endAdornment != null && (\n <span className=\"kz-text-input-adornment kz-text-input-adornment--end\">\n {endAdornment}\n </span>\n )}\n {showStateIcon && (\n <span\n className=\"kz-text-input-adornment kz-text-input-state-icon\"\n aria-hidden\n >\n <Icon\n name={\n stateIcon[\n state as\n | TextInputState.Error\n | TextInputState.Success\n | TextInputState.Warning\n ]\n }\n size={size === TextInputSize.Sm ? 14 : 16}\n color={\n state === TextInputState.Error\n ? \"var(--kz-typography-error-color)\"\n : state === TextInputState.Success\n ? \"var(--kz-typography-success-color)\"\n : \"var(--kz-typography-warning-color)\"\n }\n />\n </span>\n )}\n </div>\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id={messageId}\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography id={helperId} variant={TypographyVariantEnum.Caption}>\n {helperText}\n </Typography>\n )}\n {showCount && maxLength != null && (\n <Typography\n variant={TypographyVariantEnum.Caption}\n align={TypographyAlignEnum.Right}\n >\n {value.length}/{maxLength}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nTextInput.displayName = \"TextInput\";\n\nexport { TextInput };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { TypographyAlignEnum } from \"../typography\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport interface TextAreaProps extends Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"size\"\n> {\n size?: TextInputSize;\n variant?: TextInputVariant;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n value: string;\n placeHolder: string;\n onValueChange: (value: string) => void;\n\n startAdornment?: React.ReactNode;\n endAdornment?: React.ReactNode;\n\n loading?: boolean;\n clearable?: boolean;\n showCount?: boolean;\n maxLength?: number;\n\n autoResize?: boolean;\n\n containerClassName?: string;\n textareaClassName?: string;\n showStateIcon?: boolean;\n}\n\nconst stateIcon: Record<\n TextInputState.Error | TextInputState.Success | TextInputState.Warning,\n IconName\n> = {\n [TextInputState.Error]: IconName.CircleAlert,\n [TextInputState.Success]: IconName.CheckCircle,\n [TextInputState.Warning]: IconName.TriangleAlert,\n};\n\nconst TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n placeHolder,\n onValueChange,\n startAdornment,\n endAdornment,\n loading = false,\n clearable = false,\n showCount = false,\n maxLength,\n autoResize = true,\n containerClassName,\n textareaClassName,\n disabled,\n showStateIcon = true,\n rows = 3,\n ...textareaProps\n },\n ref\n ) => {\n const textareaRef = React.useRef<HTMLTextAreaElement | null>(null);\n\n React.useImperativeHandle(ref, () => textareaRef.current!);\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = e.target.value;\n if (maxLength != null && next.length > maxLength) return;\n onValueChange(next);\n };\n\n const handleClear = () => {\n onValueChange(\"\");\n };\n\n React.useEffect(() => {\n if (autoResize && textareaRef.current) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height =\n textareaRef.current.scrollHeight + \"px\";\n }\n }, [value, autoResize]);\n\n const wrapperClass = cn(\n \"kz-textarea-wrapper\",\n `kz-textarea-wrapper--${variant}`,\n `kz-textarea-wrapper--${size}`,\n state !== TextInputState.Default && `kz-textarea-wrapper--${state}`\n );\n\n const textareaClass = cn(\n \"kz-textarea-input\",\n `kz-textarea-input--${size}`,\n textareaClassName\n );\n\n const rootClass = cn(\"kz-textarea-root\", containerClassName);\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-textarea-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <div className={wrapperClass}>\n {startAdornment != null && (\n <span className=\"kz-textarea-adornment kz-textarea-adornment--start\">\n {startAdornment}\n </span>\n )}\n\n <textarea\n ref={textareaRef}\n value={value}\n placeholder={placeHolder}\n onChange={handleChange}\n disabled={disabled ?? loading}\n maxLength={maxLength}\n rows={rows}\n className={textareaClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"textarea-message\"\n : helperText != null\n ? \"textarea-helper\"\n : undefined\n }\n style={{ resize: autoResize ? \"none\" : \"vertical\" }}\n {...textareaProps}\n />\n\n {clearable && value.length > 0 && !loading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"kz-textarea-adornment kz-textarea-clear\"\n aria-label=\"Clear\"\n >\n ×\n </button>\n )}\n\n {endAdornment != null && (\n <span className=\"kz-textarea-adornment kz-textarea-adornment--end\">\n {endAdornment}\n </span>\n )}\n\n {showStateIcon && state !== TextInputState.Default && (\n <span className=\"kz-textarea-state-icon\" aria-hidden>\n <Icon\n name={\n stateIcon[\n state as\n | TextInputState.Error\n | TextInputState.Success\n | TextInputState.Warning\n ]\n }\n size={size === TextInputSize.Sm ? 14 : 16}\n color={\n state === TextInputState.Error\n ? \"var(--kz-typography-error-color)\"\n : state === TextInputState.Success\n ? \"var(--kz-typography-success-color)\"\n : \"var(--kz-typography-warning-color)\"\n }\n />\n </span>\n )}\n </div>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"textarea-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"textarea-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n\n {showCount && maxLength != null && (\n <Typography\n variant={TypographyVariantEnum.Caption}\n align={TypographyAlignEnum.Right}\n >\n {value.length}/{maxLength}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nTextArea.displayName = \"TextArea\";\n\nexport { TextArea };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n ButtonAspectRatio,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Button } from \"../button\";\n\nconst sizeToButtonSize: Record<TextInputSize, ButtonSize> = {\n [TextInputSize.Sm]: ButtonSize.Sm,\n [TextInputSize.Md]: ButtonSize.Sm,\n [TextInputSize.Lg]: ButtonSize.Md,\n};\n\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"value\" | \"onChange\" | \"type\"\n> {\n size?: TextInputSize;\n variant?: TextInputVariant;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n value: number | undefined;\n onValueChange: (value: number | undefined) => void;\n\n min?: number;\n max?: number;\n step?: number;\n allowNegative?: boolean;\n allowDecimal?: boolean;\n\n containerClassName?: string;\n inputClassName?: string;\n}\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n onValueChange,\n min,\n max,\n step = 1,\n allowNegative = true,\n allowDecimal = true,\n containerClassName,\n inputClassName,\n disabled,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(\n value?.toString() ?? \"\"\n );\n\n React.useEffect(() => {\n setInternalValue(value?.toString() ?? \"\");\n }, [value]);\n\n const clamp = (num: number) => {\n if (min != null && num < min) return min;\n if (max != null && num > max) return max;\n return num;\n };\n\n const parseAndUpdate = (val: string) => {\n if (val === \"\") {\n onValueChange(undefined);\n return;\n }\n\n const parsed = allowDecimal ? parseFloat(val) : parseInt(val, 10);\n if (!isNaN(parsed)) {\n onValueChange(clamp(parsed));\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n\n const regex = allowDecimal\n ? allowNegative\n ? /^-?\\d*\\.?\\d*$/\n : /^\\d*\\.?\\d*$/\n : allowNegative\n ? /^-?\\d*$/\n : /^\\d*$/;\n\n if (!regex.test(next)) return;\n\n setInternalValue(next);\n parseAndUpdate(next);\n };\n\n const increment = () => {\n const current = value ?? 0;\n const next = clamp(current + step);\n onValueChange(next);\n };\n\n const decrement = () => {\n const current = value ?? 0;\n const next = clamp(current - step);\n onValueChange(next);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-number-input-root\", containerClassName);\n\n const wrapperClass = cn(\n \"kz-number-input-wrapper\",\n `kz-number-input-wrapper--${variant}`,\n `kz-number-input-wrapper--${size}`,\n state !== TextInputState.Default && `kz-number-input-wrapper--${state}`\n );\n\n const inputClass = cn(\n \"kz-number-input-input\",\n `kz-number-input-input--${size}`,\n inputClassName\n );\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-number-input-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <div className={wrapperClass}>\n <Button\n variant={ButtonVariant.Ghost}\n size={sizeToButtonSize[size]}\n aspectRatio={ButtonAspectRatio.Square}\n onClick={decrement}\n disabled={disabled}\n className=\"kz-number-input-stepper\"\n aria-label=\"Decrease value\"\n >\n −\n </Button>\n\n <input\n ref={ref}\n type=\"text\"\n inputMode={allowDecimal ? \"decimal\" : \"numeric\"}\n value={internalValue}\n onChange={handleChange}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"number-input-message\"\n : helperText != null\n ? \"number-input-helper\"\n : undefined\n }\n {...props}\n />\n\n <Button\n variant={ButtonVariant.Ghost}\n size={sizeToButtonSize[size]}\n aspectRatio={ButtonAspectRatio.Square}\n onClick={increment}\n disabled={disabled}\n className=\"kz-number-input-stepper\"\n aria-label=\"Increase value\"\n >\n +\n </Button>\n </div>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"number-input-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"number-input-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nNumberInput.displayName = \"NumberInput\";\n\nexport { NumberInput };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\n\nexport interface RangeSliderProps {\n size?: TextInputSize;\n variant?: TextInputVariant;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n /** Single-thumb mode value */\n value?: number;\n /** Dual-thumb mode value: [min, max] */\n rangeValue?: [number, number];\n onValueChange?: (value: number) => void;\n onRangeChange?: (value: [number, number]) => void;\n\n min?: number;\n max?: number;\n step?: number;\n\n /** Show current value tooltip above thumb */\n showValue?: boolean;\n /** Show min/max labels below the track */\n showMinMax?: boolean;\n /** Custom value formatter for display */\n formatValue?: (value: number) => string;\n /** Show manual input fields above the slider */\n showInputs?: boolean;\n /** Visual variant for the manual input fields (defaults to the slider's variant) */\n inputVariant?: TextInputVariant;\n\n disabled?: boolean;\n containerClassName?: string;\n}\n\nconst clamp = (val: number, min: number, max: number) =>\n Math.min(Math.max(val, min), max);\n\nconst snapToStep = (val: number, min: number, step: number) => {\n const steps = Math.round((val - min) / step);\n return min + steps * step;\n};\n\nconst RangeSlider = React.forwardRef<HTMLDivElement, RangeSliderProps>(\n (\n {\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n label,\n helperText,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n value,\n rangeValue,\n onValueChange,\n onRangeChange,\n min = 0,\n max = 100,\n step = 1,\n showValue = false,\n showMinMax = false,\n formatValue,\n showInputs = false,\n inputVariant,\n disabled = false,\n containerClassName,\n },\n ref\n ) => {\n const resolvedInputVariant = inputVariant ?? variant;\n const isRange = rangeValue != null;\n const trackRef = React.useRef<HTMLDivElement>(null);\n const [dragging, setDragging] = React.useState<\n null | \"single\" | \"start\" | \"end\"\n >(null);\n\n // Internal text state for manual inputs so user can type freely\n const [startText, setStartText] = React.useState(\n String(isRange ? rangeValue[0] : (value ?? min))\n );\n const [endText, setEndText] = React.useState(\n String(isRange ? rangeValue[1] : max)\n );\n\n // Sync internal text when value/rangeValue changes externally (e.g. via slider drag)\n React.useEffect(() => {\n if (isRange && rangeValue) {\n setStartText(String(rangeValue[0]));\n setEndText(String(rangeValue[1]));\n } else if (value != null) {\n setStartText(String(value));\n }\n }, [isRange, value, rangeValue]);\n\n const commitInput = (which: \"start\" | \"end\", raw: string) => {\n const parsed = parseFloat(raw);\n if (isNaN(parsed)) return;\n const clamped = clamp(snapToStep(parsed, min, step), min, max);\n\n if (isRange && rangeValue) {\n if (which === \"start\") {\n const safe = Math.min(clamped, rangeValue[1]);\n onRangeChange?.([safe, rangeValue[1]]);\n } else {\n const safe = Math.max(clamped, rangeValue[0]);\n onRangeChange?.([rangeValue[0], safe]);\n }\n } else {\n onValueChange?.(clamped);\n }\n };\n\n const format = formatValue ?? ((v: number) => String(v));\n\n const getPercent = (val: number) => ((val - min) / (max - min)) * 100;\n\n const getValueFromPosition = (clientX: number) => {\n const track = trackRef.current;\n if (!track) return min;\n const rect = track.getBoundingClientRect();\n const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);\n const raw = min + ratio * (max - min);\n return clamp(snapToStep(raw, min, step), min, max);\n };\n\n const handlePointerDown =\n (thumb: \"single\" | \"start\" | \"end\") => (e: React.PointerEvent) => {\n if (disabled) return;\n e.preventDefault();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n setDragging(thumb);\n const val = getValueFromPosition(e.clientX);\n applyValue(thumb, val);\n };\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (!dragging || disabled) return;\n const val = getValueFromPosition(e.clientX);\n applyValue(dragging, val);\n };\n\n const handlePointerUp = () => {\n setDragging(null);\n };\n\n const applyValue = (thumb: \"single\" | \"start\" | \"end\", val: number) => {\n if (thumb === \"single\") {\n onValueChange?.(val);\n } else if (rangeValue) {\n if (thumb === \"start\") {\n const clamped = Math.min(val, rangeValue[1]);\n onRangeChange?.([clamped, rangeValue[1]]);\n } else {\n const clamped = Math.max(val, rangeValue[0]);\n onRangeChange?.([rangeValue[0], clamped]);\n }\n }\n };\n\n const handleTrackClick = (e: React.MouseEvent) => {\n if (disabled) return;\n const val = getValueFromPosition(e.clientX);\n if (isRange && rangeValue) {\n const distStart = Math.abs(val - rangeValue[0]);\n const distEnd = Math.abs(val - rangeValue[1]);\n if (distStart <= distEnd) {\n onRangeChange?.([Math.min(val, rangeValue[1]), rangeValue[1]]);\n } else {\n onRangeChange?.([rangeValue[0], Math.max(val, rangeValue[0])]);\n }\n } else {\n onValueChange?.(val);\n }\n };\n\n const handleKeyDown =\n (thumb: \"single\" | \"start\" | \"end\") => (e: React.KeyboardEvent) => {\n if (disabled) return;\n let delta = 0;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") delta = step;\n else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") delta = -step;\n else if (e.key === \"Home\") {\n applyValue(thumb, min);\n return;\n } else if (e.key === \"End\") {\n applyValue(thumb, max);\n return;\n } else return;\n\n e.preventDefault();\n if (thumb === \"single\" && value != null) {\n applyValue(thumb, clamp(value + delta, min, max));\n } else if (rangeValue) {\n const current = thumb === \"start\" ? rangeValue[0] : rangeValue[1];\n applyValue(thumb, clamp(current + delta, min, max));\n }\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const uniqueId = React.useId();\n const messageId = `kz-range-slider-message-${uniqueId}`;\n\n // Percentages\n const singlePercent = value != null ? getPercent(value) : 0;\n const startPercent = rangeValue ? getPercent(rangeValue[0]) : 0;\n const endPercent = rangeValue ? getPercent(rangeValue[1]) : 100;\n\n const rootClass = cn(\"kz-range-slider-root\", containerClassName);\n\n const wrapperClass = cn(\n \"kz-range-slider-wrapper\",\n `kz-range-slider-wrapper--${variant}`,\n `kz-range-slider-wrapper--${size}`,\n state !== TextInputState.Default && `kz-range-slider-wrapper--${state}`,\n disabled && \"kz-range-slider-wrapper--disabled\"\n );\n\n const renderThumb = (\n thumb: \"single\" | \"start\" | \"end\",\n percent: number,\n currentValue: number\n ) => (\n <div\n className={cn(\n \"kz-range-slider-thumb\",\n `kz-range-slider-thumb--${size}`,\n dragging === thumb && \"kz-range-slider-thumb--active\"\n )}\n style={{ left: `${percent}%` }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-disabled={disabled}\n aria-label={\n thumb === \"start\"\n ? \"Range start\"\n : thumb === \"end\"\n ? \"Range end\"\n : \"Value\"\n }\n onPointerDown={handlePointerDown(thumb)}\n onKeyDown={handleKeyDown(thumb)}\n >\n {showValue && (\n <span className=\"kz-range-slider-value-tooltip\">\n {format(currentValue)}\n </span>\n )}\n </div>\n );\n\n return (\n <div className={rootClass} ref={ref}>\n {label != null && label !== \"\" && (\n <label className=\"kz-range-slider-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n {showInputs && (\n <div className=\"kz-range-slider-inputs\">\n <input\n type=\"text\"\n inputMode=\"decimal\"\n className={cn(\n \"kz-range-slider-input\",\n `kz-range-slider-input--${size}`,\n `kz-range-slider-input--${resolvedInputVariant}`\n )}\n value={startText}\n onChange={(e) => setStartText(e.target.value)}\n onBlur={() => commitInput(\"start\", startText)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitInput(\"start\", startText);\n }}\n disabled={disabled}\n aria-label={isRange ? \"Range start value\" : \"Value\"}\n />\n {isRange && (\n <>\n <Typography variant={TypographyVariantEnum.Caption}>\n to\n </Typography>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n className={cn(\n \"kz-range-slider-input\",\n `kz-range-slider-input--${size}`\n )}\n value={endText}\n onChange={(e) => setEndText(e.target.value)}\n onBlur={() => commitInput(\"end\", endText)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitInput(\"end\", endText);\n }}\n disabled={disabled}\n aria-label=\"Range end value\"\n />\n </>\n )}\n </div>\n )}\n\n <div\n className={wrapperClass}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerLeave={handlePointerUp}\n >\n <div\n className=\"kz-range-slider-track\"\n ref={trackRef}\n onClick={handleTrackClick}\n >\n <div\n className=\"kz-range-slider-fill\"\n style={\n isRange\n ? {\n left: `${startPercent}%`,\n width: `${endPercent - startPercent}%`,\n }\n : { left: \"0%\", width: `${singlePercent}%` }\n }\n />\n {isRange && rangeValue ? (\n <>\n {renderThumb(\"start\", startPercent, rangeValue[0])}\n {renderThumb(\"end\", endPercent, rangeValue[1])}\n </>\n ) : (\n value != null && renderThumb(\"single\", singlePercent, value)\n )}\n </div>\n </div>\n\n {showMinMax && (\n <div className=\"kz-range-slider-minmax\">\n <Typography variant={TypographyVariantEnum.Caption}>\n {format(min)}\n </Typography>\n <Typography variant={TypographyVariantEnum.Caption}>\n {format(max)}\n </Typography>\n </div>\n )}\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id={messageId}\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nRangeSlider.displayName = \"RangeSlider\";\n\nexport { RangeSlider };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SidesheetProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Content (e.g. NavButton list). */\n children: React.ReactNode;\n /** Optional class for the panel. */\n className?: string;\n}\n\nconst Sidesheet = React.forwardRef<HTMLDivElement, SidesheetProps>(\n ({ className, children, ...props }, ref) => (\n <aside ref={ref} className={cn(\"kz-sidesheet\", className)} {...props}>\n {children}\n </aside>\n )\n);\n\nSidesheet.displayName = \"Sidesheet\";\n\nexport { Sidesheet };\n","import * as React from \"react\";\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon } from \"../../icon\";\nimport type {\n SideMenuSectionNode,\n SideMenuLinkNode,\n SideMenuGroupNode,\n SideMenuGroupItem,\n SideMenuGroupItemSubItem,\n SideMenuProps,\n SideMenuFlyoutSide,\n} from \"./sidemenu-types\";\n\nfunction resolveIcon(\n icon: IconName | React.ReactNode | undefined,\n className?: string\n): React.ReactNode {\n if (icon == null) return null;\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon as IconName}\n size={14}\n color=\"currentColor\"\n className={className}\n />\n );\n }\n return icon;\n}\n\ntype IconName = import(\"../../icon\").IconName;\n\nconst SIDE_MAP: Record<SideMenuFlyoutSide, \"left\" | \"right\"> = {\n right: \"right\",\n left: \"left\",\n};\n\nfunction SideMenuLinkExpanded({\n node,\n selectedId,\n onNavigate,\n iconGap,\n style,\n}: {\n node: SideMenuLinkNode;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n iconGap: number | string;\n style?: React.CSSProperties;\n}) {\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n const selected = selectedId === node.id;\n const content = (\n <>\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{node.label}</span>\n </>\n );\n const rowClass = cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-item--link\",\n selected && \"kz-sidemenu-item--active\",\n node.disabled && \"kz-sidemenu-item--disabled\"\n );\n const rowStyle = { gap: iconGap, ...style };\n\n if (node.href && !node.disabled) {\n return (\n <a\n href={node.external ? node.href : undefined}\n target={node.external ? \"_blank\" : undefined}\n rel={node.external ? \"noopener noreferrer\" : undefined}\n className={rowClass}\n style={rowStyle}\n onClick={(e) => {\n if (!node.external && node.href && onNavigate) {\n e.preventDefault();\n onNavigate({\n id: node.id,\n href: node.href,\n actionId: node.actionId,\n });\n }\n }}\n >\n {content}\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n className={rowClass}\n style={rowStyle}\n disabled={node.disabled}\n onClick={() =>\n onNavigate?.({ id: node.id, href: node.href, actionId: node.actionId })\n }\n >\n {content}\n </button>\n );\n}\n\nfunction SideMenuGroupExpanded({\n node,\n selectedId,\n onNavigate,\n iconGap,\n indentBg,\n open,\n onOpenChange,\n}: {\n node: SideMenuGroupNode;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n iconGap: number | string;\n indentBg: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const hasSelectedInGroup = node.items.some(\n (item) =>\n selectedId === item.id ||\n item.subItems?.some((sub) => selectedId === sub.id)\n );\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n\n return (\n <Collapsible.Root open={open} onOpenChange={onOpenChange}>\n <Collapsible.Trigger\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-group-trigger\",\n hasSelectedInGroup && \"kz-sidemenu-item--active\",\n node.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ gap: iconGap }}\n disabled={node.disabled}\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{node.label}</span>\n <ChevronDown\n className=\"kz-sidemenu-group-chevron\"\n size={14}\n aria-hidden\n />\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div\n className=\"kz-sidemenu-group-content\"\n style={{ background: indentBg }}\n >\n {node.items.map((item) => (\n <SideMenuGroupItemRow\n key={item.id}\n item={item}\n selectedId={selectedId}\n onNavigate={onNavigate}\n level={0}\n />\n ))}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n}\n\nfunction SideMenuGroupItemRow({\n item,\n selectedId,\n onNavigate,\n level,\n}: {\n item: SideMenuGroupItem;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n level: number;\n}) {\n const selected = selectedId === item.id;\n const hasSub = item.subItems && item.subItems.length > 0;\n const [subOpen, setSubOpen] = React.useState(false);\n const icon = resolveIcon(item.icon, \"kz-sidemenu-item-icon\");\n\n const paddingLeft = 12 + level * 12;\n\n const labelContent = (\n <>\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{item.label}</span>\n </>\n );\n\n if (hasSub && item.subItems!.length > 0) {\n return (\n <Collapsible.Root open={subOpen} onOpenChange={setSubOpen}>\n <Collapsible.Trigger\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-group-item-trigger\",\n selected && \"kz-sidemenu-item--active\",\n item.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n disabled={item.disabled}\n >\n {labelContent}\n <ChevronDown\n className=\"kz-sidemenu-group-chevron\"\n size={12}\n aria-hidden\n />\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div className=\"kz-sidemenu-sublist\">\n {item.subItems!.map((sub) => (\n <SideMenuGroupSubItemRow\n key={sub.id}\n sub={sub}\n selectedId={selectedId}\n onNavigate={onNavigate}\n paddingLeft={paddingLeft + 12}\n />\n ))}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n }\n\n const el = item.href ? (\n <a\n href={item.href}\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n selected && \"kz-sidemenu-item--active\",\n item.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.({ id: item.id, href: item.href, actionId: item.actionId });\n }}\n >\n {labelContent}\n </a>\n ) : (\n <button\n type=\"button\"\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n selected && \"kz-sidemenu-item--active\",\n item.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n disabled={item.disabled}\n onClick={() =>\n onNavigate?.({ id: item.id, href: item.href, actionId: item.actionId })\n }\n >\n {labelContent}\n </button>\n );\n return el;\n}\n\nfunction SideMenuGroupSubItemRow({\n sub,\n selectedId,\n onNavigate,\n paddingLeft,\n}: {\n sub: SideMenuGroupItemSubItem;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n paddingLeft: number;\n}) {\n const selected = selectedId === sub.id;\n const icon = resolveIcon(sub.icon, \"kz-sidemenu-item-icon\");\n const labelContent = (\n <>\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n <span className=\"kz-sidemenu-item-label\">{sub.label}</span>\n </>\n );\n const el = sub.href ? (\n <a\n href={sub.href}\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-subitem\",\n selected && \"kz-sidemenu-item--active\",\n sub.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.({ id: sub.id, href: sub.href, actionId: sub.actionId });\n }}\n >\n {labelContent}\n </a>\n ) : (\n <button\n type=\"button\"\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-subitem\",\n selected && \"kz-sidemenu-item--active\",\n sub.disabled && \"kz-sidemenu-item--disabled\"\n )}\n style={{ paddingLeft }}\n disabled={sub.disabled}\n onClick={() =>\n onNavigate?.({ id: sub.id, href: sub.href, actionId: sub.actionId })\n }\n >\n {labelContent}\n </button>\n );\n return el;\n}\n\nfunction CollapsedFlyout({\n node,\n onNavigate,\n side,\n sideOffset,\n closeOnSelect,\n children,\n}: {\n node: SideMenuGroupNode;\n selectedId?: string;\n onNavigate?: SideMenuProps[\"onNavigate\"];\n side: SideMenuFlyoutSide;\n sideOffset: number;\n closeOnSelect: boolean;\n children: React.ReactNode;\n}) {\n const [open, setOpen] = React.useState(false);\n const sideVal = SIDE_MAP[side];\n\n return (\n <DropdownMenuPrimitive.Root open={open} onOpenChange={setOpen}>\n <DropdownMenuPrimitive.Trigger asChild>\n {children}\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n className=\"kz-sidemenu-flyout\"\n side={sideVal}\n sideOffset={sideOffset}\n align=\"start\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n {node.items.map((item) =>\n item.subItems && item.subItems.length > 0 ? (\n <DropdownMenuPrimitive.Sub key={item.id}>\n <DropdownMenuPrimitive.SubTrigger className=\"kz-sidemenu-flyout-item\">\n {item.label}\n </DropdownMenuPrimitive.SubTrigger>\n <DropdownMenuPrimitive.SubContent\n className=\"kz-sidemenu-flyout kz-sidemenu-flyout-sub\"\n sideOffset={4}\n >\n {item.subItems.map((sub) => (\n <DropdownMenuPrimitive.Item\n key={sub.id}\n className=\"kz-sidemenu-flyout-item\"\n disabled={sub.disabled}\n onSelect={() => {\n onNavigate?.({\n id: sub.id,\n href: sub.href,\n actionId: sub.actionId,\n });\n if (closeOnSelect) setOpen(false);\n }}\n asChild={!!sub.href}\n >\n {sub.href ? (\n <a href={sub.href}>{sub.label}</a>\n ) : (\n <span>{sub.label}</span>\n )}\n </DropdownMenuPrimitive.Item>\n ))}\n </DropdownMenuPrimitive.SubContent>\n </DropdownMenuPrimitive.Sub>\n ) : (\n <DropdownMenuPrimitive.Item\n key={item.id}\n className=\"kz-sidemenu-flyout-item\"\n disabled={item.disabled}\n onSelect={() => {\n onNavigate?.({\n id: item.id,\n href: item.href,\n actionId: item.actionId,\n });\n if (closeOnSelect) setOpen(false);\n }}\n asChild={!!item.href}\n >\n {item.href ? (\n <a href={item.href}>{item.label}</a>\n ) : (\n <span>{item.label}</span>\n )}\n </DropdownMenuPrimitive.Item>\n )\n )}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n );\n}\n\nconst SideMenu = React.forwardRef<HTMLDivElement, SideMenuProps>(\n (\n {\n data,\n selectedId,\n onNavigate,\n collapsible = true,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n expandedWidth = 280,\n collapsedWidth = 72,\n header,\n headerWidth,\n footer,\n gap = 4,\n iconGap = 10,\n showTooltipsWhenCollapsed = true,\n flyoutSide = \"right\",\n flyoutOffset = 8,\n closeFlyoutOnSelect = true,\n className,\n },\n ref\n ) => {\n const [uncontrolledCollapsed, setUncontrolledCollapsed] =\n React.useState(defaultCollapsed);\n const collapsed =\n controlledCollapsed !== undefined\n ? controlledCollapsed\n : uncontrolledCollapsed;\n const setCollapsed = (v: boolean) => {\n if (controlledCollapsed === undefined) setUncontrolledCollapsed(v);\n onCollapsedChange?.(v);\n };\n\n const [openGroups, setOpenGroups] = React.useState<Set<string>>(new Set());\n const toggleGroup = React.useCallback((id: string, isOpen: boolean) => {\n setOpenGroups((prev) => {\n const next = new Set(prev);\n if (isOpen) next.add(id);\n else next.delete(id);\n return next;\n });\n }, []);\n\n const width = collapsed ? collapsedWidth : expandedWidth;\n const widthStyle =\n typeof width === \"number\" ? { width: `${width}px` } : { width };\n const gapStyle = typeof gap === \"number\" ? { gap: `${gap}px` } : { gap };\n const indentBg =\n \"var(--kz-component-sidemenu-group-indent-bg, rgba(0,0,0,0.02))\";\n\n const renderItem = (node: SideMenuLinkNode | SideMenuGroupNode) => {\n if (node.type === \"link\") {\n if (collapsed) {\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n const triggerClass = cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-item--link\",\n \"kz-sidemenu-item--collapsed\",\n \"kz-sidemenu-tooltip-trigger\",\n selectedId === node.id && \"kz-sidemenu-item--active\"\n );\n if (node.href && !node.disabled) {\n return (\n <a\n href={node.external ? node.href : undefined}\n target={node.external ? \"_blank\" : undefined}\n rel={node.external ? \"noopener noreferrer\" : undefined}\n className={triggerClass}\n onClick={(e) => {\n if (!node.external && onNavigate) {\n e.preventDefault();\n onNavigate({\n id: node.id,\n href: node.href,\n actionId: node.actionId,\n });\n }\n }}\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n className={triggerClass}\n disabled={node.disabled}\n onClick={() =>\n onNavigate?.({\n id: node.id,\n href: node.href,\n actionId: node.actionId,\n })\n }\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n </button>\n );\n }\n return (\n <SideMenuLinkExpanded\n node={node}\n selectedId={selectedId}\n onNavigate={onNavigate}\n iconGap={iconGap}\n />\n );\n }\n\n if (node.type === \"group\") {\n if (collapsed) {\n const hasSelectedInFlyout = node.items.some(\n (item) =>\n selectedId === item.id ||\n item.subItems?.some((sub) => selectedId === sub.id)\n );\n const icon = resolveIcon(node.icon, \"kz-sidemenu-item-icon\");\n const trigger = (\n <div\n className={cn(\n \"kz-sidemenu-item\",\n \"kz-sidemenu-item-row\",\n \"kz-sidemenu-item--collapsed\",\n hasSelectedInFlyout && \"kz-sidemenu-item--active\"\n )}\n >\n {icon && <span className=\"kz-sidemenu-item-icon\">{icon}</span>}\n </div>\n );\n return (\n <CollapsedFlyout\n node={node}\n selectedId={selectedId}\n onNavigate={onNavigate}\n side={flyoutSide}\n sideOffset={flyoutOffset}\n closeOnSelect={closeFlyoutOnSelect}\n >\n <button\n type=\"button\"\n className=\"kz-sidemenu-tooltip-trigger kz-sidemenu-flyout-trigger\"\n >\n {showTooltipsWhenCollapsed ? (\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n <span className=\"kz-sidemenu-tooltip-trigger-inner\">\n {trigger}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side=\"right\"\n sideOffset={8}\n className=\"kz-tooltip-content kz-tooltip-content--size-sm\"\n >\n {node.label}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n ) : (\n trigger\n )}\n </button>\n </CollapsedFlyout>\n );\n }\n return (\n <SideMenuGroupExpanded\n node={node}\n selectedId={selectedId}\n onNavigate={onNavigate}\n iconGap={iconGap}\n indentBg={indentBg}\n open={openGroups.has(node.id)}\n onOpenChange={(v) => toggleGroup(node.id, v)}\n />\n );\n }\n\n return null;\n };\n\n const wrapWithTooltip = (child: React.ReactNode, label: string) => {\n if (!collapsed || !showTooltipsWhenCollapsed) return child;\n return (\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{child}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side=\"right\"\n sideOffset={8}\n className=\"kz-tooltip-content kz-tooltip-content--size-sm\"\n >\n {label}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n };\n\n const renderSection = (section: SideMenuSectionNode) => (\n <div key={section.id} className=\"kz-sidemenu-section\">\n {!collapsed && section.label && (\n <div className=\"kz-sidemenu-section-label\">{section.label}</div>\n )}\n <div className=\"kz-sidemenu-section-items\" style={gapStyle}>\n {section.items.map((node) => {\n if (node.type === \"section\") {\n return (\n <React.Fragment key={node.id}>\n {renderSection(node)}\n </React.Fragment>\n );\n }\n const el = renderItem(node as SideMenuLinkNode | SideMenuGroupNode);\n if (\n collapsed &&\n showTooltipsWhenCollapsed &&\n node.type === \"link\"\n ) {\n return (\n <div key={node.id} className=\"kz-sidemenu-tooltip-wrapper\">\n {wrapWithTooltip(el, node.label)}\n </div>\n );\n }\n return <React.Fragment key={node.id}>{el}</React.Fragment>;\n })}\n </div>\n </div>\n );\n\n return (\n <TooltipPrimitive.Provider delayDuration={300}>\n <div\n style={{\n ...widthStyle,\n flexShrink: 0,\n position: \"relative\",\n height: \"100%\",\n transition: \"width 0.25s ease\",\n }}\n >\n <aside\n ref={ref}\n className={cn(\n \"kz-sidemenu\",\n collapsed && \"kz-sidemenu--collapsed\",\n className\n )}\n style={{ width: \"100%\", height: \"100%\" }}\n >\n {header && (\n <div className=\"kz-sidemenu-top\">\n <div\n className=\"kz-sidemenu-header\"\n style={\n headerWidth !== undefined\n ? typeof headerWidth === \"number\"\n ? { width: `${headerWidth}px` }\n : { width: headerWidth }\n : undefined\n }\n >\n {header}\n </div>\n </div>\n )}\n <nav className=\"kz-sidemenu-nav\" style={gapStyle}>\n {data.map((node) => {\n if (node.type === \"section\") {\n return (\n <React.Fragment key={node.id}>\n {renderSection(node)}\n </React.Fragment>\n );\n }\n const el = renderItem(\n node as SideMenuLinkNode | SideMenuGroupNode\n );\n if (\n collapsed &&\n showTooltipsWhenCollapsed &&\n node.type === \"link\"\n ) {\n return (\n <div key={node.id} className=\"kz-sidemenu-tooltip-wrapper\">\n {wrapWithTooltip(el, node.label)}\n </div>\n );\n }\n return <React.Fragment key={node.id}>{el}</React.Fragment>;\n })}\n </nav>\n {footer && <div className=\"kz-sidemenu-footer\">{footer}</div>}\n </aside>\n {collapsible && (\n <div className=\"kz-sidemenu-collapse-btn-wrap kz-sidemenu-collapse-btn-wrap--outer\">\n <button\n type=\"button\"\n className=\"kz-sidemenu-collapse-btn\"\n onClick={() => setCollapsed(!collapsed)}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n <ChevronDown\n size={16}\n style={{\n transform: collapsed ? \"rotate(-90deg)\" : \"rotate(90deg)\",\n }}\n aria-hidden\n />\n </button>\n </div>\n )}\n </div>\n </TooltipPrimitive.Provider>\n );\n }\n);\n\nSideMenu.displayName = \"SideMenu\";\n\nexport { SideMenu };\nexport type {\n SideMenuProps,\n SideMenuNode,\n SideMenuSectionNode,\n SideMenuLinkNode,\n SideMenuGroupNode,\n SideMenuGroupItem,\n SideMenuGroupItemSubItem,\n SideMenuNavigatePayload,\n SideMenuFlyoutSide,\n} from \"./sidemenu-types\";\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TooltipSize,\n TooltipPosition,\n TooltipAlign,\n TooltipColor,\n} from \"../../constants/enum\";\n\nconst SIDE_MAP: Record<TooltipPosition, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n [TooltipPosition.Top]: \"top\",\n [TooltipPosition.Right]: \"right\",\n [TooltipPosition.Bottom]: \"bottom\",\n [TooltipPosition.Left]: \"left\",\n};\n\nconst ALIGN_MAP: Record<TooltipAlign, \"start\" | \"center\" | \"end\"> = {\n [TooltipAlign.Start]: \"start\",\n [TooltipAlign.Center]: \"center\",\n [TooltipAlign.End]: \"end\",\n};\n\nexport interface TooltipProps {\n /** Tooltip content (text or ReactNode). */\n content: React.ReactNode;\n /** Trigger element(s). */\n children: React.ReactNode;\n /** Size: sm, md, lg. */\n size?: TooltipSize;\n /** Position (side) of the tooltip relative to trigger. */\n position?: TooltipPosition;\n /** Alignment along the cross axis. */\n align?: TooltipAlign;\n /** Color variant: default, inverse, success, warning, error. */\n color?: TooltipColor;\n /** Optional icon shown before content. */\n icon?: React.ReactNode;\n /** Delay in ms before showing (default from provider). */\n delayDuration?: number;\n /** Skip delay when closing. */\n skipDelayDuration?: number;\n /** Additional class for the content container. */\n className?: string;\n}\n\nconst Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n content,\n children,\n size = TooltipSize.Md,\n position = TooltipPosition.Top,\n align = TooltipAlign.Center,\n color = TooltipColor.Default,\n icon,\n delayDuration = 300,\n skipDelayDuration = 0,\n className,\n },\n ref\n ) => {\n return (\n <TooltipPrimitive.Provider\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n >\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>\n {children}\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n side={SIDE_MAP[position]}\n align={ALIGN_MAP[align]}\n sideOffset={6}\n avoidCollisions\n className={cn(\n \"kz-tooltip-content\",\n `kz-tooltip-content--size-${size}`,\n `kz-tooltip-content--color-${color}`,\n className\n )}\n data-size={size}\n data-color={color}\n >\n {icon != null ? (\n <span className=\"kz-tooltip-content-inner\">\n <span className=\"kz-tooltip-icon\" aria-hidden>\n {icon}\n </span>\n <span className=\"kz-tooltip-text\">{content}</span>\n </span>\n ) : (\n content\n )}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n }\n);\n\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip, TooltipSize, TooltipPosition, TooltipAlign, TooltipColor };\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport type TabsVariant = \"pill\" | \"underline\";\nexport type TabsOrientation = \"horizontal\" | \"vertical\";\nexport type TabsSize = \"sm\" | \"md\" | \"lg\";\n\ninterface TabsContextValue {\n variant: TabsVariant;\n orientation: TabsOrientation;\n size: TabsSize;\n fullWidth: boolean;\n onValueChange?: (value: string) => void;\n}\n\nconst TabsContext = React.createContext<TabsContextValue>({\n variant: \"pill\",\n orientation: \"horizontal\",\n size: \"md\",\n fullWidth: false,\n});\n\nfunction useTabsContext(): TabsContextValue {\n return React.useContext(TabsContext);\n}\n\nexport interface TabsProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.Root\n> {\n variant?: TabsVariant;\n orientation?: TabsOrientation;\n size?: TabsSize;\n fullWidth?: boolean;\n className?: string;\n}\n\nconst Tabs = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Root>,\n TabsProps\n>(\n (\n {\n variant = \"pill\",\n orientation = \"horizontal\",\n size = \"md\",\n fullWidth = false,\n className,\n onValueChange,\n ...props\n },\n ref\n ) => {\n const ctx: TabsContextValue = React.useMemo(\n () => ({ variant, orientation, size, fullWidth, onValueChange }),\n [variant, orientation, size, fullWidth, onValueChange]\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n ref={ref}\n activationMode=\"manual\"\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n data-tabs-full-width={fullWidth ? \"\" : undefined}\n className={cn(\"kz-tabs\", className)}\n onValueChange={onValueChange}\n {...props}\n />\n </TabsContext.Provider>\n );\n }\n);\nTabs.displayName = TabsPrimitive.Root.displayName;\n\nexport interface TabsListProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.List\n> {\n className?: string;\n}\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, ...props }, ref) => {\n const { variant, orientation, size, fullWidth } = useTabsContext();\n const listRef = React.useRef<HTMLDivElement>(null);\n\n // Override Radix's roving tabindex so Tab key moves between triggers.\n // Radix sets tabIndex={-1} on inactive triggers; we force them all to 0.\n React.useEffect(() => {\n const node = listRef.current;\n if (!node) return;\n\n const forceTabIndex = () => {\n node.querySelectorAll<HTMLElement>('[role=\"tab\"]').forEach((el) => {\n if (el.getAttribute(\"tabindex\") !== \"0\") {\n el.setAttribute(\"tabindex\", \"0\");\n }\n });\n };\n\n forceTabIndex();\n\n const observer = new MutationObserver(forceTabIndex);\n observer.observe(node, {\n attributes: true,\n attributeFilter: [\"tabindex\"],\n subtree: true,\n });\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <TabsPrimitive.List\n ref={(node) => {\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n data-tabs-full-width={fullWidth ? \"\" : undefined}\n className={cn(\"kz-tabs-list\", className)}\n {...props}\n />\n );\n});\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nexport interface TabsTriggerProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.Trigger\n> {\n icon?: React.ReactNode;\n className?: string;\n}\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, icon, children, ...props }, ref) => {\n const { variant, orientation, size } = useTabsContext();\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n className={cn(\"kz-tabs-trigger\", className)}\n {...props}\n >\n {icon != null ? (\n <span className=\"kz-tabs-trigger-icon\" aria-hidden>\n {icon}\n </span>\n ) : null}\n {children}\n </TabsPrimitive.Trigger>\n );\n});\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nexport interface TabsContentProps extends React.ComponentPropsWithoutRef<\n typeof TabsPrimitive.Content\n> {\n className?: string;\n}\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n TabsContentProps\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n tabIndex={-1}\n className={cn(\"kz-tabs-content\", className)}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\n/* ── SubTabsTrigger ── */\n\nexport interface SubTabOption {\n value: string;\n label: string;\n}\n\nexport interface SubTabsTriggerProps {\n label: string;\n subTabs: SubTabOption[];\n activeValue?: string;\n className?: string;\n}\n\nconst SubTabsTrigger = React.forwardRef<HTMLButtonElement, SubTabsTriggerProps>(\n ({ label, subTabs, activeValue, className }, ref) => {\n const { variant, orientation, size, onValueChange } = useTabsContext();\n const isActive = subTabs.some((st) => st.value === activeValue);\n\n const [open, setOpen] = React.useState(false);\n const btnRef = React.useRef<HTMLButtonElement>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n\n // Merge refs\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n (btnRef as React.MutableRefObject<HTMLButtonElement | null>).current =\n node;\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n node;\n },\n [ref]\n );\n\n // Position menu relative to button, close on scroll\n const [menuStyle, setMenuStyle] = React.useState<React.CSSProperties>({});\n\n const updatePosition = React.useCallback(() => {\n if (!btnRef.current) return;\n const rect = btnRef.current.getBoundingClientRect();\n setMenuStyle({\n position: \"fixed\",\n top: rect.bottom + 4,\n left: rect.left,\n minWidth: rect.width,\n });\n }, []);\n\n React.useEffect(() => {\n if (!open) return;\n updatePosition();\n\n // Close on scroll so the menu doesn't float in wrong position\n const closeOnScroll = () => setOpen(false);\n window.addEventListener(\"scroll\", closeOnScroll, { capture: true });\n return () =>\n window.removeEventListener(\"scroll\", closeOnScroll, {\n capture: true,\n } as EventListenerOptions);\n }, [open, updatePosition]);\n\n // Close on outside click or Escape\n React.useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n btnRef.current?.contains(target) ||\n menuRef.current?.contains(target)\n )\n return;\n setOpen(false);\n };\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n btnRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [open]);\n\n const handleSelect = (value: string) => {\n onValueChange?.(value);\n setOpen(false);\n btnRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n if (e.key === \"ArrowDown\" && open && menuRef.current) {\n e.preventDefault();\n const first = menuRef.current.querySelector<HTMLElement>(\n \".kz-tabs-subtrigger-option\"\n );\n first?.focus();\n }\n };\n\n const handleOptionKeyDown = (\n e: React.KeyboardEvent,\n value: string,\n index: number\n ) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSelect(value);\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = menuRef.current?.querySelectorAll<HTMLElement>(\n \".kz-tabs-subtrigger-option\"\n )[index + 1];\n next?.focus();\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (index === 0) {\n btnRef.current?.focus();\n } else {\n const prev = menuRef.current?.querySelectorAll<HTMLElement>(\n \".kz-tabs-subtrigger-option\"\n )[index - 1];\n prev?.focus();\n }\n }\n if (e.key === \"Escape\") {\n setOpen(false);\n btnRef.current?.focus();\n }\n };\n\n return (\n <>\n <button\n ref={mergedRef}\n type=\"button\"\n className={cn(\"kz-tabs-subtrigger-group\", className)}\n data-tabs-variant={variant}\n data-tabs-orientation={orientation}\n data-tabs-size={size}\n data-state={isActive ? \"active\" : \"inactive\"}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((prev) => !prev)}\n onKeyDown={handleKeyDown}\n >\n <span className=\"kz-tabs-subtrigger-label\">{label}</span>\n <span\n className=\"kz-tabs-subtrigger-chevron\"\n data-open={open ? \"\" : undefined}\n >\n <Icon name={IconName.ChevronDown} size={14} color=\"currentColor\" />\n </span>\n </button>\n\n {open &&\n ReactDOM.createPortal(\n <div\n ref={menuRef}\n className=\"kz-tabs-subtrigger-menu\"\n role=\"listbox\"\n style={menuStyle}\n >\n {subTabs.map((st, i) => (\n <div\n key={st.value}\n className={cn(\n \"kz-tabs-subtrigger-option\",\n st.value === activeValue &&\n \"kz-tabs-subtrigger-option--active\"\n )}\n role=\"option\"\n tabIndex={0}\n aria-selected={st.value === activeValue}\n onClick={(e) => {\n e.stopPropagation();\n handleSelect(st.value);\n }}\n onKeyDown={(e) => handleOptionKeyDown(e, st.value, i)}\n >\n {st.label}\n </div>\n ))}\n </div>,\n document.body\n )}\n </>\n );\n }\n);\nSubTabsTrigger.displayName = \"SubTabsTrigger\";\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, SubTabsTrigger };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Checkbox, CheckboxSize, CheckboxVariant } from \"../checkbox\";\nimport { TextInput, TextInputSize, TextInputVariant } from \"../text-input\";\nimport { Button, ButtonVariant, ButtonSize, ButtonStatus } from \"../button\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Pagination } from \"../pagination\";\nimport type {\n TableProps,\n TableColumn,\n TableCellChange,\n SortDirection,\n} from \"./Table.types\";\n\nfunction nextSortDirection(current: SortDirection): SortDirection {\n if (current === null) return \"asc\";\n if (current === \"asc\") return \"desc\";\n return null;\n}\n\nfunction getCellContent<TData, TEditValue = string>(\n row: TData,\n column: TableColumn<TData, TEditValue>\n): React.ReactNode {\n if (column.cell) return column.cell(row);\n if (column.accessor) return column.accessor(row);\n return null;\n}\n\nfunction TableInner<TData, TEditValue = string>(\n {\n data,\n columns,\n size = \"md\",\n horizontalScroll = false,\n stickyColumns = false,\n stickyHeader = false,\n maxHeight,\n getRowSticky,\n getRowClassName,\n getRowStyle,\n caption,\n header: headerProp,\n title,\n description,\n searchable,\n searchValue = \"\",\n onSearchChange,\n searchPlaceholder = \"Search…\",\n headerRight,\n selectableRows,\n selectedRowIds = {},\n getRowId,\n onRowSelectionChange,\n onToggleRow,\n onToggleAll,\n actions,\n actionsHeader,\n sort = null,\n onSortChange,\n pagination,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50],\n loading,\n emptyState,\n onDeleteSelected,\n editingCell,\n onEditingCellChange,\n onSave,\n onCancel,\n editingCells,\n onEditingCellsChange,\n onSaveAll,\n className,\n tableClassName,\n headerClassName,\n footerClassName,\n containerClassName,\n }: TableProps<TData, TEditValue>,\n ref: React.Ref<HTMLDivElement>\n) {\n const captionId = React.useId();\n const tableId = React.useId();\n\n const allRowIds = React.useMemo(\n () => data.map((row, i) => getRowId(row, i)),\n [data, getRowId]\n );\n\n const visibleColumns = React.useMemo(\n () => columns.filter((col) => !col.hidden),\n [columns]\n );\n\n const selectedCount = React.useMemo(\n () => Object.keys(selectedRowIds).filter((id) => selectedRowIds[id]).length,\n [selectedRowIds]\n );\n const allSelected =\n allRowIds.length > 0 && selectedCount === allRowIds.length;\n const someSelected = selectedCount > 0;\n\n const handleToggleAll = React.useCallback(\n (checked: boolean) => {\n if (onToggleAll) {\n onToggleAll(checked, allRowIds);\n return;\n }\n if (onRowSelectionChange) {\n const next: Record<string, boolean> = {};\n allRowIds.forEach((id) => (next[id] = checked));\n onRowSelectionChange(next);\n }\n },\n [allRowIds, onToggleAll, onRowSelectionChange]\n );\n\n const handleToggleRow = React.useCallback(\n (rowId: string, checked: boolean) => {\n if (onToggleRow) {\n onToggleRow(rowId, checked);\n return;\n }\n if (onRowSelectionChange) {\n const next = { ...selectedRowIds, [rowId]: checked };\n onRowSelectionChange(next);\n }\n },\n [selectedRowIds, onToggleRow, onRowSelectionChange]\n );\n\n const handleSortClick = React.useCallback(\n (key: string) => {\n if (!onSortChange) return;\n const currentDir = sort?.key === key ? sort.direction : null;\n const nextDir = nextSortDirection(currentDir ?? null);\n onSortChange({ key, direction: nextDir });\n },\n [sort, onSortChange]\n );\n\n const hasPagination = pagination != null && onPageChange != null;\n\n /* ── Inline cell editing ── */\n\n // Detect which mode we're in: multi-cell takes precedence\n const isMultiCellMode = editingCells != null;\n\n // --- Single-cell draft (legacy) ---\n const [draftValue, setDraftValue] = React.useState<TEditValue | null>(null);\n\n React.useEffect(() => {\n if (isMultiCellMode) return; // skip in multi-cell mode\n if (editingCell == null) {\n setDraftValue(null);\n return;\n }\n const row = data.find((r, i) => getRowId(r, i) === editingCell.rowId);\n if (!row) return;\n const col = columns.find((c) => c.key === editingCell.columnKey);\n if (!col) return;\n\n let val: TEditValue;\n if (col.getEditValue) {\n val = col.getEditValue(row);\n } else if (col.accessor) {\n val = col.accessor(row) as TEditValue;\n } else {\n val = \"\" as TEditValue;\n }\n setDraftValue(val ?? (\"\" as TEditValue));\n }, [editingCell, data, columns, getRowId, isMultiCellMode]);\n\n // --- Multi-cell drafts ---\n // Map: rowId → columnKey → draft value\n const [draftValues, setDraftValues] = React.useState<\n Record<string, Record<string, TEditValue>>\n >({});\n\n /** Seed a draft value for a cell when it enters edit mode (multi-cell). */\n const seedDraft = React.useCallback(\n (rowId: string, columnKey: string) => {\n const row = data.find((r, i) => getRowId(r, i) === rowId);\n if (!row) return;\n const col = columns.find((c) => c.key === columnKey);\n if (!col) return;\n\n let val: TEditValue;\n if (col.getEditValue) {\n val = col.getEditValue(row);\n } else if (col.accessor) {\n val = col.accessor(row) as TEditValue;\n } else {\n val = \"\" as TEditValue;\n }\n\n setDraftValues((prev) => ({\n ...prev,\n [rowId]: { ...prev[rowId], [columnKey]: val ?? (\"\" as TEditValue) },\n }));\n },\n [data, columns, getRowId]\n );\n\n const handleEditCellClick = React.useCallback(\n (rowId: string, columnKey: string) => {\n if (isMultiCellMode) {\n // Add to the editing set\n const next = {\n ...editingCells,\n [rowId]: { ...editingCells[rowId], [columnKey]: true },\n };\n onEditingCellsChange?.(next);\n seedDraft(rowId, columnKey);\n } else {\n onEditingCellChange?.({ rowId, columnKey });\n }\n },\n [\n isMultiCellMode,\n editingCells,\n onEditingCellsChange,\n onEditingCellChange,\n seedDraft,\n ]\n );\n\n const handleCellSave = React.useCallback(() => {\n if (isMultiCellMode) {\n // Collect all changes\n const changes: TableCellChange<TEditValue>[] = [];\n for (const rowId of Object.keys(draftValues)) {\n for (const columnKey of Object.keys(draftValues[rowId])) {\n changes.push({\n rowId,\n columnKey,\n value: draftValues[rowId][columnKey],\n });\n }\n }\n onSaveAll?.(changes);\n onEditingCellsChange?.({});\n setDraftValues({});\n } else {\n if (editingCell != null && draftValue != null) {\n onSave?.(editingCell.rowId, editingCell.columnKey, draftValue);\n onEditingCellChange?.(null);\n }\n }\n }, [\n isMultiCellMode,\n draftValues,\n onSaveAll,\n onEditingCellsChange,\n editingCell,\n draftValue,\n onSave,\n onEditingCellChange,\n ]);\n\n const handleCellCancel = React.useCallback(() => {\n if (isMultiCellMode) {\n onEditingCellsChange?.({});\n setDraftValues({});\n } else {\n onEditingCellChange?.(null);\n }\n onCancel?.();\n }, [isMultiCellMode, onEditingCellsChange, onEditingCellChange, onCancel]);\n\n const handleDeleteSelected = React.useCallback(() => {\n if (!onDeleteSelected) return;\n const ids = Object.keys(selectedRowIds).filter((id) => selectedRowIds[id]);\n if (ids.length > 0) onDeleteSelected(ids);\n }, [selectedRowIds, onDeleteSelected]);\n\n const defaultHeader = (\n <div\n className={cn(\n \"flex flex-wrap items-center justify-between gap-3 w-full m-[kz-space-4]\",\n headerClassName\n )}\n >\n <div className=\"flex flex-col gap-0.5 min-w-0\">\n {title != null && (\n <span className=\"text-base font-medium text-[var(--kz-color-text-primary)]\">\n {title}\n </span>\n )}\n {description != null && (\n <span className=\"text-sm text-[var(--kz-color-text-secondary)]\">\n {description}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2 flex-1 justify-end min-w-0\">\n {searchable && (\n <div className=\"w-full max-w-xs\">\n <TextInput\n label=\"\"\n value={searchValue}\n onValueChange={(v) => onSearchChange?.(v)}\n placeHolder={searchPlaceholder}\n size={TextInputSize.Sm}\n variant={TextInputVariant.Default}\n />\n </div>\n )}\n {headerRight != null && <div className=\"shrink-0\">{headerRight}</div>}\n </div>\n </div>\n );\n\n const sizeClasses = {\n sm: \"py-1.5 px-2 text-xs\",\n md: \"py-2 px-3 text-sm\",\n lg: \"py-3 px-4 text-base\",\n };\n const sizeClass = sizeClasses[size];\n\n const alignClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n\n const hasHeader =\n headerProp != null ||\n title != null ||\n description != null ||\n searchable ||\n headerRight != null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-table-root kz-table-surface flex flex-col w-full min-w-0 overflow-hidden rounded-[var(--kz-radius-md)] bg-[var(--kz-component-table-surface)] border border-[var(--kz-color-border-default)]\",\n className,\n containerClassName\n )}\n >\n {hasHeader && (\n <div\n className={cn(\n \"kz-table-header border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)] px-[var(--kz-space-6)] py-[var(--kz-space-4)]\",\n headerClassName\n )}\n >\n {headerProp != null ? headerProp : defaultHeader}\n </div>\n )}\n <div\n className={cn(\n \"kz-table-scroll overflow-auto flex-1\",\n stickyHeader && !maxHeight && \"max-h-full\"\n )}\n style={maxHeight ? { maxHeight } : undefined}\n >\n <table\n id={tableId}\n aria-describedby={caption ? captionId : undefined}\n className={cn(\n \"border-separate border-spacing-0 bg-[var(--kz-component-table-surface)]\",\n horizontalScroll ? \"min-w-full w-max\" : \"w-full\",\n tableClassName\n )}\n >\n {caption && (\n <caption id={captionId} className=\"sr-only\">\n {caption}\n </caption>\n )}\n <thead>\n <tr>\n {selectableRows && (\n <th\n scope=\"col\"\n className={cn(\n \"kz-table-th w-[var(--kz-space-10)] border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)]\",\n sizeClass,\n stickyHeader &&\n \"sticky top-0 z-10 bg-[var(--kz-component-table-header-bg)]\",\n stickyColumns &&\n horizontalScroll &&\n \"sticky left-0 z-20 bg-[var(--kz-component-table-header-bg)]\"\n )}\n style={{ width: \"var(--kz-space-10)\" }}\n >\n <Checkbox\n size={CheckboxSize.Sm}\n variant={CheckboxVariant.Default}\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onCheckedChange={(checked) => handleToggleAll(!!checked)}\n aria-label=\"Toggle all rows\"\n />\n </th>\n )}\n {visibleColumns.map((col) => {\n const thStyle: React.CSSProperties = {\n ...col.headerStyle,\n };\n if (col.width) thStyle.width = col.width;\n if (col.minWidth) thStyle.minWidth = col.minWidth;\n if (col.maxWidth) thStyle.maxWidth = col.maxWidth;\n const align = col.align ?? \"left\";\n const isSortable = col.sortable && onSortChange != null;\n const isActive = sort?.key === col.key;\n const ariaSort: \"ascending\" | \"descending\" | \"none\" =\n isActive && sort?.direction === \"asc\"\n ? \"ascending\"\n : isActive && sort?.direction === \"desc\"\n ? \"descending\"\n : \"none\";\n return (\n <th\n key={col.key}\n scope=\"col\"\n aria-sort={isSortable ? ariaSort : undefined}\n className={cn(\n \"kz-table-th border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)]\",\n sizeClass,\n alignClasses[align],\n stickyHeader &&\n \"sticky top-0 z-10 bg-[var(--kz-component-table-header-bg)]\",\n col.headerClassName\n )}\n style={thStyle}\n >\n {isSortable ? (\n <button\n type=\"button\"\n onClick={() => handleSortClick(col.key)}\n className=\"inline-flex items-center gap-1 w-full text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--kz-color-border-focus)] rounded-[var(--kz-radius-sm)]\"\n >\n {col.header}\n <span\n className=\"inline-flex text-[var(--kz-color-text-muted)]\"\n aria-hidden\n >\n {isActive && sort?.direction === \"asc\" && (\n <Icon\n name={IconName.ArrowUp}\n size=\"sm\"\n color=\"currentColor\"\n />\n )}\n {isActive && sort?.direction === \"desc\" && (\n <Icon\n name={IconName.ArrowDown}\n size=\"sm\"\n color=\"currentColor\"\n />\n )}\n {!isActive && (\n <Icon\n name={IconName.ArrowUpDown}\n size=\"sm\"\n color=\"currentColor\"\n />\n )}\n </span>\n </button>\n ) : (\n col.header\n )}\n </th>\n );\n })}\n {actions && (\n <th\n scope=\"col\"\n className={cn(\n \"kz-table-th text-right w-[var(--kz-space-24)] border-b border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-header-bg)]\",\n sizeClass,\n stickyHeader &&\n \"sticky top-0 z-10 bg-[var(--kz-component-table-header-bg)]\",\n stickyColumns &&\n horizontalScroll &&\n \"sticky right-0 z-20 bg-[var(--kz-component-table-header-bg)]\"\n )}\n >\n {actionsHeader ?? \"\"}\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {loading ? (\n <tr>\n <td\n colSpan={\n visibleColumns.length +\n (selectableRows ? 1 : 0) +\n (actions ? 1 : 0)\n }\n className={cn(\n \"kz-table-td text-center text-[var(--kz-color-text-muted)]\",\n sizeClass\n )}\n >\n Loading…\n </td>\n </tr>\n ) : data.length === 0 ? (\n <tr>\n <td\n colSpan={\n visibleColumns.length +\n (selectableRows ? 1 : 0) +\n (actions ? 1 : 0)\n }\n className={cn(\n \"kz-table-td text-center text-[var(--kz-color-text-muted)]\",\n sizeClass\n )}\n >\n {emptyState ?? \"No data\"}\n </td>\n </tr>\n ) : (\n data.map((row, index) => {\n const rowId = getRowId(row, index);\n const isSelected = !!selectedRowIds[rowId];\n const isSticky = getRowSticky?.(row, index) ?? false;\n const hasEditingCell = isMultiCellMode\n ? editingCells[rowId] != null &&\n Object.keys(editingCells[rowId]).some(\n (k) => editingCells[rowId][k]\n )\n : editingCell != null && editingCell.rowId === rowId;\n return (\n <tr\n key={rowId}\n className={cn(\n \"kz-table-tr border-b border-[var(--kz-component-table-row-border)] last:border-b-0 hover:bg-[var(--kz-component-table-row-hover-bg)] transition-colors duration-[var(--kz-motion-duration-normal)]\",\n isSticky && \"kz-table-tr--sticky\",\n hasEditingCell && \"kz-table-tr--editing\",\n getRowClassName?.(row, index)\n )}\n style={getRowStyle?.(row, index)}\n >\n {selectableRows && (\n <td\n className={cn(\n \"kz-table-td\",\n sizeClass,\n stickyColumns &&\n horizontalScroll &&\n \"sticky left-0 z-10 bg-[var(--kz-component-table-surface)]\"\n )}\n >\n <Checkbox\n size={CheckboxSize.Sm}\n variant={CheckboxVariant.Default}\n checked={isSelected}\n onCheckedChange={(checked) =>\n handleToggleRow(rowId, !!checked)\n }\n aria-label={`Select row ${rowId}`}\n />\n </td>\n )}\n {visibleColumns.map((col) => {\n const tdStyle: React.CSSProperties = {\n ...col.cellStyle,\n };\n if (col.width) tdStyle.width = col.width;\n if (col.minWidth) tdStyle.minWidth = col.minWidth;\n if (col.maxWidth) tdStyle.maxWidth = col.maxWidth;\n const align = col.align ?? \"left\";\n const isCellEditing = isMultiCellMode\n ? !!editingCells[rowId]?.[col.key]\n : editingCell != null &&\n editingCell.rowId === rowId &&\n editingCell.columnKey === col.key;\n\n if (isCellEditing) {\n // In multi-cell mode read/write from draftValues map;\n // in single-cell mode use draftValue.\n const cellDraft = isMultiCellMode\n ? (draftValues[rowId]?.[col.key] ??\n (\"\" as TEditValue))\n : (draftValue ?? (\"\" as TEditValue));\n\n const onChange = (v: TEditValue) => {\n if (isMultiCellMode) {\n setDraftValues((prev) => ({\n ...prev,\n [rowId]: { ...prev[rowId], [col.key]: v },\n }));\n } else {\n setDraftValue(v);\n }\n };\n\n return (\n <td\n key={col.key}\n className={cn(\n \"kz-table-td text-[var(--kz-color-text-primary)]\",\n sizeClass,\n alignClasses[align],\n col.cellClassName\n )}\n style={tdStyle}\n >\n {col.editCell ? (\n col.editCell(row, cellDraft, onChange)\n ) : (\n <TextInput\n label=\"\"\n placeHolder=\"\"\n value={String(cellDraft ?? \"\")}\n onValueChange={(v) => onChange(v as TEditValue)}\n size={TextInputSize.Sm}\n variant={TextInputVariant.Default}\n />\n )}\n </td>\n );\n }\n\n return (\n <td\n key={col.key}\n className={cn(\n \"kz-table-td text-[var(--kz-color-text-primary)]\",\n sizeClass,\n alignClasses[align],\n col.editable && \"kz-table-td--editable\",\n col.cellClassName\n )}\n style={tdStyle}\n >\n {getCellContent(row, col)}\n {col.editable && (\n <button\n type=\"button\"\n className=\"kz-table-cell-edit-icon\"\n aria-label={`Edit ${col.header}`}\n onClick={() =>\n handleEditCellClick(rowId, col.key)\n }\n >\n <Icon\n name={IconName.Pencil}\n size={14}\n color=\"currentColor\"\n />\n </button>\n )}\n </td>\n );\n })}\n {actions && (\n <td\n className={cn(\n \"kz-table-td text-right\",\n sizeClass,\n stickyColumns &&\n horizontalScroll &&\n \"sticky right-0 z-10 bg-[var(--kz-component-table-surface)]\"\n )}\n >\n {actions(row)}\n </td>\n )}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n {(hasPagination ||\n (someSelected && onDeleteSelected) ||\n editingCell != null ||\n (isMultiCellMode &&\n Object.keys(editingCells).some((rid) =>\n Object.values(editingCells[rid]).some(Boolean)\n ))) && (\n <div\n className={cn(\n \"kz-table-footer flex items-center border-t border-[var(--kz-component-table-row-border)] bg-[var(--kz-component-table-footer-bg)] px-[var(--kz-space-6)] py-[var(--kz-space-4)]\",\n footerClassName\n )}\n >\n {/* Left: delete selected */}\n <div className=\"flex items-center gap-[var(--kz-space-2)] shrink-0\">\n {someSelected && onDeleteSelected && (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={handleDeleteSelected}\n className=\"text-[var(--kz-color-error)] hover:text-[var(--kz-color-error)] hover:bg-[var(--kz-color-error-subtle)]\"\n aria-label=\"Delete selected rows\"\n >\n <Icon\n name={IconName.Trash2}\n size={14}\n color=\"currentColor\"\n aria-hidden\n />\n <span className=\"ml-1\">Delete ({selectedCount})</span>\n </Button>\n )}\n </div>\n {/* Center: pagination */}\n {hasPagination ? (\n <div className=\"flex-1 min-w-0\">\n <Pagination\n page={pagination.page}\n total={pagination.total}\n pageSize={pagination.pageSize}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n pageSizeOptions={pageSizeOptions}\n />\n </div>\n ) : (\n <div className=\"flex-1\" />\n )}\n {/* Right: save / cancel */}\n <div className=\"flex items-center gap-[var(--kz-space-2)] shrink-0 ml-[var(--kz-space-3)]\">\n {(editingCell != null ||\n (isMultiCellMode &&\n Object.keys(editingCells).some((rid) =>\n Object.values(editingCells[rid]).some(Boolean)\n ))) && (\n <>\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleCellCancel}\n >\n Cancel\n </Button>\n <Button\n variant={ButtonVariant.Primary}\n status={ButtonStatus.Brand}\n size={ButtonSize.Sm}\n onClick={handleCellSave}\n >\n Save\n </Button>\n </>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nconst Table = React.forwardRef(TableInner) as <TData, TEditValue = string>(\n props: TableProps<TData, TEditValue> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement;\n\nexport { Table };\nexport type {\n TableProps,\n TableColumn,\n TableSortState,\n TablePaginationState,\n} from \"./Table.types\";\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\nimport { DropdownButton } from \"../dropdown\";\nimport type { DropdownButtonItem } from \"../dropdown\";\nimport type { PaginationProps } from \"./Pagination.types\";\n\nfunction buildPageRange(page: number, pageSize: number, total: number) {\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const delta = 2;\n let start = Math.max(1, page - delta);\n let end = Math.min(totalPages, page + delta);\n if (end - start < 2 * delta) {\n if (start === 1) end = Math.min(totalPages, start + 2 * delta);\n else end = Math.min(totalPages, end);\n start = Math.max(1, end - 2 * delta);\n }\n const pages: (number | \"ellipsis\")[] = [];\n if (start > 1) {\n pages.push(1);\n if (start > 2) pages.push(\"ellipsis\");\n }\n for (let p = start; p <= end; p++) pages.push(p);\n if (end < totalPages) {\n if (end < totalPages - 1) pages.push(\"ellipsis\");\n pages.push(totalPages);\n }\n return {\n pages,\n totalPages,\n startItem: (page - 1) * pageSize + 1,\n endItem: Math.min(page * pageSize, total),\n };\n}\n\nconst Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n page,\n total,\n pageSize,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50],\n showItemRange = true,\n className,\n },\n ref\n ) => {\n const range = React.useMemo(\n () => buildPageRange(page, pageSize, total),\n [page, pageSize, total]\n );\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn(\n \"kz-pagination flex flex-wrap items-center justify-center gap-3\",\n className\n )}\n >\n {showItemRange && total > 0 && (\n <div className=\"kz-pagination-range text-sm text-[var(--kz-color-text-secondary)]\">\n {range.totalPages <= 1\n ? `${total} items`\n : `${range.startItem}–${range.endItem} of ${total}`}\n </div>\n )}\n\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n className=\"kz-pagination-btn kz-pagination-nav\"\n aria-label=\"Previous page\"\n >\n <Icon\n name={IconName.ChevronLeft}\n size=\"sm\"\n color=\"currentColor\"\n aria-hidden\n />\n </button>\n\n {range.pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span\n key={`e-${i}`}\n className=\"kz-pagination-ellipsis px-2 text-[var(--kz-color-text-muted)]\"\n >\n …\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n data-active={p === page || undefined}\n onClick={() => onPageChange(p)}\n className=\"kz-pagination-btn kz-pagination-page\"\n aria-label={`Page ${p}`}\n aria-current={p === page ? \"page\" : undefined}\n >\n {p}\n </button>\n )\n )}\n\n <button\n type=\"button\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= range.totalPages}\n className=\"kz-pagination-btn kz-pagination-nav\"\n aria-label=\"Next page\"\n >\n <Icon\n name={IconName.ChevronRight}\n size=\"sm\"\n color=\"currentColor\"\n aria-hidden\n />\n </button>\n </div>\n\n {onPageSizeChange && (\n <DropdownButton\n trigger={{\n label: String(pageSize),\n showChevron: true,\n }}\n items={pageSizeOptions.map(\n (n): DropdownButtonItem => ({\n key: String(n),\n label: String(n),\n onSelect: () => onPageSizeChange(n),\n })\n )}\n />\n )}\n </nav>\n );\n }\n);\n\nPagination.displayName = \"Pagination\";\n\nexport { Pagination, buildPageRange };\nexport type { PaginationProps } from \"./Pagination.types\";\n","import * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\nimport { DropdownTriggerVariant } from \"../../constants/enum\";\n\nconst Dropdown = DropdownMenuPrimitive.Root;\n\nexport interface DropdownTriggerProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Trigger\n> {\n variant?: DropdownTriggerVariant;\n\n showChevron?: boolean;\n\n startIcon?: React.ReactNode;\n\n endIcon?: React.ReactNode;\n}\n\nconst DropdownTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Trigger>,\n DropdownTriggerProps\n>(\n (\n {\n asChild = false,\n disabled,\n className,\n variant = DropdownTriggerVariant.Default,\n showChevron = true,\n startIcon,\n endIcon,\n children,\n ...props\n },\n ref\n ) => {\n const isGhost = variant === DropdownTriggerVariant.Ghost;\n const triggerContent = asChild ? (\n children\n ) : (\n <>\n {startIcon ? (\n <span className=\"kz-dropdown-trigger-icon-start\">{startIcon}</span>\n ) : null}\n {children}\n {endIcon ? (\n <span className=\"kz-dropdown-trigger-icon-end\">{endIcon}</span>\n ) : null}\n {showChevron ? (\n <Icon\n name={IconName.ChevronDown}\n className=\"kz-dropdown-trigger-chevron\"\n size=\"sm\"\n aria-hidden\n />\n ) : null}\n </>\n );\n\n return (\n <DropdownMenuPrimitive.Trigger\n ref={ref}\n asChild={asChild}\n disabled={disabled}\n className={cn(\n \"kz-dropdown-trigger\",\n isGhost && \"kz-dropdown-trigger-ghost\",\n className\n )}\n {...props}\n >\n {triggerContent}\n </DropdownMenuPrimitive.Trigger>\n );\n }\n);\nDropdownTrigger.displayName = DropdownMenuPrimitive.Trigger.displayName;\n\ninterface DropdownContentProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Content\n> {\n className?: string;\n align?: \"start\" | \"center\" | \"end\";\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n alignOffset?: number;\n avoidCollisions?: boolean;\n}\n\nconst DropdownContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n DropdownContentProps\n>(\n (\n {\n className,\n align = \"center\",\n side = \"bottom\",\n sideOffset = 4,\n alignOffset = 0,\n avoidCollisions = true,\n ...props\n },\n ref\n ) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n className={cn(\"kz-dropdown-content\", className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n);\nDropdownContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\ninterface DropdownItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Item\n> {\n onSelect?: (event: Event) => void;\n disabled?: boolean;\n destructive?: boolean;\n inset?: boolean;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n shortcut?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n DropdownItemProps\n>(\n (\n {\n className,\n onSelect,\n disabled,\n destructive,\n inset,\n startIcon,\n endIcon,\n shortcut,\n children,\n ...props\n },\n ref\n ) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n onSelect={onSelect}\n disabled={disabled}\n className={cn(\n \"kz-dropdown-item\",\n inset && \"kz-dropdown-item-inset\",\n destructive && \"kz-dropdown-item-destructive\",\n className\n )}\n {...props}\n >\n {startIcon ? (\n <span className=\"kz-dropdown-item-icon-start\">{startIcon}</span>\n ) : null}\n <span className=\"kz-dropdown-item-text\">{children}</span>\n {shortcut ? (\n <span className=\"kz-dropdown-item-shortcut\">{shortcut}</span>\n ) : null}\n {endIcon ? (\n <span className=\"kz-dropdown-item-icon-end\">{endIcon}</span>\n ) : null}\n </DropdownMenuPrimitive.Item>\n )\n);\nDropdownItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> & {\n className?: string;\n }\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"kz-dropdown-separator\", className)}\n {...props}\n />\n));\nDropdownSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\ninterface DropdownLabelProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Label\n> {\n inset?: boolean;\n className?: string;\n}\n\nconst DropdownLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n DropdownLabelProps\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"kz-dropdown-label\",\n inset && \"kz-dropdown-label-inset\",\n className\n )}\n {...props}\n />\n));\nDropdownLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\ninterface DropdownCheckboxItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.CheckboxItem\n> {\n checked?: boolean | \"indeterminate\";\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n DropdownCheckboxItemProps\n>(\n (\n { className, checked, onCheckedChange, disabled, children, ...props },\n ref\n ) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n className={cn(\"kz-dropdown-checkbox-item\", className)}\n {...props}\n >\n <DropdownMenuPrimitive.ItemIndicator className=\"kz-dropdown-item-indicator\">\n {checked === \"indeterminate\" ? (\n <span className=\"kz-dropdown-item-indicator-minus\">−</span>\n ) : (\n <Check className=\"kz-dropdown-item-indicator-check\" />\n )}\n </DropdownMenuPrimitive.ItemIndicator>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n);\nDropdownCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownRadioGroup = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioGroup>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioGroup>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioGroup\n ref={ref}\n className={cn(\"kz-dropdown-radio-group\", className)}\n {...props}\n />\n));\nDropdownRadioGroup.displayName = DropdownMenuPrimitive.RadioGroup.displayName;\n\ninterface DropdownRadioItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.RadioItem\n> {\n value: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n DropdownRadioItemProps\n>(({ className, value, disabled, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n value={value}\n disabled={disabled}\n className={cn(\"kz-dropdown-radio-item\", className)}\n {...props}\n >\n <DropdownMenuPrimitive.ItemIndicator className=\"kz-dropdown-item-indicator\">\n <Circle className=\"kz-dropdown-item-indicator-dot\" />\n </DropdownMenuPrimitive.ItemIndicator>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownSub = DropdownMenuPrimitive.Sub;\n\ninterface DropdownSubTriggerProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.SubTrigger\n> {\n inset?: boolean;\n disabled?: boolean;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DropdownSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n DropdownSubTriggerProps\n>(\n (\n { className, inset, disabled, startIcon, endIcon, children, ...props },\n ref\n ) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n disabled={disabled}\n className={cn(\n \"kz-dropdown-sub-trigger\",\n inset && \"kz-dropdown-sub-trigger-inset\",\n className\n )}\n {...props}\n >\n {startIcon ? (\n <span className=\"kz-dropdown-item-icon-start\">{startIcon}</span>\n ) : null}\n <span className=\"kz-dropdown-item-text\">{children}</span>\n {endIcon ?? (\n <ChevronRight className=\"kz-dropdown-sub-trigger-chevron\" aria-hidden />\n )}\n </DropdownMenuPrimitive.SubTrigger>\n )\n);\nDropdownSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\ninterface DropdownSubContentProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.SubContent\n> {\n className?: string;\n sideOffset?: number;\n alignOffset?: number;\n children: React.ReactNode;\n}\n\nconst DropdownSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n DropdownSubContentProps\n>(({ className, sideOffset = 8, alignOffset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className={cn(\"kz-dropdown-sub-content\", className)}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.SubContent>\n));\nDropdownSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nexport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n DropdownLabel,\n DropdownCheckboxItem,\n DropdownRadioGroup,\n DropdownRadioItem,\n DropdownSub,\n DropdownSubTrigger,\n DropdownSubContent,\n};\n","import * as React from \"react\";\nimport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n DropdownLabel,\n DropdownSub,\n DropdownSubTrigger,\n DropdownSubContent,\n} from \"./dropdown\";\nimport { DropdownTriggerVariant } from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport {\n ButtonVariant,\n ButtonSize,\n ButtonAspectRatio,\n} from \"../../constants/enum\";\nimport { Icon, IconName } from \"../../icon\";\nimport type {\n DropdownButtonProps,\n DropdownButtonItem,\n DropdownButtonVariant,\n} from \"./dropdown.types\";\n\nfunction mapVariant(\n v: DropdownButtonVariant | undefined\n): DropdownTriggerVariant {\n return v === \"ghost\"\n ? DropdownTriggerVariant.Ghost\n : DropdownTriggerVariant.Default;\n}\n\nfunction renderItems(items: DropdownButtonItem[]): React.ReactNode {\n return items.map((item) => {\n if (item.type === \"label\") {\n return <DropdownLabel key={item.key}>{item.label}</DropdownLabel>;\n }\n if (item.type === \"separator\") {\n return <DropdownSeparator key={item.key} />;\n }\n if (item.type === \"submenu\") {\n return (\n <DropdownSub key={item.key}>\n <DropdownSubTrigger\n disabled={item.disabled}\n startIcon={item.icon}\n endIcon={item.endIcon}\n >\n {item.label}\n </DropdownSubTrigger>\n <DropdownSubContent>{renderItems(item.items)}</DropdownSubContent>\n </DropdownSub>\n );\n }\n const it = item as Extract<DropdownButtonItem, { type?: \"item\" }>;\n return (\n <DropdownItem\n key={it.key}\n disabled={it.disabled}\n onSelect={() => {\n it.onSelect?.();\n }}\n startIcon={it.icon}\n endIcon={it.endIcon}\n shortcut={it.shortcut}\n >\n {it.label}\n </DropdownItem>\n );\n });\n}\n\nconst DropdownButton: React.FC<DropdownButtonProps> = ({\n trigger,\n items,\n align = \"center\",\n side = \"bottom\",\n sideOffset = 4,\n disabled = false,\n contentClassName,\n}) => {\n const triggerVariant = mapVariant(trigger.variant);\n const showChevron = trigger.showChevron !== false;\n const iconOnly = trigger.iconOnly === true;\n const triggerContent = iconOnly ? (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n aspectRatio={ButtonAspectRatio.Square}\n aria-label={trigger.ariaLabel ?? \"Actions\"}\n >\n <Icon\n name={IconName.EllipsisVertical}\n size=\"sm\"\n color=\"currentColor\"\n aria-hidden\n />\n </Button>\n ) : trigger.icon != null ? (\n <>\n {trigger.icon}\n {trigger.label != null ? trigger.label : null}\n </>\n ) : (\n trigger.label\n );\n\n return (\n <Dropdown>\n <DropdownTrigger\n variant={triggerVariant}\n showChevron={!iconOnly && showChevron}\n disabled={disabled}\n className={trigger.className}\n asChild={iconOnly}\n >\n {triggerContent}\n </DropdownTrigger>\n <DropdownContent\n align={align}\n side={side}\n sideOffset={sideOffset}\n className={contentClassName}\n >\n {renderItems(items)}\n </DropdownContent>\n </Dropdown>\n );\n};\n\nDropdownButton.displayName = \"DropdownButton\";\n\nexport { DropdownButton };\n","import * as React from \"react\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { cn } from \"../../utils/cn\";\n\nconst Dialog: typeof RadixDialog.Root = RadixDialog.Root;\nconst DialogTrigger: typeof RadixDialog.Trigger = RadixDialog.Trigger;\nconst DialogPortal = RadixDialog.Portal;\nconst DialogClose: typeof RadixDialog.Close = RadixDialog.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Overlay>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Overlay>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 transition-opacity data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = RadixDialog.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Content>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <RadixDialog.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-lg transition-opacity duration-200 data-[state=closed]:opacity-0 data-[state=open]:opacity-100 sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n </RadixDialog.Content>\n </DialogPortal>\n));\nDialogContent.displayName = RadixDialog.Content.displayName;\n\nconst DialogHeader = (props: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n props.className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = (props: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n props.className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Title>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = RadixDialog.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof RadixDialog.Description>,\n React.ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = RadixDialog.Description.displayName;\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n};\n","\"use client\";\n\nimport React, { useLayoutEffect } from \"react\";\nimport type { TokenOverrides } from \"../tokens/apply/applyTokenOverrides\";\nimport {\n applyTokenOverrides,\n clearTokenOverrides,\n} from \"../tokens/apply/applyTokenOverrides\";\nimport { KezelVariant, KezelMode, OverrideMode } from \"../constants/enum\";\n\nexport { KezelVariant, KezelMode, OverrideMode } from \"../constants/enum\";\n\nexport interface KezelThemeProviderProps {\n children: React.ReactNode;\n variant?: KezelVariant;\n mode?: KezelMode;\n\n /** Overrides applied to all variant+mode combinations */\n tokens?: TokenOverrides;\n\n /** Overrides applied only in light mode */\n lightTokens?: TokenOverrides;\n /** Overrides applied only in dark mode */\n darkTokens?: TokenOverrides;\n\n /** Overrides applied only when variant is standard */\n standardTokens?: TokenOverrides;\n /** Overrides applied only when variant is neumorphic */\n neumorphicTokens?: TokenOverrides;\n\n /**\n * Overrides scoped to a specific variant+mode pair.\n * e.g. { \"standard.dark\": { \"color.surface.base\": \"#111\" } }\n */\n variantModeTokens?: Partial<\n Record<`${KezelVariant}.${KezelMode}`, TokenOverrides>\n >;\n\n validation?: OverrideMode;\n}\n\nexport function KezelThemeProvider({\n children,\n variant = KezelVariant.Standard,\n mode = KezelMode.Light,\n tokens,\n lightTokens,\n darkTokens,\n standardTokens,\n neumorphicTokens,\n variantModeTokens,\n validation = OverrideMode.Safe,\n}: KezelThemeProviderProps) {\n useLayoutEffect(() => {\n const root = document.documentElement;\n\n root.dataset.variant = variant;\n root.dataset.mode = mode === KezelMode.Dark ? \"dark\" : \"light\";\n\n root.classList.toggle(\"dark\", mode === KezelMode.Dark);\n\n // Clear previous overrides before applying new ones\n clearTokenOverrides(root);\n\n // Resolution order: tokens → mode-scoped → variant-scoped → variantModeTokens\n // Later layers win (inline style last-write-wins)\n applyTokenOverrides(root, tokens, validation);\n\n // Mode-scoped\n if (mode === KezelMode.Light) {\n applyTokenOverrides(root, lightTokens, validation);\n } else {\n applyTokenOverrides(root, darkTokens, validation);\n }\n\n // Variant-scoped\n if (variant === KezelVariant.Standard) {\n applyTokenOverrides(root, standardTokens, validation);\n } else if (variant === KezelVariant.Neumorphic) {\n applyTokenOverrides(root, neumorphicTokens, validation);\n }\n\n // Variant+mode scoped (most specific)\n const vmKey = `${variant}.${mode}` as `${KezelVariant}.${KezelMode}`;\n applyTokenOverrides(root, variantModeTokens?.[vmKey], validation);\n }, [\n variant,\n mode,\n tokens,\n lightTokens,\n darkTokens,\n standardTokens,\n neumorphicTokens,\n variantModeTokens,\n validation,\n ]);\n\n return <>{children}</>;\n}\n","import type { TokenKey } from \"./token-keys\";\n\nexport const tokenToCssVar: Record<TokenKey, `--kz-${string}`> = {\n \"color.brand.primary\": \"--kz-color-brand-primary\",\n \"color.brand.primary.hover\": \"--kz-color-brand-primary-hover\",\n \"color.brand.primary.active\": \"--kz-color-brand-primary-active\",\n \"color.brand.secondary\": \"--kz-color-brand-secondary\",\n \"color.brand.accent\": \"--kz-color-brand-accent\",\n \"color.brand.accent.hover\": \"--kz-color-brand-accent-hover\",\n \"color.brand.accent.active\": \"--kz-color-brand-accent-active\",\n \"color.brand.accent.dark\": \"--kz-color-brand-accent-dark\",\n \"color.brand.inverse\": \"--kz-color-brand-inverse\",\n\n \"color.surface.background\": \"--kz-color-surface-background\",\n \"color.surface.base\": \"--kz-color-surface-base\",\n \"color.surface.raised\": \"--kz-color-surface-raised\",\n \"color.surface.sunken\": \"--kz-color-surface-sunken\",\n \"color.surface.overlay\": \"--kz-color-surface-overlay\",\n \"color.surface.glass\": \"--kz-color-surface-glass\",\n \"color.surface.muted\": \"--kz-color-surface-muted\",\n \"color.surface.inverse\": \"--kz-color-surface-inverse\",\n\n \"color.text.primary\": \"--kz-color-text-primary\",\n \"color.text.secondary\": \"--kz-color-text-secondary\",\n \"color.text.tertiary\": \"--kz-color-text-tertiary\",\n \"color.text.muted\": \"--kz-color-text-muted\",\n \"color.text.disabled\": \"--kz-color-text-disabled\",\n \"color.text.inverse\": \"--kz-color-text-inverse\",\n \"color.text.link\": \"--kz-color-text-link\",\n \"color.text.link.hover\": \"--kz-color-text-link-hover\",\n\n \"color.border.subtle\": \"--kz-color-border-subtle\",\n \"color.border.default\": \"--kz-color-border-default\",\n \"color.border.strong\": \"--kz-color-border-strong\",\n \"color.border.focus\": \"--kz-color-border-focus\",\n \"color.border.inverse\": \"--kz-color-border-inverse\",\n\n \"color.status.success\": \"--kz-color-status-success\",\n \"color.status.success.bg\": \"--kz-color-status-success-bg\",\n \"color.status.success.border\": \"--kz-color-status-success-border\",\n \"color.status.warning\": \"--kz-color-status-warning\",\n \"color.status.warning.bg\": \"--kz-color-status-warning-bg\",\n \"color.status.warning.border\": \"--kz-color-status-warning-border\",\n \"color.status.error\": \"--kz-color-status-error\",\n \"color.status.error.bg\": \"--kz-color-status-error-bg\",\n \"color.status.error.border\": \"--kz-color-status-error-border\",\n \"color.status.info\": \"--kz-color-status-info\",\n \"color.status.info.bg\": \"--kz-color-status-info-bg\",\n \"color.status.info.border\": \"--kz-color-status-info-border\",\n\n \"shadow.elevation.0\": \"--kz-shadow-elevation-0\",\n \"shadow.elevation.1\": \"--kz-shadow-elevation-1\",\n \"shadow.elevation.2\": \"--kz-shadow-elevation-2\",\n \"shadow.elevation.3\": \"--kz-shadow-elevation-3\",\n \"shadow.elevation.4\": \"--kz-shadow-elevation-4\",\n \"shadow.elevation.5\": \"--kz-shadow-elevation-5\",\n \"shadow.inset.1\": \"--kz-shadow-inset-1\",\n \"shadow.inset.2\": \"--kz-shadow-inset-2\",\n \"shadow.focus\": \"--kz-shadow-focus\",\n \"shadow.neumorphic.light\": \"--kz-shadow-neumorphic-light\",\n \"shadow.neumorphic.dark\": \"--kz-shadow-neumorphic-dark\",\n \"shadow.neumorphic.raised.sm\": \"--kz-shadow-neumorphic-raised-sm\",\n \"shadow.neumorphic.raised.md\": \"--kz-shadow-neumorphic-raised-md\",\n \"shadow.neumorphic.raised.lg\": \"--kz-shadow-neumorphic-raised-lg\",\n \"shadow.neumorphic.inset.sm\": \"--kz-shadow-neumorphic-inset-sm\",\n\n \"effect.blur.sm\": \"--kz-effect-blur-sm\",\n \"effect.blur.md\": \"--kz-effect-blur-md\",\n \"effect.blur.lg\": \"--kz-effect-blur-lg\",\n \"effect.glass.opacity\": \"--kz-effect-glass-opacity\",\n \"effect.glass.border.opacity\": \"--kz-effect-glass-border-opacity\",\n\n \"radius.none\": \"--kz-radius-none\",\n \"radius.xs\": \"--kz-radius-xs\",\n \"radius.sm\": \"--kz-radius-sm\",\n \"radius.md\": \"--kz-radius-md\",\n \"radius.lg\": \"--kz-radius-lg\",\n \"radius.xl\": \"--kz-radius-xl\",\n \"radius.full\": \"--kz-radius-full\",\n\n \"space.0\": \"--kz-space-0\",\n \"space.1\": \"--kz-space-1\",\n \"space.2\": \"--kz-space-2\",\n \"space.3\": \"--kz-space-3\",\n \"space.4\": \"--kz-space-4\",\n \"space.5\": \"--kz-space-5\",\n \"space.6\": \"--kz-space-6\",\n \"space.8\": \"--kz-space-8\",\n \"space.10\": \"--kz-space-10\",\n \"space.12\": \"--kz-space-12\",\n \"space.16\": \"--kz-space-16\",\n \"space.20\": \"--kz-space-20\",\n \"space.24\": \"--kz-space-24\",\n\n \"font.family.base\": \"--kz-font-family-base\",\n \"font.family.mono\": \"--kz-font-family-mono\",\n \"font.size.xs\": \"--kz-font-size-xs\",\n \"font.size.sm\": \"--kz-font-size-sm\",\n \"font.size.md\": \"--kz-font-size-md\",\n \"font.size.lg\": \"--kz-font-size-lg\",\n \"font.size.xl\": \"--kz-font-size-xl\",\n \"font.size.2xl\": \"--kz-font-size-2xl\",\n \"font.size.3xl\": \"--kz-font-size-3xl\",\n \"font.weight.regular\": \"--kz-font-weight-regular\",\n \"font.weight.medium\": \"--kz-font-weight-medium\",\n \"font.weight.semibold\": \"--kz-font-weight-semibold\",\n \"font.weight.bold\": \"--kz-font-weight-bold\",\n \"line.height.sm\": \"--kz-line-height-sm\",\n \"line.height.md\": \"--kz-line-height-md\",\n \"line.height.lg\": \"--kz-line-height-lg\",\n\n \"motion.duration.fast\": \"--kz-motion-duration-fast\",\n \"motion.duration.normal\": \"--kz-motion-duration-normal\",\n \"motion.duration.slow\": \"--kz-motion-duration-slow\",\n \"motion.easing.standard\": \"--kz-motion-easing-standard\",\n \"motion.easing.emphasized\": \"--kz-motion-easing-emphasized\",\n\n // Intent — semantic middle layer\n \"intent.interactive.bg\": \"--kz-intent-interactive-bg\",\n \"intent.interactive.bg.hover\": \"--kz-intent-interactive-bg-hover\",\n \"intent.interactive.text\": \"--kz-intent-interactive-text\",\n \"intent.interactive.text.selected\": \"--kz-intent-interactive-text-selected\",\n \"intent.interactive.shadow\": \"--kz-intent-interactive-shadow\",\n \"intent.interactive.shadow.active\": \"--kz-intent-interactive-shadow-active\",\n \"intent.interactive.border\": \"--kz-intent-interactive-border\",\n \"intent.interactive.radius\": \"--kz-intent-interactive-radius\",\n \"intent.container.bg\": \"--kz-intent-container-bg\",\n \"intent.container.border\": \"--kz-intent-container-border\",\n \"intent.container.shadow\": \"--kz-intent-container-shadow\",\n \"intent.container.radius\": \"--kz-intent-container-radius\",\n\n \"component.sidebar.bg\": \"--kz-component-sidebar-bg\",\n \"component.sidebar.border\": \"--kz-component-sidebar-border\",\n \"component.sidebar.item.bg\": \"--kz-component-sidebar-item-bg\",\n \"component.sidebar.item.bg.hover\": \"--kz-component-sidebar-item-bg-hover\",\n \"component.sidebar.item.bg.active\": \"--kz-component-sidebar-item-bg-active\",\n \"component.sidebar.item.text\": \"--kz-component-sidebar-item-text\",\n \"component.sidebar.item.text.active\":\n \"--kz-component-sidebar-item-text-active\",\n \"component.sidebar.indicator\": \"--kz-component-sidebar-indicator\",\n\n \"component.header.bg\": \"--kz-component-header-bg\",\n \"component.header.border\": \"--kz-component-header-border\",\n \"component.header.text\": \"--kz-component-header-text\",\n\n // Primary variant (reads secondary CSS tokens)\n \"component.button.secondary.bg\": \"--kz-component-button-secondary-bg\",\n \"component.button.secondary.bg.hover\":\n \"--kz-component-button-secondary-bg-hover\",\n \"component.button.secondary.bg.active\":\n \"--kz-component-button-secondary-bg-active\",\n \"component.button.secondary.text\": \"--kz-component-button-secondary-text\",\n \"component.button.secondary.shadow\": \"--kz-component-button-secondary-shadow\",\n \"component.button.secondary.shadow.hover\":\n \"--kz-component-button-secondary-shadow-hover\",\n\n // Ghost variant\n \"component.button.ghost.bg\": \"--kz-component-button-ghost-bg\",\n \"component.button.ghost.bg.hover\": \"--kz-component-button-ghost-bg-hover\",\n \"component.button.ghost.text\": \"--kz-component-button-ghost-text\",\n\n // Container variant\n \"component.button.container.bg\": \"--kz-component-button-container-bg\",\n \"component.button.container.bg.hover\":\n \"--kz-component-button-container-bg-hover\",\n \"component.button.container.text\": \"--kz-component-button-container-text\",\n \"component.button.container.border\": \"--kz-component-button-container-border\",\n \"component.button.container.shadow\": \"--kz-component-button-container-shadow\",\n \"component.button.container.shadow.hover\":\n \"--kz-component-button-container-shadow-hover\",\n\n // Brand status\n \"component.button.brand.bg\": \"--kz-component-button-brand-bg\",\n \"component.button.brand.bg.hover\": \"--kz-component-button-brand-bg-hover\",\n \"component.button.brand.text\": \"--kz-component-button-brand-text\",\n \"component.button.brand.shadow\": \"--kz-component-button-brand-shadow\",\n \"component.button.brand.shadow.hover\":\n \"--kz-component-button-brand-shadow-hover\",\n\n // Ghost + status hover backgrounds\n \"component.button.ghost.brand.bg.hover\":\n \"--kz-component-button-ghost-brand-bg-hover\",\n \"component.button.ghost.success.bg.hover\":\n \"--kz-component-button-ghost-success-bg-hover\",\n \"component.button.ghost.warning.bg.hover\":\n \"--kz-component-button-ghost-warning-bg-hover\",\n \"component.button.ghost.error.bg.hover\":\n \"--kz-component-button-ghost-error-bg-hover\",\n \"component.button.ghost.info.bg.hover\":\n \"--kz-component-button-ghost-info-bg-hover\",\n\n // Container + brand overrides\n \"component.button.container.brand.text\":\n \"--kz-component-button-container-brand-text\",\n \"component.button.container.brand.border\":\n \"--kz-component-button-container-brand-border\",\n \"component.button.container.brand.bg.hover\":\n \"--kz-component-button-container-brand-bg-hover\",\n\n // Success status\n \"component.button.success.bg\": \"--kz-component-button-success-bg\",\n \"component.button.success.bg.hover\": \"--kz-component-button-success-bg-hover\",\n \"component.button.success.text\": \"--kz-component-button-success-text\",\n \"component.button.success.shadow\": \"--kz-component-button-success-shadow\",\n \"component.button.success.shadow.hover\":\n \"--kz-component-button-success-shadow-hover\",\n\n // Warning status\n \"component.button.warning.bg\": \"--kz-component-button-warning-bg\",\n \"component.button.warning.bg.hover\": \"--kz-component-button-warning-bg-hover\",\n \"component.button.warning.text\": \"--kz-component-button-warning-text\",\n \"component.button.warning.shadow\": \"--kz-component-button-warning-shadow\",\n \"component.button.warning.shadow.hover\":\n \"--kz-component-button-warning-shadow-hover\",\n\n // Error status\n \"component.button.error.bg\": \"--kz-component-button-error-bg\",\n \"component.button.error.bg.hover\": \"--kz-component-button-error-bg-hover\",\n \"component.button.error.text\": \"--kz-component-button-error-text\",\n \"component.button.error.shadow\": \"--kz-component-button-error-shadow\",\n \"component.button.error.shadow.hover\":\n \"--kz-component-button-error-shadow-hover\",\n\n // Info status\n \"component.button.info.bg\": \"--kz-component-button-info-bg\",\n \"component.button.info.bg.hover\": \"--kz-component-button-info-bg-hover\",\n \"component.button.info.text\": \"--kz-component-button-info-text\",\n \"component.button.info.shadow\": \"--kz-component-button-info-shadow\",\n \"component.button.info.shadow.hover\":\n \"--kz-component-button-info-shadow-hover\",\n\n // Sizes\n \"component.button.height.sm\": \"--kz-component-button-height-sm\",\n \"component.button.px.sm\": \"--kz-component-button-px-sm\",\n \"component.button.text.sm\": \"--kz-component-button-text-sm\",\n \"component.button.icon.sm\": \"--kz-component-button-icon-sm\",\n \"component.button.height.md\": \"--kz-component-button-height-md\",\n \"component.button.px.md\": \"--kz-component-button-px-md\",\n \"component.button.text.md\": \"--kz-component-button-text-md\",\n \"component.button.icon.md\": \"--kz-component-button-icon-md\",\n \"component.button.height.lg\": \"--kz-component-button-height-lg\",\n \"component.button.px.lg\": \"--kz-component-button-px-lg\",\n \"component.button.text.lg\": \"--kz-component-button-text-lg\",\n \"component.button.icon.lg\": \"--kz-component-button-icon-lg\",\n // Common\n \"component.button.radius\": \"--kz-component-button-radius\",\n \"component.button.disabled.opacity\": \"--kz-component-button-disabled-opacity\",\n \"component.button.loading.opacity\": \"--kz-component-button-loading-opacity\",\n\n \"component.toggle-button.default.bg\":\n \"--kz-component-toggle-button-default-bg\",\n \"component.toggle-button.default.bg.pressed\":\n \"--kz-component-toggle-button-default-bg-pressed\",\n \"component.toggle-button.default.text\":\n \"--kz-component-toggle-button-default-text\",\n \"component.toggle-button.default.text.pressed\":\n \"--kz-component-toggle-button-default-text-pressed\",\n \"component.toggle-button.primary.bg\":\n \"--kz-component-toggle-button-primary-bg\",\n \"component.toggle-button.primary.bg.pressed\":\n \"--kz-component-toggle-button-primary-bg-pressed\",\n \"component.toggle-button.primary.text\":\n \"--kz-component-toggle-button-primary-text\",\n \"component.toggle-button.primary.text.pressed\":\n \"--kz-component-toggle-button-primary-text-pressed\",\n \"component.toggle-button.container.bg\":\n \"--kz-component-toggle-button-container-bg\",\n \"component.toggle-button.container.bg.pressed\":\n \"--kz-component-toggle-button-container-bg-pressed\",\n \"component.toggle-button.container.text\":\n \"--kz-component-toggle-button-container-text\",\n \"component.toggle-button.container.text.pressed\":\n \"--kz-component-toggle-button-container-text-pressed\",\n \"component.toggle-button.pressed.shadow\":\n \"--kz-component-toggle-button-pressed-shadow\",\n \"component.toggle-button.track.off.bg\":\n \"--kz-component-toggle-button-track-off-bg\",\n \"component.toggle-button.track.on.bg\":\n \"--kz-component-toggle-button-track-on-bg\",\n \"component.toggle-button.thumb.bg\": \"--kz-component-toggle-button-thumb-bg\",\n \"component.toggle-button.thumb.shadow\":\n \"--kz-component-toggle-button-thumb-shadow\",\n\n \"component.checkbox.size.sm\": \"--kz-component-checkbox-size-sm\",\n \"component.checkbox.size.md\": \"--kz-component-checkbox-size-md\",\n \"component.checkbox.size.lg\": \"--kz-component-checkbox-size-lg\",\n \"component.checkbox.radius\": \"--kz-component-checkbox-radius\",\n \"component.checkbox.off.bg\": \"--kz-component-checkbox-off-bg\",\n \"component.checkbox.off.border\": \"--kz-component-checkbox-off-border\",\n \"component.checkbox.off.shadow\": \"--kz-component-checkbox-off-shadow\",\n \"component.checkbox.on.bg\": \"--kz-component-checkbox-on-bg\",\n \"component.checkbox.on.border\": \"--kz-component-checkbox-on-border\",\n \"component.checkbox.on.shadow\": \"--kz-component-checkbox-on-shadow\",\n \"component.checkbox.icon.color\": \"--kz-component-checkbox-icon-color\",\n \"component.checkbox.disabled.opacity\":\n \"--kz-component-checkbox-disabled-opacity\",\n\n \"component.radio.size.sm\": \"--kz-component-radio-size-sm\",\n \"component.radio.size.md\": \"--kz-component-radio-size-md\",\n \"component.radio.size.lg\": \"--kz-component-radio-size-lg\",\n \"component.radio.radius\": \"--kz-component-radio-radius\",\n \"component.radio.off.bg\": \"--kz-component-radio-off-bg\",\n \"component.radio.off.border\": \"--kz-component-radio-off-border\",\n \"component.radio.off.shadow\": \"--kz-component-radio-off-shadow\",\n \"component.radio.on.bg\": \"--kz-component-radio-on-bg\",\n \"component.radio.on.border\": \"--kz-component-radio-on-border\",\n \"component.radio.on.shadow\": \"--kz-component-radio-on-shadow\",\n \"component.radio.dot.bg\": \"--kz-component-radio-dot-bg\",\n \"component.radio.dot.shadow\": \"--kz-component-radio-dot-shadow\",\n \"component.radio.disabled.opacity\": \"--kz-component-radio-disabled-opacity\",\n\n \"component.tabs.list.bg\": \"--kz-component-tabs-list-bg\",\n \"component.tabs.list.radius\": \"--kz-component-tabs-list-radius\",\n \"component.tabs.list.shadow\": \"--kz-component-tabs-list-shadow\",\n \"component.tabs.list.pill.bg\": \"--kz-component-tabs-list-pill-bg\",\n \"component.tabs.trigger.text\": \"--kz-component-tabs-trigger-text\",\n \"component.tabs.trigger.selected.text\":\n \"--kz-component-tabs-trigger-selected-text\",\n \"component.tabs.trigger.selected.underline\":\n \"--kz-component-tabs-trigger-selected-underline\",\n \"component.tabs.trigger.selected.bg\":\n \"--kz-component-tabs-trigger-selected-bg\",\n \"component.tabs.trigger.selected.shadow\":\n \"--kz-component-tabs-trigger-selected-shadow\",\n \"component.tabs.trigger.radius\": \"--kz-component-tabs-trigger-radius\",\n \"component.tabs.content.padding\": \"--kz-component-tabs-content-padding\",\n\n \"component.input.bg\": \"--kz-component-input-bg\",\n \"component.input.border\": \"--kz-component-input-border\",\n \"component.input.border.focus\": \"--kz-component-input-border-focus\",\n \"component.input.border.disabled\": \"--kz-component-input-border-disabled\",\n \"component.input.text\": \"--kz-component-input-text\",\n \"component.input.placeholder\": \"--kz-component-input-placeholder\",\n \"component.input.icon\": \"--kz-component-input-icon\",\n \"component.input.shadow\": \"--kz-component-input-shadow\",\n \"component.input.radius\": \"--kz-component-input-radius\",\n \"component.input.container.radius\": \"--kz-component-input-container-radius\",\n \"component.input.container.border\": \"--kz-component-input-container-border\",\n\n \"component.dropdown.trigger.bg\": \"--kz-component-dropdown-trigger-bg\",\n \"component.dropdown.trigger.border\": \"--kz-component-dropdown-trigger-border\",\n \"component.dropdown.trigger.border.open\":\n \"--kz-component-dropdown-trigger-border-open\",\n \"component.dropdown.trigger.text\": \"--kz-component-dropdown-trigger-text\",\n \"component.dropdown.trigger.text.selected\":\n \"--kz-component-dropdown-trigger-text-selected\",\n \"component.dropdown.trigger.shadow\": \"--kz-component-dropdown-trigger-shadow\",\n \"component.dropdown.trigger.shadow.open\":\n \"--kz-component-dropdown-trigger-shadow-open\",\n \"component.dropdown.trigger.radius\": \"--kz-component-dropdown-trigger-radius\",\n \"component.dropdown.trigger.focus.ring\":\n \"--kz-component-dropdown-trigger-focus-ring\",\n \"component.dropdown.content.bg\": \"--kz-component-dropdown-content-bg\",\n \"component.dropdown.content.border\": \"--kz-component-dropdown-content-border\",\n \"component.dropdown.content.shadow\": \"--kz-component-dropdown-content-shadow\",\n \"component.dropdown.content.radius\": \"--kz-component-dropdown-content-radius\",\n \"component.dropdown.item.text\": \"--kz-component-dropdown-item-text\",\n \"component.dropdown.item.text.selected\":\n \"--kz-component-dropdown-item-text-selected\",\n \"component.dropdown.item.bg.hover\": \"--kz-component-dropdown-item-bg-hover\",\n\n \"component.nav-button.icon\": \"--kz-component-nav-button-icon\",\n \"component.nav-button.text\": \"--kz-component-nav-button-text\",\n \"component.nav-button.gap\": \"--kz-component-nav-button-gap\",\n \"component.nav-button.chevron\": \"--kz-component-nav-button-chevron\",\n \"component.nav-button.hover.bg\": \"--kz-component-nav-button-hover-bg\",\n \"component.nav-button.selected.bg\": \"--kz-component-nav-button-selected-bg\",\n \"component.nav-button.selected.shadow\":\n \"--kz-component-nav-button-selected-shadow\",\n \"component.nav-button.selected.icon\":\n \"--kz-component-nav-button-selected-icon\",\n \"component.nav-button.selected.text\":\n \"--kz-component-nav-button-selected-text\",\n \"component.nav-button.radius\": \"--kz-component-nav-button-radius\",\n\n \"component.nav-dropdown.menu.bg\": \"--kz-component-nav-dropdown-menu-bg\",\n \"component.nav-dropdown.menu.shadow\":\n \"--kz-component-nav-dropdown-menu-shadow\",\n \"component.nav-dropdown.menu.radius\":\n \"--kz-component-nav-dropdown-menu-radius\",\n \"component.nav-dropdown.option.text\":\n \"--kz-component-nav-dropdown-option-text\",\n \"component.nav-dropdown.option.hover.bg\":\n \"--kz-component-nav-dropdown-option-hover-bg\",\n\n \"component.sidesheet.bg\": \"--kz-component-sidesheet-bg\",\n \"component.sidesheet.width\": \"--kz-component-sidesheet-width\",\n \"component.sidesheet.border\": \"--kz-component-sidesheet-border\",\n\n \"component.sidemenu.bg\": \"--kz-component-sidemenu-bg\",\n \"component.sidemenu.border\": \"--kz-component-sidemenu-border\",\n \"component.sidemenu.shadow\": \"--kz-component-sidemenu-shadow\",\n \"component.sidemenu.section.label.text\":\n \"--kz-component-sidemenu-section-label-text\",\n \"component.sidemenu.item.text\": \"--kz-component-sidemenu-item-text\",\n \"component.sidemenu.item.bg.hover\": \"--kz-component-sidemenu-item-bg-hover\",\n \"component.sidemenu.item.bg.active\": \"--kz-component-sidemenu-item-bg-active\",\n \"component.sidemenu.item.active.text\":\n \"--kz-component-sidemenu-item-active-text\",\n \"component.sidemenu.item.active.link.bg\":\n \"--kz-component-sidemenu-item-active-link-bg\",\n \"component.sidemenu.item.active.link.shadow\":\n \"--kz-component-sidemenu-item-active-link-shadow\",\n \"component.sidemenu.group.indent.bg\":\n \"--kz-component-sidemenu-group-indent-bg\",\n \"component.sidemenu.gap\": \"--kz-component-sidemenu-gap\",\n \"component.sidemenu.icon.gap\": \"--kz-component-sidemenu-icon-gap\",\n\n \"component.tooltip.bg\": \"--kz-component-tooltip-bg\",\n \"component.tooltip.text\": \"--kz-component-tooltip-text\",\n \"component.tooltip.border\": \"--kz-component-tooltip-border\",\n \"component.tooltip.shadow\": \"--kz-component-tooltip-shadow\",\n \"component.tooltip.radius\": \"--kz-component-tooltip-radius\",\n \"component.tooltip.padding.sm\": \"--kz-component-tooltip-padding-sm\",\n \"component.tooltip.padding.md\": \"--kz-component-tooltip-padding-md\",\n \"component.tooltip.padding.lg\": \"--kz-component-tooltip-padding-lg\",\n \"component.tooltip.maxWidth.sm\": \"--kz-component-tooltip-max-width-sm\",\n \"component.tooltip.maxWidth.md\": \"--kz-component-tooltip-max-width-md\",\n \"component.tooltip.maxWidth.lg\": \"--kz-component-tooltip-max-width-lg\",\n \"component.tooltip.inverse.bg\": \"--kz-component-tooltip-inverse-bg\",\n \"component.tooltip.inverse.text\": \"--kz-component-tooltip-inverse-text\",\n \"component.tooltip.success.bg\": \"--kz-component-tooltip-success-bg\",\n \"component.tooltip.success.text\": \"--kz-component-tooltip-success-text\",\n \"component.tooltip.warning.bg\": \"--kz-component-tooltip-warning-bg\",\n \"component.tooltip.warning.text\": \"--kz-component-tooltip-warning-text\",\n \"component.tooltip.error.bg\": \"--kz-component-tooltip-error-bg\",\n \"component.tooltip.error.text\": \"--kz-component-tooltip-error-text\",\n\n \"component.card.bg\": \"--kz-component-card-bg\",\n \"component.card.border\": \"--kz-component-card-border\",\n \"component.card.shadow\": \"--kz-component-card-shadow\",\n \"component.card.radius\": \"--kz-component-card-radius\",\n\n \"component.canvas.bg\": \"--kz-component-canvas-bg\",\n \"component.canvas.grid.line\": \"--kz-component-canvas-grid-line\",\n \"component.tile.bg\": \"--kz-component-tile-bg\",\n \"component.tile.border\": \"--kz-component-tile-border\",\n \"component.tile.shadow\": \"--kz-component-tile-shadow\",\n \"component.tile.header.bg\": \"--kz-component-tile-header-bg\",\n \"component.tile.header.text\": \"--kz-component-tile-header-text\",\n\n \"component.table.surface\": \"--kz-component-table-surface\",\n \"component.table.header.bg\": \"--kz-component-table-header-bg\",\n \"component.table.header.border\": \"--kz-component-table-header-border\",\n \"component.table.row.border\": \"--kz-component-table-row-border\",\n \"component.table.row.hover.bg\": \"--kz-component-table-row-hover-bg\",\n \"component.table.sticky.row.top\": \"--kz-component-table-sticky-row-top\",\n \"component.table.footer.bg\": \"--kz-component-table-footer-bg\",\n \"component.table.pagination.bg\": \"--kz-component-table-pagination-bg\",\n \"component.table.pagination.active.bg\":\n \"--kz-component-table-pagination-active-bg\",\n \"component.table.pagination.active.shadow\":\n \"--kz-component-table-pagination-active-shadow\",\n \"component.table.pagination.hover.shadow\":\n \"--kz-component-table-pagination-hover-shadow\",\n\n \"component.filter.panel.bg\": \"--kz-component-filter-panel-bg\",\n \"component.filter.panel.border\": \"--kz-component-filter-panel-border\",\n \"component.filter.label.text\": \"--kz-component-filter-label-text\",\n \"component.filter.control.bg\": \"--kz-component-filter-control-bg\",\n \"component.filter.control.border\": \"--kz-component-filter-control-border\",\n\n \"typography.error.color\": \"--kz-typography-error-color\",\n \"typography.success.color\": \"--kz-typography-success-color\",\n \"typography.warning.color\": \"--kz-typography-warning-color\",\n};\n","import type { TokenKey } from \"../contract/token-keys\";\nimport { TokenCategory } from \"../../constants/enum\";\n\nfunction categoryForToken(key: TokenKey): TokenCategory {\n if (key.startsWith(\"color.\")) return TokenCategory.Color;\n if (key.startsWith(\"typography.\") && key.endsWith(\".color\"))\n return TokenCategory.Color;\n if (key.startsWith(\"shadow.\")) return TokenCategory.Shadow;\n if (\n key.startsWith(\"radius.\") ||\n key.startsWith(\"space.\") ||\n key.startsWith(\"effect.blur.\")\n )\n return TokenCategory.Length;\n if (key.startsWith(\"effect.glass.\")) return TokenCategory.Number;\n if (key.startsWith(\"font.family.\")) return TokenCategory.FontFamily;\n if (key.startsWith(\"font.weight.\")) return TokenCategory.FontWeight;\n if (key.startsWith(\"line.height.\")) return TokenCategory.LineHeight;\n if (key.startsWith(\"motion.duration.\")) return TokenCategory.Duration;\n if (key.startsWith(\"motion.easing.\")) return TokenCategory.Easing;\n if (key.startsWith(\"intent.\") || key.startsWith(\"component.\")) {\n if (key.includes(\".shadow\") || key.includes(\".focus.ring\"))\n return TokenCategory.Shadow;\n if (\n key.includes(\".radius\") ||\n key.includes(\".blur\") ||\n key.includes(\".gap\") ||\n key.includes(\".width\")\n )\n return TokenCategory.Length;\n if (key.includes(\"opacity\")) return TokenCategory.Number;\n return TokenCategory.Color;\n }\n return TokenCategory.Length;\n}\n\nconst re = {\n length: /^-?\\d*\\.?\\d+(px|rem|em|%|vh|vw|vmin|vmax|ch|ex)$/i,\n number: /^-?\\d*\\.?\\d+$/i,\n duration: /^-?\\d*\\.?\\d+(ms|s)$/i,\n fontWeight: /^(100|200|300|400|500|600|700|800|900)$/i,\n easing:\n /^cubic-bezier\\(\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*,\\s*-?\\d*\\.?\\d+\\s*\\)$/i,\n};\n\nexport function validateTokenValue(\n key: TokenKey,\n value: string\n): { ok: true } | { ok: false; reason: string } {\n const category = categoryForToken(key);\n const v = value.trim();\n\n // In the browser, CSS.supports is the best “real” validator.\n const canUseCssSupports =\n typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\";\n\n if (category === TokenCategory.Color) {\n if (canUseCssSupports && CSS.supports(\"color\", v)) return { ok: true };\n // fallback: allow hex/rgb(a)/hsl(a)/oklch/var(...)\n const basic =\n /^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(v) ||\n /^rgb(a)?\\(/i.test(v) ||\n /^hsl(a)?\\(/i.test(v) ||\n /^oklch\\(/i.test(v) ||\n /^var\\(--/i.test(v);\n return basic\n ? { ok: true }\n : { ok: false, reason: `Invalid color: \"${value}\"` };\n }\n\n if (category === TokenCategory.Shadow) {\n if (v === \"none\") return { ok: true };\n if (canUseCssSupports && CSS.supports(\"box-shadow\", v)) return { ok: true };\n // fallback: accept most shadows & var(...)\n return /^var\\(--/i.test(v) || v.includes(\"px\")\n ? { ok: true }\n : { ok: false, reason: `Invalid shadow: \"${value}\"` };\n }\n\n if (category === TokenCategory.Length) {\n if (v === \"0\") return { ok: true };\n if (re.length.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid length: \"${value}\"` };\n }\n\n if (category === TokenCategory.Number) {\n if (re.number.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid number: \"${value}\"` };\n }\n\n if (category === TokenCategory.FontFamily) {\n // allow raw font stacks + var()\n if (v.length > 0) return { ok: true };\n return { ok: false, reason: \"Font family cannot be empty\" };\n }\n\n if (category === TokenCategory.FontWeight) {\n if (re.fontWeight.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid font weight: \"${value}\"` };\n }\n\n if (category === TokenCategory.Duration) {\n if (re.duration.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid duration: \"${value}\"` };\n }\n\n if (category === TokenCategory.Easing) {\n if (re.easing.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid easing: \"${value}\"` };\n }\n\n if (category === TokenCategory.LineHeight) {\n if (re.number.test(v) || /^var\\(--/i.test(v)) return { ok: true };\n return { ok: false, reason: `Invalid line height: \"${value}\"` };\n }\n\n return { ok: false, reason: `Unknown token category for ${key}` };\n}\n","import type { TokenKey } from \"../contract/token-keys\";\nimport { tokenToCssVar } from \"../contract/css-var-maps\";\nimport { validateTokenValue } from \"../validate/validateTokenValue\";\nimport { OverrideMode } from \"../../constants/enum\";\n\nexport type TokenOverrides = Partial<Record<TokenKey, string>>;\n\n/** Remove all previously applied token overrides from an element's inline style */\nexport function clearTokenOverrides(el: HTMLElement) {\n const vars = Object.values(tokenToCssVar);\n for (const cssVar of vars) {\n el.style.removeProperty(cssVar);\n }\n}\n\nexport function applyTokenOverrides(\n el: HTMLElement,\n overrides: TokenOverrides | undefined,\n mode: OverrideMode = OverrideMode.Safe\n) {\n if (!overrides) return;\n\n for (const [key, value] of Object.entries(overrides) as Array<\n [TokenKey, string]\n >) {\n const cssVar = tokenToCssVar[key];\n const result = validateTokenValue(key, value);\n\n if (!result.ok) {\n const msg = `[Kezel] Invalid token override ${key}: ${result.reason}`;\n if (mode === OverrideMode.Strict) throw new Error(msg);\n continue;\n }\n\n el.style.setProperty(cssVar, value.trim());\n }\n}\n","import * as React from \"react\";\nimport { User } from \"lucide-react\";\nimport { AvatarSize, AvatarStatus } from \"../../constants/enum\";\nimport { avatarVariants, type AvatarVariants } from \"./avatar.variants\";\nimport { cn } from \"../../utils/cn\";\n\nconst ICON_SIZE_MAP: Record<AvatarSize, number> = {\n [AvatarSize.Sm]: 16,\n [AvatarSize.Md]: 20,\n [AvatarSize.Lg]: 24,\n [AvatarSize.Xl]: 32,\n};\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n initials?: string;\n fallbackIcon?: React.ReactNode;\n size?: AvatarSize;\n status?: AvatarStatus;\n className?: string;\n}\n\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n src,\n alt = \"\",\n initials,\n fallbackIcon,\n size = AvatarSize.Md,\n status,\n className,\n ...props\n },\n ref\n ) => {\n const [imgError, setImgError] = React.useState(false);\n\n React.useEffect(() => {\n setImgError(false);\n }, [src]);\n\n const showImage = src && !imgError;\n const showIndicator = status === AvatarStatus.Online;\n\n return (\n <div\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n role=\"img\"\n aria-label={alt || initials || \"Avatar\"}\n {...props}\n >\n {showImage ? (\n <span className=\"kz-avatar-image\">\n <img\n src={src}\n alt={alt}\n className=\"h-full w-full object-cover\"\n onError={() => setImgError(true)}\n draggable={false}\n />\n </span>\n ) : initials ? (\n <span className=\"kz-avatar-initials\" aria-hidden=\"true\">\n {initials}\n </span>\n ) : (\n <span className=\"kz-avatar-fallback-icon\" aria-hidden=\"true\">\n {fallbackIcon ?? <User size={ICON_SIZE_MAP[size]} />}\n </span>\n )}\n\n {showIndicator && (\n <span\n className={cn(\"kz-avatar-status\", `kz-avatar-status--${size}`)}\n aria-label=\"Online\"\n role=\"status\"\n />\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = \"Avatar\";\n\nexport { Avatar, avatarVariants };\nexport type { AvatarVariants };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { AvatarSize } from \"../../constants/enum\";\n\nconst base = [\n \"kz-avatar\",\n \"relative inline-flex items-center justify-center\",\n \"rounded-full\",\n \"shrink-0\",\n \"[box-shadow:none]\",\n].join(\" \");\n\nexport const avatarVariants = cva(base, {\n variants: {\n size: {\n [AvatarSize.Sm]: \"size-8 text-xs\",\n [AvatarSize.Md]: \"size-10 text-sm\",\n [AvatarSize.Lg]: \"size-12 text-base\",\n [AvatarSize.Xl]: \"size-16 text-lg\",\n },\n },\n defaultVariants: {\n size: AvatarSize.Md,\n },\n});\n\nexport type AvatarVariants = VariantProps<typeof avatarVariants>;\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Calendar } from \"./Calendar\";\nimport { TimeSelector } from \"./TimeSelector\";\n\nexport type DateTimePickerMode = \"date\" | \"time\" | \"datetime\";\nexport type DateTimePickerFormat = \"12h\" | \"24h\";\n\nexport interface DateTimePickerProps {\n /** Controlled value. Omit for uncontrolled mode. */\n value?: Date | null;\n /** Fires when the date changes (controlled & uncontrolled). */\n onChange?: (value: Date | undefined) => void;\n /** @deprecated Use `onChange`. Kept for backward compatibility. */\n onValueChange?: (value: Date | undefined) => void;\n /** Initial value for uncontrolled mode. */\n defaultValue?: Date;\n\n mode?: DateTimePickerMode;\n format?: DateTimePickerFormat;\n\n minDate?: Date;\n maxDate?: Date;\n\n /** Show seconds column in the time selector. */\n showSeconds?: boolean;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n showTodayButton?: boolean;\n showClearButton?: boolean;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Formatting helpers ── */\n\nfunction formatDate(date: Date): string {\n const m = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const d = date.getDate().toString().padStart(2, \"0\");\n const y = date.getFullYear();\n return `${m}/${d}/${y}`;\n}\n\nfunction formatTime12(date: Date, seconds: boolean): string {\n let h = date.getHours() % 12;\n if (h === 0) h = 12;\n const m = date.getMinutes().toString().padStart(2, \"0\");\n const period = date.getHours() >= 12 ? \"PM\" : \"AM\";\n const base = `${h.toString().padStart(2, \"0\")}:${m}`;\n if (seconds) {\n const s = date.getSeconds().toString().padStart(2, \"0\");\n return `${base}:${s} ${period}`;\n }\n return `${base} ${period}`;\n}\n\nfunction formatTime24(date: Date, seconds: boolean): string {\n const h = date.getHours().toString().padStart(2, \"0\");\n const m = date.getMinutes().toString().padStart(2, \"0\");\n if (seconds) {\n const s = date.getSeconds().toString().padStart(2, \"0\");\n return `${h}:${m}:${s}`;\n }\n return `${h}:${m}`;\n}\n\nfunction formatDateTime(\n date: Date,\n mode: DateTimePickerMode,\n fmt: DateTimePickerFormat,\n seconds: boolean\n): string {\n if (mode === \"date\") return formatDate(date);\n if (mode === \"time\")\n return fmt === \"12h\"\n ? formatTime12(date, seconds)\n : formatTime24(date, seconds);\n const datePart = formatDate(date);\n const timePart =\n fmt === \"12h\" ? formatTime12(date, seconds) : formatTime24(date, seconds);\n return `${datePart} ${timePart}`;\n}\n\n/* ── Parsing helpers ── */\n\nfunction parseInputValue(\n raw: string,\n mode: DateTimePickerMode,\n fmt: DateTimePickerFormat,\n seconds: boolean\n): Date | null {\n const trimmed = raw.trim();\n if (trimmed === \"\") return null;\n\n if (mode === \"date\") {\n const match = trimmed.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (match == null) return null;\n const [, mm, dd, yyyy] = match;\n const d = new Date(parseInt(yyyy), parseInt(mm) - 1, parseInt(dd));\n if (isNaN(d.getTime())) return null;\n return d;\n }\n\n if (mode === \"time\") {\n if (fmt === \"12h\") {\n const pattern = seconds\n ? /^(\\d{1,2}):(\\d{2}):(\\d{2})\\s*(AM|PM)$/i\n : /^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i;\n const match = trimmed.match(pattern);\n if (match == null) return null;\n let h = parseInt(match[1]);\n const m = parseInt(match[2]);\n const s = seconds ? parseInt(match[3]) : 0;\n const p = (seconds ? match[4] : match[3]).toUpperCase();\n if (h < 1 || h > 12 || m < 0 || m > 59) return null;\n if (seconds && (s < 0 || s > 59)) return null;\n if (p === \"AM\" && h === 12) h = 0;\n else if (p === \"PM\" && h !== 12) h += 12;\n const d = new Date();\n d.setHours(h, m, s, 0);\n return d;\n } else {\n const pattern = seconds\n ? /^(\\d{1,2}):(\\d{2}):(\\d{2})$/\n : /^(\\d{1,2}):(\\d{2})$/;\n const match = trimmed.match(pattern);\n if (match == null) return null;\n const h = parseInt(match[1]);\n const m = parseInt(match[2]);\n const s = seconds ? parseInt(match[3]) : 0;\n if (h < 0 || h > 23 || m < 0 || m > 59) return null;\n if (seconds && (s < 0 || s > 59)) return null;\n const d = new Date();\n d.setHours(h, m, s, 0);\n return d;\n }\n }\n\n // datetime\n const pattern =\n fmt === \"12h\"\n ? seconds\n ? /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2}):(\\d{2})\\s*(AM|PM)$/i\n : /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i\n : seconds\n ? /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2}):(\\d{2})$/\n : /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})\\s+(\\d{1,2}):(\\d{2})$/;\n\n const parts = trimmed.match(pattern);\n if (parts == null) return null;\n\n const month = parseInt(parts[1]) - 1;\n const day = parseInt(parts[2]);\n const year = parseInt(parts[3]);\n let hours = parseInt(parts[4]);\n const mins = parseInt(parts[5]);\n const secs = seconds ? parseInt(parts[6]) : 0;\n\n if (fmt === \"12h\") {\n const period = (seconds ? parts[7] : parts[6]).toUpperCase();\n if (hours < 1 || hours > 12) return null;\n if (period === \"AM\" && hours === 12) hours = 0;\n else if (period === \"PM\" && hours !== 12) hours += 12;\n } else {\n if (hours < 0 || hours > 23) return null;\n }\n\n if (mins < 0 || mins > 59) return null;\n if (seconds && (secs < 0 || secs > 59)) return null;\n\n const d = new Date(year, month, day, hours, mins, secs, 0);\n if (isNaN(d.getTime())) return null;\n return d;\n}\n\nfunction getDefaultPlaceholder(\n mode: DateTimePickerMode,\n fmt: DateTimePickerFormat,\n seconds: boolean\n): string {\n const sec = seconds ? \":SS\" : \"\";\n if (mode === \"date\") return \"MM/DD/YYYY\";\n if (mode === \"time\") return fmt === \"12h\" ? `HH:MM${sec} AM` : `HH:MM${sec}`;\n return fmt === \"12h\" ? `MM/DD/YYYY HH:MM${sec} AM` : `MM/DD/YYYY HH:MM${sec}`;\n}\n\n/* ── Component ── */\n\nconst DateTimePicker = React.forwardRef<HTMLInputElement, DateTimePickerProps>(\n (\n {\n value: valueProp,\n onChange,\n onValueChange,\n defaultValue,\n mode = \"datetime\",\n format = \"12h\",\n minDate,\n maxDate,\n showSeconds = false,\n placeholder,\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n showTodayButton = true,\n showClearButton = true,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(\n defaultValue\n );\n\n const value = isControlled\n ? valueProp === null\n ? undefined\n : valueProp\n : internalValue;\n\n const fireChange = React.useCallback(\n (next: Date | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n onValueChange?.(next);\n },\n [isControlled, onChange, onValueChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(\n value != null ? formatDateTime(value, mode, format, showSeconds) : \"\"\n );\n\n React.useEffect(() => {\n setInputValue(\n value != null ? formatDateTime(value, mode, format, showSeconds) : \"\"\n );\n }, [value, mode, format, showSeconds]);\n\n const currentHour = value?.getHours() ?? 0;\n const currentMinute = value?.getMinutes() ?? 0;\n const currentSecond = value?.getSeconds() ?? 0;\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputBlur = () => {\n if (inputValue.trim() === \"\") {\n fireChange(undefined);\n return;\n }\n const parsed = parseInputValue(inputValue, mode, format, showSeconds);\n if (parsed != null) {\n fireChange(parsed);\n } else {\n setInputValue(\n value != null ? formatDateTime(value, mode, format, showSeconds) : \"\"\n );\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleInputBlur();\n setOpen(false);\n }\n if (e.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n const handleDateSelect = (date: Date) => {\n const next = new Date(date);\n if (value != null) {\n next.setHours(\n value.getHours(),\n value.getMinutes(),\n value.getSeconds(),\n 0\n );\n } else {\n next.setHours(0, 0, 0, 0);\n }\n fireChange(next);\n if (mode === \"date\") {\n setOpen(false);\n }\n };\n\n const handleHourChange = (h: number) => {\n const base = value ?? new Date();\n const next = new Date(base);\n next.setHours(h);\n next.setMilliseconds(0);\n fireChange(next);\n };\n\n const handleMinuteChange = (m: number) => {\n const base = value ?? new Date();\n const next = new Date(base);\n next.setMinutes(m);\n next.setMilliseconds(0);\n fireChange(next);\n };\n\n const handleSecondChange = (s: number) => {\n const base = value ?? new Date();\n const next = new Date(base);\n next.setSeconds(s);\n next.setMilliseconds(0);\n fireChange(next);\n };\n\n const handleToday = () => {\n const now = new Date();\n if (mode === \"date\") {\n now.setHours(0, 0, 0, 0);\n }\n fireChange(now);\n if (mode === \"date\") {\n setOpen(false);\n }\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setOpen(false);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-date-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-date-picker-wrapper\",\n `kz-date-picker-wrapper--${variant}`,\n `kz-date-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-date-picker-wrapper--${state}`,\n open && \"kz-date-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-date-picker-input\",\n `kz-date-picker-input--${size}`,\n inputClassName\n );\n\n const showCalendar = mode === \"date\" || mode === \"datetime\";\n const showTime = mode === \"time\" || mode === \"datetime\";\n\n const iconName = mode === \"time\" ? IconName.Clock3 : IconName.Calendar;\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-date-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-date-picker-icon\">\n <Icon name={iconName} size={iconSize} />\n </span>\n <input\n ref={ref}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={\n placeholder ??\n getDefaultPlaceholder(mode, format, showSeconds)\n }\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"date-picker-message\"\n : helperText != null\n ? \"date-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-date-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle calendar\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-date-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"kz-date-picker-body\">\n {showCalendar && (\n <Calendar\n selected={value}\n onSelect={handleDateSelect}\n minDate={minDate}\n maxDate={maxDate}\n />\n )}\n\n {showTime && (\n <TimeSelector\n hour={currentHour}\n minute={currentMinute}\n second={showSeconds ? currentSecond : undefined}\n onHourChange={handleHourChange}\n onMinuteChange={handleMinuteChange}\n onSecondChange={\n showSeconds ? handleSecondChange : undefined\n }\n format={format}\n />\n )}\n </div>\n\n {(showTodayButton || showClearButton) && (\n <div className=\"kz-date-picker-footer\">\n {showTodayButton && (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={handleToday}\n >\n {mode === \"time\" ? \"Now\" : \"Today\"}\n </Button>\n )}\n {showClearButton && (\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n )}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"date-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"date-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nDateTimePicker.displayName = \"DateTimePicker\";\n\nexport { DateTimePicker };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\nexport interface CalendarProps {\n /** Single-date selection (used by DateTimePicker). */\n selected?: Date;\n onSelect: (date: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n\n /** Range mode — start of range. */\n selectedStart?: Date;\n /** Range mode — end of range. */\n selectedEnd?: Date;\n /** Range mode — date currently hovered (for preview highlight). */\n hoverDate?: Date;\n /** Range mode — fires on cell mouse enter/leave. */\n onHover?: (date: Date | null) => void;\n\n /** Hide the prev-month nav button (used by DateRangePicker right panel). */\n hidePrev?: boolean;\n /** Hide the next-month nav button (used by DateRangePicker left panel). */\n hideNext?: boolean;\n /** External control of the displayed month. */\n viewMonth?: Date;\n /** Fires when nav buttons change the displayed month. */\n onViewMonthChange?: (date: Date) => void;\n}\n\nconst DAYS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nfunction getDaysInMonth(year: number, month: number) {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(year: number, month: number) {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: Date, b: Date) {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction isToday(date: Date) {\n return isSameDay(date, new Date());\n}\n\nfunction isDateDisabled(date: Date, minDate?: Date, maxDate?: Date) {\n if (minDate != null) {\n const min = new Date(\n minDate.getFullYear(),\n minDate.getMonth(),\n minDate.getDate()\n );\n if (date < min) return true;\n }\n if (maxDate != null) {\n const max = new Date(\n maxDate.getFullYear(),\n maxDate.getMonth(),\n maxDate.getDate()\n );\n if (date > max) return true;\n }\n return false;\n}\n\nfunction addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n}\n\nfunction isWithinRange(date: Date, start?: Date, end?: Date): boolean {\n if (start == null || end == null) return false;\n const d = date.getTime();\n const s = new Date(\n start.getFullYear(),\n start.getMonth(),\n start.getDate()\n ).getTime();\n const e = new Date(\n end.getFullYear(),\n end.getMonth(),\n end.getDate()\n ).getTime();\n const lo = Math.min(s, e);\n const hi = Math.max(s, e);\n return d > lo && d < hi;\n}\n\nconst Calendar: React.FC<CalendarProps> = ({\n selected,\n onSelect,\n minDate,\n maxDate,\n className,\n selectedStart,\n selectedEnd,\n hoverDate,\n onHover,\n hidePrev = false,\n hideNext = false,\n viewMonth: viewMonthProp,\n onViewMonthChange,\n}) => {\n const isRangeMode = selectedStart !== undefined || selectedEnd !== undefined;\n\n const [internalViewDate, setInternalViewDate] = React.useState(\n () => viewMonthProp ?? selected ?? selectedStart ?? new Date()\n );\n const viewDate = viewMonthProp ?? internalViewDate;\n\n const setViewDate = React.useCallback(\n (d: Date) => {\n if (onViewMonthChange != null) {\n onViewMonthChange(d);\n } else {\n setInternalViewDate(d);\n }\n },\n [onViewMonthChange]\n );\n\n const [focusedDate, setFocusedDate] = React.useState<Date | null>(null);\n const gridRef = React.useRef<HTMLDivElement>(null);\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n const daysInPrevMonth = getDaysInMonth(year, month - 1);\n\n const prevMonth = () => setViewDate(new Date(year, month - 1, 1));\n const nextMonth = () => setViewDate(new Date(year, month + 1, 1));\n\n const cells: { date: Date; inMonth: boolean }[] = [];\n\n for (let i = firstDay - 1; i >= 0; i--) {\n cells.push({\n date: new Date(year, month - 1, daysInPrevMonth - i),\n inMonth: false,\n });\n }\n\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push({ date: new Date(year, month, d), inMonth: true });\n }\n\n const remaining = 42 - cells.length;\n for (let d = 1; d <= remaining; d++) {\n cells.push({ date: new Date(year, month + 1, d), inMonth: false });\n }\n\n // Focus the correct button when focusedDate changes\n React.useEffect(() => {\n if (focusedDate == null || gridRef.current == null) return;\n const dateStr = focusedDate.toISOString().split(\"T\")[0];\n const btn = gridRef.current.querySelector(\n `[data-date=\"${dateStr}\"]`\n ) as HTMLButtonElement | null;\n btn?.focus();\n }, [focusedDate]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const current =\n focusedDate ?? selected ?? selectedStart ?? new Date(year, month, 1);\n let next: Date | null = null;\n\n switch (e.key) {\n case \"ArrowLeft\":\n next = addDays(current, -1);\n break;\n case \"ArrowRight\":\n next = addDays(current, 1);\n break;\n case \"ArrowUp\":\n next = addDays(current, -7);\n break;\n case \"ArrowDown\":\n next = addDays(current, 7);\n break;\n case \"Enter\":\n case \" \":\n if (!isDateDisabled(current, minDate, maxDate)) {\n onSelect(current);\n }\n e.preventDefault();\n return;\n default:\n return;\n }\n\n e.preventDefault();\n\n if (next != null) {\n if (!isDateDisabled(next, minDate, maxDate)) {\n setFocusedDate(next);\n if (next.getMonth() !== month || next.getFullYear() !== year) {\n setViewDate(new Date(next.getFullYear(), next.getMonth(), 1));\n }\n }\n }\n };\n\n // Determine the effective range end for highlighting (hover preview or actual end)\n const rangeEnd = hoverDate ?? selectedEnd;\n\n return (\n <div\n className={cn(\"kz-calendar\", className)}\n role=\"grid\"\n aria-label=\"Calendar\"\n >\n <div className=\"kz-calendar-header\">\n {hidePrev ? (\n <span className=\"kz-calendar-nav\" style={{ visibility: \"hidden\" }} />\n ) : (\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"kz-calendar-nav\"\n aria-label=\"Previous month\"\n >\n <Icon name={IconName.ChevronLeft} size={16} />\n </button>\n )}\n <span className=\"kz-calendar-title\" aria-live=\"polite\">\n {MONTHS[month]} {year}\n </span>\n {hideNext ? (\n <span className=\"kz-calendar-nav\" style={{ visibility: \"hidden\" }} />\n ) : (\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"kz-calendar-nav\"\n aria-label=\"Next month\"\n >\n <Icon name={IconName.ChevronRight} size={16} />\n </button>\n )}\n </div>\n\n <div\n className=\"kz-calendar-grid\"\n ref={gridRef}\n onKeyDown={handleKeyDown}\n role=\"grid\"\n >\n {DAYS.map((day) => (\n <div key={day} className=\"kz-calendar-day-name\" role=\"columnheader\">\n {day}\n </div>\n ))}\n {cells.map((cell, i) => {\n const disabled =\n !cell.inMonth || isDateDisabled(cell.date, minDate, maxDate);\n const today = isToday(cell.date) && cell.inMonth;\n const isFocused =\n focusedDate != null && isSameDay(cell.date, focusedDate);\n const dateStr = cell.date.toISOString().split(\"T\")[0];\n\n // Single-date selection\n const isSelected =\n !isRangeMode &&\n selected != null &&\n cell.inMonth &&\n isSameDay(cell.date, selected);\n\n // Range selection\n const isStart =\n isRangeMode &&\n selectedStart != null &&\n cell.inMonth &&\n isSameDay(cell.date, selectedStart);\n const isEnd =\n isRangeMode &&\n rangeEnd != null &&\n cell.inMonth &&\n isSameDay(cell.date, rangeEnd);\n const inRange =\n isRangeMode &&\n cell.inMonth &&\n isWithinRange(cell.date, selectedStart, rangeEnd);\n\n return (\n <button\n key={i}\n type=\"button\"\n disabled={disabled}\n data-date={dateStr}\n onClick={() => {\n onSelect(cell.date);\n setFocusedDate(cell.date);\n }}\n onMouseEnter={() => onHover?.(cell.date)}\n onMouseLeave={() => onHover?.(null)}\n className={cn(\n \"kz-calendar-cell\",\n !cell.inMonth && \"kz-calendar-cell--outside\",\n isSelected && \"kz-calendar-cell--selected\",\n isStart && \"kz-calendar-cell--range-start\",\n isEnd && \"kz-calendar-cell--range-end\",\n inRange && \"kz-calendar-cell--in-range\",\n today && \"kz-calendar-cell--today\",\n disabled && \"kz-calendar-cell--disabled\"\n )}\n tabIndex={\n isFocused\n ? 0\n : (isSelected || isStart) && focusedDate == null\n ? 0\n : -1\n }\n role=\"gridcell\"\n aria-selected={isSelected || isStart || isEnd}\n aria-label={cell.date.toLocaleDateString(undefined, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n })}\n >\n {cell.date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TimeSelectorProps {\n hour: number;\n minute: number;\n /** Pass a number (0-59) to show the seconds column. Omit to hide it. */\n second?: number;\n onHourChange: (hour: number) => void;\n onMinuteChange: (minute: number) => void;\n onSecondChange?: (second: number) => void;\n format?: \"12h\" | \"24h\";\n className?: string;\n}\n\nfunction to12Hour(h24: number): { hour12: number; period: \"AM\" | \"PM\" } {\n const period: \"AM\" | \"PM\" = h24 >= 12 ? \"PM\" : \"AM\";\n let hour12 = h24 % 12;\n if (hour12 === 0) hour12 = 12;\n return { hour12, period };\n}\n\nfunction to24Hour(hour12: number, period: \"AM\" | \"PM\"): number {\n if (period === \"AM\") return hour12 === 12 ? 0 : hour12;\n return hour12 === 12 ? 12 : hour12 + 12;\n}\n\nconst SIXTY = Array.from({ length: 60 }, (_, i) => i);\n\nconst TimeSelector: React.FC<TimeSelectorProps> = ({\n hour,\n minute,\n second,\n onHourChange,\n onMinuteChange,\n onSecondChange,\n format = \"12h\",\n className,\n}) => {\n const is12h = format === \"12h\";\n const showSeconds = second !== undefined && onSecondChange !== undefined;\n const { hour12, period } = to12Hour(hour);\n const [currentPeriod, setCurrentPeriod] = React.useState<\"AM\" | \"PM\">(period);\n\n React.useEffect(() => {\n setCurrentPeriod(period);\n }, [period]);\n\n const hourRef = React.useRef<HTMLDivElement>(null);\n const minuteRef = React.useRef<HTMLDivElement>(null);\n const secondRef = React.useRef<HTMLDivElement>(null);\n\n const hours = is12h\n ? Array.from({ length: 12 }, (_, i) => i + 1)\n : Array.from({ length: 24 }, (_, i) => i);\n\n const selectedHourDisplay = is12h ? hour12 : hour;\n\n const handleHourSelect = (h: number) => {\n if (is12h) {\n onHourChange(to24Hour(h, currentPeriod));\n } else {\n onHourChange(h);\n }\n };\n\n const handlePeriodSelect = (p: \"AM\" | \"PM\") => {\n setCurrentPeriod(p);\n if (is12h) {\n onHourChange(to24Hour(hour12, p));\n }\n };\n\n const scrollToSelected = React.useCallback(\n (ref: React.RefObject<HTMLDivElement | null>, value: number) => {\n if (ref.current == null) return;\n const selected = ref.current.querySelector(\n `[data-value=\"${value}\"]`\n ) as HTMLElement | null;\n if (selected != null) {\n selected.scrollIntoView({ block: \"center\", behavior: \"instant\" });\n }\n },\n []\n );\n\n React.useEffect(() => {\n scrollToSelected(hourRef, selectedHourDisplay);\n }, [scrollToSelected, selectedHourDisplay]);\n\n React.useEffect(() => {\n scrollToSelected(minuteRef, minute);\n }, [scrollToSelected, minute]);\n\n React.useEffect(() => {\n if (showSeconds && second !== undefined) {\n scrollToSelected(secondRef, second);\n }\n }, [scrollToSelected, second, showSeconds]);\n\n return (\n <div className={cn(\"kz-time-selector\", className)}>\n <div className=\"kz-time-selector-columns\">\n {/* Hour column */}\n <div className=\"kz-time-selector-column\">\n <div className=\"kz-time-selector-label\">Hr</div>\n <div className=\"kz-time-selector-scroll\" ref={hourRef}>\n {hours.map((h) => (\n <button\n key={h}\n type=\"button\"\n data-value={h}\n onClick={() => handleHourSelect(h)}\n className={cn(\n \"kz-time-selector-option\",\n h === selectedHourDisplay &&\n \"kz-time-selector-option--selected\"\n )}\n >\n {h.toString().padStart(2, \"0\")}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"kz-time-selector-separator\">:</div>\n\n {/* Minute column */}\n <div className=\"kz-time-selector-column\">\n <div className=\"kz-time-selector-label\">Min</div>\n <div className=\"kz-time-selector-scroll\" ref={minuteRef}>\n {SIXTY.map((m) => (\n <button\n key={m}\n type=\"button\"\n data-value={m}\n onClick={() => onMinuteChange(m)}\n className={cn(\n \"kz-time-selector-option\",\n m === minute && \"kz-time-selector-option--selected\"\n )}\n >\n {m.toString().padStart(2, \"0\")}\n </button>\n ))}\n </div>\n </div>\n\n {/* Seconds column (optional) */}\n {showSeconds && (\n <>\n <div className=\"kz-time-selector-separator\">:</div>\n\n <div className=\"kz-time-selector-column\">\n <div className=\"kz-time-selector-label\">Sec</div>\n <div className=\"kz-time-selector-scroll\" ref={secondRef}>\n {SIXTY.map((s) => (\n <button\n key={s}\n type=\"button\"\n data-value={s}\n onClick={() => onSecondChange(s)}\n className={cn(\n \"kz-time-selector-option\",\n s === second && \"kz-time-selector-option--selected\"\n )}\n >\n {s.toString().padStart(2, \"0\")}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n\n {/* AM/PM column */}\n {is12h && (\n <div className=\"kz-time-selector-column kz-time-selector-column--period\">\n <div className=\"kz-time-selector-label\"> </div>\n <div className=\"kz-time-selector-scroll kz-time-selector-scroll--period\">\n {([\"AM\", \"PM\"] as const).map((p) => (\n <button\n key={p}\n type=\"button\"\n onClick={() => handlePeriodSelect(p)}\n className={cn(\n \"kz-time-selector-option\",\n p === currentPeriod && \"kz-time-selector-option--selected\"\n )}\n >\n {p}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nTimeSelector.displayName = \"TimeSelector\";\n\nexport { TimeSelector };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Calendar } from \"../date-time-picker/Calendar\";\n\nexport interface DateRange {\n start: Date | undefined;\n end: Date | undefined;\n}\n\nexport interface DateRangePickerProps {\n /** Controlled value. Omit for uncontrolled mode. */\n value?: DateRange | null;\n /** Fires when the range changes. */\n onChange?: (value: DateRange | undefined) => void;\n /** Initial value for uncontrolled mode. */\n defaultValue?: DateRange;\n\n minDate?: Date;\n maxDate?: Date;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n showTodayButton?: boolean;\n showClearButton?: boolean;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Formatting / parsing helpers ── */\n\nfunction formatDate(date: Date): string {\n const m = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const d = date.getDate().toString().padStart(2, \"0\");\n const y = date.getFullYear();\n return `${m}/${d}/${y}`;\n}\n\nfunction formatRange(range: DateRange): string {\n if (range.start == null && range.end == null) return \"\";\n if (range.start != null && range.end == null)\n return `${formatDate(range.start)} – ...`;\n if (range.start != null && range.end != null)\n return `${formatDate(range.start)} – ${formatDate(range.end)}`;\n return \"\";\n}\n\nfunction parseDate(raw: string): Date | null {\n const match = raw.trim().match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (match == null) return null;\n const d = new Date(\n parseInt(match[3]),\n parseInt(match[1]) - 1,\n parseInt(match[2])\n );\n if (isNaN(d.getTime())) return null;\n return d;\n}\n\nfunction parseRangeInput(raw: string): DateRange | null {\n const trimmed = raw.trim();\n if (trimmed === \"\") return null;\n\n // Try \"MM/DD/YYYY – MM/DD/YYYY\" or \"MM/DD/YYYY - MM/DD/YYYY\"\n const parts = trimmed.split(/\\s*[–-]\\s*/);\n if (parts.length !== 2) return null;\n\n const start = parseDate(parts[0]);\n const end = parseDate(parts[1]);\n if (start == null || end == null) return null;\n if (start > end) return null;\n\n return { start, end };\n}\n\n/* ── Component ── */\n\nconst DateRangePicker = React.forwardRef<\n HTMLInputElement,\n DateRangePickerProps\n>(\n (\n {\n value: valueProp,\n onChange,\n defaultValue,\n minDate,\n maxDate,\n placeholder = \"Start date – End date\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n showTodayButton = true,\n showClearButton = true,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<\n DateRange | undefined\n >(defaultValue);\n\n const value: DateRange | undefined = isControlled\n ? valueProp === null\n ? undefined\n : valueProp\n : internalValue;\n\n const fireChange = React.useCallback(\n (next: DateRange | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [selectingEnd, setSelectingEnd] = React.useState(false);\n const [hoverDate, setHoverDate] = React.useState<Date | null>(null);\n\n // Pending start (before end is picked)\n const [pendingStart, setPendingStart] = React.useState<Date | undefined>(\n undefined\n );\n\n const [inputValue, setInputValue] = React.useState(\n value != null ? formatRange(value) : \"\"\n );\n\n React.useEffect(() => {\n if (!selectingEnd) {\n setInputValue(value != null ? formatRange(value) : \"\");\n }\n }, [value, selectingEnd]);\n\n // Left calendar shows month of start date or current month\n const [leftMonth, setLeftMonth] = React.useState(\n () => value?.start ?? defaultValue?.start ?? new Date()\n );\n\n // Right calendar is always left + 1 month\n const rightMonth = new Date(\n leftMonth.getFullYear(),\n leftMonth.getMonth() + 1,\n 1\n );\n\n const handlePrevMonth = React.useCallback(() => {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() - 1, 1)\n );\n }, []);\n\n const handleNextMonth = React.useCallback(() => {\n setLeftMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + 1, 1)\n );\n }, []);\n\n const handleDateSelect = (date: Date) => {\n if (!selectingEnd) {\n // First click: set start\n setPendingStart(date);\n setSelectingEnd(true);\n setHoverDate(null);\n // Show partial range in input\n setInputValue(`${formatDate(date)} – ...`);\n } else {\n // Second click: set end\n const start = pendingStart!;\n if (date < start) {\n // Clicked before start — treat as new start\n setPendingStart(date);\n setInputValue(`${formatDate(date)} – ...`);\n return;\n }\n const range: DateRange = { start, end: date };\n fireChange(range);\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n }\n };\n\n const handleHover = (date: Date | null) => {\n if (selectingEnd) {\n setHoverDate(date);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputBlur = () => {\n if (inputValue.trim() === \"\") {\n fireChange(undefined);\n setSelectingEnd(false);\n setPendingStart(undefined);\n return;\n }\n const parsed = parseRangeInput(inputValue);\n if (parsed != null) {\n fireChange(parsed);\n setSelectingEnd(false);\n setPendingStart(undefined);\n } else {\n setInputValue(value != null ? formatRange(value) : \"\");\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleInputBlur();\n setOpen(false);\n }\n if (e.key === \"Escape\") {\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n }\n };\n\n const handleToday = () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n fireChange({ start: now, end: now });\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n setOpen(false);\n };\n\n // The displayed range in the calendars\n const displayStart = selectingEnd ? pendingStart : value?.start;\n const displayEnd = selectingEnd ? undefined : value?.end;\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-date-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-date-picker-wrapper\",\n `kz-date-picker-wrapper--${variant}`,\n `kz-date-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-date-picker-wrapper--${state}`,\n open && \"kz-date-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-date-picker-input\",\n `kz-date-picker-input--${size}`,\n inputClassName\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-date-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root\n open={open}\n onOpenChange={(nextOpen) => {\n if (!nextOpen) {\n // Closing — reset selection state if mid-selection\n setSelectingEnd(false);\n setPendingStart(undefined);\n setHoverDate(null);\n }\n setOpen(nextOpen);\n }}\n >\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-date-picker-icon\">\n <Icon name={IconName.Calendar} size={iconSize} />\n </span>\n <input\n ref={ref}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"date-range-picker-message\"\n : helperText != null\n ? \"date-range-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-date-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle calendar\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-date-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"kz-date-range-picker-calendars\">\n <Calendar\n onSelect={handleDateSelect}\n selectedStart={displayStart}\n selectedEnd={displayEnd}\n hoverDate={hoverDate ?? undefined}\n onHover={handleHover}\n minDate={minDate}\n maxDate={maxDate}\n viewMonth={leftMonth}\n onViewMonthChange={handlePrevMonth}\n hideNext\n />\n <div className=\"kz-date-range-picker-divider\" />\n <Calendar\n onSelect={handleDateSelect}\n selectedStart={displayStart}\n selectedEnd={displayEnd}\n hoverDate={hoverDate ?? undefined}\n onHover={handleHover}\n minDate={minDate}\n maxDate={maxDate}\n viewMonth={rightMonth}\n onViewMonthChange={handleNextMonth}\n hidePrev\n />\n </div>\n\n {(showTodayButton || showClearButton) && (\n <div className=\"kz-date-picker-footer\">\n {showTodayButton && (\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={handleToday}\n >\n Today\n </Button>\n )}\n {showClearButton && (\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n )}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"date-range-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"date-range-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nDateRangePicker.displayName = \"DateRangePicker\";\n\nexport { DateRangePicker };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Hardcoded palette (10 hues × 10 shades) ── */\n\nconst COLOR_PALETTE: string[] = [\n // Grays\n \"#f8f9fa\",\n \"#e9ecef\",\n \"#dee2e6\",\n \"#ced4da\",\n \"#adb5bd\",\n \"#6c757d\",\n \"#495057\",\n \"#343a40\",\n \"#212529\",\n \"#0d1117\",\n // Reds\n \"#fff5f5\",\n \"#ffe3e3\",\n \"#ffc9c9\",\n \"#ffa8a8\",\n \"#ff8787\",\n \"#ff6b6b\",\n \"#fa5252\",\n \"#f03e3e\",\n \"#e03131\",\n \"#c92a2a\",\n // Oranges\n \"#fff4e6\",\n \"#ffe8cc\",\n \"#ffd8a8\",\n \"#ffc078\",\n \"#ffa94d\",\n \"#ff922b\",\n \"#fd7e14\",\n \"#e8590c\",\n \"#d9480f\",\n \"#bf4000\",\n // Yellows\n \"#fff9db\",\n \"#fff3bf\",\n \"#ffec99\",\n \"#ffe066\",\n \"#ffd43b\",\n \"#fcc419\",\n \"#fab005\",\n \"#f59f00\",\n \"#f08c00\",\n \"#e67700\",\n // Greens\n \"#ebfbee\",\n \"#d3f9d8\",\n \"#b2f2bb\",\n \"#8ce99a\",\n \"#69db7c\",\n \"#51cf66\",\n \"#40c057\",\n \"#37b24d\",\n \"#2f9e44\",\n \"#2b8a3e\",\n // Teals\n \"#e6fcf5\",\n \"#c3fae8\",\n \"#96f2d7\",\n \"#63e6be\",\n \"#38d9a9\",\n \"#20c997\",\n \"#12b886\",\n \"#0ca678\",\n \"#099268\",\n \"#087f5b\",\n // Blues\n \"#e7f5ff\",\n \"#d0ebff\",\n \"#a5d8ff\",\n \"#74c0fc\",\n \"#4dabf7\",\n \"#339af0\",\n \"#228be6\",\n \"#1c7ed6\",\n \"#1971c2\",\n \"#1864ab\",\n // Indigos\n \"#edf2ff\",\n \"#dbe4ff\",\n \"#bac8ff\",\n \"#91a7ff\",\n \"#748ffc\",\n \"#5c7cfa\",\n \"#4c6ef5\",\n \"#4263eb\",\n \"#3b5bdb\",\n \"#364fc7\",\n // Purples\n \"#f8f0fc\",\n \"#f3d9fa\",\n \"#eebefa\",\n \"#e599f7\",\n \"#da77f2\",\n \"#cc5de8\",\n \"#be4bdb\",\n \"#ae3ec9\",\n \"#9c36b5\",\n \"#862e9c\",\n // Pinks\n \"#fff0f6\",\n \"#ffdeeb\",\n \"#fcc2d7\",\n \"#faa2c1\",\n \"#f783ac\",\n \"#f06595\",\n \"#e64980\",\n \"#d6336c\",\n \"#c2255c\",\n \"#a61e4d\",\n];\n\n/* ── Hex helpers ── */\n\nconst HEX_RE = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\n\nfunction isValidHex(v: string): boolean {\n return HEX_RE.test(v);\n}\n\nfunction normalizeHex(v: string): string {\n const m = v.match(HEX_RE);\n if (m == null) return v;\n const hex = m[1];\n if (hex.length === 3) {\n return `#${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`.toLowerCase();\n }\n return `#${hex}`.toLowerCase();\n}\n\n/* ── Props ── */\n\nexport interface ColorPickerProps {\n /** Controlled value (hex string). Omit for uncontrolled. */\n value?: string;\n /** Initial value for uncontrolled mode. */\n defaultValue?: string;\n /** Fires when a color is picked or cleared. */\n onChange?: (value: string | undefined) => void;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Component ── */\n\nconst ColorPicker = React.forwardRef<HTMLInputElement, ColorPickerProps>(\n (\n {\n value: valueProp,\n defaultValue,\n onChange,\n placeholder = \"#000000\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<\n string | undefined\n >(defaultValue);\n\n const value = isControlled ? valueProp : internalValue;\n\n const fireChange = React.useCallback(\n (next: string | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(value ?? \"\");\n\n React.useEffect(() => {\n setInputValue(value ?? \"\");\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputBlur = () => {\n const trimmed = inputValue.trim();\n if (trimmed === \"\") {\n fireChange(undefined);\n return;\n }\n if (isValidHex(trimmed)) {\n fireChange(normalizeHex(trimmed));\n } else {\n setInputValue(value ?? \"\");\n }\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleInputBlur();\n setOpen(false);\n }\n if (e.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n const handleSwatchClick = (hex: string) => {\n fireChange(hex);\n setOpen(false);\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setOpen(false);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-color-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-color-picker-wrapper\",\n `kz-color-picker-wrapper--${variant}`,\n `kz-color-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-color-picker-wrapper--${state}`,\n open && \"kz-color-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-color-picker-input\",\n `kz-color-picker-input--${size}`,\n inputClassName\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-color-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-color-picker-icon\">\n <Icon name={IconName.Palette} size={iconSize} />\n </span>\n {value != null && value !== \"\" && (\n <span\n className=\"kz-color-picker-swatch-preview\"\n style={{ backgroundColor: value }}\n />\n )}\n <input\n ref={ref}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"color-picker-message\"\n : helperText != null\n ? \"color-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-color-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle color picker\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-color-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"kz-color-picker-grid\">\n {COLOR_PALETTE.map((hex) => (\n <button\n key={hex}\n type=\"button\"\n className={cn(\n \"kz-color-picker-swatch\",\n value === hex && \"kz-color-picker-swatch--selected\"\n )}\n style={{ backgroundColor: hex }}\n title={hex}\n onClick={() => handleSwatchClick(hex)}\n />\n ))}\n </div>\n\n <div className=\"kz-color-picker-footer\">\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"color-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"color-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nColorPicker.displayName = \"ColorPicker\";\n\nexport { ColorPicker };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n ButtonVariant,\n ButtonSize,\n} from \"../../constants/enum\";\nimport { Button } from \"../button\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── All icon names for the grid ── */\nconst ALL_ICONS = Object.values(IconName) as IconName[];\n\n/* ── Props ── */\n\nexport interface IconPickerProps {\n /** Controlled value (IconName). Omit for uncontrolled. */\n value?: IconName;\n /** Initial value for uncontrolled mode. */\n defaultValue?: IconName;\n /** Fires when an icon is picked or cleared. */\n onChange?: (value: IconName | undefined) => void;\n\n /** Subset of icon names to display. Defaults to all icons. */\n icons?: IconName[];\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n className?: string;\n inputClassName?: string;\n}\n\n/* ── Component ── */\n\nconst IconPicker = React.forwardRef<HTMLInputElement, IconPickerProps>(\n (\n {\n value: valueProp,\n defaultValue,\n onChange,\n icons,\n placeholder = \"Select icon…\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n className,\n inputClassName,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<\n IconName | undefined\n >(defaultValue);\n\n const value = isControlled ? valueProp : internalValue;\n\n const fireChange = React.useCallback(\n (next: IconName | undefined) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n\n const availableIcons = icons ?? ALL_ICONS;\n\n const filteredIcons = React.useMemo(() => {\n if (searchQuery.trim() === \"\") return availableIcons;\n const q = searchQuery.toLowerCase();\n return availableIcons.filter((name) => name.includes(q));\n }, [searchQuery, availableIcons]);\n\n const handleIconClick = (name: IconName) => {\n fireChange(name);\n setOpen(false);\n setSearchQuery(\"\");\n };\n\n const handleClear = () => {\n fireChange(undefined);\n setOpen(false);\n setSearchQuery(\"\");\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n setOpen(nextOpen);\n if (!nextOpen) {\n setSearchQuery(\"\");\n }\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-icon-picker-root\", className);\n\n const wrapperClass = cn(\n \"kz-icon-picker-wrapper\",\n `kz-icon-picker-wrapper--${variant}`,\n `kz-icon-picker-wrapper--${size}`,\n state !== TextInputState.Default && `kz-icon-picker-wrapper--${state}`,\n open && \"kz-icon-picker-wrapper--open\"\n );\n\n const inputClass = cn(\n \"kz-icon-picker-input\",\n `kz-icon-picker-input--${size}`,\n inputClassName\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-icon-picker-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild disabled={disabled}>\n <div className={wrapperClass}>\n <span className=\"kz-icon-picker-icon\">\n <Icon name={value ?? IconName.LayoutGrid} size={iconSize} />\n </span>\n <input\n ref={ref}\n type=\"text\"\n value={value ?? \"\"}\n readOnly\n placeholder={placeholder}\n disabled={disabled}\n className={inputClass}\n aria-invalid={state === TextInputState.Error}\n aria-describedby={\n stateMessage != null\n ? \"icon-picker-message\"\n : helperText != null\n ? \"icon-picker-helper\"\n : undefined\n }\n />\n <button\n type=\"button\"\n className=\"kz-icon-picker-toggle\"\n tabIndex={-1}\n aria-label=\"Toggle icon picker\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((prev) => !prev);\n }}\n >\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"kz-icon-picker-popover\"\n sideOffset={4}\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {/* Search */}\n <div className=\"kz-icon-picker-search-wrapper\">\n <Icon name={IconName.Search} size={14} />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search icons…\"\n className=\"kz-icon-picker-search-input\"\n />\n </div>\n\n {/* Grid */}\n <div className=\"kz-icon-picker-grid-wrapper\">\n <div className=\"kz-icon-picker-grid\">\n {filteredIcons.length === 0 ? (\n <span className=\"kz-icon-picker-empty\">No icons found</span>\n ) : (\n filteredIcons.map((name) => (\n <button\n key={name}\n type=\"button\"\n className={cn(\n \"kz-icon-picker-cell\",\n value === name && \"kz-icon-picker-cell--selected\"\n )}\n title={name}\n onClick={() => handleIconClick(name)}\n >\n <Icon name={name} size=\"sm\" />\n </button>\n ))\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"kz-icon-picker-footer\">\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleClear}\n >\n Clear\n </Button>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"icon-picker-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"icon-picker-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nIconPicker.displayName = \"IconPicker\";\n\nexport { IconPicker };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Helpers ── */\n\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n const size = bytes / Math.pow(1024, i);\n return `${size.toFixed(i === 0 ? 0 : 1)} ${units[i]}`;\n}\n\n/* ── Props ── */\n\nexport interface FileUploaderProps {\n /** Controlled value (File[]). Omit for uncontrolled. */\n value?: File[];\n /** Initial value for uncontrolled mode. */\n defaultValue?: File[];\n /** Fires when files change (added or removed). */\n onChange?: (files: File[]) => void;\n\n /** MIME type accept string, e.g. \"image/*,.pdf\" */\n accept?: string;\n /** Allow multiple files. Default: true */\n multiple?: boolean;\n /** Max file size in bytes per file. */\n maxSize?: number;\n /** Max number of files allowed. */\n maxFiles?: number;\n\n placeholder?: string;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n className?: string;\n}\n\n/* ── Component ── */\n\nconst FileUploader = React.forwardRef<HTMLInputElement, FileUploaderProps>(\n (\n {\n value: valueProp,\n defaultValue,\n onChange,\n accept,\n multiple = true,\n maxSize,\n maxFiles,\n placeholder = \"Choose files…\",\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n className,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<File[]>(\n defaultValue ?? []\n );\n\n const files = isControlled ? valueProp : internalValue;\n\n const fireChange = React.useCallback(\n (next: File[]) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const [isDragOver, setIsDragOver] = React.useState(false);\n const dragCounterRef = React.useRef(0);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const validateAndAdd = (incoming: File[]) => {\n let filtered = incoming;\n if (maxSize != null) {\n filtered = filtered.filter((f) => f.size <= maxSize);\n }\n let merged = [...files, ...filtered];\n if (maxFiles != null) {\n merged = merged.slice(0, maxFiles);\n }\n fireChange(merged);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n validateAndAdd(Array.from(e.target.files));\n }\n e.target.value = \"\";\n };\n\n const handleWrapperClick = () => {\n if (!disabled) {\n inputRef.current?.click();\n }\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current += 1;\n if (!disabled) setIsDragOver(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current -= 1;\n if (dragCounterRef.current === 0) setIsDragOver(false);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current = 0;\n setIsDragOver(false);\n if (disabled) return;\n if (e.dataTransfer.files) {\n validateAndAdd(Array.from(e.dataTransfer.files));\n }\n };\n\n const handleRemove = (index: number) => {\n const next = files.filter((_, i) => i !== index);\n fireChange(next);\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-file-uploader-root\", className);\n\n const wrapperClass = cn(\n \"kz-file-uploader-wrapper\",\n `kz-file-uploader-wrapper--${variant}`,\n `kz-file-uploader-wrapper--${size}`,\n state !== TextInputState.Default && `kz-file-uploader-wrapper--${state}`,\n isDragOver && \"kz-file-uploader-wrapper--dragover\",\n disabled && \"kz-file-uploader-wrapper--disabled\"\n );\n\n const textClass = cn(\n \"kz-file-uploader-text\",\n `kz-file-uploader-text--${size}`,\n files.length > 0 && \"kz-file-uploader-text--has-files\"\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n const itemIconSize = size === TextInputSize.Sm ? 14 : 16;\n const removeIconSize = size === TextInputSize.Sm ? 12 : 14;\n\n const displayText =\n files.length === 0\n ? placeholder\n : files.length === 1\n ? files[0].name\n : `${files.length} files selected`;\n\n return (\n <div className={rootClass}>\n {label != null && label !== \"\" && (\n <label className=\"kz-file-uploader-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"kz-file-uploader-input\"\n tabIndex={-1}\n aria-hidden\n />\n\n <div\n className={wrapperClass}\n onClick={handleWrapperClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <span className={textClass}>{displayText}</span>\n <span className=\"kz-file-uploader-icon\">\n <Icon name={IconName.FilePlus} size={iconSize} />\n </span>\n </div>\n\n {files.length > 0 && (\n <ul className=\"kz-file-uploader-list\">\n {files.map((file, index) => (\n <li\n key={`${file.name}-${file.size}-${index}`}\n className=\"kz-file-uploader-item\"\n >\n <Icon\n name={IconName.FileText}\n size={itemIconSize}\n className=\"kz-file-uploader-item-icon\"\n />\n <span className=\"kz-file-uploader-item-name\">{file.name}</span>\n <span className=\"kz-file-uploader-item-size\">\n {formatFileSize(file.size)}\n </span>\n <button\n type=\"button\"\n className=\"kz-file-uploader-item-remove\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(index);\n }}\n aria-label={`Remove ${file.name}`}\n disabled={disabled}\n >\n <Icon name={IconName.X} size={removeIconSize} />\n </button>\n </li>\n ))}\n </ul>\n )}\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"file-uploader-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"file-uploader-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nFileUploader.displayName = \"FileUploader\";\n\nexport { FileUploader };\n","import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils/cn\";\nimport {\n TextInputVariant,\n TextInputSize,\n TextInputState,\n} from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\nimport { Icon, IconName } from \"../../icon\";\nimport { Checkbox } from \"../checkbox\";\nimport { CheckboxSize } from \"../../constants/enum\";\n\n/* ── Types ── */\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps {\n /** Available options. */\n options: SelectOption[];\n /** Enable multi-select mode. Default: false */\n multiple?: boolean;\n\n /** Controlled value. Single: string; Multi: string[]. Omit for uncontrolled. */\n value?: string | string[];\n /** Initial value for uncontrolled mode. */\n defaultValue?: string | string[];\n /** Fires when selection changes. */\n onChange?: (value: string | string[]) => void;\n\n placeholder?: string;\n /** Show a search input inside the popover. Default: false */\n searchable?: boolean;\n disabled?: boolean;\n\n size?: TextInputSize;\n variant?: TextInputVariant;\n state?: TextInputState;\n\n errorText?: string;\n successText?: string;\n warningText?: string;\n\n label?: string;\n helperText?: string;\n description?: string;\n\n /** Shows a fixed label in the trigger instead of the selected value/tags. In multi mode, appends the count. */\n triggerLabel?: string;\n\n /** Custom render function for the trigger display. Receives selected values and all options. Overrides triggerLabel and default rendering. */\n renderValue?: (\n selected: string[],\n options: SelectOption[]\n ) => React.ReactNode;\n\n /** Max height of the options panel in px. Default: 200 */\n panelHeight?: number;\n\n /** Called when \"Select All\" is clicked. When provided, shows the Select All button in the footer. */\n onSelectAll?: () => void;\n\n /** Called when \"Remove All\" is clicked. When provided, shows the Remove All button in the footer. */\n onRemoveAll?: () => void;\n\n className?: string;\n}\n\n/* ── Helpers ── */\n\nfunction normalizeValue(\n v: string | string[] | undefined,\n multiple: boolean\n): string[] {\n if (v === undefined) return [];\n if (Array.isArray(v)) return v;\n return multiple ? [v] : [v];\n}\n\n/* ── Component ── */\n\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n placeholder = \"Select\\u2026\",\n searchable = false,\n disabled = false,\n size = TextInputSize.Md,\n variant = TextInputVariant.Default,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n label,\n helperText,\n description,\n triggerLabel,\n renderValue,\n panelHeight = 200,\n onSelectAll,\n onRemoveAll,\n className,\n },\n ref\n ) => {\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = React.useState<string[]>(\n normalizeValue(defaultValue, multiple)\n );\n\n const selected = normalizeValue(\n isControlled\n ? valueProp\n : multiple\n ? internalValue\n : (internalValue[0] as string | undefined),\n multiple\n );\n\n const fireChange = React.useCallback(\n (next: string[]) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(multiple ? next : (next[0] ?? \"\"));\n },\n [isControlled, multiple, onChange]\n );\n\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const searchRef = React.useRef<HTMLInputElement>(null);\n const popoverContentRef = React.useRef<HTMLDivElement>(null);\n\n // Document-level capture listeners to unblock scroll inside the portaled\n // popover when rendered inside a Radix Dialog. react-remove-scroll adds\n // its own capture-phase listener on document that blocks wheel/touchmove\n // for elements outside the Dialog. We register ours to run first and call\n // stopImmediatePropagation when the target is inside our popover.\n React.useEffect(() => {\n if (!open) return;\n\n const allow = (e: Event) => {\n const node = popoverContentRef.current;\n if (node && node.contains(e.target as Node)) {\n e.stopImmediatePropagation();\n }\n };\n\n document.addEventListener(\"wheel\", allow, { capture: true });\n document.addEventListener(\"touchmove\", allow, { capture: true });\n\n return () => {\n document.removeEventListener(\"wheel\", allow, {\n capture: true,\n } as EventListenerOptions);\n document.removeEventListener(\"touchmove\", allow, {\n capture: true,\n } as EventListenerOptions);\n };\n }, [open]);\n\n const filteredOptions = React.useMemo(() => {\n if (!search) return options;\n const lower = search.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, search]);\n\n const handleItemClick = (optionValue: string) => {\n if (multiple) {\n const idx = selected.indexOf(optionValue);\n const next =\n idx >= 0\n ? selected.filter((v) => v !== optionValue)\n : [...selected, optionValue];\n fireChange(next);\n } else {\n fireChange([optionValue]);\n setOpen(false);\n }\n };\n\n const handleTagRemove = (e: React.MouseEvent, optionValue: string) => {\n e.stopPropagation();\n fireChange(selected.filter((v) => v !== optionValue));\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (disabled) return;\n setOpen(nextOpen);\n if (!nextOpen) setSearch(\"\");\n };\n\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const rootClass = cn(\"kz-select-root\", className);\n\n const wrapperClass = cn(\n \"kz-select-wrapper\",\n `kz-select-wrapper--${variant}`,\n `kz-select-wrapper--${size}`,\n state !== TextInputState.Default && `kz-select-wrapper--${state}`,\n open && \"kz-select-wrapper--open\",\n disabled && \"kz-select-wrapper--disabled\"\n );\n\n const valueClass = cn(\n \"kz-select-value\",\n `kz-select-value--${size}`,\n selected.length === 0 && \"kz-select-value--placeholder\"\n );\n\n const iconSize = size === TextInputSize.Sm ? 14 : 16;\n\n const getLabel = (val: string) =>\n options.find((o) => o.value === val)?.label ?? val;\n\n return (\n <div className={rootClass} ref={ref}>\n {label != null && label !== \"\" && (\n <label className=\"kz-select-label\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </label>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={wrapperClass}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n >\n {renderValue != null ? (\n <span className={valueClass}>\n {selected.length > 0\n ? renderValue(selected, options)\n : placeholder}\n </span>\n ) : multiple ? (\n triggerLabel != null ? (\n <span className={valueClass}>\n {selected.length > 0\n ? `${triggerLabel} (${selected.length})`\n : triggerLabel}\n </span>\n ) : (\n <div className=\"kz-select-tags\">\n {selected.length === 0 && (\n <span className=\"kz-select-tags-placeholder\">\n {placeholder}\n </span>\n )}\n {selected.map((val) => (\n <span key={val} className=\"kz-select-tag\">\n {getLabel(val)}\n <span\n role=\"button\"\n tabIndex={-1}\n className=\"kz-select-tag-remove\"\n onClick={(e) => handleTagRemove(e, val)}\n aria-label={`Remove ${getLabel(val)}`}\n >\n <Icon name={IconName.X} size={10} />\n </span>\n </span>\n ))}\n </div>\n )\n ) : triggerLabel != null ? (\n <span className={valueClass}>{triggerLabel}</span>\n ) : (\n <span className={valueClass}>\n {selected.length > 0 ? getLabel(selected[0]) : placeholder}\n </span>\n )}\n <span className=\"kz-select-toggle\">\n <Icon name={IconName.ChevronDown} size={iconSize} />\n </span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n ref={popoverContentRef}\n className=\"kz-select-popover\"\n sideOffset={4}\n align=\"start\"\n style={\n {\n width: \"var(--radix-popover-trigger-width)\",\n height: \"auto\",\n \"--kz-select-popover-height\": panelHeight\n ? `${panelHeight}px`\n : \"auto\",\n } as React.CSSProperties\n }\n onOpenAutoFocus={(e) => {\n if (searchable) {\n e.preventDefault();\n searchRef.current?.focus();\n }\n }}\n >\n {searchable && (\n <div className=\"kz-select-search\">\n <Icon\n name={IconName.Search}\n size={14}\n className=\"kz-select-search-icon\"\n />\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search\\u2026\"\n className=\"kz-select-search-input\"\n />\n </div>\n )}\n\n <ul\n className=\"kz-select-list\"\n role=\"listbox\"\n style={{ maxHeight: panelHeight }}\n >\n {filteredOptions.length === 0 && (\n <li className=\"kz-select-empty\">No options</li>\n )}\n {filteredOptions.map((opt) => {\n const isSelected = selected.includes(opt.value);\n return (\n <li\n key={opt.value}\n role=\"option\"\n aria-selected={isSelected}\n className={cn(\n \"kz-select-item\",\n isSelected && \"kz-select-item--selected\"\n )}\n onClick={() => handleItemClick(opt.value)}\n >\n {multiple ? (\n <span className=\"pointer-events-none\">\n <Checkbox\n size={CheckboxSize.Sm}\n checked={isSelected}\n tabIndex={-1}\n />\n </span>\n ) : (\n <span className=\"kz-select-item-check\">\n {isSelected && (\n <Icon name={IconName.CheckCircle} size={14} />\n )}\n </span>\n )}\n <span className=\"kz-select-item-label\">{opt.label}</span>\n </li>\n );\n })}\n </ul>\n\n {(onSelectAll || onRemoveAll) && (\n <div className=\"kz-select-footer\">\n {onSelectAll && (\n <button\n type=\"button\"\n className=\"kz-select-footer-action\"\n onClick={onSelectAll}\n >\n Select All\n </button>\n )}\n {onRemoveAll && (\n <button\n type=\"button\"\n className=\"kz-select-footer-action kz-select-footer-action--remove\"\n onClick={onRemoveAll}\n aria-label=\"Remove All\"\n >\n <Icon name={IconName.Trash2} size={14} />\n </button>\n )}\n </div>\n )}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n id=\"select-message\"\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography\n id=\"select-helper\"\n variant={TypographyVariantEnum.Caption}\n >\n {helperText}\n </Typography>\n )}\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n","import * as React from \"react\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { Icon, IconName } from \"../../icon\";\nimport { cn } from \"../../utils/cn\";\n\n/* ── Types ── */\n\nexport type SidePanelSide = \"left\" | \"right\";\n\nexport interface SidePanelProps {\n /** Controlled open state. */\n open?: boolean;\n /** Fires when the panel wants to open/close. */\n onOpenChange?: (open: boolean) => void;\n\n /** Which side to slide from. Default: \"right\" */\n side?: SidePanelSide;\n /** Width of the panel. Accepts any CSS value: \"50%\", \"400px\", \"30vw\", etc. Default: \"400px\" */\n width?: string | number;\n\n /** Show the overlay backdrop. Default: true */\n overlay?: boolean;\n /** Close when clicking the overlay. Default: true */\n closeOnOverlayClick?: boolean;\n /** Close when pressing Escape. Default: true */\n closeOnEscape?: boolean;\n\n /** Accessible title for screen readers. Default: \"Panel\" */\n title?: string;\n /** Fully customisable header area — accepts any ReactNode (buttons, breadcrumbs, etc.). Rendered left of the close button. */\n header?: React.ReactNode;\n /** Fully customisable footer area — accepts any ReactNode. */\n footer?: React.ReactNode;\n /** Keep the header pinned at the top while the body scrolls. Default: true */\n stickyHeader?: boolean;\n /** Keep the footer pinned at the bottom while the body scrolls. Default: true */\n stickyFooter?: boolean;\n /** Hide the built-in close button. Default: false */\n hideCloseButton?: boolean;\n\n children?: React.ReactNode;\n className?: string;\n}\n\n/* ── Component ── */\n\nconst SidePanel = React.forwardRef<HTMLDivElement, SidePanelProps>(\n (\n {\n open,\n onOpenChange,\n side = \"right\",\n width = \"400px\",\n overlay = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n title = \"Panel\",\n header,\n footer,\n stickyHeader = true,\n stickyFooter = true,\n hideCloseButton = false,\n children,\n className,\n },\n ref\n ) => {\n const resolvedWidth = typeof width === \"number\" ? `${width}px` : width;\n\n const headerEl =\n header != null || !hideCloseButton ? (\n <div className=\"kz-sidepanel-header\">\n <div className=\"kz-sidepanel-header-content\">{header}</div>\n {!hideCloseButton && (\n <RadixDialog.Close asChild>\n <button\n type=\"button\"\n className=\"kz-sidepanel-close\"\n aria-label=\"Close panel\"\n >\n <Icon name={IconName.X} size={16} />\n </button>\n </RadixDialog.Close>\n )}\n </div>\n ) : null;\n\n const footerEl =\n footer != null ? (\n <div className=\"kz-sidepanel-footer\">{footer}</div>\n ) : null;\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange} modal={overlay}>\n <RadixDialog.Portal>\n {overlay && (\n <RadixDialog.Overlay\n className=\"kz-sidepanel-overlay\"\n onClick={\n closeOnOverlayClick ? undefined : (e) => e.preventDefault()\n }\n />\n )}\n <RadixDialog.Content\n ref={ref}\n className={cn(\n \"kz-sidepanel\",\n `kz-sidepanel--${side}`,\n !overlay && \"kz-sidepanel--no-overlay\",\n className\n )}\n style={{ width: resolvedWidth }}\n aria-describedby={undefined}\n onEscapeKeyDown={\n closeOnEscape ? undefined : (e) => e.preventDefault()\n }\n onInteractOutside={\n !overlay || !closeOnOverlayClick\n ? (e) => e.preventDefault()\n : undefined\n }\n >\n <RadixDialog.Title\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n >\n {title}\n </RadixDialog.Title>\n {stickyHeader && headerEl}\n <div className=\"kz-sidepanel-scroll\">\n {!stickyHeader && headerEl}\n <div className=\"kz-sidepanel-body\">{children}</div>\n {!stickyFooter && footerEl}\n </div>\n {stickyFooter && footerEl}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n }\n);\n\nSidePanel.displayName = \"SidePanel\";\n\n/* ── Trigger ── */\n\nconst SidePanelTrigger = RadixDialog.Trigger;\nSidePanelTrigger.displayName = \"SidePanelTrigger\";\n\nexport { SidePanel, SidePanelTrigger };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TextInputState } from \"../../constants/enum\";\nimport { Typography } from \"../typography\";\nimport { TypographyVariantEnum } from \"../typography/typography-variants\";\n\n/* ── Enums ── */\n\nexport enum FormGroupDirection {\n Vertical = \"vertical\",\n Horizontal = \"horizontal\",\n}\n\n/* ── Types ── */\n\nexport interface FormGroupProps {\n /** Label text rendered above the group. */\n label?: string;\n /** Description text below the label. */\n description?: string;\n\n /** Validation state. */\n state?: TextInputState;\n errorText?: string;\n successText?: string;\n warningText?: string;\n helperText?: string;\n\n /** Layout direction for children. Default: FormGroupDirection.Vertical */\n direction?: FormGroupDirection;\n /** Gap between children. Accepts any CSS value. Default: uses CSS token. */\n gap?: string | number;\n\n /** Render as <fieldset> + <legend>. Default: false */\n fieldset?: boolean;\n /** Show required asterisk after label. Default: false */\n required?: boolean;\n /** Disable the group visually. Default: false */\n disabled?: boolean;\n\n children?: React.ReactNode;\n className?: string;\n}\n\n/* ── Component ── */\n\nconst FormGroup = React.forwardRef<HTMLDivElement, FormGroupProps>(\n (\n {\n label,\n description,\n state = TextInputState.Default,\n errorText,\n successText,\n warningText,\n helperText,\n direction = FormGroupDirection.Vertical,\n gap,\n fieldset = false,\n required = false,\n disabled = false,\n children,\n className,\n },\n ref\n ) => {\n const stateMessage =\n state === TextInputState.Error\n ? errorText\n : state === TextInputState.Success\n ? successText\n : state === TextInputState.Warning\n ? warningText\n : undefined;\n\n const Root = fieldset ? \"fieldset\" : \"div\";\n const LabelTag = fieldset ? \"legend\" : \"label\";\n\n const resolvedGap =\n gap != null ? (typeof gap === \"number\" ? `${gap}px` : gap) : undefined;\n\n return (\n <Root\n ref={ref as React.Ref<HTMLFieldSetElement & HTMLDivElement>}\n className={cn(\n \"kz-form-group\",\n required && \"kz-form-group--required\",\n disabled && \"kz-form-group--disabled\",\n className\n )}\n disabled={fieldset ? disabled : undefined}\n >\n {label != null && label !== \"\" && (\n <LabelTag className=\"kz-form-group-legend\">\n <Typography variant={TypographyVariantEnum.Label}>\n {label}\n </Typography>\n </LabelTag>\n )}\n\n {description != null && description !== \"\" && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {description}\n </Typography>\n )}\n\n <div\n className={cn(\n \"kz-form-group-content\",\n `kz-form-group-content--${direction}`\n )}\n style={resolvedGap != null ? { gap: resolvedGap } : undefined}\n >\n {children}\n </div>\n\n {stateMessage != null && stateMessage !== \"\" && (\n <Typography\n variant={\n state === TextInputState.Error\n ? TypographyVariantEnum.Error\n : state === TextInputState.Success\n ? TypographyVariantEnum.Success\n : TypographyVariantEnum.Warning\n }\n >\n {stateMessage}\n </Typography>\n )}\n\n {helperText != null &&\n helperText !== \"\" &&\n state === TextInputState.Default && (\n <Typography variant={TypographyVariantEnum.Caption}>\n {helperText}\n </Typography>\n )}\n </Root>\n );\n }\n);\n\nFormGroup.displayName = \"FormGroup\";\n\nexport { FormGroup };\n","import * as React from \"react\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Enums ── */\n\nexport enum ModalSize {\n Sm = \"sm\",\n Md = \"md\",\n Lg = \"lg\",\n Xl = \"xl\",\n Full = \"full\",\n}\n\n/* ── Types ── */\n\nexport interface ModalProps {\n /** Controlled open state. */\n open?: boolean;\n /** Fires when the modal wants to open/close. */\n onOpenChange?: (open: boolean) => void;\n\n /** Size of the modal. Default: ModalSize.Md */\n size?: ModalSize;\n\n /** Show the overlay backdrop. Default: true */\n overlay?: boolean;\n /** Close when clicking the overlay. Default: true */\n closeOnOverlayClick?: boolean;\n /** Close when pressing Escape. Default: true */\n closeOnEscape?: boolean;\n\n /** Accessible title for screen readers. Default: \"Modal\" */\n title?: string;\n /** Content for the header area (left of close button). */\n header?: React.ReactNode;\n /** Content for the footer area. */\n footer?: React.ReactNode;\n\n children?: React.ReactNode;\n className?: string;\n}\n\n/* ── Component ── */\n\nconst Modal = React.forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n open,\n onOpenChange,\n size = ModalSize.Md,\n overlay = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n title = \"Modal\",\n header,\n footer,\n children,\n className,\n },\n ref\n ) => {\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n {overlay && (\n <RadixDialog.Overlay\n className=\"kz-modal-overlay\"\n onClick={\n closeOnOverlayClick ? undefined : (e) => e.preventDefault()\n }\n />\n )}\n <RadixDialog.Content\n ref={ref}\n className={cn(\"kz-modal\", `kz-modal--${size}`, className)}\n aria-describedby={undefined}\n onEscapeKeyDown={\n closeOnEscape ? undefined : (e) => e.preventDefault()\n }\n onInteractOutside={\n closeOnOverlayClick ? undefined : (e) => e.preventDefault()\n }\n >\n <RadixDialog.Title\n style={{\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n >\n {title}\n </RadixDialog.Title>\n\n {header != null && (\n <div className=\"kz-modal-header\">\n <div className=\"kz-modal-header-content\">{header}</div>\n <RadixDialog.Close asChild>\n <button\n type=\"button\"\n className=\"kz-modal-close\"\n aria-label=\"Close modal\"\n >\n <Icon name={IconName.X} size={16} />\n </button>\n </RadixDialog.Close>\n </div>\n )}\n\n <div className=\"kz-modal-body\">{children}</div>\n\n {footer != null && <div className=\"kz-modal-footer\">{footer}</div>}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n }\n);\n\nModal.displayName = \"Modal\";\n\n/* ── Trigger ── */\n\nconst ModalTrigger = RadixDialog.Trigger;\nModalTrigger.displayName = \"ModalTrigger\";\n\nexport { Modal, ModalTrigger };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\nimport { ToastVariant, ToastPosition } from \"../../constants/enum\";\n\n/* ── Types ── */\n\nexport interface ToastData {\n id: string;\n variant: ToastVariant;\n title: string;\n description?: string;\n duration?: number;\n}\n\nexport interface ToasterProps {\n position?: ToastPosition;\n className?: string;\n}\n\nexport interface ToastContextValue {\n toast: (opts: Omit<ToastData, \"id\">) => string;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n}\n\n/* ── Icon mapping ── */\n\nconst TOAST_ICONS: Record<ToastVariant, IconName> = {\n [ToastVariant.Success]: IconName.CheckCircle,\n [ToastVariant.Error]: IconName.CircleAlert,\n [ToastVariant.Warning]: IconName.TriangleAlert,\n [ToastVariant.Info]: IconName.CircleAlert,\n};\n\n/* ── Context ── */\n\nconst ToastContext = React.createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const ctx = React.useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within a <ToastProvider>\");\n return ctx;\n}\n\n/* ── Provider ── */\n\nlet toastCounter = 0;\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = React.useState<ToastData[]>([]);\n const timersRef = React.useRef<Map<string, ReturnType<typeof setTimeout>>>(\n new Map()\n );\n\n const dismiss = React.useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n }, []);\n\n const dismissAll = React.useCallback(() => {\n setToasts([]);\n timersRef.current.forEach((timer) => clearTimeout(timer));\n timersRef.current.clear();\n }, []);\n\n const toast = React.useCallback(\n (opts: Omit<ToastData, \"id\">) => {\n const id = `toast-${++toastCounter}`;\n const data: ToastData = { ...opts, id };\n setToasts((prev) => [...prev, data]);\n const duration = opts.duration ?? 5000;\n if (duration > 0) {\n const timer = setTimeout(() => dismiss(id), duration);\n timersRef.current.set(id, timer);\n }\n return id;\n },\n [dismiss]\n );\n\n React.useEffect(() => {\n const timers = timersRef.current;\n return () => {\n timers.forEach((timer) => clearTimeout(timer));\n };\n }, []);\n\n const value = React.useMemo(\n () => ({ toast, dismiss, dismissAll }),\n [toast, dismiss, dismissAll]\n );\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <ToastViewportInternal toasts={toasts} onDismiss={dismiss} />\n </ToastContext.Provider>\n );\n}\n\n/* ── Internal viewport (rendered inside provider) ── */\n\nfunction ToastViewportInternal({\n toasts,\n onDismiss,\n}: {\n toasts: ToastData[];\n onDismiss: (id: string) => void;\n}) {\n const [position, setPosition] = React.useState<ToastPosition>(\n ToastPosition.TopRight\n );\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => setMounted(true), []);\n\n // Allow Toaster to set position via a custom event\n React.useEffect(() => {\n const handler = (e: Event) => {\n const pos = (e as CustomEvent<ToastPosition>).detail;\n setPosition(pos);\n };\n window.addEventListener(\"kz-toast-position\", handler);\n return () => window.removeEventListener(\"kz-toast-position\", handler);\n }, []);\n\n if (!mounted || toasts.length === 0) return null;\n\n return ReactDOM.createPortal(\n <div\n className={cn(\"kz-toast-viewport\", `kz-toast-viewport--${position}`)}\n role=\"region\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} data={t} onDismiss={onDismiss} />\n ))}\n </div>,\n document.body\n );\n}\n\n/* ── Toaster (position configurator) ── */\n\nexport function Toaster({ position = ToastPosition.TopRight }: ToasterProps) {\n React.useEffect(() => {\n window.dispatchEvent(\n new CustomEvent(\"kz-toast-position\", { detail: position })\n );\n }, [position]);\n\n return null;\n}\n\n/* ── Toast item ── */\n\nfunction ToastItem({\n data,\n onDismiss,\n}: {\n data: ToastData;\n onDismiss: (id: string) => void;\n}) {\n return (\n <div className={cn(\"kz-toast\", `kz-toast--${data.variant}`)} role=\"alert\">\n <span className=\"kz-toast-icon shrink-0 mt-0.5\">\n <Icon name={TOAST_ICONS[data.variant]} size={18} color=\"currentColor\" />\n </span>\n <div className=\"flex flex-col gap-0.5 flex-1 min-w-0\">\n <span className=\"text-sm font-medium text-[var(--kz-color-text-primary)]\">\n {data.title}\n </span>\n {data.description && (\n <span className=\"text-xs text-[var(--kz-color-text-secondary)]\">\n {data.description}\n </span>\n )}\n </div>\n <button\n type=\"button\"\n className=\"kz-toast-close shrink-0\"\n onClick={() => onDismiss(data.id)}\n aria-label=\"Dismiss\"\n >\n <Icon name={IconName.X} size={14} color=\"currentColor\" />\n </button>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { CardShadow } from \"../../constants/enum\";\nimport type { CardProps } from \"./Card.types\";\n\nconst shadowClasses = {\n [CardShadow.Sm]: \"kz-card--shadow-sm\",\n [CardShadow.Md]: \"kz-card--shadow-md\",\n [CardShadow.Lg]: \"kz-card--shadow-lg\",\n} as const;\n\nconst paddingClasses = {\n none: \"\",\n sm: \"kz-card-padding--sm\",\n md: \"kz-card-padding--md\",\n lg: \"kz-card-padding--lg\",\n} as const;\n\nconst sizeToPadding = {\n sm: \"sm\",\n md: \"md\",\n lg: \"lg\",\n} as const;\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n size = \"md\",\n shadow = CardShadow.Sm,\n padding,\n width,\n height,\n aspectRatio,\n flat = false,\n hoverable = false,\n clickable = false,\n header,\n footer,\n cover,\n className,\n children,\n onClick,\n style,\n ...props\n },\n ref\n ) => {\n const resolvedPadding = padding ?? sizeToPadding[size];\n\n const customStyle: React.CSSProperties = {\n ...style,\n ...(width ? { width } : {}),\n ...(height ? { height } : {}),\n ...(aspectRatio ? { aspectRatio } : {}),\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-card\",\n !flat && shadowClasses[shadow],\n flat && \"kz-card--flat\",\n hoverable && \"kz-card--hoverable\",\n clickable && \"kz-card--clickable\",\n className\n )}\n style={customStyle}\n onClick={onClick}\n tabIndex={clickable ? 0 : undefined}\n role={clickable ? \"button\" : undefined}\n {...props}\n >\n {cover != null && <div className=\"kz-card-cover\">{cover}</div>}\n {header != null && (\n <div\n className={cn(\"kz-card-header\", paddingClasses[resolvedPadding])}\n >\n {header}\n </div>\n )}\n <div className={cn(\"kz-card-body\", paddingClasses[resolvedPadding])}>\n {children}\n </div>\n {footer != null && (\n <div\n className={cn(\"kz-card-footer\", paddingClasses[resolvedPadding])}\n >\n {footer}\n </div>\n )}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\nexport { Card };\nexport type { CardProps, CardSize, CardPadding } from \"./Card.types\";\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button, ButtonVariant, ButtonSize, ButtonStatus } from \"../button\";\nimport { Icon, IconName } from \"../../icon\";\nimport type { SqlEditorProps } from \"./SqlEditor.types\";\n\nconst sizeClasses = {\n sm: {\n toolbar: \"px-2 py-1\",\n textarea: \"px-2 py-1.5 text-xs leading-4\",\n status: \"px-2 py-1 text-[11px]\",\n result: \"text-xs\",\n resultCell: \"px-2 py-1\",\n },\n md: {\n toolbar: \"px-3 py-1.5\",\n textarea: \"px-3 py-3 text-sm leading-[22px]\",\n status: \"px-3 py-1 text-xs\",\n result: \"text-[13px]\",\n resultCell: \"px-3 py-1.5\",\n },\n lg: {\n toolbar: \"px-4 py-2\",\n textarea: \"px-4 py-3.5 text-base leading-6\",\n status: \"px-4 py-1.5 text-sm\",\n result: \"text-sm\",\n resultCell: \"px-4 py-2\",\n },\n};\n\nfunction SqlEditorInner(\n {\n value,\n onValueChange,\n onExecute,\n result,\n placeholder = \"SELECT * FROM ...\",\n toolbarLabel = \"Query\",\n runButtonLabel = \"Run\",\n rows = 5,\n size = \"md\",\n disabled = false,\n loading = false,\n resultsMaxHeight = \"300px\",\n toolbarRight,\n className,\n }: SqlEditorProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const sc = sizeClasses[size];\n\n const handleRun = React.useCallback(() => {\n if (!disabled && !loading) {\n onExecute(value);\n }\n }, [value, onExecute, disabled, loading]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Cmd/Ctrl + Enter to run\n if ((e.metaKey || e.ctrlKey) && e.key === \"Enter\") {\n e.preventDefault();\n handleRun();\n }\n // Tab inserts two spaces\n if (e.key === \"Tab\") {\n e.preventDefault();\n const textarea = e.currentTarget;\n const start = textarea.selectionStart;\n const end = textarea.selectionEnd;\n const newValue =\n value.substring(0, start) + \" \" + value.substring(end);\n onValueChange(newValue);\n requestAnimationFrame(() => {\n textarea.selectionStart = textarea.selectionEnd = start + 2;\n });\n }\n },\n [handleRun, value, onValueChange]\n );\n\n const hasResult = result != null;\n const hasRows = hasResult && !result.error && result.rows.length > 0;\n\n return (\n <div ref={ref} className={cn(\"kz-sql-editor-root\", className)}>\n {/* Toolbar */}\n <div className={cn(\"kz-sql-editor-toolbar\", sc.toolbar)}>\n <span className=\"kz-sql-editor-toolbar-label\">{toolbarLabel}</span>\n <div className=\"flex items-center gap-2\">\n {toolbarRight}\n <Button\n variant={ButtonVariant.Primary}\n status={ButtonStatus.Brand}\n size={size === \"lg\" ? ButtonSize.Md : ButtonSize.Sm}\n onClick={handleRun}\n disabled={disabled || loading}\n >\n <Icon name={IconName.ChevronRight} size={14} color=\"currentColor\" />\n <span className=\"ml-1\">\n {loading ? \"Running…\" : runButtonLabel}\n </span>\n </Button>\n </div>\n </div>\n\n {/* Textarea */}\n <textarea\n ref={textareaRef}\n className={cn(\"kz-sql-editor-textarea\", sc.textarea)}\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n spellCheck={false}\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n rows={rows}\n disabled={disabled}\n />\n\n {/* Status bar */}\n {hasResult && (\n <div className={cn(\"kz-sql-editor-status\", sc.status)}>\n <span\n className={cn(\n \"kz-sql-editor-status-text\",\n result.error && \"kz-sql-editor-status-text--error\",\n !result.error && \"kz-sql-editor-status-text--success\"\n )}\n >\n {result.message}\n </span>\n </div>\n )}\n\n {/* Results table */}\n {hasRows && (\n <div\n className=\"kz-sql-editor-results\"\n style={{ maxHeight: resultsMaxHeight }}\n >\n <table>\n <thead>\n <tr>\n {result.columns.map((col) => (\n <th key={col} className={sc.resultCell}>\n {col}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {result.rows.map((row, i) => (\n <tr key={i}>\n {result.columns.map((col) => (\n <td key={col} className={sc.resultCell}>\n {row[col] == null ? \"\" : String(row[col])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {hasResult && !result.error && result.rows.length === 0 && (\n <div className=\"kz-sql-editor-empty\">No rows returned</div>\n )}\n </div>\n );\n}\n\nconst SqlEditor = React.forwardRef(SqlEditorInner);\nSqlEditor.displayName = \"SqlEditor\";\n\nexport { SqlEditor };\n","import * as React from \"react\";\nimport QRCode from \"qrcode\";\nimport { cn } from \"../../utils/cn\";\nimport { Button, ButtonVariant, ButtonSize } from \"../button\";\nimport { Icon, IconName } from \"../../icon\";\nimport { QrPattern } from \"../../constants/enum\";\nimport type { QrRendererProps } from \"./QrRenderer.types\";\n\nfunction resolveImageSrc(image: string): string {\n if (image.startsWith(\"data:\") || image.startsWith(\"http\")) {\n return image;\n }\n return `data:image/png;base64,${image}`;\n}\n\n/**\n * Draw a single QR module on the canvas with the given pattern shape.\n */\nfunction drawModule(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n moduleSize: number,\n pattern: QrPattern\n) {\n const center = moduleSize / 2;\n\n switch (pattern) {\n case QrPattern.Circle: {\n ctx.beginPath();\n ctx.arc(x + center, y + center, center * 0.85, 0, Math.PI * 2);\n ctx.fill();\n break;\n }\n case QrPattern.Diamond: {\n ctx.beginPath();\n ctx.moveTo(x + center, y + moduleSize * 0.05);\n ctx.lineTo(x + moduleSize * 0.95, y + center);\n ctx.lineTo(x + center, y + moduleSize * 0.95);\n ctx.lineTo(x + moduleSize * 0.05, y + center);\n ctx.closePath();\n ctx.fill();\n break;\n }\n case QrPattern.Square:\n default: {\n ctx.fillRect(x, y, moduleSize, moduleSize);\n break;\n }\n }\n}\n\n/**\n * Render the QR matrix onto a canvas with custom dot patterns.\n * Returns a data URL of the rendered image.\n */\nfunction renderQrToCanvas(\n modules: boolean[][],\n size: number,\n pattern: QrPattern,\n fgColor: string,\n bgColor: string,\n logo: string | undefined,\n logoScale: number\n): Promise<string> {\n const moduleCount = modules.length;\n const margin = 1;\n const totalModules = moduleCount + margin * 2;\n const moduleSize = size / totalModules;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n const ctx = canvas.getContext(\"2d\")!;\n\n // Background\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, size, size);\n\n // Foreground modules\n ctx.fillStyle = fgColor;\n for (let row = 0; row < moduleCount; row++) {\n for (let col = 0; col < moduleCount; col++) {\n if (modules[row][col]) {\n const x = (col + margin) * moduleSize;\n const y = (row + margin) * moduleSize;\n drawModule(ctx, x, y, moduleSize, pattern);\n }\n }\n }\n\n // Logo overlay\n if (logo) {\n return new Promise<string>((resolve) => {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.onload = () => {\n const logoPixelSize = Math.round(size * logoScale);\n const logoX = (size - logoPixelSize) / 2;\n const logoY = (size - logoPixelSize) / 2;\n const padding = 4;\n\n // White background behind logo\n ctx.fillStyle = bgColor;\n ctx.beginPath();\n const bgSize = logoPixelSize + padding * 2;\n const bgX = logoX - padding;\n const bgY = logoY - padding;\n const radius = 6;\n ctx.moveTo(bgX + radius, bgY);\n ctx.lineTo(bgX + bgSize - radius, bgY);\n ctx.quadraticCurveTo(bgX + bgSize, bgY, bgX + bgSize, bgY + radius);\n ctx.lineTo(bgX + bgSize, bgY + bgSize - radius);\n ctx.quadraticCurveTo(\n bgX + bgSize,\n bgY + bgSize,\n bgX + bgSize - radius,\n bgY + bgSize\n );\n ctx.lineTo(bgX + radius, bgY + bgSize);\n ctx.quadraticCurveTo(bgX, bgY + bgSize, bgX, bgY + bgSize - radius);\n ctx.lineTo(bgX, bgY + radius);\n ctx.quadraticCurveTo(bgX, bgY, bgX + radius, bgY);\n ctx.closePath();\n ctx.fill();\n\n ctx.drawImage(img, logoX, logoY, logoPixelSize, logoPixelSize);\n resolve(canvas.toDataURL(\"image/png\"));\n };\n img.onerror = () => {\n resolve(canvas.toDataURL(\"image/png\"));\n };\n img.src = resolveImageSrc(logo);\n });\n }\n\n return Promise.resolve(canvas.toDataURL(\"image/png\"));\n}\n\nfunction QrRendererInner(\n props: QrRendererProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const {\n size = 200,\n alt = \"QR Code\",\n logo,\n logoScale = 0.2,\n pattern = QrPattern.Square,\n label,\n caption,\n debug,\n showDebug = false,\n foregroundColor = \"#000000\",\n backgroundColor = \"#ffffff\",\n downloadable = false,\n downloadFilename = \"qr-code.png\",\n className,\n } = props;\n\n const [generatedSrc, setGeneratedSrc] = React.useState<string | null>(null);\n\n const isDataMode = \"data\" in props && !!props.data;\n const data = isDataMode ? props.data : undefined;\n const image = !isDataMode && \"image\" in props ? props.image : undefined;\n const errorCorrectionLevel =\n isDataMode && \"errorCorrectionLevel\" in props\n ? props.errorCorrectionLevel\n : undefined;\n\n // Use high error correction when logo is present to maintain scannability\n const effectiveECL = errorCorrectionLevel || (logo ? \"H\" : \"M\");\n\n React.useEffect(() => {\n if (!isDataMode || !data) {\n setGeneratedSrc(null);\n return;\n }\n\n let cancelled = false;\n\n // Generate QR matrix using qrcode library\n const qr = QRCode.create(data, {\n errorCorrectionLevel: effectiveECL,\n });\n\n const moduleCount = qr.modules.size;\n const modules: boolean[][] = [];\n for (let row = 0; row < moduleCount; row++) {\n const rowData: boolean[] = [];\n for (let col = 0; col < moduleCount; col++) {\n rowData.push(qr.modules.get(row, col) === 1);\n }\n modules.push(rowData);\n }\n\n renderQrToCanvas(\n modules,\n size,\n pattern,\n foregroundColor,\n backgroundColor,\n logo,\n logoScale\n )\n .then((url) => {\n if (!cancelled) setGeneratedSrc(url);\n })\n .catch(() => {\n if (!cancelled) setGeneratedSrc(null);\n });\n\n return () => {\n cancelled = true;\n };\n }, [\n data,\n size,\n foregroundColor,\n backgroundColor,\n effectiveECL,\n isDataMode,\n pattern,\n logo,\n logoScale,\n ]);\n\n const imgSrc = isDataMode\n ? generatedSrc\n : image\n ? resolveImageSrc(image)\n : null;\n\n const handleDownload = React.useCallback(() => {\n if (!imgSrc) return;\n const link = document.createElement(\"a\");\n link.href = imgSrc;\n link.download = downloadFilename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }, [imgSrc, downloadFilename]);\n\n return (\n <div ref={ref} className={cn(\"kz-qr-renderer-root\", className)}>\n {/* QR image container */}\n <div\n className=\"kz-qr-renderer-image-container\"\n style={{\n width: size,\n height: size,\n backgroundColor: backgroundColor || undefined,\n }}\n >\n {imgSrc ? (\n <img\n src={imgSrc}\n alt={alt}\n width={size}\n height={size}\n className=\"kz-qr-renderer-image\"\n style={{\n width: size,\n height: size,\n }}\n />\n ) : (\n <div\n style={{\n width: size,\n height: size,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--kz-component-input-placeholder)\",\n fontSize: 12,\n }}\n >\n {isDataMode ? \"Generating…\" : \"No image\"}\n </div>\n )}\n\n {/* Logo overlay for image mode (canvas handles it for data mode) */}\n {logo && imgSrc && !isDataMode && (\n <div\n className=\"kz-qr-renderer-logo\"\n style={{\n width: Math.round(size * logoScale),\n height: Math.round(size * logoScale),\n }}\n >\n <img\n src={resolveImageSrc(logo)}\n alt=\"Logo\"\n width={Math.round(size * logoScale)}\n height={Math.round(size * logoScale)}\n className=\"kz-qr-renderer-logo-img\"\n />\n </div>\n )}\n </div>\n\n {/* Label and caption */}\n {(label || caption || downloadable) && (\n <div className=\"kz-qr-renderer-footer\">\n {label && <div className=\"kz-qr-renderer-label\">{label}</div>}\n {caption && <div className=\"kz-qr-renderer-caption\">{caption}</div>}\n {downloadable && (\n <Button\n variant={ButtonVariant.Primary}\n size={ButtonSize.Sm}\n onClick={handleDownload}\n >\n <Icon name={IconName.ArrowDown} size={14} color=\"currentColor\" />\n <span className=\"ml-1\">Download</span>\n </Button>\n )}\n </div>\n )}\n\n {/* Debug info */}\n {showDebug && debug && (\n <div className=\"kz-qr-renderer-debug\">\n <div className=\"kz-qr-renderer-debug-title\">Debug Info</div>\n <div className=\"kz-qr-renderer-debug-grid\">\n {Object.entries(debug).map(([key, value]) => (\n <React.Fragment key={key}>\n <span className=\"kz-qr-renderer-debug-key\">{key}</span>\n <span className=\"kz-qr-renderer-debug-value\">\n {typeof value === \"boolean\"\n ? value\n ? \"true\"\n : \"false\"\n : String(value)}\n </span>\n </React.Fragment>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nconst QrRenderer = React.forwardRef(QrRendererInner);\nQrRenderer.displayName = \"QrRenderer\";\n\nexport { QrRenderer };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type LoaderSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type LoaderVariant = \"spinner\" | \"dots\" | \"pulse\";\n\nexport interface LoaderProps {\n /** Size of the loader. Default: \"md\" */\n size?: LoaderSize;\n /** Visual variant. Default: \"spinner\" */\n variant?: LoaderVariant;\n /** When true, renders a full-page centered overlay. Default: false */\n fullPage?: boolean;\n /** Optional label shown below the loader. */\n label?: string;\n className?: string;\n}\n\nconst Loader = React.forwardRef<HTMLDivElement, LoaderProps>(\n (\n { size = \"md\", variant = \"spinner\", fullPage = false, label, className },\n ref\n ) => {\n const content = (\n <div\n ref={fullPage ? undefined : ref}\n className={cn(\"kz-loader\", `kz-loader--${size}`, className)}\n role=\"status\"\n aria-label={label ?? \"Loading\"}\n >\n {variant === \"spinner\" && (\n <svg\n className=\"kz-loader-spinner\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n className=\"kz-loader-track\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n strokeWidth=\"3\"\n />\n <circle\n className=\"kz-loader-indicator\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n\n {variant === \"dots\" && (\n <div className=\"kz-loader-dots\">\n <span className=\"kz-loader-dot\" />\n <span className=\"kz-loader-dot\" />\n <span className=\"kz-loader-dot\" />\n </div>\n )}\n\n {variant === \"pulse\" && <div className=\"kz-loader-pulse\" />}\n\n {label != null && label !== \"\" && (\n <span className=\"kz-loader-label\">{label}</span>\n )}\n </div>\n );\n\n if (fullPage) {\n return (\n <div ref={ref} className=\"kz-loader-overlay\">\n {content}\n </div>\n );\n }\n\n return content;\n }\n);\n\nLoader.displayName = \"Loader\";\n\nexport { Loader };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Loader } from \"../loader\";\nimport type { LoaderVariant, LoaderSize } from \"../loader\";\n\nexport interface ScreenLoaderProps {\n /** Controls overlay visibility. */\n loading: boolean;\n /** 0-100 for determinate progress bar. Omit for indeterminate. */\n progress?: number;\n /** Custom logo or ReactNode shown centered on the overlay. */\n logo?: React.ReactNode;\n /** Optional text label below the loader indicator. */\n label?: string;\n /** Backdrop blur in px. Default: 2 */\n blur?: number;\n /** Overlay opacity 0-1. Default: 0.6 */\n overlayOpacity?: number;\n /** Loader variant passed to internal Loader. Default: \"spinner\" */\n loaderVariant?: LoaderVariant;\n /** Loader size passed to internal Loader. Default: \"lg\" */\n loaderSize?: LoaderSize;\n /** Additional className on the wrapper. */\n className?: string;\n /** Content rendered beneath the overlay. */\n children: React.ReactNode;\n}\n\nconst ScreenLoader = React.forwardRef<HTMLDivElement, ScreenLoaderProps>(\n (\n {\n loading,\n progress,\n logo,\n label,\n blur = 2,\n overlayOpacity = 0.6,\n loaderVariant = \"spinner\",\n loaderSize = \"lg\",\n className,\n children,\n },\n ref\n ) => {\n const isDeterminate = progress !== undefined;\n\n return (\n <div ref={ref} className={cn(\"kz-screen-loader\", className)}>\n {children}\n\n {loading && (\n <div\n className=\"kz-screen-loader__overlay\"\n style={{\n backgroundColor: `rgba(255, 255, 255, ${overlayOpacity})`,\n backdropFilter: `blur(${blur}px)`,\n WebkitBackdropFilter: `blur(${blur}px)`,\n }}\n aria-busy=\"true\"\n role=\"status\"\n >\n <div className=\"kz-screen-loader__content\">\n {logo != null && (\n <div className=\"kz-screen-loader__logo\">{logo}</div>\n )}\n\n <Loader variant={loaderVariant} size={loaderSize} />\n\n <div className=\"kz-screen-loader__progress-track\">\n <div\n className={cn(\n \"kz-screen-loader__progress-bar\",\n !isDeterminate &&\n \"kz-screen-loader__progress-bar--indeterminate\"\n )}\n style={\n isDeterminate\n ? {\n width: `${Math.min(100, Math.max(0, progress))}%`,\n }\n : undefined\n }\n />\n </div>\n\n {label != null && label !== \"\" && (\n <span className=\"kz-screen-loader__label\">{label}</span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n }\n);\n\nScreenLoader.displayName = \"ScreenLoader\";\n\nexport { ScreenLoader };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Icon, IconName } from \"../../icon\";\n\n/* ── Types ── */\n\nexport type ErrorPageStatus =\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"not-found\"\n | \"forbidden\"\n | \"server-error\";\n\nexport interface ErrorPageProps {\n /** Determines default icon and color scheme. Default: \"error\" */\n status?: ErrorPageStatus;\n /** Large status code display, e.g. \"404\", \"500\". */\n statusCode?: string | number;\n /** Main heading text. */\n title: string;\n /** Body text below the heading. */\n description?: string;\n /** Override the default status icon with any ReactNode. */\n icon?: React.ReactNode;\n /** Slot for action button(s). */\n action?: React.ReactNode;\n /** Optional branding/logo rendered at the top. */\n logo?: React.ReactNode;\n /** If true (default), uses fixed positioning at 100vh. If false, fills parent. */\n fullPage?: boolean;\n /** Additional className on the root element. */\n className?: string;\n}\n\n/* ── Status defaults ── */\n\nconst STATUS_ICON: Record<ErrorPageStatus, IconName> = {\n error: IconName.CircleAlert,\n warning: IconName.TriangleAlert,\n info: IconName.CircleAlert,\n \"not-found\": IconName.Search,\n forbidden: IconName.Shield,\n \"server-error\": IconName.Globe,\n};\n\n/* ── Component ── */\n\nconst ErrorPage = React.forwardRef<HTMLDivElement, ErrorPageProps>(\n (\n {\n status = \"error\",\n statusCode,\n title,\n description,\n icon,\n action,\n logo,\n fullPage = true,\n className,\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-error-page\",\n `kz-error-page--${status}`,\n fullPage && \"kz-error-page--full\",\n className\n )}\n role=\"main\"\n aria-labelledby=\"kz-error-page-title\"\n >\n <div className=\"kz-error-page__bg\" aria-hidden=\"true\" />\n\n <div className=\"kz-error-page__content\">\n {logo != null && <div className=\"kz-error-page__logo\">{logo}</div>}\n\n <div className=\"kz-error-page__icon\">\n {icon ?? (\n <Icon name={STATUS_ICON[status]} size={48} color=\"currentColor\" />\n )}\n </div>\n\n {statusCode != null && (\n <div className=\"kz-error-page__code\">{statusCode}</div>\n )}\n\n <h1 id=\"kz-error-page-title\" className=\"kz-error-page__title\">\n {title}\n </h1>\n\n {description != null && description !== \"\" && (\n <p className=\"kz-error-page__description\">{description}</p>\n )}\n\n {action != null && (\n <div className=\"kz-error-page__action\">{action}</div>\n )}\n </div>\n </div>\n );\n }\n);\n\nErrorPage.displayName = \"ErrorPage\";\n\nexport { ErrorPage };\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape variant. Default: \"text\" */\n variant?: SkeletonVariant;\n /** Width (CSS value). Default: \"100%\" */\n width?: string | number;\n /** Height (CSS value). Default: depends on variant */\n height?: string | number;\n /** Number of text lines to render (only for variant=\"text\"). Default: 1 */\n lines?: number;\n /** Disable the shimmer animation. Default: false */\n static?: boolean;\n className?: string;\n}\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n width,\n height,\n lines = 1,\n static: isStatic = false,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const resolvedStyle: React.CSSProperties = {\n ...style,\n ...(width != null ? { width } : {}),\n ...(height != null ? { height } : {}),\n };\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n ref={ref}\n className={cn(\"kz-skeleton-lines\", className)}\n style={width != null ? { width } : undefined}\n {...props}\n >\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n className={cn(\n \"kz-skeleton\",\n \"kz-skeleton--text\",\n isStatic && \"kz-skeleton--static\",\n i === lines - 1 && \"kz-skeleton--last-line\"\n )}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-skeleton\",\n `kz-skeleton--${variant}`,\n isStatic && \"kz-skeleton--static\",\n className\n )}\n style={resolvedStyle}\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = \"Skeleton\";\n\n/* ── TableSkeleton ── */\n\nexport type TableSkeletonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface TableSkeletonProps {\n /** Number of columns. Default: 4 */\n columns?: number;\n /** Number of rows. Default: 5 */\n rows?: number;\n /** Show a header bar (title area). Default: true */\n showHeader?: boolean;\n /** Show pagination area. Default: true */\n showPagination?: boolean;\n /** Show checkbox column. Default: false */\n showCheckbox?: boolean;\n /** Show actions column. Default: false */\n showActions?: boolean;\n /** Table size. Default: \"md\" */\n size?: TableSkeletonSize;\n className?: string;\n}\n\nconst TableSkeleton = React.forwardRef<HTMLDivElement, TableSkeletonProps>(\n (\n {\n columns = 4,\n rows = 5,\n showHeader = true,\n showPagination = true,\n showCheckbox = false,\n showActions = false,\n size = \"md\",\n className,\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-table-skeleton\",\n `kz-table-skeleton--${size}`,\n className\n )}\n role=\"status\"\n aria-label=\"Loading table\"\n >\n {showHeader && (\n <div className=\"kz-table-skeleton-header\">\n <Skeleton variant=\"text\" width=\"140px\" height=\"20px\" />\n <Skeleton variant=\"rectangular\" width=\"160px\" height=\"32px\" />\n </div>\n )}\n\n <div className=\"kz-table-skeleton-table\">\n {/* Column headers */}\n <div className=\"kz-table-skeleton-row kz-table-skeleton-row--head\">\n {showCheckbox && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--checkbox\">\n <Skeleton variant=\"rectangular\" width={16} height={16} />\n </div>\n )}\n {Array.from({ length: columns }, (_, i) => (\n <div key={i} className=\"kz-table-skeleton-cell\">\n <Skeleton\n variant=\"text\"\n width={`${50 + ((i * 20) % 40)}%`}\n height=\"14px\"\n />\n </div>\n ))}\n {showActions && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--actions\">\n <Skeleton variant=\"text\" width=\"50px\" height=\"14px\" />\n </div>\n )}\n </div>\n\n {/* Data rows */}\n {Array.from({ length: rows }, (_, rowIdx) => (\n <div key={rowIdx} className=\"kz-table-skeleton-row\">\n {showCheckbox && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--checkbox\">\n <Skeleton variant=\"rectangular\" width={16} height={16} />\n </div>\n )}\n {Array.from({ length: columns }, (_, colIdx) => (\n <div key={colIdx} className=\"kz-table-skeleton-cell\">\n <Skeleton\n variant=\"text\"\n width={`${40 + (((rowIdx + colIdx) * 17) % 50)}%`}\n />\n </div>\n ))}\n {showActions && (\n <div className=\"kz-table-skeleton-cell kz-table-skeleton-cell--actions\">\n <Skeleton variant=\"circular\" width={24} height={24} />\n </div>\n )}\n </div>\n ))}\n </div>\n\n {showPagination && (\n <div className=\"kz-table-skeleton-footer\">\n <Skeleton variant=\"text\" width=\"100px\" height=\"14px\" />\n <div className=\"kz-table-skeleton-footer-right\">\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n <Skeleton variant=\"rectangular\" width=\"120px\" height=\"28px\" />\n </div>\n </div>\n )}\n </div>\n );\n }\n);\n\nTableSkeleton.displayName = \"TableSkeleton\";\n\n/* ── CardSkeleton ── */\n\nexport type CardSkeletonLayout = \"standard\" | \"horizontal\" | \"media\";\n\nexport interface CardSkeletonProps {\n /** Layout preset. Default: \"standard\" */\n layout?: CardSkeletonLayout;\n /** Show a cover/image area. Default: true for \"standard\" and \"media\" */\n showCover?: boolean;\n /** Number of text lines in the body. Default: 3 */\n lines?: number;\n /** Show a footer area. Default: false */\n showFooter?: boolean;\n /** Width (CSS value). Default: \"100%\" */\n width?: string | number;\n className?: string;\n}\n\nconst CardSkeleton = React.forwardRef<HTMLDivElement, CardSkeletonProps>(\n (\n {\n layout = \"standard\",\n showCover,\n lines = 3,\n showFooter = false,\n width,\n className,\n },\n ref\n ) => {\n const hasCover = showCover ?? (layout === \"standard\" || layout === \"media\");\n\n if (layout === \"horizontal\") {\n return (\n <div\n ref={ref}\n className={cn(\n \"kz-card-skeleton\",\n \"kz-card-skeleton--horizontal\",\n className\n )}\n style={width != null ? { width } : undefined}\n role=\"status\"\n aria-label=\"Loading card\"\n >\n {hasCover && (\n <Skeleton\n variant=\"rectangular\"\n className=\"kz-card-skeleton-cover kz-card-skeleton-cover--side\"\n />\n )}\n <div className=\"kz-card-skeleton-content\">\n <Skeleton variant=\"text\" width=\"60%\" height=\"16px\" />\n <Skeleton variant=\"text\" lines={lines} />\n {showFooter && (\n <div className=\"kz-card-skeleton-footer\">\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\"kz-card-skeleton\", className)}\n style={width != null ? { width } : undefined}\n role=\"status\"\n aria-label=\"Loading card\"\n >\n {hasCover && (\n <Skeleton\n variant=\"rectangular\"\n className={cn(\n \"kz-card-skeleton-cover\",\n layout === \"media\" && \"kz-card-skeleton-cover--tall\"\n )}\n />\n )}\n <div className=\"kz-card-skeleton-content\">\n <Skeleton variant=\"text\" width=\"50%\" height=\"16px\" />\n <Skeleton variant=\"text\" lines={lines} />\n {showFooter && (\n <div className=\"kz-card-skeleton-footer\">\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n <Skeleton variant=\"rectangular\" width=\"80px\" height=\"28px\" />\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCardSkeleton.displayName = \"CardSkeleton\";\n\nexport { Skeleton, TableSkeleton, CardSkeleton };\n","export const TOKEN_KEYS = [\n // Brand\n \"color.brand.primary\",\n \"color.brand.primary.hover\",\n \"color.brand.primary.active\",\n \"color.brand.secondary\",\n \"color.brand.accent\",\n \"color.brand.accent.hover\",\n \"color.brand.accent.active\",\n \"color.brand.accent.dark\",\n \"color.brand.inverse\",\n\n // Surface\n \"color.surface.background\",\n \"color.surface.base\",\n \"color.surface.raised\",\n \"color.surface.sunken\",\n \"color.surface.overlay\",\n \"color.surface.glass\",\n \"color.surface.muted\",\n \"color.surface.inverse\",\n\n // Text\n \"color.text.primary\",\n \"color.text.secondary\",\n \"color.text.tertiary\",\n \"color.text.muted\",\n \"color.text.disabled\",\n \"color.text.inverse\",\n \"color.text.link\",\n \"color.text.link.hover\",\n\n // Border\n \"color.border.subtle\",\n \"color.border.default\",\n \"color.border.strong\",\n \"color.border.focus\",\n \"color.border.inverse\",\n\n // Status\n \"color.status.success\",\n \"color.status.success.bg\",\n \"color.status.success.border\",\n \"color.status.warning\",\n \"color.status.warning.bg\",\n \"color.status.warning.border\",\n \"color.status.error\",\n \"color.status.error.bg\",\n \"color.status.error.border\",\n \"color.status.info\",\n \"color.status.info.bg\",\n \"color.status.info.border\",\n\n // Shadows\n \"shadow.elevation.0\",\n \"shadow.elevation.1\",\n \"shadow.elevation.2\",\n \"shadow.elevation.3\",\n \"shadow.elevation.4\",\n \"shadow.elevation.5\",\n \"shadow.inset.1\",\n \"shadow.inset.2\",\n \"shadow.focus\",\n \"shadow.neumorphic.light\",\n \"shadow.neumorphic.dark\",\n \"shadow.neumorphic.raised.sm\",\n \"shadow.neumorphic.raised.md\",\n \"shadow.neumorphic.raised.lg\",\n \"shadow.neumorphic.inset.sm\",\n\n // Effects\n \"effect.blur.sm\",\n \"effect.blur.md\",\n \"effect.blur.lg\",\n \"effect.glass.opacity\",\n \"effect.glass.border.opacity\",\n\n // Radius\n \"radius.none\",\n \"radius.xs\",\n \"radius.sm\",\n \"radius.md\",\n \"radius.lg\",\n \"radius.xl\",\n \"radius.full\",\n\n // Space\n \"space.0\",\n \"space.1\",\n \"space.2\",\n \"space.3\",\n \"space.4\",\n \"space.5\",\n \"space.6\",\n \"space.8\",\n \"space.10\",\n \"space.12\",\n \"space.16\",\n \"space.20\",\n \"space.24\",\n\n // Typography\n \"font.family.base\",\n \"font.family.mono\",\n \"font.size.xs\",\n \"font.size.sm\",\n \"font.size.md\",\n \"font.size.lg\",\n \"font.size.xl\",\n \"font.size.2xl\",\n \"font.size.3xl\",\n \"font.weight.regular\",\n \"font.weight.medium\",\n \"font.weight.semibold\",\n \"font.weight.bold\",\n \"line.height.sm\",\n \"line.height.md\",\n \"line.height.lg\",\n\n // Motion\n \"motion.duration.fast\",\n \"motion.duration.normal\",\n \"motion.duration.slow\",\n \"motion.easing.standard\",\n \"motion.easing.emphasized\",\n\n // Intent — semantic middle layer\n \"intent.interactive.bg\",\n \"intent.interactive.bg.hover\",\n \"intent.interactive.text\",\n \"intent.interactive.text.selected\",\n \"intent.interactive.shadow\",\n \"intent.interactive.shadow.active\",\n \"intent.interactive.border\",\n \"intent.interactive.radius\",\n \"intent.container.bg\",\n \"intent.container.border\",\n \"intent.container.shadow\",\n \"intent.container.radius\",\n\n // Component — Sidebar\n \"component.sidebar.bg\",\n \"component.sidebar.border\",\n \"component.sidebar.item.bg\",\n \"component.sidebar.item.bg.hover\",\n \"component.sidebar.item.bg.active\",\n \"component.sidebar.item.text\",\n \"component.sidebar.item.text.active\",\n \"component.sidebar.indicator\",\n\n // Component — Header\n \"component.header.bg\",\n \"component.header.border\",\n \"component.header.text\",\n\n // Component — Button (Primary variant reads secondary tokens)\n \"component.button.secondary.bg\",\n \"component.button.secondary.bg.hover\",\n \"component.button.secondary.bg.active\",\n \"component.button.secondary.text\",\n \"component.button.secondary.shadow\",\n \"component.button.secondary.shadow.hover\",\n // Ghost variant\n \"component.button.ghost.bg\",\n \"component.button.ghost.bg.hover\",\n \"component.button.ghost.text\",\n // Container variant\n \"component.button.container.bg\",\n \"component.button.container.bg.hover\",\n \"component.button.container.text\",\n \"component.button.container.border\",\n \"component.button.container.shadow\",\n \"component.button.container.shadow.hover\",\n // Brand status\n \"component.button.brand.bg\",\n \"component.button.brand.bg.hover\",\n \"component.button.brand.text\",\n \"component.button.brand.shadow\",\n \"component.button.brand.shadow.hover\",\n // Ghost + status hover backgrounds\n \"component.button.ghost.brand.bg.hover\",\n \"component.button.ghost.success.bg.hover\",\n \"component.button.ghost.warning.bg.hover\",\n \"component.button.ghost.error.bg.hover\",\n \"component.button.ghost.info.bg.hover\",\n // Container + brand overrides\n \"component.button.container.brand.text\",\n \"component.button.container.brand.border\",\n \"component.button.container.brand.bg.hover\",\n // Success status\n \"component.button.success.bg\",\n \"component.button.success.bg.hover\",\n \"component.button.success.text\",\n \"component.button.success.shadow\",\n \"component.button.success.shadow.hover\",\n // Warning status\n \"component.button.warning.bg\",\n \"component.button.warning.bg.hover\",\n \"component.button.warning.text\",\n \"component.button.warning.shadow\",\n \"component.button.warning.shadow.hover\",\n // Error status\n \"component.button.error.bg\",\n \"component.button.error.bg.hover\",\n \"component.button.error.text\",\n \"component.button.error.shadow\",\n \"component.button.error.shadow.hover\",\n // Info status\n \"component.button.info.bg\",\n \"component.button.info.bg.hover\",\n \"component.button.info.text\",\n \"component.button.info.shadow\",\n \"component.button.info.shadow.hover\",\n // Sizes\n \"component.button.height.sm\",\n \"component.button.px.sm\",\n \"component.button.text.sm\",\n \"component.button.icon.sm\",\n \"component.button.height.md\",\n \"component.button.px.md\",\n \"component.button.text.md\",\n \"component.button.icon.md\",\n \"component.button.height.lg\",\n \"component.button.px.lg\",\n \"component.button.text.lg\",\n \"component.button.icon.lg\",\n // Common\n \"component.button.radius\",\n \"component.button.disabled.opacity\",\n \"component.button.loading.opacity\",\n\n // Component — Toggle button\n \"component.toggle-button.default.bg\",\n \"component.toggle-button.default.bg.pressed\",\n \"component.toggle-button.default.text\",\n \"component.toggle-button.default.text.pressed\",\n \"component.toggle-button.primary.bg\",\n \"component.toggle-button.primary.bg.pressed\",\n \"component.toggle-button.primary.text\",\n \"component.toggle-button.primary.text.pressed\",\n \"component.toggle-button.container.bg\",\n \"component.toggle-button.container.bg.pressed\",\n \"component.toggle-button.container.text\",\n \"component.toggle-button.container.text.pressed\",\n \"component.toggle-button.pressed.shadow\",\n \"component.toggle-button.track.off.bg\",\n \"component.toggle-button.track.on.bg\",\n \"component.toggle-button.thumb.bg\",\n \"component.toggle-button.thumb.shadow\",\n\n // Component — Checkbox\n \"component.checkbox.size.sm\",\n \"component.checkbox.size.md\",\n \"component.checkbox.size.lg\",\n \"component.checkbox.radius\",\n \"component.checkbox.off.bg\",\n \"component.checkbox.off.border\",\n \"component.checkbox.off.shadow\",\n \"component.checkbox.on.bg\",\n \"component.checkbox.on.border\",\n \"component.checkbox.on.shadow\",\n \"component.checkbox.icon.color\",\n \"component.checkbox.disabled.opacity\",\n\n // Component — Radio\n \"component.radio.size.sm\",\n \"component.radio.size.md\",\n \"component.radio.size.lg\",\n \"component.radio.radius\",\n \"component.radio.off.bg\",\n \"component.radio.off.border\",\n \"component.radio.off.shadow\",\n \"component.radio.on.bg\",\n \"component.radio.on.border\",\n \"component.radio.on.shadow\",\n \"component.radio.dot.bg\",\n \"component.radio.dot.shadow\",\n \"component.radio.disabled.opacity\",\n\n // Component — Tabs\n \"component.tabs.list.bg\",\n \"component.tabs.list.radius\",\n \"component.tabs.list.shadow\",\n \"component.tabs.list.pill.bg\",\n \"component.tabs.trigger.text\",\n \"component.tabs.trigger.selected.text\",\n \"component.tabs.trigger.selected.underline\",\n \"component.tabs.trigger.selected.bg\",\n \"component.tabs.trigger.selected.shadow\",\n \"component.tabs.trigger.radius\",\n \"component.tabs.content.padding\",\n\n // Component — Input\n \"component.input.bg\",\n \"component.input.border\",\n \"component.input.border.focus\",\n \"component.input.border.disabled\",\n \"component.input.text\",\n \"component.input.placeholder\",\n \"component.input.icon\",\n \"component.input.shadow\",\n \"component.input.radius\",\n \"component.input.container.radius\",\n \"component.input.container.border\",\n\n // Component — Dropdown\n \"component.dropdown.trigger.bg\",\n \"component.dropdown.trigger.border\",\n \"component.dropdown.trigger.border.open\",\n \"component.dropdown.trigger.text\",\n \"component.dropdown.trigger.text.selected\",\n \"component.dropdown.trigger.shadow\",\n \"component.dropdown.trigger.shadow.open\",\n \"component.dropdown.trigger.radius\",\n \"component.dropdown.trigger.focus.ring\",\n \"component.dropdown.content.bg\",\n \"component.dropdown.content.border\",\n \"component.dropdown.content.shadow\",\n \"component.dropdown.content.radius\",\n \"component.dropdown.item.text\",\n \"component.dropdown.item.text.selected\",\n \"component.dropdown.item.bg.hover\",\n\n // Component — Nav button (sidesheet)\n \"component.nav-button.icon\",\n \"component.nav-button.text\",\n \"component.nav-button.gap\",\n \"component.nav-button.chevron\",\n \"component.nav-button.hover.bg\",\n \"component.nav-button.selected.bg\",\n \"component.nav-button.selected.shadow\",\n \"component.nav-button.selected.icon\",\n \"component.nav-button.selected.text\",\n \"component.nav-button.radius\",\n\n // Component — Nav dropdown menu\n \"component.nav-dropdown.menu.bg\",\n \"component.nav-dropdown.menu.shadow\",\n \"component.nav-dropdown.menu.radius\",\n \"component.nav-dropdown.option.text\",\n \"component.nav-dropdown.option.hover.bg\",\n\n // Component — Sidesheet\n \"component.sidesheet.bg\",\n \"component.sidesheet.width\",\n \"component.sidesheet.border\",\n\n // Component — Sidemenu\n \"component.sidemenu.bg\",\n \"component.sidemenu.border\",\n \"component.sidemenu.shadow\",\n \"component.sidemenu.section.label.text\",\n \"component.sidemenu.item.text\",\n \"component.sidemenu.item.bg.hover\",\n \"component.sidemenu.item.bg.active\",\n \"component.sidemenu.item.active.text\",\n \"component.sidemenu.item.active.link.bg\",\n \"component.sidemenu.item.active.link.shadow\",\n \"component.sidemenu.group.indent.bg\",\n \"component.sidemenu.gap\",\n \"component.sidemenu.icon.gap\",\n\n // Component — Tooltip\n \"component.tooltip.bg\",\n \"component.tooltip.text\",\n \"component.tooltip.border\",\n \"component.tooltip.shadow\",\n \"component.tooltip.radius\",\n \"component.tooltip.padding.sm\",\n \"component.tooltip.padding.md\",\n \"component.tooltip.padding.lg\",\n \"component.tooltip.maxWidth.sm\",\n \"component.tooltip.maxWidth.md\",\n \"component.tooltip.maxWidth.lg\",\n \"component.tooltip.inverse.bg\",\n \"component.tooltip.inverse.text\",\n \"component.tooltip.success.bg\",\n \"component.tooltip.success.text\",\n \"component.tooltip.warning.bg\",\n \"component.tooltip.warning.text\",\n \"component.tooltip.error.bg\",\n \"component.tooltip.error.text\",\n\n // Component — Card\n \"component.card.bg\",\n \"component.card.border\",\n \"component.card.shadow\",\n \"component.card.radius\",\n\n // Component — Canvas / Tile\n \"component.canvas.bg\",\n \"component.canvas.grid.line\",\n \"component.tile.bg\",\n \"component.tile.border\",\n \"component.tile.shadow\",\n \"component.tile.header.bg\",\n \"component.tile.header.text\",\n\n \"component.table.surface\",\n \"component.table.header.bg\",\n \"component.table.header.border\",\n \"component.table.row.border\",\n \"component.table.row.hover.bg\",\n \"component.table.sticky.row.top\",\n \"component.table.footer.bg\",\n \"component.table.pagination.bg\",\n \"component.table.pagination.active.bg\",\n \"component.table.pagination.active.shadow\",\n \"component.table.pagination.hover.shadow\",\n\n // Component — Filter panel\n \"component.filter.panel.bg\",\n \"component.filter.panel.border\",\n \"component.filter.label.text\",\n \"component.filter.control.bg\",\n \"component.filter.control.border\",\n\n // Typography status colors (overridable via KezelThemeProvider tokens)\n \"typography.error.color\",\n \"typography.success.color\",\n \"typography.warning.color\",\n] as const;\n\nexport type TokenKey = (typeof TOKEN_KEYS)[number];\n"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AACF;","names":["Calendar","React","KezelVariant","KezelMode","ButtonVariant","ButtonStatus","ButtonSize","ButtonType","ButtonAspectRatio","DropdownTriggerVariant","TypographyVariant","TypographyTone","TypographyAlign","TypographyWeight","OverrideMode","TextInputVariant","TextInputSize","TextInputState","TextInputType","TooltipSize","TooltipPosition","TooltipAlign","TooltipColor","ToggleButtonVariant","ToggleButtonSize","CheckboxSize","CheckboxVariant","RadioSize","AvatarSize","AvatarStatus","ToastVariant","CardShadow","ToastPosition","QrPattern","import_lucide_react","IconName","AlertCircleIcon","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","rootBase","import_jsx_runtime","React","React","import_jsx_runtime","React","import_jsx_runtime","stateIcon","React","import_jsx_runtime","clamp","React","import_jsx_runtime","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","TooltipPrimitive","import_jsx_runtime","SIDE_MAP","React","import_jsx_runtime","React","React","React","DropdownMenuPrimitive","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","sizeClasses","React","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_class_variance_authority","base","import_jsx_runtime","React","React","import_jsx_runtime","Calendar","React","import_jsx_runtime","import_jsx_runtime","base","d","pattern","iconSize","Calendar","React","Popover","import_jsx_runtime","formatDate","iconSize","Calendar","React","Popover","import_jsx_runtime","iconSize","React","Popover","import_jsx_runtime","iconSize","React","import_jsx_runtime","iconSize","React","Popover","import_jsx_runtime","iconSize","React","RadixDialog","import_jsx_runtime","React","import_jsx_runtime","FormGroupDirection","Root","React","RadixDialog","import_jsx_runtime","ModalSize","React","ReactDOM","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","QRCode","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","_"]}
|