asterui 0.12.58 → 0.12.60

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.
Files changed (96) hide show
  1. package/dist/components/Autocomplete.js +1 -1
  2. package/dist/components/Autocomplete.js.map +1 -1
  3. package/dist/components/Button.js +1 -1
  4. package/dist/components/Button.js.map +1 -1
  5. package/dist/components/Cascader.js +147 -146
  6. package/dist/components/Cascader.js.map +1 -1
  7. package/dist/components/Checkbox.js +1 -1
  8. package/dist/components/Checkbox.js.map +1 -1
  9. package/dist/components/ColorPicker.js +1 -1
  10. package/dist/components/ColorPicker.js.map +1 -1
  11. package/dist/components/ContextMenu.js +90 -89
  12. package/dist/components/ContextMenu.js.map +1 -1
  13. package/dist/components/CopyButton.js +1 -1
  14. package/dist/components/CopyButton.js.map +1 -1
  15. package/dist/components/Countdown.js +1 -1
  16. package/dist/components/Countdown.js.map +1 -1
  17. package/dist/components/DatePicker.js +1 -1
  18. package/dist/components/DatePicker.js.map +1 -1
  19. package/dist/components/Dock.js +1 -1
  20. package/dist/components/Dock.js.map +1 -1
  21. package/dist/components/Drawer.js +66 -65
  22. package/dist/components/Drawer.js.map +1 -1
  23. package/dist/components/Dropdown.js +174 -173
  24. package/dist/components/Dropdown.js.map +1 -1
  25. package/dist/components/Empty.js +1 -1
  26. package/dist/components/Empty.js.map +1 -1
  27. package/dist/components/FileInput.js +1 -1
  28. package/dist/components/FileInput.js.map +1 -1
  29. package/dist/components/Filter.js +1 -1
  30. package/dist/components/Filter.js.map +1 -1
  31. package/dist/components/Form.js +1 -1
  32. package/dist/components/Form.js.map +1 -1
  33. package/dist/components/Input.js +1 -1
  34. package/dist/components/Input.js.map +1 -1
  35. package/dist/components/InputNumber.js +1 -1
  36. package/dist/components/InputNumber.js.map +1 -1
  37. package/dist/components/List.js +1 -1
  38. package/dist/components/List.js.map +1 -1
  39. package/dist/components/Loading.js +1 -1
  40. package/dist/components/Loading.js.map +1 -1
  41. package/dist/components/Mention.js +66 -65
  42. package/dist/components/Mention.js.map +1 -1
  43. package/dist/components/Modal.js +1 -1
  44. package/dist/components/Modal.js.map +1 -1
  45. package/dist/components/OTPInput.js +1 -1
  46. package/dist/components/OTPInput.js.map +1 -1
  47. package/dist/components/Pagination.js +1 -1
  48. package/dist/components/Pagination.js.map +1 -1
  49. package/dist/components/Popconfirm.js +1 -1
  50. package/dist/components/Popconfirm.js.map +1 -1
  51. package/dist/components/Radio.js +1 -1
  52. package/dist/components/Radio.js.map +1 -1
  53. package/dist/components/Range.js +1 -1
  54. package/dist/components/Range.js.map +1 -1
  55. package/dist/components/Rating.js +1 -1
  56. package/dist/components/Rating.js.map +1 -1
  57. package/dist/components/RichTextEditor.js +1 -1
  58. package/dist/components/RichTextEditor.js.map +1 -1
  59. package/dist/components/Segmented.js +1 -1
  60. package/dist/components/Segmented.js.map +1 -1
  61. package/dist/components/Select.js +1 -1
  62. package/dist/components/Select.js.map +1 -1
  63. package/dist/components/Table.d.ts +19 -0
  64. package/dist/components/Table.js +348 -310
  65. package/dist/components/Table.js.map +1 -1
  66. package/dist/components/Tabs.js +1 -1
  67. package/dist/components/Tabs.js.map +1 -1
  68. package/dist/components/Textarea.js +1 -1
  69. package/dist/components/Textarea.js.map +1 -1
  70. package/dist/components/ThemeController.js +1 -1
  71. package/dist/components/ThemeController.js.map +1 -1
  72. package/dist/components/TimePicker.js +1 -1
  73. package/dist/components/TimePicker.js.map +1 -1
  74. package/dist/components/Toggle.js +1 -1
  75. package/dist/components/Toggle.js.map +1 -1
  76. package/dist/components/Tour.js +83 -82
  77. package/dist/components/Tour.js.map +1 -1
  78. package/dist/components/Transfer.js +107 -103
  79. package/dist/components/Transfer.js.map +1 -1
  80. package/dist/components/TreeSelect.js +245 -244
  81. package/dist/components/TreeSelect.js.map +1 -1
  82. package/dist/hooks/useTheme.d.ts +1 -1
  83. package/dist/hooks/useTheme.js +1 -1
  84. package/dist/hooks/useTheme.js.map +1 -1
  85. package/dist/index.d.ts +4 -4
  86. package/dist/index.js +2 -2
  87. package/dist/{components → providers}/ConfigProvider.d.ts +8 -0
  88. package/dist/providers/ConfigProvider.js +50 -0
  89. package/dist/providers/ConfigProvider.js.map +1 -0
  90. package/dist/providers/ThemeProvider.js.map +1 -0
  91. package/package.json +1 -1
  92. package/dist/components/ConfigProvider.js +0 -46
  93. package/dist/components/ConfigProvider.js.map +0 -1
  94. package/dist/components/ThemeProvider.js.map +0 -1
  95. /package/dist/{components → providers}/ThemeProvider.d.ts +0 -0
  96. /package/dist/{components → providers}/ThemeProvider.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../src/components/Table.tsx"],"sourcesContent":["import React, { useState, forwardRef, useMemo, useCallback, useId } from 'react'\n\n// DaisyUI classes\nconst dTable = 'table'\nconst dTableXs = 'table-xs'\nconst dTableSm = 'table-sm'\nconst dTableLg = 'table-lg'\nconst dTableXl = 'table-xl'\nconst dTableZebra = 'table-zebra'\nconst dTablePinRows = 'table-pin-rows'\nconst dTablePinCols = 'table-pin-cols'\nconst dDropdown = 'dropdown'\nconst dDropdownEnd = 'dropdown-end'\nconst dDropdownContent = 'dropdown-content'\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnSquare = 'btn-square'\nconst dBtnActive = 'btn-active'\nconst dMenu = 'menu'\nconst dCheckbox = 'checkbox'\nconst dCheckboxXs = 'checkbox-xs'\nconst dCheckboxPrimary = 'checkbox-primary'\nconst dRadio = 'radio'\nconst dRadioSm = 'radio-sm'\nconst dRadioPrimary = 'radio-primary'\nconst dDivider = 'divider'\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingLg = 'loading-lg'\nconst dJoin = 'join'\nconst dJoinItem = 'join-item'\nconst dSelect = 'select'\nconst dSelectSm = 'select-sm'\nconst dSelectBordered = 'select-bordered'\nconst dInput = 'input'\nconst dInputSm = 'input-sm'\nconst dInputBordered = 'input-bordered'\n\nexport interface FilterConfig {\n text: string\n value: string | number | boolean\n}\n\nexport type TableSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface ColumnType<T> {\n key: string\n title: React.ReactNode\n dataIndex?: keyof T & string\n render?: (value: T[keyof T] | undefined, record: T, index: number) => React.ReactNode\n width?: string | number\n align?: 'left' | 'center' | 'right'\n fixed?: 'left' | 'right'\n sorter?: boolean | ((a: T, b: T) => number)\n sortOrder?: 'ascend' | 'descend' | null\n filters?: FilterConfig[]\n filteredValue?: (string | number | boolean)[]\n onFilter?: (value: string | number | boolean, record: T) => boolean\n defaultSortOrder?: 'ascend' | 'descend'\n defaultFilteredValue?: (string | number | boolean)[]\n ellipsis?: boolean\n hidden?: boolean\n}\n\nexport interface RowSelection<T> {\n type?: 'checkbox' | 'radio'\n selectedRowKeys?: React.Key[]\n onChange?: (selectedRowKeys: React.Key[], selectedRows: T[]) => void\n getCheckboxProps?: (record: T) => { disabled?: boolean; name?: string }\n}\n\nexport interface ExpandableConfig<T> {\n expandedRowKeys?: React.Key[]\n defaultExpandedRowKeys?: React.Key[]\n expandedRowRender: (record: T, index: number, expanded: boolean) => React.ReactNode\n rowExpandable?: (record: T) => boolean\n onExpand?: (expanded: boolean, record: T) => void\n onExpandedRowsChange?: (expandedKeys: React.Key[]) => void\n expandRowByClick?: boolean\n expandIcon?: (props: { expanded: boolean; onExpand: () => void; record: T }) => React.ReactNode\n}\n\nexport interface PaginationConfig {\n current?: number\n pageSize?: number\n total?: number\n showSizeChanger?: boolean\n showQuickJumper?: boolean\n showTotal?: (total: number, range: [number, number]) => React.ReactNode\n pageSizeOptions?: number[]\n onChange?: (page: number, pageSize: number) => void\n onShowSizeChange?: (current: number, size: number) => void\n position?: 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight'\n}\n\nexport interface ScrollConfig {\n x?: number | string\n y?: number | string\n}\n\nexport interface SorterResult<T> {\n column?: ColumnType<T>\n order?: 'ascend' | 'descend' | null\n field?: string\n}\n\nexport interface TableChangeExtra<T> {\n currentDataSource: T[]\n action: 'paginate' | 'sort' | 'filter'\n}\n\nexport interface TableProps<T> {\n columns: ColumnType<T>[]\n dataSource: T[]\n rowKey?: keyof T & string | ((record: T) => string)\n loading?: boolean\n size?: TableSize\n bordered?: boolean\n hoverable?: boolean\n striped?: boolean\n pinRows?: boolean\n pinCols?: boolean\n pagination?: false | PaginationConfig\n rowSelection?: RowSelection<T>\n expandable?: ExpandableConfig<T>\n scroll?: ScrollConfig\n className?: string\n onRow?: (record: T, index: number) => React.HTMLAttributes<HTMLTableRowElement>\n onChange?: (\n pagination: PaginationConfig,\n filters: Record<string, (string | number | boolean)[] | null>,\n sorter: SorterResult<T>,\n extra: TableChangeExtra<T>\n ) => void\n onSortChange?: (sorter: SorterResult<T>) => void\n onFilterChange?: (filters: Record<string, (string | number | boolean)[] | null>) => void\n locale?: {\n emptyText?: React.ReactNode\n filterConfirm?: string\n filterReset?: string\n selectAll?: string\n selectInvert?: string\n }\n 'data-testid'?: string\n 'aria-label'?: string\n}\n\nconst sizeClasses: Record<TableSize, string> = {\n xs: dTableXs,\n sm: dTableSm,\n md: '',\n lg: dTableLg,\n xl: dTableXl,\n}\n\nfunction FilterDropdown({\n filters,\n selectedValues,\n onChange,\n locale,\n testId,\n}: {\n filters: FilterConfig[]\n selectedValues: (string | number | boolean)[]\n onChange: (values: (string | number | boolean)[]) => void\n locale?: { filterConfirm?: string; filterReset?: string }\n testId: string\n}) {\n const [isOpen, setIsOpen] = useState(false)\n const dropdownId = useId()\n\n const handleToggle = (value: string | number | boolean) => {\n const newValues = selectedValues.includes(value)\n ? selectedValues.filter((v) => v !== value)\n : [...selectedValues, value]\n onChange(newValues)\n }\n\n const handleClear = () => {\n onChange([])\n setIsOpen(false)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n }\n }\n\n return (\n <div className={`${dDropdown} ${dDropdownEnd}`} onKeyDown={handleKeyDown}>\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ${selectedValues.length > 0 ? 'text-primary' : ''}`}\n onClick={() => setIsOpen(!isOpen)}\n aria-label=\"Filter column\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={dropdownId}\n data-testid={`${testId}-filter-button`}\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\" />\n </svg>\n </button>\n {isOpen && (\n <div\n id={dropdownId}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n className={`${dDropdownContent} z-[1] ${dMenu} p-2 shadow bg-base-100 rounded-box w-52 border border-base-content/10`}\n data-testid={`${testId}-filter-dropdown`}\n >\n <div className=\"space-y-2\">\n {filters.map((filter) => (\n <label\n key={String(filter.value)}\n className=\"flex items-center gap-2 cursor-pointer p-2 hover:bg-base-200 rounded\"\n role=\"option\"\n aria-selected={selectedValues.includes(filter.value)}\n >\n <input\n type=\"checkbox\"\n className={`${dCheckbox} ${dCheckboxXs} ${dCheckboxPrimary}`}\n checked={selectedValues.includes(filter.value)}\n onChange={() => handleToggle(filter.value)}\n data-testid={`${testId}-filter-${String(filter.value)}`}\n />\n <span className=\"text-sm\">{filter.text}</span>\n </label>\n ))}\n </div>\n <div className={`${dDivider} my-1`}></div>\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} w-full`}\n onClick={handleClear}\n data-testid={`${testId}-filter-reset`}\n >\n {locale?.filterReset ?? 'Clear'}\n </button>\n </div>\n )}\n </div>\n )\n}\n\nfunction DefaultExpandIcon({ expanded, onExpand }: { expanded: boolean; onExpand: () => void }) {\n return (\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ${dBtnSquare}`}\n onClick={(e) => {\n e.stopPropagation()\n onExpand()\n }}\n aria-label={expanded ? 'Collapse row' : 'Expand row'}\n aria-expanded={expanded}\n >\n <svg\n className={`w-4 h-4 transition-transform ${expanded ? 'rotate-90' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )\n}\n\nfunction TableInner<T extends Record<string, unknown>>(\n {\n columns,\n dataSource,\n rowKey = 'id' as keyof T & string,\n loading = false,\n size = 'md',\n bordered = false,\n hoverable = true,\n striped = false,\n pinRows = false,\n pinCols = false,\n pagination,\n rowSelection,\n expandable,\n scroll,\n className = '',\n onRow,\n onChange,\n onSortChange,\n onFilterChange,\n locale,\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n ...rest\n }: TableProps<T>,\n ref: React.ForwardedRef<HTMLTableElement>\n) {\n const baseTestId = testId ?? 'table'\n const defaultPageSize = 10\n\n // Pagination state\n const [currentPage, setCurrentPage] = useState(\n pagination !== false && pagination?.current ? pagination.current : 1\n )\n const [internalPageSize, setInternalPageSize] = useState(\n pagination !== false && pagination?.pageSize ? pagination.pageSize : defaultPageSize\n )\n const pageSize = pagination !== false && pagination?.pageSize !== undefined ? pagination.pageSize : internalPageSize\n\n // Sorting state\n const [sortState, setSortState] = useState<{\n columnKey: string | null\n order: 'ascend' | 'descend' | null\n }>(() => {\n // Check for controlled sort\n const controlledSortColumn = columns.find((col) => col.sortOrder !== undefined)\n if (controlledSortColumn) {\n return {\n columnKey: controlledSortColumn.key,\n order: controlledSortColumn.sortOrder ?? null,\n }\n }\n // Fallback to default\n const defaultSortColumn = columns.find((col) => col.defaultSortOrder)\n return {\n columnKey: defaultSortColumn?.key || null,\n order: defaultSortColumn?.defaultSortOrder || null,\n }\n })\n\n // Filtering state\n const [filterState, setFilterState] = useState<Record<string, (string | number | boolean)[]>>(() => {\n const initial: Record<string, (string | number | boolean)[]> = {}\n columns.forEach((col) => {\n // Check for controlled filter\n if (col.filteredValue !== undefined) {\n initial[col.key] = col.filteredValue\n } else if (col.defaultFilteredValue) {\n initial[col.key] = col.defaultFilteredValue\n }\n })\n return initial\n })\n\n // Row selection state\n const [selectedKeys, setSelectedKeys] = useState<React.Key[]>(\n rowSelection?.selectedRowKeys || []\n )\n\n // Expandable state\n const [expandedKeys, setExpandedKeys] = useState<React.Key[]>(\n expandable?.expandedRowKeys ?? expandable?.defaultExpandedRowKeys ?? []\n )\n\n // Sync controlled states\n const isControlledSort = columns.some((col) => col.sortOrder !== undefined)\n const isControlledFilter = columns.some((col) => col.filteredValue !== undefined)\n const isControlledExpand = expandable?.expandedRowKeys !== undefined\n const isControlledSelection = rowSelection?.selectedRowKeys !== undefined\n\n const effectiveSortState = useMemo(() => {\n if (isControlledSort) {\n const controlledCol = columns.find((col) => col.sortOrder !== undefined && col.sortOrder !== null)\n return {\n columnKey: controlledCol?.key ?? null,\n order: controlledCol?.sortOrder ?? null,\n }\n }\n return sortState\n }, [isControlledSort, columns, sortState])\n\n const effectiveFilterState = useMemo(() => {\n if (isControlledFilter) {\n const controlled: Record<string, (string | number | boolean)[]> = {}\n columns.forEach((col) => {\n if (col.filteredValue !== undefined) {\n controlled[col.key] = col.filteredValue\n }\n })\n return controlled\n }\n return filterState\n }, [isControlledFilter, columns, filterState])\n\n const effectiveSelectedKeys = isControlledSelection ? rowSelection!.selectedRowKeys! : selectedKeys\n const effectiveExpandedKeys = isControlledExpand ? expandable!.expandedRowKeys! : expandedKeys\n\n const isPaginationEnabled = pagination !== false\n\n // Visible columns (filter out hidden)\n const visibleColumns = useMemo(() => columns.filter((col) => !col.hidden), [columns])\n\n // Get row key helper\n const getRowKey = useCallback((record: T, index: number): string => {\n if (typeof rowKey === 'function') {\n return rowKey(record)\n }\n const keyValue = record[rowKey]\n return keyValue !== undefined ? String(keyValue) : String(index)\n }, [rowKey])\n\n // Apply filters\n const filteredData = useMemo(() => {\n let data = [...dataSource]\n Object.entries(effectiveFilterState).forEach(([columnKey, filterValues]) => {\n if (filterValues && filterValues.length > 0) {\n const column = columns.find((col) => col.key === columnKey)\n if (column?.onFilter) {\n data = data.filter((record) =>\n filterValues.some((value) => column.onFilter!(value, record))\n )\n }\n }\n })\n return data\n }, [dataSource, effectiveFilterState, columns])\n\n // Apply sorting\n const sortedData = useMemo(() => {\n if (!effectiveSortState.columnKey || !effectiveSortState.order) {\n return filteredData\n }\n const column = columns.find((col) => col.key === effectiveSortState.columnKey)\n if (!column?.sorter) {\n return filteredData\n }\n\n const sorted = [...filteredData]\n sorted.sort((a, b) => {\n let result = 0\n if (typeof column.sorter === 'function') {\n result = column.sorter(a, b)\n } else if (column.dataIndex) {\n const aVal = a[column.dataIndex]\n const bVal = b[column.dataIndex]\n if (aVal === undefined || aVal === null) return 1\n if (bVal === undefined || bVal === null) return -1\n if (aVal < bVal) result = -1\n if (aVal > bVal) result = 1\n }\n return effectiveSortState.order === 'ascend' ? result : -result\n })\n return sorted\n }, [filteredData, effectiveSortState, columns])\n\n const totalItems = pagination !== false && pagination?.total !== undefined ? pagination.total : sortedData.length\n const totalPages = Math.ceil(totalItems / pageSize)\n const startIndex = (currentPage - 1) * pageSize\n const endIndex = startIndex + pageSize\n const paginatedData = isPaginationEnabled ? sortedData.slice(startIndex, endIndex) : sortedData\n\n const handlePageChange = useCallback((page: number) => {\n setCurrentPage(page)\n if (pagination !== false && pagination?.onChange) {\n pagination.onChange(page, pageSize)\n }\n if (onChange) {\n const sorterResult: SorterResult<T> = {\n column: columns.find((col) => col.key === effectiveSortState.columnKey),\n order: effectiveSortState.order,\n field: effectiveSortState.columnKey ?? undefined,\n }\n onChange(\n { current: page, pageSize, total: totalItems },\n effectiveFilterState,\n sorterResult,\n { currentDataSource: sortedData, action: 'paginate' }\n )\n }\n }, [pagination, pageSize, onChange, columns, effectiveSortState, effectiveFilterState, sortedData, totalItems])\n\n const handlePageSizeChange = useCallback((newSize: number) => {\n setInternalPageSize(newSize)\n setCurrentPage(1)\n if (pagination !== false && pagination?.onShowSizeChange) {\n pagination.onShowSizeChange(1, newSize)\n }\n if (pagination !== false && pagination?.onChange) {\n pagination.onChange(1, newSize)\n }\n }, [pagination])\n\n const handleSort = useCallback((columnKey: string) => {\n const column = columns.find((col) => col.key === columnKey)\n let newOrder: 'ascend' | 'descend' | null = 'ascend'\n\n if (effectiveSortState.columnKey === columnKey) {\n if (effectiveSortState.order === 'ascend') newOrder = 'descend'\n else if (effectiveSortState.order === 'descend') newOrder = null\n }\n\n if (!isControlledSort) {\n setSortState({ columnKey: newOrder ? columnKey : null, order: newOrder })\n }\n setCurrentPage(1)\n\n const sorterResult: SorterResult<T> = {\n column,\n order: newOrder,\n field: columnKey,\n }\n\n onSortChange?.(sorterResult)\n\n if (onChange) {\n onChange(\n { current: 1, pageSize, total: totalItems },\n effectiveFilterState,\n sorterResult,\n { currentDataSource: sortedData, action: 'sort' }\n )\n }\n }, [columns, effectiveSortState, isControlledSort, pageSize, totalItems, effectiveFilterState, sortedData, onSortChange, onChange])\n\n const handleFilterChange = useCallback((columnKey: string, values: (string | number | boolean)[]) => {\n const newFilterState = {\n ...effectiveFilterState,\n [columnKey]: values,\n }\n\n if (!isControlledFilter) {\n setFilterState(newFilterState)\n }\n setCurrentPage(1)\n\n onFilterChange?.(newFilterState)\n\n if (onChange) {\n const sorterResult: SorterResult<T> = {\n column: columns.find((col) => col.key === effectiveSortState.columnKey),\n order: effectiveSortState.order,\n field: effectiveSortState.columnKey ?? undefined,\n }\n onChange(\n { current: 1, pageSize, total: totalItems },\n newFilterState,\n sorterResult,\n { currentDataSource: sortedData, action: 'filter' }\n )\n }\n }, [effectiveFilterState, isControlledFilter, columns, effectiveSortState, pageSize, totalItems, sortedData, onFilterChange, onChange])\n\n const handleSelectAll = useCallback((checked: boolean) => {\n const newSelectedKeys = checked\n ? paginatedData.map((record, index) => getRowKey(record, index))\n : []\n if (!isControlledSelection) {\n setSelectedKeys(newSelectedKeys)\n }\n if (rowSelection?.onChange) {\n const selectedRecords = checked ? paginatedData : []\n rowSelection.onChange(newSelectedKeys, selectedRecords)\n }\n }, [paginatedData, getRowKey, isControlledSelection, rowSelection])\n\n const handleSelectRow = useCallback((record: T, index: number, checked: boolean) => {\n const key = getRowKey(record, index)\n\n if (rowSelection?.type === 'radio') {\n const newSelectedKeys = checked ? [key] : []\n if (!isControlledSelection) {\n setSelectedKeys(newSelectedKeys)\n }\n if (rowSelection?.onChange) {\n rowSelection.onChange(newSelectedKeys, checked ? [record] : [])\n }\n return\n }\n\n const newSelectedKeys = checked\n ? [...effectiveSelectedKeys, key]\n : effectiveSelectedKeys.filter((k) => k !== key)\n\n if (!isControlledSelection) {\n setSelectedKeys(newSelectedKeys)\n }\n if (rowSelection?.onChange) {\n const selectedRecords = sortedData.filter((r, i) =>\n newSelectedKeys.includes(getRowKey(r, i))\n )\n rowSelection.onChange(newSelectedKeys, selectedRecords)\n }\n }, [getRowKey, rowSelection, isControlledSelection, effectiveSelectedKeys, sortedData])\n\n const handleExpand = useCallback((record: T, index: number) => {\n const key = getRowKey(record, index)\n const isExpanded = effectiveExpandedKeys.includes(key)\n const newExpandedKeys = isExpanded\n ? effectiveExpandedKeys.filter((k) => k !== key)\n : [...effectiveExpandedKeys, key]\n\n if (!isControlledExpand) {\n setExpandedKeys(newExpandedKeys)\n }\n expandable?.onExpand?.(!isExpanded, record)\n expandable?.onExpandedRowsChange?.(newExpandedKeys)\n }, [getRowKey, effectiveExpandedKeys, isControlledExpand, expandable])\n\n const getCellValue = useCallback((column: ColumnType<T>, record: T, index: number) => {\n if (column.render) {\n return column.render(\n column.dataIndex ? record[column.dataIndex] : undefined,\n record,\n index\n )\n }\n if (column.dataIndex) {\n const value = record[column.dataIndex]\n return value !== undefined && value !== null ? String(value) : ''\n }\n return ''\n }, [])\n\n const getAlignClass = (align?: 'left' | 'center' | 'right') => {\n if (align === 'center') return 'text-center'\n if (align === 'right') return 'text-right'\n return 'text-left'\n }\n\n // Calculate fixed column offsets\n const getFixedColumnStyle = useCallback((columnIndex: number, isHeader = false): { className: string; style?: React.CSSProperties } => {\n const column = visibleColumns[columnIndex]\n if (!column?.fixed) return { className: '' }\n\n const classes = ['sticky', 'bg-base-100']\n let offset = 0\n const style: React.CSSProperties = {\n boxSizing: 'border-box',\n }\n\n if (column.fixed === 'left') {\n for (let i = 0; i < columnIndex; i++) {\n if (visibleColumns[i].fixed === 'left' && visibleColumns[i].width) {\n const colWidth = visibleColumns[i].width!\n const width = typeof colWidth === 'number' ? colWidth : parseInt(String(colWidth))\n if (!isNaN(width)) offset += width\n }\n }\n if (offset === 0) {\n classes.push('left-0')\n } else {\n style.left = `${offset}px`\n }\n classes.push(isHeader ? 'z-30' : 'z-20')\n\n let lastLeftFixedIndex = -1\n for (let i = visibleColumns.length - 1; i >= 0; i--) {\n if (visibleColumns[i].fixed === 'left') {\n lastLeftFixedIndex = i\n break\n }\n }\n if (columnIndex === lastLeftFixedIndex) {\n style.boxShadow = '2px 0 4px rgba(0, 0, 0, 0.1)'\n }\n }\n\n if (column.fixed === 'right') {\n for (let i = columnIndex + 1; i < visibleColumns.length; i++) {\n if (visibleColumns[i].fixed === 'right' && visibleColumns[i].width) {\n const colWidth = visibleColumns[i].width!\n const width = typeof colWidth === 'number' ? colWidth : parseInt(String(colWidth))\n if (!isNaN(width)) offset += width\n }\n }\n if (offset === 0) {\n classes.push('right-0')\n } else {\n style.right = `${offset}px`\n }\n classes.push(isHeader ? 'z-30' : 'z-20')\n\n const isFirstRightFixed = columnIndex === visibleColumns.findIndex((col) => col.fixed === 'right')\n if (isFirstRightFixed) {\n style.boxShadow = '-2px 0 4px rgba(0, 0, 0, 0.1)'\n }\n }\n\n return {\n className: classes.filter(Boolean).join(' '),\n style: Object.keys(style).length > 0 ? style : undefined,\n }\n }, [visibleColumns])\n\n const tableClasses = [\n dTable,\n 'bg-base-100',\n sizeClasses[size],\n striped && dTableZebra,\n pinRows && dTablePinRows,\n pinCols && dTablePinCols,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const hasFixedColumns = visibleColumns.some((col) => col.fixed)\n const hasExpandable = expandable !== undefined\n\n const wrapperStyle: React.CSSProperties = {}\n if (scroll?.x) {\n wrapperStyle.overflowX = 'auto'\n wrapperStyle.maxWidth = typeof scroll.x === 'number' ? `${scroll.x}px` : scroll.x\n }\n if (scroll?.y) {\n wrapperStyle.overflowY = 'auto'\n wrapperStyle.maxHeight = typeof scroll.y === 'number' ? `${scroll.y}px` : scroll.y\n }\n\n const wrapperClasses = [\n (!pinRows || hasFixedColumns || scroll?.x) && 'overflow-x-auto',\n bordered && 'rounded-box border border-base-content/5 bg-base-100',\n ]\n .filter(Boolean)\n .join(' ')\n\n if (loading) {\n return (\n <div className=\"flex justify-center items-center p-8\" data-testid={`${baseTestId}-loading`}>\n <span className={`${dLoading} ${dLoadingSpinner} ${dLoadingLg}`} aria-label=\"Loading\"></span>\n </div>\n )\n }\n\n const isAllSelected = paginatedData.length > 0 &&\n paginatedData.every((record, index) => effectiveSelectedKeys.includes(getRowKey(record, index)))\n const isSomeSelected = paginatedData.some((record, index) => effectiveSelectedKeys.includes(getRowKey(record, index)))\n\n const emptyText = locale?.emptyText ?? 'No data'\n\n // Calculate extra columns count (selection + expand)\n const extraColsCount = (rowSelection ? 1 : 0) + (hasExpandable ? 1 : 0)\n\n const renderPagination = () => {\n if (!isPaginationEnabled || totalPages <= 1) return null\n if (typeof pagination === 'boolean') return null\n\n const paginationConfig: PaginationConfig = pagination ?? {}\n const position = paginationConfig.position ?? 'bottomRight'\n const showSizeChanger = paginationConfig.showSizeChanger\n const showQuickJumper = paginationConfig.showQuickJumper\n const showTotal = paginationConfig.showTotal\n const pageSizeOptions = paginationConfig.pageSizeOptions ?? [10, 20, 50, 100]\n\n const justifyClass = position.includes('Left') ? 'justify-start' : position.includes('Center') ? 'justify-center' : 'justify-end'\n\n const paginationElement = (\n <div className={`flex items-center gap-4 ${justifyClass}`} data-testid={`${baseTestId}-pagination`}>\n {showTotal && (\n <span className=\"text-sm text-base-content/70\">\n {showTotal(totalItems, [startIndex + 1, Math.min(endIndex, totalItems)])}\n </span>\n )}\n\n {showSizeChanger && (\n <select\n className={`${dSelect} ${dSelectSm} ${dSelectBordered}`}\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n aria-label=\"Page size\"\n data-testid={`${baseTestId}-page-size`}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>{size} / page</option>\n ))}\n </select>\n )}\n\n <div className={dJoin}>\n <button\n type=\"button\"\n className={`${dJoinItem} ${dBtn} ${dBtnSm}`}\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n aria-label=\"Previous page\"\n data-testid={`${baseTestId}-prev`}\n >\n «\n </button>\n {Array.from({ length: Math.min(totalPages, 7) }, (_, i) => {\n let page: number\n if (totalPages <= 7) {\n page = i + 1\n } else if (currentPage <= 4) {\n page = i + 1\n } else if (currentPage >= totalPages - 3) {\n page = totalPages - 6 + i\n } else {\n page = currentPage - 3 + i\n }\n return (\n <button\n key={page}\n type=\"button\"\n className={`${dJoinItem} ${dBtn} ${dBtnSm} ${currentPage === page ? dBtnActive : ''}`}\n onClick={() => handlePageChange(page)}\n aria-label={`Page ${page}`}\n aria-current={currentPage === page ? 'page' : undefined}\n data-testid={`${baseTestId}-page-${page}`}\n >\n {page}\n </button>\n )\n })}\n <button\n type=\"button\"\n className={`${dJoinItem} ${dBtn} ${dBtnSm}`}\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n aria-label=\"Next page\"\n data-testid={`${baseTestId}-next`}\n >\n »\n </button>\n </div>\n\n {showQuickJumper && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">Go to</span>\n <input\n type=\"number\"\n className={`${dInput} ${dInputSm} ${dInputBordered} w-16`}\n min={1}\n max={totalPages}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const value = parseInt((e.target as HTMLInputElement).value)\n if (value >= 1 && value <= totalPages) {\n handlePageChange(value)\n }\n }\n }}\n aria-label=\"Go to page\"\n data-testid={`${baseTestId}-jumper`}\n />\n </div>\n )}\n </div>\n )\n\n return paginationElement\n }\n\n const paginationPosition = pagination && typeof pagination !== 'boolean' ? pagination.position : undefined\n const topPagination = isPaginationEnabled && paginationPosition?.startsWith('top') ? renderPagination() : null\n const bottomPagination = isPaginationEnabled && (!paginationPosition || paginationPosition.startsWith('bottom')) ? renderPagination() : null\n\n return (\n <div className=\"space-y-4\" data-testid={baseTestId} {...rest}>\n {topPagination}\n\n <div className={wrapperClasses} style={wrapperStyle}>\n <table\n ref={ref}\n className={tableClasses}\n style={{ borderCollapse: 'separate', borderSpacing: 0, tableLayout: 'fixed' }}\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={sortedData.length}\n data-testid={`${baseTestId}-table`}\n >\n <thead>\n <tr role=\"row\">\n {hasExpandable && (\n <th style={{ width: 50 }} className=\"sticky left-0 z-20 bg-base-100\" role=\"columnheader\">\n <span className=\"sr-only\">Expand</span>\n </th>\n )}\n {rowSelection && (\n <th\n style={{ width: 50 }}\n className={`sticky ${hasExpandable ? '' : 'left-0'} z-20 bg-base-100`}\n role=\"columnheader\"\n >\n {rowSelection.type !== 'radio' && (\n <input\n type=\"checkbox\"\n className={`${dCheckbox} checkbox-sm ${dCheckboxPrimary}`}\n checked={isAllSelected}\n ref={(el) => {\n if (el) el.indeterminate = isSomeSelected && !isAllSelected\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n aria-label={locale?.selectAll ?? 'Select all rows'}\n data-testid={`${baseTestId}-select-all`}\n />\n )}\n </th>\n )}\n {visibleColumns.map((column, columnIndex) => {\n const fixedStyle = getFixedColumnStyle(columnIndex, true)\n const isSorted = effectiveSortState.columnKey === column.key\n const sortOrder = isSorted ? effectiveSortState.order : null\n\n return (\n <th\n key={column.key}\n className={`${getAlignClass(column.align)} ${fixedStyle.className}`}\n style={{\n ...(column.width ? { width: column.width } : {}),\n ...fixedStyle.style,\n }}\n role=\"columnheader\"\n aria-sort={sortOrder === 'ascend' ? 'ascending' : sortOrder === 'descend' ? 'descending' : undefined}\n data-testid={`${baseTestId}-header-${column.key}`}\n >\n <div className=\"flex items-center gap-2\">\n <span\n className={column.sorter ? 'cursor-pointer select-none hover:text-primary' : ''}\n onClick={() => column.sorter && handleSort(column.key)}\n onKeyDown={(e) => {\n if (column.sorter && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n handleSort(column.key)\n }\n }}\n tabIndex={column.sorter ? 0 : undefined}\n role={column.sorter ? 'button' : undefined}\n aria-label={column.sorter ? `Sort by ${column.title}` : undefined}\n >\n {column.title}\n </span>\n {column.sorter && (\n <div className=\"flex flex-col\" aria-hidden=\"true\">\n <svg\n className={`w-3 h-3 ${sortOrder === 'ascend' ? 'text-primary' : 'text-base-content/30'}`}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path d=\"M5.293 9.707a1 1 0 010-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 01-1.414 1.414L11 7.414V15a1 1 0 11-2 0V7.414L6.707 9.707a1 1 0 01-1.414 0z\" />\n </svg>\n <svg\n className={`w-3 h-3 -mt-1 ${sortOrder === 'descend' ? 'text-primary' : 'text-base-content/30'}`}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path d=\"M14.707 10.293a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 111.414-1.414L9 12.586V5a1 1 0 012 0v7.586l2.293-2.293a1 1 0 011.414 0z\" />\n </svg>\n </div>\n )}\n {column.filters && (\n <FilterDropdown\n filters={column.filters}\n selectedValues={effectiveFilterState[column.key] || []}\n onChange={(values) => handleFilterChange(column.key, values)}\n locale={locale}\n testId={`${baseTestId}-${column.key}`}\n />\n )}\n </div>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {paginatedData.length === 0 ? (\n <tr role=\"row\">\n <td\n colSpan={visibleColumns.length + extraColsCount}\n className=\"text-center py-8 text-base-content/50\"\n role=\"gridcell\"\n data-testid={`${baseTestId}-empty`}\n >\n {emptyText}\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const rowProps = onRow?.(record, index) || {}\n const key = getRowKey(record, index)\n const isSelected = effectiveSelectedKeys.includes(key)\n const isExpanded = effectiveExpandedKeys.includes(key)\n const isExpandable = expandable?.rowExpandable ? expandable.rowExpandable(record) : true\n const rowClasses = [\n hoverable && 'hover:bg-base-200',\n isSelected && 'bg-primary/10',\n ]\n .filter(Boolean)\n .join(' ')\n\n const checkboxProps = rowSelection?.getCheckboxProps?.(record) || {}\n\n const handleRowClick = (e: React.MouseEvent<HTMLTableRowElement>) => {\n rowProps.onClick?.(e)\n if (expandable?.expandRowByClick && isExpandable) {\n handleExpand(record, index)\n }\n }\n\n return (\n <React.Fragment key={key}>\n <tr\n className={rowClasses}\n role=\"row\"\n aria-selected={isSelected}\n data-testid={`${baseTestId}-row-${index}`}\n data-state={isSelected ? 'selected' : undefined}\n {...rowProps}\n onClick={handleRowClick}\n >\n {hasExpandable && (\n <td className=\"sticky left-0 z-10 bg-base-100\" role=\"gridcell\">\n {isExpandable && (\n expandable.expandIcon ? (\n expandable.expandIcon({\n expanded: isExpanded,\n onExpand: () => handleExpand(record, index),\n record,\n })\n ) : (\n <DefaultExpandIcon\n expanded={isExpanded}\n onExpand={() => handleExpand(record, index)}\n />\n )\n )}\n </td>\n )}\n {rowSelection && (\n <td\n className={`sticky ${hasExpandable ? '' : 'left-0'} z-10 bg-base-100`}\n role=\"gridcell\"\n >\n <input\n type={rowSelection.type === 'radio' ? 'radio' : 'checkbox'}\n className={rowSelection.type === 'radio' ? `${dRadio} ${dRadioSm} ${dRadioPrimary}` : `${dCheckbox} checkbox-sm ${dCheckboxPrimary}`}\n checked={isSelected}\n onChange={(e) => handleSelectRow(record, index, e.target.checked)}\n aria-label={`Select row ${index + 1}`}\n data-testid={`${baseTestId}-row-${index}-select`}\n {...checkboxProps}\n />\n </td>\n )}\n {visibleColumns.map((column, columnIndex) => {\n const fixedStyle = getFixedColumnStyle(columnIndex, false)\n const cellContent = getCellValue(column, record, index)\n\n return (\n <td\n key={column.key}\n className={`${getAlignClass(column.align)} ${fixedStyle.className} ${column.ellipsis ? 'truncate max-w-0' : ''}`}\n style={fixedStyle.style}\n role=\"gridcell\"\n title={column.ellipsis && typeof cellContent === 'string' ? cellContent : undefined}\n data-testid={`${baseTestId}-row-${index}-${column.key}`}\n >\n {cellContent}\n </td>\n )\n })}\n </tr>\n {hasExpandable && isExpanded && (\n <tr\n className=\"bg-base-200/50\"\n role=\"row\"\n data-testid={`${baseTestId}-row-${index}-expanded`}\n >\n <td\n colSpan={visibleColumns.length + extraColsCount}\n className=\"p-4\"\n role=\"gridcell\"\n >\n {expandable.expandedRowRender(record, index, isExpanded)}\n </td>\n </tr>\n )}\n </React.Fragment>\n )\n })\n )}\n </tbody>\n </table>\n </div>\n\n {bottomPagination}\n </div>\n )\n}\n\nexport const Table = forwardRef(TableInner) as <T extends Record<string, unknown>>(\n props: TableProps<T> & { ref?: React.ForwardedRef<HTMLTableElement> }\n) => React.ReactElement\n"],"names":["dTable","dTableXs","dTableSm","dTableLg","dTableXl","dTableZebra","dTablePinRows","dTablePinCols","dDropdown","dDropdownEnd","dDropdownContent","dBtn","dBtnGhost","dBtnXs","dBtnSm","dBtnSquare","dBtnActive","dMenu","dCheckbox","dCheckboxXs","dCheckboxPrimary","dRadio","dRadioSm","dRadioPrimary","dDivider","dLoading","dLoadingSpinner","dLoadingLg","dJoin","dJoinItem","dSelect","dSelectSm","dSelectBordered","dInput","dInputSm","dInputBordered","sizeClasses","FilterDropdown","filters","selectedValues","onChange","locale","testId","isOpen","setIsOpen","useState","dropdownId","useId","handleToggle","value","newValues","v","handleClear","handleKeyDown","e","jsxs","jsx","filter","DefaultExpandIcon","expanded","onExpand","TableInner","columns","dataSource","rowKey","loading","size","bordered","hoverable","striped","pinRows","pinCols","pagination","rowSelection","expandable","scroll","className","onRow","onSortChange","onFilterChange","ariaLabel","rest","ref","baseTestId","defaultPageSize","currentPage","setCurrentPage","internalPageSize","setInternalPageSize","pageSize","sortState","setSortState","controlledSortColumn","col","defaultSortColumn","filterState","setFilterState","initial","selectedKeys","setSelectedKeys","expandedKeys","setExpandedKeys","isControlledSort","isControlledFilter","isControlledExpand","isControlledSelection","effectiveSortState","useMemo","controlledCol","effectiveFilterState","controlled","effectiveSelectedKeys","effectiveExpandedKeys","isPaginationEnabled","visibleColumns","getRowKey","useCallback","record","index","keyValue","filteredData","data","columnKey","filterValues","column","sortedData","sorted","a","b","result","aVal","bVal","totalItems","totalPages","startIndex","endIndex","paginatedData","handlePageChange","page","sorterResult","handlePageSizeChange","newSize","handleSort","newOrder","handleFilterChange","values","newFilterState","handleSelectAll","checked","newSelectedKeys","selectedRecords","handleSelectRow","key","k","r","i","handleExpand","isExpanded","newExpandedKeys","getCellValue","getAlignClass","align","getFixedColumnStyle","columnIndex","isHeader","classes","offset","style","colWidth","width","lastLeftFixedIndex","tableClasses","hasFixedColumns","hasExpandable","wrapperStyle","wrapperClasses","isAllSelected","isSomeSelected","emptyText","extraColsCount","renderPagination","paginationConfig","position","showSizeChanger","showQuickJumper","showTotal","pageSizeOptions","justifyClass","_","paginationPosition","topPagination","bottomPagination","el","fixedStyle","sortOrder","rowProps","isSelected","isExpandable","rowClasses","checkboxProps","handleRowClick","React","cellContent","Table","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../src/components/Table.tsx"],"sourcesContent":["import React, { useState, forwardRef, useMemo, useCallback, useId } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dTable = 'table'\nconst dTableXs = 'table-xs'\nconst dTableSm = 'table-sm'\nconst dTableMd = 'table-md'\nconst dTableLg = 'table-lg'\nconst dTableXl = 'table-xl'\nconst dTableZebra = 'table-zebra'\nconst dTablePinRows = 'table-pin-rows'\nconst dTablePinCols = 'table-pin-cols'\nconst dDropdown = 'dropdown'\nconst dDropdownEnd = 'dropdown-end'\nconst dDropdownContent = 'dropdown-content'\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnSquare = 'btn-square'\nconst dBtnActive = 'btn-active'\nconst dMenu = 'menu'\nconst dCheckbox = 'checkbox'\nconst dCheckboxXs = 'checkbox-xs'\nconst dCheckboxSm = 'checkbox-sm'\nconst dCheckboxMd = 'checkbox-md'\nconst dCheckboxLg = 'checkbox-lg'\nconst dCheckboxPrimary = 'checkbox-primary'\nconst dRadio = 'radio'\nconst dRadioXs = 'radio-xs'\nconst dRadioSm = 'radio-sm'\nconst dRadioMd = 'radio-md'\nconst dRadioLg = 'radio-lg'\nconst dRadioPrimary = 'radio-primary'\nconst dDivider = 'divider'\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingLg = 'loading-lg'\nconst dJoin = 'join'\nconst dJoinItem = 'join-item'\nconst dSelect = 'select'\nconst dSelectSm = 'select-sm'\nconst dSelectBordered = 'select-bordered'\nconst dInput = 'input'\nconst dInputSm = 'input-sm'\nconst dInputBordered = 'input-bordered'\n\nexport interface FilterConfig {\n text: string\n value: string | number | boolean\n}\n\nexport type TableSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface ColumnType<T> {\n key: string\n title: React.ReactNode\n dataIndex?: keyof T & string\n render?: (value: T[keyof T] | undefined, record: T, index: number) => React.ReactNode\n width?: string | number\n align?: 'left' | 'center' | 'right'\n fixed?: 'left' | 'right'\n sorter?: boolean | ((a: T, b: T) => number)\n sortOrder?: 'ascend' | 'descend' | null\n filters?: FilterConfig[]\n filteredValue?: (string | number | boolean)[]\n onFilter?: (value: string | number | boolean, record: T) => boolean\n defaultSortOrder?: 'ascend' | 'descend'\n defaultFilteredValue?: (string | number | boolean)[]\n ellipsis?: boolean\n hidden?: boolean\n className?: string\n onCell?: (record: T, index: number) => React.TdHTMLAttributes<HTMLTableCellElement>\n onHeaderCell?: (column: ColumnType<T>) => React.ThHTMLAttributes<HTMLTableCellElement>\n}\n\nexport interface RowSelection<T> {\n type?: 'checkbox' | 'radio'\n selectedRowKeys?: React.Key[]\n onChange?: (selectedRowKeys: React.Key[], selectedRows: T[]) => void\n onSelect?: (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void\n getCheckboxProps?: (record: T) => { disabled?: boolean; name?: string }\n columnTitle?: React.ReactNode\n columnWidth?: string | number\n fixed?: boolean\n hideSelectAll?: boolean\n}\n\nexport interface ExpandableConfig<T> {\n expandedRowKeys?: React.Key[]\n defaultExpandedRowKeys?: React.Key[]\n defaultExpandAllRows?: boolean\n expandedRowRender: (record: T, index: number, expanded: boolean) => React.ReactNode\n rowExpandable?: (record: T) => boolean\n onExpand?: (expanded: boolean, record: T) => void\n onExpandedRowsChange?: (expandedKeys: React.Key[]) => void\n expandRowByClick?: boolean\n expandIcon?: (props: { expanded: boolean; onExpand: () => void; record: T }) => React.ReactNode\n columnTitle?: React.ReactNode\n columnWidth?: string | number\n expandedRowClassName?: string | ((record: T, index: number, expanded: boolean) => string)\n showExpandColumn?: boolean\n}\n\nexport interface PaginationConfig {\n current?: number\n pageSize?: number\n total?: number\n showSizeChanger?: boolean\n showQuickJumper?: boolean\n showTotal?: (total: number, range: [number, number]) => React.ReactNode\n pageSizeOptions?: number[]\n onChange?: (page: number, pageSize: number) => void\n onShowSizeChange?: (current: number, size: number) => void\n position?: 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight'\n}\n\nexport interface ScrollConfig {\n x?: number | string\n y?: number | string\n}\n\nexport interface SorterResult<T> {\n column?: ColumnType<T>\n order?: 'ascend' | 'descend' | null\n field?: string\n}\n\nexport interface TableChangeExtra<T> {\n currentDataSource: T[]\n action: 'paginate' | 'sort' | 'filter'\n}\n\nexport interface TableProps<T> {\n columns: ColumnType<T>[]\n dataSource: T[]\n rowKey?: keyof T & string | ((record: T) => string)\n loading?: boolean\n size?: TableSize\n bordered?: boolean\n hoverable?: boolean\n striped?: boolean\n pinRows?: boolean\n pinCols?: boolean\n pagination?: false | PaginationConfig\n rowSelection?: RowSelection<T>\n expandable?: ExpandableConfig<T>\n scroll?: ScrollConfig\n className?: string\n showHeader?: boolean\n rowClassName?: string | ((record: T, index: number) => string)\n onRow?: (record: T, index: number) => React.HTMLAttributes<HTMLTableRowElement>\n onHeaderRow?: (columns: ColumnType<T>[]) => React.HTMLAttributes<HTMLTableRowElement>\n onChange?: (\n pagination: PaginationConfig,\n filters: Record<string, (string | number | boolean)[] | null>,\n sorter: SorterResult<T>,\n extra: TableChangeExtra<T>\n ) => void\n onSortChange?: (sorter: SorterResult<T>) => void\n onFilterChange?: (filters: Record<string, (string | number | boolean)[] | null>) => void\n locale?: {\n emptyText?: React.ReactNode\n filterConfirm?: string\n filterReset?: string\n selectAll?: string\n selectInvert?: string\n }\n title?: (currentPageData: T[]) => React.ReactNode\n footer?: (currentPageData: T[]) => React.ReactNode\n summary?: (currentPageData: T[]) => React.ReactNode\n 'data-testid'?: string\n 'aria-label'?: string\n}\n\nconst sizeClasses: Record<TableSize, string> = {\n xs: dTableXs,\n sm: dTableSm,\n md: dTableMd,\n lg: dTableLg,\n xl: dTableXl,\n}\n\nconst checkboxSizeClasses: Record<TableSize, string> = {\n xs: dCheckboxXs,\n sm: dCheckboxSm,\n md: dCheckboxMd,\n lg: dCheckboxLg,\n xl: dCheckboxLg, // DaisyUI max is lg\n}\n\nconst radioSizeClasses: Record<TableSize, string> = {\n xs: dRadioXs,\n sm: dRadioSm,\n md: dRadioMd,\n lg: dRadioLg,\n xl: dRadioLg, // DaisyUI max is lg\n}\n\nfunction FilterDropdown({\n filters,\n selectedValues,\n onChange,\n locale,\n testId,\n}: {\n filters: FilterConfig[]\n selectedValues: (string | number | boolean)[]\n onChange: (values: (string | number | boolean)[]) => void\n locale?: { filterConfirm?: string; filterReset?: string }\n testId: string\n}) {\n const [isOpen, setIsOpen] = useState(false)\n const dropdownId = useId()\n\n const handleToggle = (value: string | number | boolean) => {\n const newValues = selectedValues.includes(value)\n ? selectedValues.filter((v) => v !== value)\n : [...selectedValues, value]\n onChange(newValues)\n }\n\n const handleClear = () => {\n onChange([])\n setIsOpen(false)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n }\n }\n\n return (\n <div className={`${dDropdown} ${dDropdownEnd}`} onKeyDown={handleKeyDown}>\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ${selectedValues.length > 0 ? 'text-primary' : ''}`}\n onClick={() => setIsOpen(!isOpen)}\n aria-label=\"Filter column\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={dropdownId}\n data-testid={`${testId}-filter-button`}\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\" />\n </svg>\n </button>\n {isOpen && (\n <div\n id={dropdownId}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n className={`${dDropdownContent} z-[1] ${dMenu} p-2 shadow bg-base-100 rounded-box w-52 border border-base-content/10`}\n data-testid={`${testId}-filter-dropdown`}\n >\n <div className=\"space-y-2\">\n {filters.map((filter) => (\n <label\n key={String(filter.value)}\n className=\"flex items-center gap-2 cursor-pointer p-2 hover:bg-base-200 rounded\"\n role=\"option\"\n aria-selected={selectedValues.includes(filter.value)}\n >\n <input\n type=\"checkbox\"\n className={`${dCheckbox} ${dCheckboxXs} ${dCheckboxPrimary}`}\n checked={selectedValues.includes(filter.value)}\n onChange={() => handleToggle(filter.value)}\n data-testid={`${testId}-filter-${String(filter.value)}`}\n />\n <span className=\"text-sm\">{filter.text}</span>\n </label>\n ))}\n </div>\n <div className={`${dDivider} my-1`}></div>\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} w-full`}\n onClick={handleClear}\n data-testid={`${testId}-filter-reset`}\n >\n {locale?.filterReset ?? 'Clear'}\n </button>\n </div>\n )}\n </div>\n )\n}\n\nfunction DefaultExpandIcon({ expanded, onExpand }: { expanded: boolean; onExpand: () => void }) {\n return (\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ${dBtnSquare}`}\n onClick={(e) => {\n e.stopPropagation()\n onExpand()\n }}\n aria-label={expanded ? 'Collapse row' : 'Expand row'}\n aria-expanded={expanded}\n >\n <svg\n className={`w-4 h-4 transition-transform ${expanded ? 'rotate-90' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )\n}\n\nfunction TableInner<T extends Record<string, unknown>>(\n {\n columns,\n dataSource,\n rowKey = 'id' as keyof T & string,\n loading = false,\n size,\n bordered = false,\n hoverable = true,\n striped = false,\n pinRows = false,\n pinCols = false,\n pagination,\n rowSelection,\n expandable,\n scroll,\n className = '',\n showHeader = true,\n rowClassName,\n onRow,\n onHeaderRow,\n onChange,\n onSortChange,\n onFilterChange,\n locale: localeProp,\n title,\n footer,\n summary,\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n ...rest\n }: TableProps<T>,\n ref: React.ForwardedRef<HTMLTableElement>\n) {\n const { componentSize, locale: globalLocale } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const locale = {\n emptyText: localeProp?.emptyText ?? globalLocale?.Table?.emptyText ?? 'No data',\n filterConfirm: localeProp?.filterConfirm ?? globalLocale?.Table?.filterConfirm ?? 'OK',\n filterReset: localeProp?.filterReset ?? globalLocale?.Table?.filterReset ?? 'Reset',\n selectAll: localeProp?.selectAll ?? globalLocale?.Table?.selectAll ?? 'Select all',\n selectInvert: localeProp?.selectInvert ?? globalLocale?.Table?.selectInvert ?? 'Invert selection',\n }\n const baseTestId = testId ?? 'table'\n const defaultPageSize = 10\n\n // Pagination state\n const [currentPage, setCurrentPage] = useState(\n pagination !== false && pagination?.current ? pagination.current : 1\n )\n const [internalPageSize, setInternalPageSize] = useState(\n pagination !== false && pagination?.pageSize ? pagination.pageSize : defaultPageSize\n )\n const pageSize = pagination !== false && pagination?.pageSize !== undefined ? pagination.pageSize : internalPageSize\n\n // Sorting state\n const [sortState, setSortState] = useState<{\n columnKey: string | null\n order: 'ascend' | 'descend' | null\n }>(() => {\n // Check for controlled sort\n const controlledSortColumn = columns.find((col) => col.sortOrder !== undefined)\n if (controlledSortColumn) {\n return {\n columnKey: controlledSortColumn.key,\n order: controlledSortColumn.sortOrder ?? null,\n }\n }\n // Fallback to default\n const defaultSortColumn = columns.find((col) => col.defaultSortOrder)\n return {\n columnKey: defaultSortColumn?.key || null,\n order: defaultSortColumn?.defaultSortOrder || null,\n }\n })\n\n // Filtering state\n const [filterState, setFilterState] = useState<Record<string, (string | number | boolean)[]>>(() => {\n const initial: Record<string, (string | number | boolean)[]> = {}\n columns.forEach((col) => {\n // Check for controlled filter\n if (col.filteredValue !== undefined) {\n initial[col.key] = col.filteredValue\n } else if (col.defaultFilteredValue) {\n initial[col.key] = col.defaultFilteredValue\n }\n })\n return initial\n })\n\n // Row selection state\n const [selectedKeys, setSelectedKeys] = useState<React.Key[]>(\n rowSelection?.selectedRowKeys || []\n )\n\n // Expandable state\n const [expandedKeys, setExpandedKeys] = useState<React.Key[]>(() => {\n if (expandable?.expandedRowKeys) return expandable.expandedRowKeys\n if (expandable?.defaultExpandedRowKeys) return expandable.defaultExpandedRowKeys\n if (expandable?.defaultExpandAllRows) {\n return dataSource.map((record, index) => {\n if (typeof rowKey === 'function') return rowKey(record)\n const keyValue = record[rowKey]\n return keyValue !== undefined ? String(keyValue) : String(index)\n })\n }\n return []\n })\n\n // Sync controlled states\n const isControlledSort = columns.some((col) => col.sortOrder !== undefined)\n const isControlledFilter = columns.some((col) => col.filteredValue !== undefined)\n const isControlledExpand = expandable?.expandedRowKeys !== undefined\n const isControlledSelection = rowSelection?.selectedRowKeys !== undefined\n\n const effectiveSortState = useMemo(() => {\n if (isControlledSort) {\n const controlledCol = columns.find((col) => col.sortOrder !== undefined && col.sortOrder !== null)\n return {\n columnKey: controlledCol?.key ?? null,\n order: controlledCol?.sortOrder ?? null,\n }\n }\n return sortState\n }, [isControlledSort, columns, sortState])\n\n const effectiveFilterState = useMemo(() => {\n if (isControlledFilter) {\n const controlled: Record<string, (string | number | boolean)[]> = {}\n columns.forEach((col) => {\n if (col.filteredValue !== undefined) {\n controlled[col.key] = col.filteredValue\n }\n })\n return controlled\n }\n return filterState\n }, [isControlledFilter, columns, filterState])\n\n const effectiveSelectedKeys = isControlledSelection ? rowSelection!.selectedRowKeys! : selectedKeys\n const effectiveExpandedKeys = isControlledExpand ? expandable!.expandedRowKeys! : expandedKeys\n\n const isPaginationEnabled = pagination !== false\n\n // Visible columns (filter out hidden)\n const visibleColumns = useMemo(() => columns.filter((col) => !col.hidden), [columns])\n\n // Get row key helper\n const getRowKey = useCallback((record: T, index: number): string => {\n if (typeof rowKey === 'function') {\n return rowKey(record)\n }\n const keyValue = record[rowKey]\n return keyValue !== undefined ? String(keyValue) : String(index)\n }, [rowKey])\n\n // Apply filters\n const filteredData = useMemo(() => {\n let data = [...dataSource]\n Object.entries(effectiveFilterState).forEach(([columnKey, filterValues]) => {\n if (filterValues && filterValues.length > 0) {\n const column = columns.find((col) => col.key === columnKey)\n if (column?.onFilter) {\n data = data.filter((record) =>\n filterValues.some((value) => column.onFilter!(value, record))\n )\n }\n }\n })\n return data\n }, [dataSource, effectiveFilterState, columns])\n\n // Apply sorting\n const sortedData = useMemo(() => {\n if (!effectiveSortState.columnKey || !effectiveSortState.order) {\n return filteredData\n }\n const column = columns.find((col) => col.key === effectiveSortState.columnKey)\n if (!column?.sorter) {\n return filteredData\n }\n\n const sorted = [...filteredData]\n sorted.sort((a, b) => {\n let result = 0\n if (typeof column.sorter === 'function') {\n result = column.sorter(a, b)\n } else if (column.dataIndex) {\n const aVal = a[column.dataIndex]\n const bVal = b[column.dataIndex]\n if (aVal === undefined || aVal === null) return 1\n if (bVal === undefined || bVal === null) return -1\n if (aVal < bVal) result = -1\n if (aVal > bVal) result = 1\n }\n return effectiveSortState.order === 'ascend' ? result : -result\n })\n return sorted\n }, [filteredData, effectiveSortState, columns])\n\n const totalItems = pagination !== false && pagination?.total !== undefined ? pagination.total : sortedData.length\n const totalPages = Math.ceil(totalItems / pageSize)\n const startIndex = (currentPage - 1) * pageSize\n const endIndex = startIndex + pageSize\n const paginatedData = isPaginationEnabled ? sortedData.slice(startIndex, endIndex) : sortedData\n\n const handlePageChange = useCallback((page: number) => {\n setCurrentPage(page)\n if (pagination !== false && pagination?.onChange) {\n pagination.onChange(page, pageSize)\n }\n if (onChange) {\n const sorterResult: SorterResult<T> = {\n column: columns.find((col) => col.key === effectiveSortState.columnKey),\n order: effectiveSortState.order,\n field: effectiveSortState.columnKey ?? undefined,\n }\n onChange(\n { current: page, pageSize, total: totalItems },\n effectiveFilterState,\n sorterResult,\n { currentDataSource: sortedData, action: 'paginate' }\n )\n }\n }, [pagination, pageSize, onChange, columns, effectiveSortState, effectiveFilterState, sortedData, totalItems])\n\n const handlePageSizeChange = useCallback((newSize: number) => {\n setInternalPageSize(newSize)\n setCurrentPage(1)\n if (pagination !== false && pagination?.onShowSizeChange) {\n pagination.onShowSizeChange(1, newSize)\n }\n if (pagination !== false && pagination?.onChange) {\n pagination.onChange(1, newSize)\n }\n }, [pagination])\n\n const handleSort = useCallback((columnKey: string) => {\n const column = columns.find((col) => col.key === columnKey)\n let newOrder: 'ascend' | 'descend' | null = 'ascend'\n\n if (effectiveSortState.columnKey === columnKey) {\n if (effectiveSortState.order === 'ascend') newOrder = 'descend'\n else if (effectiveSortState.order === 'descend') newOrder = null\n }\n\n if (!isControlledSort) {\n setSortState({ columnKey: newOrder ? columnKey : null, order: newOrder })\n }\n setCurrentPage(1)\n\n const sorterResult: SorterResult<T> = {\n column,\n order: newOrder,\n field: columnKey,\n }\n\n onSortChange?.(sorterResult)\n\n if (onChange) {\n onChange(\n { current: 1, pageSize, total: totalItems },\n effectiveFilterState,\n sorterResult,\n { currentDataSource: sortedData, action: 'sort' }\n )\n }\n }, [columns, effectiveSortState, isControlledSort, pageSize, totalItems, effectiveFilterState, sortedData, onSortChange, onChange])\n\n const handleFilterChange = useCallback((columnKey: string, values: (string | number | boolean)[]) => {\n const newFilterState = {\n ...effectiveFilterState,\n [columnKey]: values,\n }\n\n if (!isControlledFilter) {\n setFilterState(newFilterState)\n }\n setCurrentPage(1)\n\n onFilterChange?.(newFilterState)\n\n if (onChange) {\n const sorterResult: SorterResult<T> = {\n column: columns.find((col) => col.key === effectiveSortState.columnKey),\n order: effectiveSortState.order,\n field: effectiveSortState.columnKey ?? undefined,\n }\n onChange(\n { current: 1, pageSize, total: totalItems },\n newFilterState,\n sorterResult,\n { currentDataSource: sortedData, action: 'filter' }\n )\n }\n }, [effectiveFilterState, isControlledFilter, columns, effectiveSortState, pageSize, totalItems, sortedData, onFilterChange, onChange])\n\n const handleSelectAll = useCallback((checked: boolean) => {\n const newSelectedKeys = checked\n ? paginatedData.map((record, index) => getRowKey(record, index))\n : []\n if (!isControlledSelection) {\n setSelectedKeys(newSelectedKeys)\n }\n if (rowSelection?.onChange) {\n const selectedRecords = checked ? paginatedData : []\n rowSelection.onChange(newSelectedKeys, selectedRecords)\n }\n }, [paginatedData, getRowKey, isControlledSelection, rowSelection])\n\n const handleSelectRow = useCallback((record: T, index: number, checked: boolean, nativeEvent?: Event) => {\n const key = getRowKey(record, index)\n\n if (rowSelection?.type === 'radio') {\n const newSelectedKeys = checked ? [key] : []\n const selectedRecords = checked ? [record] : []\n if (!isControlledSelection) {\n setSelectedKeys(newSelectedKeys)\n }\n rowSelection?.onSelect?.(record, checked, selectedRecords, nativeEvent!)\n rowSelection?.onChange?.(newSelectedKeys, selectedRecords)\n return\n }\n\n const newSelectedKeys = checked\n ? [...effectiveSelectedKeys, key]\n : effectiveSelectedKeys.filter((k) => k !== key)\n\n if (!isControlledSelection) {\n setSelectedKeys(newSelectedKeys)\n }\n const selectedRecords = sortedData.filter((r, i) =>\n newSelectedKeys.includes(getRowKey(r, i))\n )\n rowSelection?.onSelect?.(record, checked, selectedRecords, nativeEvent!)\n rowSelection?.onChange?.(newSelectedKeys, selectedRecords)\n }, [getRowKey, rowSelection, isControlledSelection, effectiveSelectedKeys, sortedData])\n\n const handleExpand = useCallback((record: T, index: number) => {\n const key = getRowKey(record, index)\n const isExpanded = effectiveExpandedKeys.includes(key)\n const newExpandedKeys = isExpanded\n ? effectiveExpandedKeys.filter((k) => k !== key)\n : [...effectiveExpandedKeys, key]\n\n if (!isControlledExpand) {\n setExpandedKeys(newExpandedKeys)\n }\n expandable?.onExpand?.(!isExpanded, record)\n expandable?.onExpandedRowsChange?.(newExpandedKeys)\n }, [getRowKey, effectiveExpandedKeys, isControlledExpand, expandable])\n\n const getCellValue = useCallback((column: ColumnType<T>, record: T, index: number) => {\n if (column.render) {\n return column.render(\n column.dataIndex ? record[column.dataIndex] : undefined,\n record,\n index\n )\n }\n if (column.dataIndex) {\n const value = record[column.dataIndex]\n return value !== undefined && value !== null ? String(value) : ''\n }\n return ''\n }, [])\n\n const getAlignClass = (align?: 'left' | 'center' | 'right') => {\n if (align === 'center') return 'text-center'\n if (align === 'right') return 'text-right'\n return 'text-left'\n }\n\n // Calculate fixed column offsets\n const getFixedColumnStyle = useCallback((columnIndex: number, isHeader = false): { className: string; style?: React.CSSProperties } => {\n const column = visibleColumns[columnIndex]\n if (!column?.fixed) return { className: '' }\n\n const classes = ['sticky', 'bg-base-100']\n let offset = 0\n const style: React.CSSProperties = {\n boxSizing: 'border-box',\n }\n\n if (column.fixed === 'left') {\n for (let i = 0; i < columnIndex; i++) {\n if (visibleColumns[i].fixed === 'left' && visibleColumns[i].width) {\n const colWidth = visibleColumns[i].width!\n const width = typeof colWidth === 'number' ? colWidth : parseInt(String(colWidth))\n if (!isNaN(width)) offset += width\n }\n }\n if (offset === 0) {\n classes.push('left-0')\n } else {\n style.left = `${offset}px`\n }\n classes.push(isHeader ? 'z-30' : 'z-20')\n\n let lastLeftFixedIndex = -1\n for (let i = visibleColumns.length - 1; i >= 0; i--) {\n if (visibleColumns[i].fixed === 'left') {\n lastLeftFixedIndex = i\n break\n }\n }\n if (columnIndex === lastLeftFixedIndex) {\n style.boxShadow = '2px 0 4px rgba(0, 0, 0, 0.1)'\n }\n }\n\n if (column.fixed === 'right') {\n for (let i = columnIndex + 1; i < visibleColumns.length; i++) {\n if (visibleColumns[i].fixed === 'right' && visibleColumns[i].width) {\n const colWidth = visibleColumns[i].width!\n const width = typeof colWidth === 'number' ? colWidth : parseInt(String(colWidth))\n if (!isNaN(width)) offset += width\n }\n }\n if (offset === 0) {\n classes.push('right-0')\n } else {\n style.right = `${offset}px`\n }\n classes.push(isHeader ? 'z-30' : 'z-20')\n\n const isFirstRightFixed = columnIndex === visibleColumns.findIndex((col) => col.fixed === 'right')\n if (isFirstRightFixed) {\n style.boxShadow = '-2px 0 4px rgba(0, 0, 0, 0.1)'\n }\n }\n\n return {\n className: classes.filter(Boolean).join(' '),\n style: Object.keys(style).length > 0 ? style : undefined,\n }\n }, [visibleColumns])\n\n const tableClasses = [\n dTable,\n 'bg-base-100',\n sizeClasses[effectiveSize],\n striped && dTableZebra,\n pinRows && dTablePinRows,\n pinCols && dTablePinCols,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const hasFixedColumns = visibleColumns.some((col) => col.fixed)\n const hasExpandable = expandable !== undefined\n const showExpandColumn = hasExpandable && (expandable?.showExpandColumn !== false)\n\n const wrapperStyle: React.CSSProperties = {}\n if (scroll?.x) {\n wrapperStyle.overflowX = 'auto'\n wrapperStyle.maxWidth = typeof scroll.x === 'number' ? `${scroll.x}px` : scroll.x\n }\n if (scroll?.y) {\n wrapperStyle.overflowY = 'auto'\n wrapperStyle.maxHeight = typeof scroll.y === 'number' ? `${scroll.y}px` : scroll.y\n }\n\n const wrapperClasses = [\n (!pinRows || hasFixedColumns || scroll?.x) && 'overflow-x-auto',\n bordered && 'rounded-box border border-base-content/5 bg-base-100',\n ]\n .filter(Boolean)\n .join(' ')\n\n if (loading) {\n return (\n <div className=\"flex justify-center items-center p-8\" data-testid={`${baseTestId}-loading`}>\n <span className={`${dLoading} ${dLoadingSpinner} ${dLoadingLg}`} aria-label=\"Loading\"></span>\n </div>\n )\n }\n\n const isAllSelected = paginatedData.length > 0 &&\n paginatedData.every((record, index) => effectiveSelectedKeys.includes(getRowKey(record, index)))\n const isSomeSelected = paginatedData.some((record, index) => effectiveSelectedKeys.includes(getRowKey(record, index)))\n\n const emptyText = locale?.emptyText ?? 'No data'\n\n // Calculate extra columns count (selection + expand)\n const extraColsCount = (rowSelection ? 1 : 0) + (showExpandColumn ? 1 : 0)\n\n const renderPagination = () => {\n if (!isPaginationEnabled || totalPages <= 1) return null\n if (typeof pagination === 'boolean') return null\n\n const paginationConfig: PaginationConfig = pagination ?? {}\n const position = paginationConfig.position ?? 'bottomRight'\n const showSizeChanger = paginationConfig.showSizeChanger\n const showQuickJumper = paginationConfig.showQuickJumper\n const showTotal = paginationConfig.showTotal\n const pageSizeOptions = paginationConfig.pageSizeOptions ?? [10, 20, 50, 100]\n\n const justifyClass = position.includes('Left') ? 'justify-start' : position.includes('Center') ? 'justify-center' : 'justify-end'\n\n const paginationElement = (\n <div className={`flex items-center gap-4 ${justifyClass}`} data-testid={`${baseTestId}-pagination`}>\n {showTotal && (\n <span className=\"text-sm text-base-content/70\">\n {showTotal(totalItems, [startIndex + 1, Math.min(endIndex, totalItems)])}\n </span>\n )}\n\n {showSizeChanger && (\n <select\n className={`${dSelect} ${dSelectSm} ${dSelectBordered}`}\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n aria-label=\"Page size\"\n data-testid={`${baseTestId}-page-size`}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>{size} / page</option>\n ))}\n </select>\n )}\n\n <div className={dJoin}>\n <button\n type=\"button\"\n className={`${dJoinItem} ${dBtn} ${dBtnSm}`}\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n aria-label=\"Previous page\"\n data-testid={`${baseTestId}-prev`}\n >\n «\n </button>\n {Array.from({ length: Math.min(totalPages, 7) }, (_, i) => {\n let page: number\n if (totalPages <= 7) {\n page = i + 1\n } else if (currentPage <= 4) {\n page = i + 1\n } else if (currentPage >= totalPages - 3) {\n page = totalPages - 6 + i\n } else {\n page = currentPage - 3 + i\n }\n return (\n <button\n key={page}\n type=\"button\"\n className={`${dJoinItem} ${dBtn} ${dBtnSm} ${currentPage === page ? dBtnActive : ''}`}\n onClick={() => handlePageChange(page)}\n aria-label={`Page ${page}`}\n aria-current={currentPage === page ? 'page' : undefined}\n data-testid={`${baseTestId}-page-${page}`}\n >\n {page}\n </button>\n )\n })}\n <button\n type=\"button\"\n className={`${dJoinItem} ${dBtn} ${dBtnSm}`}\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n aria-label=\"Next page\"\n data-testid={`${baseTestId}-next`}\n >\n »\n </button>\n </div>\n\n {showQuickJumper && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">Go to</span>\n <input\n type=\"number\"\n className={`${dInput} ${dInputSm} ${dInputBordered} w-16`}\n min={1}\n max={totalPages}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const value = parseInt((e.target as HTMLInputElement).value)\n if (value >= 1 && value <= totalPages) {\n handlePageChange(value)\n }\n }\n }}\n aria-label=\"Go to page\"\n data-testid={`${baseTestId}-jumper`}\n />\n </div>\n )}\n </div>\n )\n\n return paginationElement\n }\n\n const paginationPosition = pagination && typeof pagination !== 'boolean' ? pagination.position : undefined\n const topPagination = isPaginationEnabled && paginationPosition?.startsWith('top') ? renderPagination() : null\n const bottomPagination = isPaginationEnabled && (!paginationPosition || paginationPosition.startsWith('bottom')) ? renderPagination() : null\n\n return (\n <div className=\"space-y-4\" data-testid={baseTestId} {...rest}>\n {title && (\n <div className=\"text-lg font-semibold\" data-testid={`${baseTestId}-title`}>\n {title(paginatedData)}\n </div>\n )}\n\n {topPagination}\n\n <div className={wrapperClasses} style={wrapperStyle}>\n <table\n ref={ref}\n className={tableClasses}\n style={{ borderCollapse: 'separate', borderSpacing: 0, tableLayout: 'fixed' }}\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={sortedData.length}\n data-testid={`${baseTestId}-table`}\n >\n {showHeader && (\n <thead>\n <tr role=\"row\" {...(onHeaderRow?.(visibleColumns) || {})}>\n {showExpandColumn && (\n <th style={{ width: expandable?.columnWidth ?? 50 }} className=\"sticky left-0 z-20 bg-base-100\" role=\"columnheader\">\n {expandable?.columnTitle ?? <span className=\"sr-only\">Expand</span>}\n </th>\n )}\n {rowSelection && (\n <th\n style={{ width: rowSelection.columnWidth ?? 50 }}\n className={`${rowSelection.fixed !== false ? 'sticky' : ''} ${rowSelection.fixed !== false && !showExpandColumn ? 'left-0' : ''} z-20 bg-base-100`}\n role=\"columnheader\"\n >\n {rowSelection.columnTitle !== undefined ? (\n rowSelection.columnTitle\n ) : rowSelection.type !== 'radio' && !rowSelection.hideSelectAll ? (\n <input\n type=\"checkbox\"\n className={`${dCheckbox} ${checkboxSizeClasses[effectiveSize]} ${dCheckboxPrimary}`}\n checked={isAllSelected}\n ref={(el) => {\n if (el) el.indeterminate = isSomeSelected && !isAllSelected\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n aria-label={locale?.selectAll ?? 'Select all rows'}\n data-testid={`${baseTestId}-select-all`}\n />\n ) : null}\n </th>\n )}\n {visibleColumns.map((column, columnIndex) => {\n const fixedStyle = getFixedColumnStyle(columnIndex, true)\n const isSorted = effectiveSortState.columnKey === column.key\n const sortOrder = isSorted ? effectiveSortState.order : null\n\n const headerCellProps = column.onHeaderCell?.(column) || {}\n return (\n <th\n key={column.key}\n {...headerCellProps}\n className={[getAlignClass(column.align), fixedStyle.className, column.className, headerCellProps.className].filter(Boolean).join(' ')}\n style={{\n ...(column.width ? { width: column.width } : {}),\n ...fixedStyle.style,\n ...headerCellProps.style,\n }}\n role=\"columnheader\"\n aria-sort={sortOrder === 'ascend' ? 'ascending' : sortOrder === 'descend' ? 'descending' : undefined}\n data-testid={`${baseTestId}-header-${column.key}`}\n >\n <div className=\"flex items-center gap-2\">\n <span\n className={column.sorter ? 'cursor-pointer select-none hover:text-primary' : ''}\n onClick={() => column.sorter && handleSort(column.key)}\n onKeyDown={(e) => {\n if (column.sorter && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n handleSort(column.key)\n }\n }}\n tabIndex={column.sorter ? 0 : undefined}\n role={column.sorter ? 'button' : undefined}\n aria-label={column.sorter ? `Sort by ${column.title}` : undefined}\n >\n {column.title}\n </span>\n {column.sorter && (\n <div className=\"flex flex-col\" aria-hidden=\"true\">\n <svg\n className={`w-3 h-3 ${sortOrder === 'ascend' ? 'text-primary' : 'text-base-content/30'}`}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path d=\"M5.293 9.707a1 1 0 010-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 01-1.414 1.414L11 7.414V15a1 1 0 11-2 0V7.414L6.707 9.707a1 1 0 01-1.414 0z\" />\n </svg>\n <svg\n className={`w-3 h-3 -mt-1 ${sortOrder === 'descend' ? 'text-primary' : 'text-base-content/30'}`}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path d=\"M14.707 10.293a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 111.414-1.414L9 12.586V5a1 1 0 012 0v7.586l2.293-2.293a1 1 0 011.414 0z\" />\n </svg>\n </div>\n )}\n {column.filters && (\n <FilterDropdown\n filters={column.filters}\n selectedValues={effectiveFilterState[column.key] || []}\n onChange={(values) => handleFilterChange(column.key, values)}\n locale={locale}\n testId={`${baseTestId}-${column.key}`}\n />\n )}\n </div>\n </th>\n )\n })}\n </tr>\n </thead>\n )}\n <tbody>\n {paginatedData.length === 0 ? (\n <tr role=\"row\">\n <td\n colSpan={visibleColumns.length + extraColsCount}\n className=\"text-center py-8 text-base-content/50\"\n role=\"gridcell\"\n data-testid={`${baseTestId}-empty`}\n >\n {emptyText}\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const rowProps = onRow?.(record, index) || {}\n const key = getRowKey(record, index)\n const isSelected = effectiveSelectedKeys.includes(key)\n const isExpanded = effectiveExpandedKeys.includes(key)\n const isExpandable = expandable?.rowExpandable ? expandable.rowExpandable(record) : true\n const customRowClassName = typeof rowClassName === 'function' ? rowClassName(record, index) : rowClassName\n const rowClasses = [\n hoverable && 'hover:bg-base-200',\n isSelected && 'bg-primary/10',\n customRowClassName,\n ]\n .filter(Boolean)\n .join(' ')\n\n const checkboxProps = rowSelection?.getCheckboxProps?.(record) || {}\n\n const handleRowClick = (e: React.MouseEvent<HTMLTableRowElement>) => {\n rowProps.onClick?.(e)\n if (expandable?.expandRowByClick && isExpandable) {\n handleExpand(record, index)\n }\n }\n\n return (\n <React.Fragment key={key}>\n <tr\n className={rowClasses}\n role=\"row\"\n aria-selected={isSelected}\n data-testid={`${baseTestId}-row-${index}`}\n data-state={isSelected ? 'selected' : undefined}\n {...rowProps}\n onClick={handleRowClick}\n >\n {showExpandColumn && (\n <td className=\"sticky left-0 z-10 bg-base-100\" role=\"gridcell\">\n {isExpandable && (\n expandable!.expandIcon ? (\n expandable!.expandIcon({\n expanded: isExpanded,\n onExpand: () => handleExpand(record, index),\n record,\n })\n ) : (\n <DefaultExpandIcon\n expanded={isExpanded}\n onExpand={() => handleExpand(record, index)}\n />\n )\n )}\n </td>\n )}\n {rowSelection && (\n <td\n className={`${rowSelection.fixed !== false ? 'sticky' : ''} ${rowSelection.fixed !== false && !showExpandColumn ? 'left-0' : ''} z-10 bg-base-100`}\n role=\"gridcell\"\n >\n <input\n type={rowSelection.type === 'radio' ? 'radio' : 'checkbox'}\n className={rowSelection.type === 'radio' ? `${dRadio} ${radioSizeClasses[effectiveSize]} ${dRadioPrimary}` : `${dCheckbox} ${checkboxSizeClasses[effectiveSize]} ${dCheckboxPrimary}`}\n checked={isSelected}\n onChange={(e) => handleSelectRow(record, index, e.target.checked, e.nativeEvent)}\n aria-label={`Select row ${index + 1}`}\n data-testid={`${baseTestId}-row-${index}-select`}\n {...checkboxProps}\n />\n </td>\n )}\n {visibleColumns.map((column, columnIndex) => {\n const fixedStyle = getFixedColumnStyle(columnIndex, false)\n const cellContent = getCellValue(column, record, index)\n const cellProps = column.onCell?.(record, index) || {}\n\n return (\n <td\n key={column.key}\n {...cellProps}\n className={[getAlignClass(column.align), fixedStyle.className, column.ellipsis ? 'truncate max-w-0' : '', column.className, cellProps.className].filter(Boolean).join(' ')}\n style={{ ...fixedStyle.style, ...cellProps.style }}\n role=\"gridcell\"\n title={column.ellipsis && typeof cellContent === 'string' ? cellContent : undefined}\n data-testid={`${baseTestId}-row-${index}-${column.key}`}\n >\n {cellContent}\n </td>\n )\n })}\n </tr>\n {hasExpandable && isExpanded && (\n <tr\n className={[\n 'bg-base-200/50',\n typeof expandable!.expandedRowClassName === 'function'\n ? expandable!.expandedRowClassName(record, index, isExpanded)\n : expandable!.expandedRowClassName\n ].filter(Boolean).join(' ')}\n role=\"row\"\n data-testid={`${baseTestId}-row-${index}-expanded`}\n >\n <td\n colSpan={visibleColumns.length + extraColsCount}\n className=\"p-4\"\n role=\"gridcell\"\n >\n {expandable!.expandedRowRender(record, index, isExpanded)}\n </td>\n </tr>\n )}\n </React.Fragment>\n )\n })\n )}\n </tbody>\n {summary && (\n <tfoot data-testid={`${baseTestId}-summary`}>\n {summary(paginatedData)}\n </tfoot>\n )}\n </table>\n </div>\n\n {bottomPagination}\n\n {footer && (\n <div className=\"text-sm text-base-content/70\" data-testid={`${baseTestId}-footer`}>\n {footer(paginatedData)}\n </div>\n )}\n </div>\n )\n}\n\nexport const Table = forwardRef(TableInner) as <T extends Record<string, unknown>>(\n props: TableProps<T> & { ref?: React.ForwardedRef<HTMLTableElement> }\n) => React.ReactElement\n"],"names":["dTable","dTableXs","dTableSm","dTableMd","dTableLg","dTableXl","dTableZebra","dTablePinRows","dTablePinCols","dDropdown","dDropdownEnd","dDropdownContent","dBtn","dBtnGhost","dBtnXs","dBtnSm","dBtnSquare","dBtnActive","dMenu","dCheckbox","dCheckboxXs","dCheckboxSm","dCheckboxMd","dCheckboxLg","dCheckboxPrimary","dRadio","dRadioXs","dRadioSm","dRadioMd","dRadioLg","dRadioPrimary","dDivider","dLoading","dLoadingSpinner","dLoadingLg","dJoin","dJoinItem","dSelect","dSelectSm","dSelectBordered","dInput","dInputSm","dInputBordered","sizeClasses","checkboxSizeClasses","radioSizeClasses","FilterDropdown","filters","selectedValues","onChange","locale","testId","isOpen","setIsOpen","useState","dropdownId","useId","handleToggle","value","newValues","v","handleClear","handleKeyDown","e","jsxs","jsx","filter","DefaultExpandIcon","expanded","onExpand","TableInner","columns","dataSource","rowKey","loading","size","bordered","hoverable","striped","pinRows","pinCols","pagination","rowSelection","expandable","scroll","className","showHeader","rowClassName","onRow","onHeaderRow","onSortChange","onFilterChange","localeProp","title","footer","summary","ariaLabel","rest","ref","componentSize","globalLocale","useConfig","effectiveSize","baseTestId","defaultPageSize","currentPage","setCurrentPage","internalPageSize","setInternalPageSize","pageSize","sortState","setSortState","controlledSortColumn","col","defaultSortColumn","filterState","setFilterState","initial","selectedKeys","setSelectedKeys","expandedKeys","setExpandedKeys","record","index","keyValue","isControlledSort","isControlledFilter","isControlledExpand","isControlledSelection","effectiveSortState","useMemo","controlledCol","effectiveFilterState","controlled","effectiveSelectedKeys","effectiveExpandedKeys","isPaginationEnabled","visibleColumns","getRowKey","useCallback","filteredData","data","columnKey","filterValues","column","sortedData","sorted","a","b","result","aVal","bVal","totalItems","totalPages","startIndex","endIndex","paginatedData","handlePageChange","page","sorterResult","handlePageSizeChange","newSize","handleSort","newOrder","handleFilterChange","values","newFilterState","handleSelectAll","checked","newSelectedKeys","selectedRecords","handleSelectRow","nativeEvent","key","k","r","i","handleExpand","isExpanded","newExpandedKeys","getCellValue","getAlignClass","align","getFixedColumnStyle","columnIndex","isHeader","classes","offset","style","colWidth","width","lastLeftFixedIndex","tableClasses","hasFixedColumns","hasExpandable","showExpandColumn","wrapperStyle","wrapperClasses","isAllSelected","isSomeSelected","emptyText","extraColsCount","renderPagination","paginationConfig","position","showSizeChanger","showQuickJumper","showTotal","pageSizeOptions","justifyClass","_","paginationPosition","topPagination","bottomPagination","el","fixedStyle","sortOrder","headerCellProps","rowProps","isSelected","isExpandable","customRowClassName","rowClasses","checkboxProps","handleRowClick","React","cellContent","cellProps","Table","forwardRef"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as s, jsxs as d, Fragment as b } from "react/jsx-runtime";
