kz-design-system 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/button.d.mts +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/button.js +6 -2
- package/dist/button.js.map +1 -1
- package/dist/button.mjs +11 -3
- package/dist/button.mjs.map +1 -1
- package/dist/color-picker.js +6 -2
- package/dist/color-picker.js.map +1 -1
- package/dist/color-picker.mjs +11 -3
- package/dist/color-picker.mjs.map +1 -1
- package/dist/date-range-picker.js +6 -2
- package/dist/date-range-picker.js.map +1 -1
- package/dist/date-range-picker.mjs +11 -3
- package/dist/date-range-picker.mjs.map +1 -1
- package/dist/date-time-picker.js +6 -2
- package/dist/date-time-picker.js.map +1 -1
- package/dist/date-time-picker.mjs +11 -3
- package/dist/date-time-picker.mjs.map +1 -1
- package/dist/dropdown.js +6 -2
- package/dist/dropdown.js.map +1 -1
- package/dist/dropdown.mjs +11 -3
- package/dist/dropdown.mjs.map +1 -1
- package/dist/error-page.js +5 -1
- package/dist/error-page.js.map +1 -1
- package/dist/error-page.mjs +10 -2
- package/dist/error-page.mjs.map +1 -1
- package/dist/file-uploader.js +5 -1
- package/dist/file-uploader.js.map +1 -1
- package/dist/file-uploader.mjs +10 -2
- package/dist/file-uploader.mjs.map +1 -1
- package/dist/icon-picker.d.mts +1 -1
- package/dist/icon-picker.d.ts +1 -1
- package/dist/icon-picker.js +10 -2
- package/dist/icon-picker.js.map +1 -1
- package/dist/icon-picker.mjs +15 -3
- package/dist/icon-picker.mjs.map +1 -1
- package/dist/{icon-registry-YZFYW-mt.d.mts → icon-registry-DY5NSKnE.d.mts} +5 -1
- package/dist/{icon-registry-YZFYW-mt.d.ts → icon-registry-DY5NSKnE.d.ts} +5 -1
- package/dist/icon.d.mts +2 -2
- package/dist/icon.d.ts +2 -2
- package/dist/icon.js +9 -1
- package/dist/icon.js.map +1 -1
- package/dist/icon.mjs +14 -2
- package/dist/icon.mjs.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +994 -693
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +999 -695
- package/dist/index.mjs.map +1 -1
- package/dist/modal.js +5 -1
- package/dist/modal.js.map +1 -1
- package/dist/modal.mjs +10 -2
- package/dist/modal.mjs.map +1 -1
- package/dist/number-input.js +6 -2
- package/dist/number-input.js.map +1 -1
- package/dist/number-input.mjs +11 -3
- package/dist/number-input.mjs.map +1 -1
- package/dist/pagination.js +6 -2
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.mjs +11 -3
- package/dist/pagination.mjs.map +1 -1
- package/dist/qr-renderer.js +6 -2
- package/dist/qr-renderer.js.map +1 -1
- package/dist/qr-renderer.mjs +11 -3
- package/dist/qr-renderer.mjs.map +1 -1
- package/dist/range-slider.d.mts +38 -0
- package/dist/range-slider.d.ts +38 -0
- package/dist/range-slider.js +466 -0
- package/dist/range-slider.js.map +1 -0
- package/dist/range-slider.mjs +426 -0
- package/dist/range-slider.mjs.map +1 -0
- package/dist/select.js +5 -1
- package/dist/select.js.map +1 -1
- package/dist/select.mjs +10 -2
- package/dist/select.mjs.map +1 -1
- package/dist/sidemenu.d.mts +1 -1
- package/dist/sidemenu.d.ts +1 -1
- package/dist/sidemenu.js +5 -1
- package/dist/sidemenu.js.map +1 -1
- package/dist/sidemenu.mjs +10 -2
- package/dist/sidemenu.mjs.map +1 -1
- package/dist/sidepanel.js +5 -1
- package/dist/sidepanel.js.map +1 -1
- package/dist/sidepanel.mjs +10 -2
- package/dist/sidepanel.mjs.map +1 -1
- package/dist/sql-editor.js +6 -2
- package/dist/sql-editor.js.map +1 -1
- package/dist/sql-editor.mjs +11 -3
- package/dist/sql-editor.mjs.map +1 -1
- package/dist/styles.css +2 -2
- package/dist/table.d.mts +14 -0
- package/dist/table.d.ts +14 -0
- package/dist/table.js +41 -21
- package/dist/table.js.map +1 -1
- package/dist/table.mjs +46 -22
- package/dist/table.mjs.map +1 -1
- package/dist/tabs.js +5 -1
- package/dist/tabs.js.map +1 -1
- package/dist/tabs.mjs +10 -2
- package/dist/tabs.mjs.map +1 -1
- package/dist/text-area.js +5 -1
- package/dist/text-area.js.map +1 -1
- package/dist/text-area.mjs +10 -2
- package/dist/text-area.mjs.map +1 -1
- package/dist/text-input.js +5 -1
- package/dist/text-input.js.map +1 -1
- package/dist/text-input.mjs +10 -2
- package/dist/text-input.mjs.map +1 -1
- package/dist/toast.js +5 -1
- package/dist/toast.js.map +1 -1
- package/dist/toast.mjs +10 -2
- package/dist/toast.mjs.map +1 -1
- package/dist/toggle-button.js +6 -2
- package/dist/toggle-button.js.map +1 -1
- package/dist/toggle-button.mjs +11 -3
- package/dist/toggle-button.mjs.map +1 -1
- package/package.json +7 -1
package/dist/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/table/index.ts","../src/components/table/Table.tsx","../src/utils/cn.ts","../src/components/checkbox/Checkbox.tsx","../src/components/checkbox/checkbox.variants.ts","../src/components/text-input/TextInput.tsx","../src/components/typography/Typography.tsx","../src/components/typography/typography-variants.ts","../src/icon/Icon.tsx","../src/icon/icon-registry.tsx","../src/icon/icon-sizes.ts","../src/components/button/Button.tsx","../src/components/button/button.variants.ts","../src/components/pagination/Pagination.tsx","../src/components/dropdown/dropdown.tsx","../src/components/dropdown/DropdownButton.tsx"],"sourcesContent":["export { Table } from \"./Table\";\nexport type {\n TableProps,\n TableColumn,\n TableSortState,\n TablePaginationState,\n TableCellChange,\n TableSize,\n TableAlign,\n SortDirection,\n} from \"./Table.types\";\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 } 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 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 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 {columns.map((col) => {\n const style: React.CSSProperties = {};\n if (col.width) style.width = col.width;\n if (col.minWidth) style.minWidth = col.minWidth;\n if (col.maxWidth) style.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 )}\n style={style}\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 columns.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 columns.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 )}\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 {columns.map((col) => {\n const style: React.CSSProperties = {};\n if (col.width) style.width = col.width;\n if (col.minWidth) style.minWidth = col.minWidth;\n if (col.maxWidth) style.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 )}\n style={style}\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 )}\n style={style}\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 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 { 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 { 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 { 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 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 { 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} 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}\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};\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 * 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","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:pointer-events-none 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","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"],"mappings":"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","names":["React","React","React","React","AlertCircleIcon","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/table/index.ts","../src/components/table/Table.tsx","../src/utils/cn.ts","../src/components/checkbox/Checkbox.tsx","../src/components/checkbox/checkbox.variants.ts","../src/components/text-input/TextInput.tsx","../src/components/typography/Typography.tsx","../src/components/typography/typography-variants.ts","../src/icon/Icon.tsx","../src/icon/icon-registry.tsx","../src/icon/icon-sizes.ts","../src/components/button/Button.tsx","../src/components/button/button.variants.ts","../src/components/pagination/Pagination.tsx","../src/components/dropdown/dropdown.tsx","../src/components/dropdown/DropdownButton.tsx"],"sourcesContent":["export { Table } from \"./Table\";\nexport type {\n TableProps,\n TableColumn,\n TableSortState,\n TablePaginationState,\n TableCellChange,\n TableSize,\n TableAlign,\n SortDirection,\n} from \"./Table.types\";\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 { 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 { 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 { 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 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 { 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","/** 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 * 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","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","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"],"mappings":"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","names":["React","React","React","React","AlertCircleIcon","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|