2
2
  import h, { forwardRef as $, useState as X } from "react";
3
- import { useConfig as w } from "./ConfigProvider.js";
3
+ import { useConfig as w } from "../providers/ConfigProvider.js";
4
4
  const D = "tabs", E = "tabs-box", F = "tabs-border", K = "tabs-lift", M = "tabs-xs", O = "tabs-sm", V = "tabs-md", q = "tabs-lg", G = "tabs-xl", H = "tab", I = "tab-active", J = "tab-disabled", Q = {
5
5
  box: E,
6
6
  border: F,
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import React, { useState, forwardRef } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dTabs = 'tabs'\nconst dTabsBox = 'tabs-box'\nconst dTabsBorder = 'tabs-border'\nconst dTabsLift = 'tabs-lift'\nconst dTabsXs = 'tabs-xs'\nconst dTabsSm = 'tabs-sm'\nconst dTabsMd = 'tabs-md'\nconst dTabsLg = 'tabs-lg'\nconst dTabsXl = 'tabs-xl'\nconst dTab = 'tab'\nconst dTabActive = 'tab-active'\nconst dTabDisabled = 'tab-disabled'\n\nexport type TabsVariant = 'box' | 'border' | 'lift'\nexport type TabsSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TabsPosition = 'top' | 'bottom'\n\nexport interface TabItem {\n key: string\n label: React.ReactNode\n children?: React.ReactNode\n disabled?: boolean\n icon?: React.ReactNode\n}\n\nexport interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Tab panels (compound pattern) */\n children?: React.ReactNode\n /** Tab items (data-driven pattern) */\n items?: TabItem[]\n /** Current active tab key (controlled) */\n activeKey?: string\n /** Default active tab key (uncontrolled) */\n defaultActiveKey?: string\n /** Callback when tab changes */\n onChange?: (key: string) => void\n /** Visual style variant */\n variant?: TabsVariant\n /** Tab size */\n size?: TabsSize\n /** Tab position relative to content */\n position?: TabsPosition\n /** Test ID prefix for child elements */\n 'data-testid'?: string\n}\n\nexport interface TabPanelProps {\n /** Tab button label */\n tab: React.ReactNode\n /** Disable the tab */\n disabled?: boolean\n /** Tab panel content */\n children?: React.ReactNode\n /** Tab icon */\n icon?: React.ReactNode\n}\n\nconst variantClasses: Record<TabsVariant, string> = {\n box: dTabsBox,\n border: dTabsBorder,\n lift: dTabsLift,\n}\n\nconst sizeClasses: Record<TabsSize, string> = {\n xs: dTabsXs,\n sm: dTabsSm,\n md: dTabsMd,\n lg: dTabsLg,\n xl: dTabsXl,\n}\n\ninterface InternalPanelProps extends TabPanelProps {\n _key: string\n}\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsProps>(function TabsRoot(\n {\n children,\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant,\n size,\n position = 'top',\n 'data-testid': testId,\n className = '',\n ...rest\n },\n ref\n) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? (componentSize as TabsSize | undefined)\n\n // Helper for test IDs\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n // Get panels from children (compound pattern), extracting key from React element\n const panels = React.Children.toArray(children)\n .filter((child): child is React.ReactElement<TabPanelProps> =>\n React.isValidElement(child) && child.type === TabPanel\n )\n .map((child) => ({\n ...child.props,\n _key: child.key != null ? String(child.key) : '',\n }))\n\n // Convert items to panel-like structure if using data-driven pattern\n const effectivePanels: InternalPanelProps[] = items && items.length > 0\n ? items.map(item => ({\n _key: item.key,\n tab: item.label,\n children: item.children,\n disabled: item.disabled,\n icon: item.icon,\n }))\n : panels\n\n const [internalActiveKey, setInternalActiveKey] = useState(\n defaultActiveKey || effectivePanels[0]?._key || ''\n )\n const currentActiveKey = activeKey !== undefined ? activeKey : internalActiveKey\n\n const handleTabClick = (key: string) => {\n if (activeKey === undefined) {\n setInternalActiveKey(key)\n }\n onChange?.(key)\n }\n\n const classes = [\n dTabs,\n variant && variantClasses[variant],\n effectiveSize && sizeClasses[effectiveSize],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const activePanel = effectivePanels.find((panel) => panel._key === currentActiveKey)\n\n const tabList = (\n <div role=\"tablist\" className={classes} data-testid={getTestId('tablist')}>\n {effectivePanels.map((panel) => {\n const isActive = currentActiveKey === panel._key\n const tabClasses = [\n dTab,\n isActive && dTabActive,\n panel.disabled && dTabDisabled,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <button\n key={panel._key}\n role=\"tab\"\n className={tabClasses}\n onClick={() => !panel.disabled && handleTabClick(panel._key)}\n disabled={panel.disabled}\n data-state={isActive ? 'active' : 'inactive'}\n data-testid={getTestId(`tab-${panel._key}`)}\n aria-selected={isActive}\n >\n {panel.icon && <span className=\"mr-1\">{panel.icon}</span>}\n {panel.tab}\n </button>\n )\n })}\n </div>\n )\n\n const content = activePanel && (\n <div className={position === 'top' ? 'mt-4' : 'mb-4'} role=\"tabpanel\" data-testid={getTestId('tabpanel')}>\n {activePanel.children}\n </div>\n )\n\n return (\n <div ref={ref} data-testid={testId} {...rest}>\n {position === 'top' ? (\n <>\n {tabList}\n {content}\n </>\n ) : (\n <>\n {content}\n {tabList}\n </>\n )}\n </div>\n )\n})\n\nfunction TabPanel({ children }: TabPanelProps) {\n // This component is only used for type checking and is not rendered directly\n // The actual rendering is done in TabsRoot\n return <>{children}</>\n}\n\nexport const Tabs = Object.assign(TabsRoot, {\n Panel: TabPanel,\n})\n"],"names":["dTabs","dTabsBox","dTabsBorder","dTabsLift","dTabsXs","dTabsSm","dTabsMd","dTabsLg","dTabsXl","dTab","dTabActive","dTabDisabled","variantClasses","sizeClasses","TabsRoot","forwardRef","children","items","activeKey","defaultActiveKey","onChange","variant","size","position","testId","className","rest","ref","componentSize","useConfig","effectiveSize","getTestId","suffix","panels","React","child","TabPanel","effectivePanels","item","internalActiveKey","setInternalActiveKey","useState","currentActiveKey","handleTabClick","key","classes","activePanel","panel","tabList","jsx","isActive","tabClasses","jsxs","content","Fragment","Tabs"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import React, { useState, forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dTabs = 'tabs'\nconst dTabsBox = 'tabs-box'\nconst dTabsBorder = 'tabs-border'\nconst dTabsLift = 'tabs-lift'\nconst dTabsXs = 'tabs-xs'\nconst dTabsSm = 'tabs-sm'\nconst dTabsMd = 'tabs-md'\nconst dTabsLg = 'tabs-lg'\nconst dTabsXl = 'tabs-xl'\nconst dTab = 'tab'\nconst dTabActive = 'tab-active'\nconst dTabDisabled = 'tab-disabled'\n\nexport type TabsVariant = 'box' | 'border' | 'lift'\nexport type TabsSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TabsPosition = 'top' | 'bottom'\n\nexport interface TabItem {\n key: string\n label: React.ReactNode\n children?: React.ReactNode\n disabled?: boolean\n icon?: React.ReactNode\n}\n\nexport interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Tab panels (compound pattern) */\n children?: React.ReactNode\n /** Tab items (data-driven pattern) */\n items?: TabItem[]\n /** Current active tab key (controlled) */\n activeKey?: string\n /** Default active tab key (uncontrolled) */\n defaultActiveKey?: string\n /** Callback when tab changes */\n onChange?: (key: string) => void\n /** Visual style variant */\n variant?: TabsVariant\n /** Tab size */\n size?: TabsSize\n /** Tab position relative to content */\n position?: TabsPosition\n /** Test ID prefix for child elements */\n 'data-testid'?: string\n}\n\nexport interface TabPanelProps {\n /** Tab button label */\n tab: React.ReactNode\n /** Disable the tab */\n disabled?: boolean\n /** Tab panel content */\n children?: React.ReactNode\n /** Tab icon */\n icon?: React.ReactNode\n}\n\nconst variantClasses: Record<TabsVariant, string> = {\n box: dTabsBox,\n border: dTabsBorder,\n lift: dTabsLift,\n}\n\nconst sizeClasses: Record<TabsSize, string> = {\n xs: dTabsXs,\n sm: dTabsSm,\n md: dTabsMd,\n lg: dTabsLg,\n xl: dTabsXl,\n}\n\ninterface InternalPanelProps extends TabPanelProps {\n _key: string\n}\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsProps>(function TabsRoot(\n {\n children,\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant,\n size,\n position = 'top',\n 'data-testid': testId,\n className = '',\n ...rest\n },\n ref\n) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? (componentSize as TabsSize | undefined)\n\n // Helper for test IDs\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n // Get panels from children (compound pattern), extracting key from React element\n const panels = React.Children.toArray(children)\n .filter((child): child is React.ReactElement<TabPanelProps> =>\n React.isValidElement(child) && child.type === TabPanel\n )\n .map((child) => ({\n ...child.props,\n _key: child.key != null ? String(child.key) : '',\n }))\n\n // Convert items to panel-like structure if using data-driven pattern\n const effectivePanels: InternalPanelProps[] = items && items.length > 0\n ? items.map(item => ({\n _key: item.key,\n tab: item.label,\n children: item.children,\n disabled: item.disabled,\n icon: item.icon,\n }))\n : panels\n\n const [internalActiveKey, setInternalActiveKey] = useState(\n defaultActiveKey || effectivePanels[0]?._key || ''\n )\n const currentActiveKey = activeKey !== undefined ? activeKey : internalActiveKey\n\n const handleTabClick = (key: string) => {\n if (activeKey === undefined) {\n setInternalActiveKey(key)\n }\n onChange?.(key)\n }\n\n const classes = [\n dTabs,\n variant && variantClasses[variant],\n effectiveSize && sizeClasses[effectiveSize],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const activePanel = effectivePanels.find((panel) => panel._key === currentActiveKey)\n\n const tabList = (\n <div role=\"tablist\" className={classes} data-testid={getTestId('tablist')}>\n {effectivePanels.map((panel) => {\n const isActive = currentActiveKey === panel._key\n const tabClasses = [\n dTab,\n isActive && dTabActive,\n panel.disabled && dTabDisabled,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <button\n key={panel._key}\n role=\"tab\"\n className={tabClasses}\n onClick={() => !panel.disabled && handleTabClick(panel._key)}\n disabled={panel.disabled}\n data-state={isActive ? 'active' : 'inactive'}\n data-testid={getTestId(`tab-${panel._key}`)}\n aria-selected={isActive}\n >\n {panel.icon && <span className=\"mr-1\">{panel.icon}</span>}\n {panel.tab}\n </button>\n )\n })}\n </div>\n )\n\n const content = activePanel && (\n <div className={position === 'top' ? 'mt-4' : 'mb-4'} role=\"tabpanel\" data-testid={getTestId('tabpanel')}>\n {activePanel.children}\n </div>\n )\n\n return (\n <div ref={ref} data-testid={testId} {...rest}>\n {position === 'top' ? (\n <>\n {tabList}\n {content}\n </>\n ) : (\n <>\n {content}\n {tabList}\n </>\n )}\n </div>\n )\n})\n\nfunction TabPanel({ children }: TabPanelProps) {\n // This component is only used for type checking and is not rendered directly\n // The actual rendering is done in TabsRoot\n return <>{children}</>\n}\n\nexport const Tabs = Object.assign(TabsRoot, {\n Panel: TabPanel,\n})\n"],"names":["dTabs","dTabsBox","dTabsBorder","dTabsLift","dTabsXs","dTabsSm","dTabsMd","dTabsLg","dTabsXl","dTab","dTabActive","dTabDisabled","variantClasses","sizeClasses","TabsRoot","forwardRef","children","items","activeKey","defaultActiveKey","onChange","variant","size","position","testId","className","rest","ref","componentSize","useConfig","effectiveSize","getTestId","suffix","panels","React","child","TabPanel","effectivePanels","item","internalActiveKey","setInternalActiveKey","useState","currentActiveKey","handleTabClick","key","classes","activePanel","panel","tabList","jsx","isActive","tabClasses","jsxs","content","Fragment","Tabs"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
2
  import { forwardRef as T } from "react";
3
- import { useConfig as f } from "./ConfigProvider.js";
3
+ import { useConfig as f } from "../providers/ConfigProvider.js";
4
4
  const u = "textarea", g = "textarea-bordered", p = "textarea-ghost", y = "textarea-xs", S = "textarea-sm", w = "textarea-md", C = "textarea-lg", z = "textarea-xl", N = "textarea-neutral", h = "textarea-primary", j = "textarea-secondary", B = "textarea-accent", X = "textarea-info", b = "textarea-success", v = "textarea-warning", A = "textarea-error", E = T(
5
5
  ({
6
6
  size: t,
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sources":["../../src/components/Textarea.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dTextarea = 'textarea'\nconst dTextareaBordered = 'textarea-bordered'\nconst dTextareaGhost = 'textarea-ghost'\nconst dTextareaXs = 'textarea-xs'\nconst dTextareaSm = 'textarea-sm'\nconst dTextareaMd = 'textarea-md'\nconst dTextareaLg = 'textarea-lg'\nconst dTextareaXl = 'textarea-xl'\nconst dTextareaNeutral = 'textarea-neutral'\nconst dTextareaPrimary = 'textarea-primary'\nconst dTextareaSecondary = 'textarea-secondary'\nconst dTextareaAccent = 'textarea-accent'\nconst dTextareaInfo = 'textarea-info'\nconst dTextareaSuccess = 'textarea-success'\nconst dTextareaWarning = 'textarea-warning'\nconst dTextareaError = 'textarea-error'\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size,\n color,\n ghost = false,\n bordered = true,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dTextareaXs,\n sm: dTextareaSm,\n md: dTextareaMd,\n lg: dTextareaLg,\n xl: dTextareaXl,\n }\n\n const colorClasses = {\n neutral: dTextareaNeutral,\n primary: dTextareaPrimary,\n secondary: dTextareaSecondary,\n accent: dTextareaAccent,\n info: dTextareaInfo,\n success: dTextareaSuccess,\n warning: dTextareaWarning,\n error: dTextareaError,\n }\n\n const textareaClasses = [\n dTextarea,\n 'w-full',\n bordered && dTextareaBordered,\n ghost && dTextareaGhost,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <textarea ref={ref} className={textareaClasses} {...props} />\n }\n)\n\nTextarea.displayName = 'Textarea'\n"],"names":["dTextarea","dTextareaBordered","dTextareaGhost","dTextareaXs","dTextareaSm","dTextareaMd","dTextareaLg","dTextareaXl","dTextareaNeutral","dTextareaPrimary","dTextareaSecondary","dTextareaAccent","dTextareaInfo","dTextareaSuccess","dTextareaWarning","dTextareaError","Textarea","forwardRef","size","color","ghost","bordered","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","textareaClasses"],"mappings":";;;AAIA,MAAMA,IAAY,YACZC,IAAoB,qBACpBC,IAAiB,kBACjBC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAqB,sBACrBC,IAAkB,mBAClBC,IAAgB,iBAChBC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAiB,kBAUVC,IAAWC;AAAA,EACtB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIzB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAsB,IAAe;AAAA,MACnB,SAASrB;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,MAAMC;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,GAGHe,IAAkB;AAAA,MACtB9B;AAAA,MACA;AAAA,MACAqB,KAAYpB;AAAA,MACZmB,KAASlB;AAAA,MACTyB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CR,KAASU,EAAaV,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BAAQ,YAAA,EAAS,KAAAE,GAAU,WAAWM,GAAkB,GAAGP,GAAO;AAAA,EACpE;AACF;AAEAP,EAAS,cAAc;"}
1
+ {"version":3,"file":"Textarea.js","sources":["../../src/components/Textarea.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dTextarea = 'textarea'\nconst dTextareaBordered = 'textarea-bordered'\nconst dTextareaGhost = 'textarea-ghost'\nconst dTextareaXs = 'textarea-xs'\nconst dTextareaSm = 'textarea-sm'\nconst dTextareaMd = 'textarea-md'\nconst dTextareaLg = 'textarea-lg'\nconst dTextareaXl = 'textarea-xl'\nconst dTextareaNeutral = 'textarea-neutral'\nconst dTextareaPrimary = 'textarea-primary'\nconst dTextareaSecondary = 'textarea-secondary'\nconst dTextareaAccent = 'textarea-accent'\nconst dTextareaInfo = 'textarea-info'\nconst dTextareaSuccess = 'textarea-success'\nconst dTextareaWarning = 'textarea-warning'\nconst dTextareaError = 'textarea-error'\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size,\n color,\n ghost = false,\n bordered = true,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dTextareaXs,\n sm: dTextareaSm,\n md: dTextareaMd,\n lg: dTextareaLg,\n xl: dTextareaXl,\n }\n\n const colorClasses = {\n neutral: dTextareaNeutral,\n primary: dTextareaPrimary,\n secondary: dTextareaSecondary,\n accent: dTextareaAccent,\n info: dTextareaInfo,\n success: dTextareaSuccess,\n warning: dTextareaWarning,\n error: dTextareaError,\n }\n\n const textareaClasses = [\n dTextarea,\n 'w-full',\n bordered && dTextareaBordered,\n ghost && dTextareaGhost,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <textarea ref={ref} className={textareaClasses} {...props} />\n }\n)\n\nTextarea.displayName = 'Textarea'\n"],"names":["dTextarea","dTextareaBordered","dTextareaGhost","dTextareaXs","dTextareaSm","dTextareaMd","dTextareaLg","dTextareaXl","dTextareaNeutral","dTextareaPrimary","dTextareaSecondary","dTextareaAccent","dTextareaInfo","dTextareaSuccess","dTextareaWarning","dTextareaError","Textarea","forwardRef","size","color","ghost","bordered","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","textareaClasses"],"mappings":";;;AAIA,MAAMA,IAAY,YACZC,IAAoB,qBACpBC,IAAiB,kBACjBC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAqB,sBACrBC,IAAkB,mBAClBC,IAAgB,iBAChBC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAiB,kBAUVC,IAAWC;AAAA,EACtB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIzB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAsB,IAAe;AAAA,MACnB,SAASrB;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,MAAMC;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,GAGHe,IAAkB;AAAA,MACtB9B;AAAA,MACA;AAAA,MACAqB,KAAYpB;AAAA,MACZmB,KAASlB;AAAA,MACTyB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CR,KAASU,EAAaV,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BAAQ,YAAA,EAAS,KAAAE,GAAU,WAAWM,GAAkB,GAAGP,GAAO;AAAA,EACpE;AACF;AAEAP,EAAS,cAAc;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as r, jsxs as p } from "react/jsx-runtime";
2
2
  import { useState as b, useEffect as f, useId as $ } from "react";
3
- import { useConfig as S } from "./ConfigProvider.js";
3
+ import { useConfig as S } from "../providers/ConfigProvider.js";
4
4
  import { useTheme as v } from "../hooks/useTheme.js";
5
5
  const C = "swap", D = "swap-rotate", M = "swap-off", Z = "swap-on", N = "dropdown", B = "dropdown-end", y = "dropdown-content", A = "btn", E = "btn-sm", I = "btn-block", O = "btn-ghost", z = "toggle", j = "toggle-xs", F = "toggle-sm", H = "toggle-md", L = "toggle-lg", V = "toggle-xl";
6
6
  function i() {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeController.js","sources":["../../src/components/ThemeController.tsx"],"sourcesContent":["import React, { useState, useEffect, useId } from 'react'\nimport { useConfig } from './ConfigProvider'\nimport { useTheme } from '../hooks/useTheme'\n\n// DaisyUI classes\nconst dSwap = 'swap'\nconst dSwapRotate = 'swap-rotate'\nconst dSwapOff = 'swap-off'\nconst dSwapOn = 'swap-on'\nconst dDropdown = 'dropdown'\nconst dDropdownEnd = 'dropdown-end'\nconst dDropdownContent = 'dropdown-content'\nconst dBtn = 'btn'\nconst dBtnSm = 'btn-sm'\nconst dBtnBlock = 'btn-block'\nconst dBtnGhost = 'btn-ghost'\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\n\nexport interface ThemeControllerSwapProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerDropdownProps {\n themes: string[]\n defaultTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerToggleProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n className?: string\n}\n\n// Get current theme from document\nfunction getCurrentTheme(): string | null {\n return document.documentElement.getAttribute('data-theme')\n}\n\n// Set theme directly on document (fallback when no ThemeProvider)\nfunction setThemeDirectly(theme: string) {\n document.documentElement.setAttribute('data-theme', theme)\n}\n\nfunction ThemeControllerSwap({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n className = '',\n}: ThemeControllerSwapProps) {\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <label className={`${dSwap} ${dSwapRotate} ${className}`}>\n <input\n type=\"checkbox\"\n checked={isDark}\n onChange={handleChange}\n />\n {/* sun icon */}\n <svg\n className={`${dSwapOff} h-8 w-8 fill-current`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z\" />\n </svg>\n {/* moon icon */}\n <svg\n className={`${dSwapOn} h-8 w-8 fill-current`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z\" />\n </svg>\n </label>\n )\n}\n\nfunction ThemeControllerDropdown({\n themes,\n defaultTheme,\n onChange,\n className = '',\n}: ThemeControllerDropdownProps) {\n const { setTheme: contextSetTheme, resolvedTheme } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const radioName = useId()\n\n const [selectedTheme, setSelectedTheme] = useState(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) return resolvedTheme\n const current = getCurrentTheme()\n if (current && themes.includes(current)) return current\n return defaultTheme || themes[0] || 'light'\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) {\n setSelectedTheme(resolvedTheme)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n if (current && themes.includes(current)) {\n setSelectedTheme(current)\n }\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [themes, resolvedTheme])\n\n const handleChange = (theme: string) => {\n setSelectedTheme(theme)\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <div className={`${dDropdown} ${dDropdownEnd} ${className}`}>\n <div tabIndex={0} role=\"button\" className={dBtn}>\n Theme\n <svg\n width=\"12px\"\n height=\"12px\"\n className=\"inline-block h-2 w-2 fill-current opacity-60\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2048 2048\"\n >\n <path d=\"M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z\"></path>\n </svg>\n </div>\n <ul\n tabIndex={0}\n className={`${dDropdownContent} bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl max-h-96 overflow-y-auto`}\n >\n {themes.map((theme) => (\n <li key={theme}>\n <input\n type=\"radio\"\n name={radioName}\n className={`${dBtn} ${dBtnSm} ${dBtnBlock} ${dBtnGhost} justify-start`}\n aria-label={theme}\n value={theme}\n checked={selectedTheme === theme}\n onChange={() => handleChange(theme)}\n />\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nconst sizeClasses: Record<string, string> = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n}\n\nfunction ThemeControllerToggle({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n size,\n className = '',\n}: ThemeControllerToggleProps) {\n const { componentSize } = useConfig()\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={`${dToggle} ${sizeClasses[effectiveSize]} ${className}`}\n checked={isDark}\n onChange={handleChange}\n aria-label=\"Toggle theme\"\n />\n )\n}\n\nexport const ThemeController = Object.assign(\n {},\n {\n Swap: ThemeControllerSwap,\n Dropdown: ThemeControllerDropdown,\n Toggle: ThemeControllerToggle,\n }\n)\n"],"names":["dSwap","dSwapRotate","dSwapOff","dSwapOn","dDropdown","dDropdownEnd","dDropdownContent","dBtn","dBtnSm","dBtnBlock","dBtnGhost","dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","getCurrentTheme","setThemeDirectly","theme","ThemeControllerSwap","lightTheme","darkTheme","onChange","className","contextSetTheme","contextIsDark","useTheme","setTheme","isDark","setIsDark","useState","useEffect","observer","current","handleChange","e","jsxs","jsx","ThemeControllerDropdown","themes","defaultTheme","resolvedTheme","radioName","useId","selectedTheme","setSelectedTheme","sizeClasses","ThemeControllerToggle","size","componentSize","useConfig","effectiveSize","ThemeController"],"mappings":"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"}
1
+ {"version":3,"file":"ThemeController.js","sources":["../../src/components/ThemeController.tsx"],"sourcesContent":["import React, { useState, useEffect, useId } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\nimport { useTheme } from '../hooks/useTheme'\n\n// DaisyUI classes\nconst dSwap = 'swap'\nconst dSwapRotate = 'swap-rotate'\nconst dSwapOff = 'swap-off'\nconst dSwapOn = 'swap-on'\nconst dDropdown = 'dropdown'\nconst dDropdownEnd = 'dropdown-end'\nconst dDropdownContent = 'dropdown-content'\nconst dBtn = 'btn'\nconst dBtnSm = 'btn-sm'\nconst dBtnBlock = 'btn-block'\nconst dBtnGhost = 'btn-ghost'\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\n\nexport interface ThemeControllerSwapProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerDropdownProps {\n themes: string[]\n defaultTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerToggleProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n className?: string\n}\n\n// Get current theme from document\nfunction getCurrentTheme(): string | null {\n return document.documentElement.getAttribute('data-theme')\n}\n\n// Set theme directly on document (fallback when no ThemeProvider)\nfunction setThemeDirectly(theme: string) {\n document.documentElement.setAttribute('data-theme', theme)\n}\n\nfunction ThemeControllerSwap({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n className = '',\n}: ThemeControllerSwapProps) {\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <label className={`${dSwap} ${dSwapRotate} ${className}`}>\n <input\n type=\"checkbox\"\n checked={isDark}\n onChange={handleChange}\n />\n {/* sun icon */}\n <svg\n className={`${dSwapOff} h-8 w-8 fill-current`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z\" />\n </svg>\n {/* moon icon */}\n <svg\n className={`${dSwapOn} h-8 w-8 fill-current`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z\" />\n </svg>\n </label>\n )\n}\n\nfunction ThemeControllerDropdown({\n themes,\n defaultTheme,\n onChange,\n className = '',\n}: ThemeControllerDropdownProps) {\n const { setTheme: contextSetTheme, resolvedTheme } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const radioName = useId()\n\n const [selectedTheme, setSelectedTheme] = useState(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) return resolvedTheme\n const current = getCurrentTheme()\n if (current && themes.includes(current)) return current\n return defaultTheme || themes[0] || 'light'\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) {\n setSelectedTheme(resolvedTheme)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n if (current && themes.includes(current)) {\n setSelectedTheme(current)\n }\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [themes, resolvedTheme])\n\n const handleChange = (theme: string) => {\n setSelectedTheme(theme)\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <div className={`${dDropdown} ${dDropdownEnd} ${className}`}>\n <div tabIndex={0} role=\"button\" className={dBtn}>\n Theme\n <svg\n width=\"12px\"\n height=\"12px\"\n className=\"inline-block h-2 w-2 fill-current opacity-60\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2048 2048\"\n >\n <path d=\"M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z\"></path>\n </svg>\n </div>\n <ul\n tabIndex={0}\n className={`${dDropdownContent} bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl max-h-96 overflow-y-auto`}\n >\n {themes.map((theme) => (\n <li key={theme}>\n <input\n type=\"radio\"\n name={radioName}\n className={`${dBtn} ${dBtnSm} ${dBtnBlock} ${dBtnGhost} justify-start`}\n aria-label={theme}\n value={theme}\n checked={selectedTheme === theme}\n onChange={() => handleChange(theme)}\n />\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nconst sizeClasses: Record<string, string> = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n}\n\nfunction ThemeControllerToggle({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n size,\n className = '',\n}: ThemeControllerToggleProps) {\n const { componentSize } = useConfig()\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={`${dToggle} ${sizeClasses[effectiveSize]} ${className}`}\n checked={isDark}\n onChange={handleChange}\n aria-label=\"Toggle theme\"\n />\n )\n}\n\nexport const ThemeController = Object.assign(\n {},\n {\n Swap: ThemeControllerSwap,\n Dropdown: ThemeControllerDropdown,\n Toggle: ThemeControllerToggle,\n }\n)\n"],"names":["dSwap","dSwapRotate","dSwapOff","dSwapOn","dDropdown","dDropdownEnd","dDropdownContent","dBtn","dBtnSm","dBtnBlock","dBtnGhost","dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","getCurrentTheme","setThemeDirectly","theme","ThemeControllerSwap","lightTheme","darkTheme","onChange","className","contextSetTheme","contextIsDark","useTheme","setTheme","isDark","setIsDark","useState","useEffect","observer","current","handleChange","e","jsxs","jsx","ThemeControllerDropdown","themes","defaultTheme","resolvedTheme","radioName","useId","selectedTheme","setSelectedTheme","sizeClasses","ThemeControllerToggle","size","componentSize","useConfig","effectiveSize","ThemeController"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs as m, jsx as a } from "react/jsx-runtime";
2
2
  import { forwardRef as $e, useState as $, useRef as ne, useId as xe, useEffect as Y, useCallback as oe } from "react";
3
3
  import { Input as Me } from "./Input.js";
4
- import { useConfig as we } from "./ConfigProvider.js";
4
+ import { useConfig as we } from "../providers/ConfigProvider.js";
5
5
  const S = "btn", D = "btn-ghost", J = "btn-primary", ke = "btn-xs", E = "btn-sm", ye = "btn-circle", ve = "input-error", Ce = "input-warning";
6
6
  function Ne(s, T = "24", x = !1) {
7
7
  if (!s) return "";