asterui 0.12.48 → 0.12.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Alert.js +18 -18
- package/dist/components/Alert.js.map +1 -1
- package/dist/components/Anchor.js +53 -53
- package/dist/components/Anchor.js.map +1 -1
- package/dist/components/Autocomplete.js +115 -114
- package/dist/components/Autocomplete.js.map +1 -1
- package/dist/components/Avatar.js +33 -32
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Badge.js +99 -99
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Breadcrumb.js +12 -11
- package/dist/components/Breadcrumb.js.map +1 -1
- package/dist/components/Browser.js +10 -10
- package/dist/components/Browser.js.map +1 -1
- package/dist/components/Button.js +80 -79
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Card.d.ts +2 -0
- package/dist/components/Card.js +111 -110
- package/dist/components/Card.js.map +1 -1
- package/dist/components/Carousel.js +59 -59
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Cascader.js +175 -174
- package/dist/components/Cascader.js.map +1 -1
- package/dist/components/Chat.js +27 -27
- package/dist/components/Chat.js.map +1 -1
- package/dist/components/Checkbox.js +98 -97
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/Code.js +11 -11
- package/dist/components/Code.js.map +1 -1
- package/dist/components/Collapse.js +46 -46
- package/dist/components/Collapse.js.map +1 -1
- package/dist/components/ColorPicker.d.ts +1 -1
- package/dist/components/ColorPicker.js +93 -91
- package/dist/components/ColorPicker.js.map +1 -1
- package/dist/components/Command.d.ts +65 -0
- package/dist/components/Command.js +422 -0
- package/dist/components/Command.js.map +1 -0
- package/dist/components/ConfigProvider.d.ts +1 -1
- package/dist/components/ConfigProvider.js +9 -9
- package/dist/components/ConfigProvider.js.map +1 -1
- package/dist/components/ContextMenu.js +33 -33
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/CopyButton.js +74 -73
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/Countdown.js +60 -59
- package/dist/components/Countdown.js.map +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DatePicker.js +54 -53
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/Diff.js +10 -10
- package/dist/components/Diff.js.map +1 -1
- package/dist/components/Divider.js +21 -20
- package/dist/components/Divider.js.map +1 -1
- package/dist/components/Dock.js +28 -27
- package/dist/components/Dock.js.map +1 -1
- package/dist/components/Drawer.js +43 -43
- package/dist/components/Drawer.js.map +1 -1
- package/dist/components/Dropdown.js +127 -127
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/Empty.js +16 -15
- package/dist/components/Empty.js.map +1 -1
- package/dist/components/Fieldset.js +11 -10
- package/dist/components/Fieldset.js.map +1 -1
- package/dist/components/FileInput.js +30 -29
- package/dist/components/FileInput.js.map +1 -1
- package/dist/components/Filter.d.ts +1 -1
- package/dist/components/Filter.js +32 -30
- package/dist/components/Filter.js.map +1 -1
- package/dist/components/FloatButton.js +83 -83
- package/dist/components/FloatButton.js.map +1 -1
- package/dist/components/Footer.js +14 -13
- package/dist/components/Footer.js.map +1 -1
- package/dist/components/Form.js +133 -132
- package/dist/components/Form.js.map +1 -1
- package/dist/components/Hero.js +12 -11
- package/dist/components/Hero.js.map +1 -1
- package/dist/components/HoverGallery.js +7 -7
- package/dist/components/HoverGallery.js.map +1 -1
- package/dist/components/Image.js +40 -40
- package/dist/components/Image.js.map +1 -1
- package/dist/components/Input.js +171 -169
- package/dist/components/Input.js.map +1 -1
- package/dist/components/InputNumber.js +84 -83
- package/dist/components/InputNumber.js.map +1 -1
- package/dist/components/Join.js +11 -10
- package/dist/components/Join.js.map +1 -1
- package/dist/components/Kbd.js +15 -15
- package/dist/components/Kbd.js.map +1 -1
- package/dist/components/Layout.js +66 -66
- package/dist/components/Layout.js.map +1 -1
- package/dist/components/List.d.ts +1 -1
- package/dist/components/List.js +75 -72
- package/dist/components/List.js.map +1 -1
- package/dist/components/Loading.d.ts +1 -1
- package/dist/components/Loading.js +31 -29
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/Mask.js +31 -31
- package/dist/components/Mask.js.map +1 -1
- package/dist/components/Mention.js +61 -61
- package/dist/components/Mention.js.map +1 -1
- package/dist/components/Menu.js +84 -84
- package/dist/components/Menu.js.map +1 -1
- package/dist/components/Message.js +30 -29
- package/dist/components/Message.js.map +1 -1
- package/dist/components/Modal.js +117 -116
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/MonthCalendar.d.ts +31 -0
- package/dist/components/MonthCalendar.js +205 -0
- package/dist/components/MonthCalendar.js.map +1 -0
- package/dist/components/Navbar.js +25 -25
- package/dist/components/Navbar.js.map +1 -1
- package/dist/components/Notification.js +56 -55
- package/dist/components/Notification.js.map +1 -1
- package/dist/components/OTPInput.js +69 -68
- package/dist/components/OTPInput.js.map +1 -1
- package/dist/components/Pagination.d.ts +1 -1
- package/dist/components/Pagination.js +60 -58
- package/dist/components/Pagination.js.map +1 -1
- package/dist/components/Phone.js +10 -10
- package/dist/components/Phone.js.map +1 -1
- package/dist/components/Popconfirm.js +60 -60
- package/dist/components/Popconfirm.js.map +1 -1
- package/dist/components/Progress.js +17 -17
- package/dist/components/Progress.js.map +1 -1
- package/dist/components/QRCode.js +23 -23
- package/dist/components/QRCode.js.map +1 -1
- package/dist/components/RadialProgress.js +17 -17
- package/dist/components/RadialProgress.js.map +1 -1
- package/dist/components/Radio.js +41 -40
- package/dist/components/Radio.js.map +1 -1
- package/dist/components/Range.d.ts +1 -1
- package/dist/components/Range.js +39 -37
- package/dist/components/Range.js.map +1 -1
- package/dist/components/Rating.js +79 -78
- package/dist/components/Rating.js.map +1 -1
- package/dist/components/ResponsiveDrawer.js +27 -27
- package/dist/components/ResponsiveDrawer.js.map +1 -1
- package/dist/components/RichTextEditor.d.ts +32 -0
- package/dist/components/RichTextEditor.js +335 -0
- package/dist/components/RichTextEditor.js.map +1 -0
- package/dist/components/Segmented.d.ts +1 -1
- package/dist/components/Segmented.js +48 -46
- package/dist/components/Segmented.js.map +1 -1
- package/dist/components/Select.js +55 -54
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Skeleton.js +9 -9
- package/dist/components/Skeleton.js.map +1 -1
- package/dist/components/Splitter.js +93 -93
- package/dist/components/Splitter.js.map +1 -1
- package/dist/components/Stat.js +17 -16
- package/dist/components/Stat.js.map +1 -1
- package/dist/components/Status.js +29 -29
- package/dist/components/Status.js.map +1 -1
- package/dist/components/Steps.js +61 -61
- package/dist/components/Steps.js.map +1 -1
- package/dist/components/Table.js +256 -256
- package/dist/components/Table.js.map +1 -1
- package/dist/components/Tabs.js +65 -65
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Tag.js +147 -147
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/TextRotate.js +6 -6
- package/dist/components/TextRotate.js.map +1 -1
- package/dist/components/Textarea.js +35 -34
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeController.d.ts +1 -1
- package/dist/components/ThemeController.js +71 -68
- package/dist/components/ThemeController.js.map +1 -1
- package/dist/components/TimePicker.d.ts +1 -1
- package/dist/components/TimePicker.js +133 -129
- package/dist/components/TimePicker.js.map +1 -1
- package/dist/components/Timeline.js +79 -79
- package/dist/components/Timeline.js.map +1 -1
- package/dist/components/Toggle.js +33 -32
- package/dist/components/Toggle.js.map +1 -1
- package/dist/components/Tooltip.js +25 -25
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/Tour.js +126 -126
- package/dist/components/Tour.js.map +1 -1
- package/dist/components/Transfer.js +93 -92
- package/dist/components/Transfer.js.map +1 -1
- package/dist/components/Tree.js +200 -200
- package/dist/components/Tree.js.map +1 -1
- package/dist/components/TreeSelect.js +255 -254
- package/dist/components/TreeSelect.js.map +1 -1
- package/dist/components/Typography.js +71 -70
- package/dist/components/Typography.js.map +1 -1
- package/dist/components/Upload.js +81 -81
- package/dist/components/Upload.js.map +1 -1
- package/dist/components/WeekCalendar.d.ts +35 -0
- package/dist/components/WeekCalendar.js +204 -0
- package/dist/components/WeekCalendar.js.map +1 -0
- package/dist/components/Window.js +7 -7
- package/dist/components/Window.js.map +1 -1
- package/dist/editor.d.ts +1 -0
- package/dist/editor.js +5 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +221 -215
- package/dist/index.js.map +1 -1
- package/package.json +30 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../src/components/Table.tsx"],"sourcesContent":["import React, { useState, forwardRef, useMemo, useCallback, useId } from 'react'\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: 'table-xs',\n sm: 'table-sm',\n md: '',\n lg: 'table-lg',\n xl: 'table-xl',\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=\"dropdown dropdown-end\" onKeyDown={handleKeyDown}>\n <button\n type=\"button\"\n className={`btn btn-ghost btn-xs ${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=\"dropdown-content z-[1] menu 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=\"checkbox checkbox-xs checkbox-primary\"\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=\"divider my-1\"></div>\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-xs 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=\"btn btn-ghost btn-xs btn-square\"\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 'table',\n 'bg-base-100',\n sizeClasses[size],\n striped && 'table-zebra',\n pinRows && 'table-pin-rows',\n pinCols && 'table-pin-cols',\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=\"loading loading-spinner loading-lg\" 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=\"select select-sm select-bordered\"\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=\"join\">\n <button\n type=\"button\"\n className=\"join-item btn btn-sm\"\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={`join-item btn btn-sm ${currentPage === page ? 'btn-active' : ''}`}\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=\"join-item btn btn-sm\"\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=\"input input-sm input-bordered 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=\"checkbox checkbox-sm checkbox-primary\"\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' ? 'radio radio-sm radio-primary' : 'checkbox checkbox-sm checkbox-primary'}\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":["sizeClasses","FilterDropdown","filters","selectedValues","onChange","locale","testId","isOpen","setIsOpen","useState","dropdownId","useId","handleToggle","value","newValues","v","handleClear","jsxs","e","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'\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":";;AAGA,MAAMA,KAAS,SACTC,KAAW,YACXC,KAAW,YACXC,KAAW,YACXC,KAAW,YACXC,KAAc,eACdC,KAAgB,kBAChBC,KAAgB,kBAChBC,KAAY,YACZC,KAAe,gBACfC,KAAmB,oBACnBC,IAAO,OACPC,KAAY,aACZC,KAAS,UACTC,KAAS,UACTC,KAAa,cACbC,KAAa,cACbC,KAAQ,QACRC,KAAY,YACZC,KAAc,eACdC,KAAmB,oBACnBC,KAAS,SACTC,KAAW,YACXC,KAAgB,iBAChBC,KAAW,WACXC,KAAW,WACXC,KAAkB,mBAClBC,KAAa,cACbC,KAAQ,QACRC,KAAY,aACZC,KAAU,UACVC,KAAY,aACZC,KAAkB,mBAClBC,KAAS,SACTC,KAAW,YACXC,KAAiB,kBA+GjBC,KAAyC;AAAA,EAC7C,IAAInC;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAI;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AACN;AAEA,SAASiC,GAAe;AAAA,EACtB,SAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AACF,GAMG;AACD,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpCC,IAAaC,GAAA,GAEbC,IAAe,CAACC,MAAqC;AACzD,UAAMC,IAAYX,EAAe,SAASU,CAAK,IAC3CV,EAAe,OAAO,CAACY,MAAMA,MAAMF,CAAK,IACxC,CAAC,GAAGV,GAAgBU,CAAK;AAC7B,IAAAT,EAASU,CAAS;AAAA,EACpB,GAEME,IAAc,MAAM;AACxB,IAAAZ,EAAS,CAAA,CAAE,GACXI,EAAU,EAAK;AAAA,EACjB,GAEMS,IAAgB,CAACC,MAA2B;AAChD,IAAIA,EAAE,QAAQ,YACZV,EAAU,EAAK;AAAA,EAEnB;AAEA,SACE,gBAAAW,EAAC,SAAI,WAAW,GAAG/C,EAAS,IAAIC,EAAY,IAAI,WAAW4C,GACzD,UAAA;AAAA,IAAA,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAW,GAAG7C,CAAI,IAAIC,EAAS,IAAIC,EAAM,IAAI0B,EAAe,SAAS,IAAI,iBAAiB,EAAE;AAAA,QAC5F,SAAS,MAAMK,EAAU,CAACD,CAAM;AAAA,QAChC,cAAW;AAAA,QACX,iBAAeA;AAAA,QACf,iBAAc;AAAA,QACd,iBAAeG;AAAA,QACf,eAAa,GAAGJ,CAAM;AAAA,QAEtB,UAAA,gBAAAc,EAAC,SAAI,WAAU,WAAU,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,eAAY,QACzF,UAAA,gBAAAA,EAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,0JAAA,CAA0J,EAAA,CACjO;AAAA,MAAA;AAAA,IAAA;AAAA,IAEDb,KACC,gBAAAY;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAIT;AAAA,QACJ,MAAK;AAAA,QACL,wBAAqB;AAAA,QACrB,WAAW,GAAGpC,EAAgB,UAAUO,EAAK;AAAA,QAC7C,eAAa,GAAGyB,CAAM;AAAA,QAEtB,UAAA;AAAA,UAAA,gBAAAc,EAAC,SAAI,WAAU,aACZ,UAAAlB,EAAQ,IAAI,CAACmB,MACZ,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,iBAAehB,EAAe,SAASkB,EAAO,KAAK;AAAA,cAEnD,UAAA;AAAA,gBAAA,gBAAAD;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAW,GAAGtC,EAAS,IAAIC,EAAW,IAAIC,EAAgB;AAAA,oBAC1D,SAASmB,EAAe,SAASkB,EAAO,KAAK;AAAA,oBAC7C,UAAU,MAAMT,EAAaS,EAAO,KAAK;AAAA,oBACzC,eAAa,GAAGf,CAAM,WAAW,OAAOe,EAAO,KAAK,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEvD,gBAAAD,EAAC,QAAA,EAAK,WAAU,WAAW,YAAO,KAAA,CAAK;AAAA,cAAA;AAAA,YAAA;AAAA,YAZlC,OAAOC,EAAO,KAAK;AAAA,UAAA,CAc3B,GACH;AAAA,UACA,gBAAAD,EAAC,OAAA,EAAI,WAAW,GAAGhC,EAAQ,SAAS;AAAA,UACpC,gBAAAgC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAW,GAAG7C,CAAI,IAAIC,EAAS,IAAIC,EAAM;AAAA,cACzC,SAASuC;AAAA,cACT,eAAa,GAAGV,CAAM;AAAA,cAErB,aAAQ,eAAe;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1B;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AAEA,SAASgB,GAAkB,EAAE,UAAAC,GAAU,UAAAC,KAAyD;AAC9F,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW,GAAG7C,CAAI,IAAIC,EAAS,IAAIC,EAAM,IAAIE,EAAU;AAAA,MACvD,SAAS,CAACuC,MAAM;AACd,QAAAA,EAAE,gBAAA,GACFM,EAAA;AAAA,MACF;AAAA,MACA,cAAYD,IAAW,iBAAiB;AAAA,MACxC,iBAAeA;AAAA,MAEf,UAAA,gBAAAH;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,gCAAgCG,IAAW,cAAc,EAAE;AAAA,UACtE,MAAK;AAAA,UACL,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,eAAY;AAAA,UAEZ,UAAA,gBAAAH,EAAC,UAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,eAAA,CAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IACtF;AAAA,EAAA;AAGN;AAEA,SAASK,GACP;AAAA,EACE,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC,KAAY;AAAA,EACZ,OAAAC;AAAA,EACA,UAAArC;AAAA,EACA,cAAAsC;AAAA,EACA,gBAAAC;AAAA,EACA,QAAAtC;AAAA,EACA,eAAeC;AAAA,EACf,cAAcsC;AAAA,EACd,GAAGC;AACL,GACAC,IACA;AACA,QAAMC,IAAazC,MAAU,SACvB0C,KAAkB,IAGlB,CAACC,GAAaC,CAAc,IAAIzC;AAAA,IACpC2B,MAAe,MAASA,GAAY,UAAUA,EAAW,UAAU;AAAA,EAAA,GAE/D,CAACe,IAAkBC,EAAmB,IAAI3C;AAAA,IAC9C2B,MAAe,MAASA,GAAY,WAAWA,EAAW,WAAWY;AAAA,EAAA,GAEjEK,IAAWjB,MAAe,MAASA,GAAY,aAAa,SAAYA,EAAW,WAAWe,IAG9F,CAACG,IAAWC,EAAY,IAAI9C,EAG/B,MAAM;AAEP,UAAM+C,IAAuB9B,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,cAAc,MAAS;AAC9E,QAAID;AACF,aAAO;AAAA,QACL,WAAWA,EAAqB;AAAA,QAChC,OAAOA,EAAqB,aAAa;AAAA,MAAA;AAI7C,UAAME,IAAoBhC,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,gBAAgB;AACpE,WAAO;AAAA,MACL,WAAWC,GAAmB,OAAO;AAAA,MACrC,OAAOA,GAAmB,oBAAoB;AAAA,IAAA;AAAA,EAElD,CAAC,GAGK,CAACC,IAAaC,EAAc,IAAInD,EAAwD,MAAM;AAClG,UAAMoD,IAAyD,CAAA;AAC/D,WAAAnC,EAAQ,QAAQ,CAAC+B,MAAQ;AAEvB,MAAIA,EAAI,kBAAkB,SACxBI,EAAQJ,EAAI,GAAG,IAAIA,EAAI,gBACdA,EAAI,yBACbI,EAAQJ,EAAI,GAAG,IAAIA,EAAI;AAAA,IAE3B,CAAC,GACMI;AAAA,EACT,CAAC,GAGK,CAACC,IAAcC,EAAe,IAAItD;AAAA,IACtC4B,GAAc,mBAAmB,CAAA;AAAA,EAAC,GAI9B,CAAC2B,IAAcC,EAAe,IAAIxD;AAAA,IACtC6B,GAAY,mBAAmBA,GAAY,0BAA0B,CAAA;AAAA,EAAC,GAIlE4B,IAAmBxC,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,cAAc,MAAS,GACpEU,IAAqBzC,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,kBAAkB,MAAS,GAC1EW,KAAqB9B,GAAY,oBAAoB,QACrD+B,IAAwBhC,GAAc,oBAAoB,QAE1DiC,IAAqBC,EAAQ,MAAM;AACvC,QAAIL,GAAkB;AACpB,YAAMM,IAAgB9C,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,cAAc,UAAaA,EAAI,cAAc,IAAI;AACjG,aAAO;AAAA,QACL,WAAWe,GAAe,OAAO;AAAA,QACjC,OAAOA,GAAe,aAAa;AAAA,MAAA;AAAA,IAEvC;AACA,WAAOlB;AAAA,EACT,GAAG,CAACY,GAAkBxC,GAAS4B,EAAS,CAAC,GAEnCmB,IAAuBF,EAAQ,MAAM;AACzC,QAAIJ,GAAoB;AACtB,YAAMO,IAA4D,CAAA;AAClE,aAAAhD,EAAQ,QAAQ,CAAC+B,MAAQ;AACvB,QAAIA,EAAI,kBAAkB,WACxBiB,EAAWjB,EAAI,GAAG,IAAIA,EAAI;AAAA,MAE9B,CAAC,GACMiB;AAAA,IACT;AACA,WAAOf;AAAA,EACT,GAAG,CAACQ,GAAoBzC,GAASiC,EAAW,CAAC,GAEvCgB,IAAwBN,IAAwBhC,EAAc,kBAAmByB,IACjFc,IAAwBR,KAAqB9B,EAAY,kBAAmB0B,IAE5Ea,IAAsBzC,MAAe,IAGrC0C,IAAiBP,EAAQ,MAAM7C,EAAQ,OAAO,CAAC+B,MAAQ,CAACA,EAAI,MAAM,GAAG,CAAC/B,CAAO,CAAC,GAG9EqD,IAAYC,EAAY,CAACC,GAAWC,MAA0B;AAClE,QAAI,OAAOtD,KAAW;AACpB,aAAOA,EAAOqD,CAAM;AAEtB,UAAME,IAAWF,EAAOrD,CAAM;AAC9B,WAAgC,OAAzBuD,MAAa,SAAmBA,IAAmBD,CAAX;AAAA,EACjD,GAAG,CAACtD,CAAM,CAAC,GAGLwD,IAAeb,EAAQ,MAAM;AACjC,QAAIc,IAAO,CAAC,GAAG1D,CAAU;AACzB,kBAAO,QAAQ8C,CAAoB,EAAE,QAAQ,CAAC,CAACa,GAAWC,CAAY,MAAM;AAC1E,UAAIA,KAAgBA,EAAa,SAAS,GAAG;AAC3C,cAAMC,IAAS9D,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,QAAQ6B,CAAS;AAC1D,QAAIE,GAAQ,aACVH,IAAOA,EAAK;AAAA,UAAO,CAACJ,MAClBM,EAAa,KAAK,CAAC1E,MAAU2E,EAAO,SAAU3E,GAAOoE,CAAM,CAAC;AAAA,QAAA;AAAA,MAGlE;AAAA,IACF,CAAC,GACMI;AAAA,EACT,GAAG,CAAC1D,GAAY8C,GAAsB/C,CAAO,CAAC,GAGxC+D,IAAalB,EAAQ,MAAM;AAC/B,QAAI,CAACD,EAAmB,aAAa,CAACA,EAAmB;AACvD,aAAOc;AAET,UAAMI,IAAS9D,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,QAAQa,EAAmB,SAAS;AAC7E,QAAI,CAACkB,GAAQ;AACX,aAAOJ;AAGT,UAAMM,IAAS,CAAC,GAAGN,CAAY;AAC/B,WAAAM,EAAO,KAAK,CAACC,GAAGC,MAAM;AACpB,UAAIC,IAAS;AACb,UAAI,OAAOL,EAAO,UAAW;AAC3B,QAAAK,IAASL,EAAO,OAAOG,GAAGC,CAAC;AAAA,eAClBJ,EAAO,WAAW;AAC3B,cAAMM,IAAOH,EAAEH,EAAO,SAAS,GACzBO,IAAOH,EAAEJ,EAAO,SAAS;AAC/B,YAA0BM,KAAS,KAAM,QAAO;AAChD,YAA0BC,KAAS,KAAM,QAAO;AAChD,QAAID,IAAOC,MAAMF,IAAS,KACtBC,IAAOC,MAAMF,IAAS;AAAA,MAC5B;AACA,aAAOvB,EAAmB,UAAU,WAAWuB,IAAS,CAACA;AAAA,IAC3D,CAAC,GACMH;AAAA,EACT,GAAG,CAACN,GAAcd,GAAoB5C,CAAO,CAAC,GAExCsE,IAAa5D,MAAe,MAASA,GAAY,UAAU,SAAYA,EAAW,QAAQqD,EAAW,QACrGQ,IAAa,KAAK,KAAKD,IAAa3C,CAAQ,GAC5C6C,MAAcjD,IAAc,KAAKI,GACjC8C,KAAWD,KAAa7C,GACxB+C,IAAgBvB,IAAsBY,EAAW,MAAMS,IAAYC,EAAQ,IAAIV,GAE/EY,IAAmBrB,EAAY,CAACsB,MAAiB;AAKrD,QAJApD,EAAeoD,CAAI,GACflE,MAAe,MAASA,GAAY,YACtCA,EAAW,SAASkE,GAAMjD,CAAQ,GAEhCjD,GAAU;AACZ,YAAMmG,IAAgC;AAAA,QACpC,QAAQ7E,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,QAAQa,EAAmB,SAAS;AAAA,QACtE,OAAOA,EAAmB;AAAA,QAC1B,OAAOA,EAAmB,aAAa;AAAA,MAAA;AAEzC,MAAAlE;AAAA,QACE,EAAE,SAASkG,GAAM,UAAAjD,GAAU,OAAO2C,EAAA;AAAA,QAClCvB;AAAA,QACA8B;AAAA,QACA,EAAE,mBAAmBd,GAAY,QAAQ,WAAA;AAAA,MAAW;AAAA,IAExD;AAAA,EACF,GAAG,CAACrD,GAAYiB,GAAUjD,GAAUsB,GAAS4C,GAAoBG,GAAsBgB,GAAYO,CAAU,CAAC,GAExGQ,KAAuBxB,EAAY,CAACyB,MAAoB;AAC5D,IAAArD,GAAoBqD,CAAO,GAC3BvD,EAAe,CAAC,GACZd,MAAe,MAASA,GAAY,oBACtCA,EAAW,iBAAiB,GAAGqE,CAAO,GAEpCrE,MAAe,MAASA,GAAY,YACtCA,EAAW,SAAS,GAAGqE,CAAO;AAAA,EAElC,GAAG,CAACrE,CAAU,CAAC,GAETsE,KAAa1B,EAAY,CAACM,MAAsB;AACpD,UAAME,IAAS9D,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,QAAQ6B,CAAS;AAC1D,QAAIqB,IAAwC;AAE5C,IAAIrC,EAAmB,cAAcgB,MAC/BhB,EAAmB,UAAU,WAAUqC,IAAW,YAC7CrC,EAAmB,UAAU,cAAWqC,IAAW,QAGzDzC,KACHX,GAAa,EAAE,WAAWoD,IAAWrB,IAAY,MAAM,OAAOqB,GAAU,GAE1EzD,EAAe,CAAC;AAEhB,UAAMqD,IAAgC;AAAA,MACpC,QAAAf;AAAA,MACA,OAAOmB;AAAA,MACP,OAAOrB;AAAA,IAAA;AAGT,IAAA5C,KAAe6D,CAAY,GAEvBnG,KACFA;AAAA,MACE,EAAE,SAAS,GAAG,UAAAiD,GAAU,OAAO2C,EAAA;AAAA,MAC/BvB;AAAA,MACA8B;AAAA,MACA,EAAE,mBAAmBd,GAAY,QAAQ,OAAA;AAAA,IAAO;AAAA,EAGtD,GAAG,CAAC/D,GAAS4C,GAAoBJ,GAAkBb,GAAU2C,GAAYvB,GAAsBgB,GAAY/C,IAActC,CAAQ,CAAC,GAE5HwG,KAAqB5B,EAAY,CAACM,GAAmBuB,MAA0C;AACnG,UAAMC,IAAiB;AAAA,MACrB,GAAGrC;AAAA,MACH,CAACa,CAAS,GAAGuB;AAAA,IAAA;AAUf,QAPK1C,KACHP,GAAekD,CAAc,GAE/B5D,EAAe,CAAC,GAEhBP,KAAiBmE,CAAc,GAE3B1G,GAAU;AACZ,YAAMmG,IAAgC;AAAA,QACpC,QAAQ7E,EAAQ,KAAK,CAAC+B,MAAQA,EAAI,QAAQa,EAAmB,SAAS;AAAA,QACtE,OAAOA,EAAmB;AAAA,QAC1B,OAAOA,EAAmB,aAAa;AAAA,MAAA;AAEzC,MAAAlE;AAAA,QACE,EAAE,SAAS,GAAG,UAAAiD,GAAU,OAAO2C,EAAA;AAAA,QAC/Bc;AAAA,QACAP;AAAA,QACA,EAAE,mBAAmBd,GAAY,QAAQ,SAAA;AAAA,MAAS;AAAA,IAEtD;AAAA,EACF,GAAG,CAAChB,GAAsBN,GAAoBzC,GAAS4C,GAAoBjB,GAAU2C,GAAYP,GAAY9C,IAAgBvC,CAAQ,CAAC,GAEhI2G,KAAkB/B,EAAY,CAACgC,MAAqB;AACxD,UAAMC,IAAkBD,IACpBZ,EAAc,IAAI,CAACnB,GAAQC,MAAUH,EAAUE,GAAQC,CAAK,CAAC,IAC7D,CAAA;AAIJ,QAHKb,KACHN,GAAgBkD,CAAe,GAE7B5E,GAAc,UAAU;AAC1B,YAAM6E,IAAkBF,IAAUZ,IAAgB,CAAA;AAClD,MAAA/D,EAAa,SAAS4E,GAAiBC,CAAe;AAAA,IACxD;AAAA,EACF,GAAG,CAACd,GAAerB,GAAWV,GAAuBhC,CAAY,CAAC,GAE5D8E,KAAkBnC,EAAY,CAACC,GAAWC,GAAe8B,MAAqB;AAClF,UAAMI,IAAMrC,EAAUE,GAAQC,CAAK;AAEnC,QAAI7C,GAAc,SAAS,SAAS;AAClC,YAAM4E,IAAkBD,IAAU,CAACI,CAAG,IAAI,CAAA;AAC1C,MAAK/C,KACHN,GAAgBkD,CAAe,GAE7B5E,GAAc,YAChBA,EAAa,SAAS4E,GAAiBD,IAAU,CAAC/B,CAAM,IAAI,EAAE;AAEhE;AAAA,IACF;AAEA,UAAMgC,IAAkBD,IACpB,CAAC,GAAGrC,GAAuByC,CAAG,IAC9BzC,EAAsB,OAAO,CAAC0C,MAAMA,MAAMD,CAAG;AAKjD,QAHK/C,KACHN,GAAgBkD,CAAe,GAE7B5E,GAAc,UAAU;AAC1B,YAAM6E,IAAkBzB,EAAW;AAAA,QAAO,CAAC6B,GAAGC,MAC5CN,EAAgB,SAASlC,EAAUuC,GAAGC,CAAC,CAAC;AAAA,MAAA;AAE1C,MAAAlF,EAAa,SAAS4E,GAAiBC,CAAe;AAAA,IACxD;AAAA,EACF,GAAG,CAACnC,GAAW1C,GAAcgC,GAAuBM,GAAuBc,CAAU,CAAC,GAEhF+B,KAAexC,EAAY,CAACC,GAAWC,MAAkB;AAC7D,UAAMkC,IAAMrC,EAAUE,GAAQC,CAAK,GAC7BuC,IAAa7C,EAAsB,SAASwC,CAAG,GAC/CM,IAAkBD,IACpB7C,EAAsB,OAAO,CAACyC,MAAMA,MAAMD,CAAG,IAC7C,CAAC,GAAGxC,GAAuBwC,CAAG;AAElC,IAAKhD,MACHH,GAAgByD,CAAe,GAEjCpF,GAAY,WAAW,CAACmF,GAAYxC,CAAM,GAC1C3C,GAAY,uBAAuBoF,CAAe;AAAA,EACpD,GAAG,CAAC3C,GAAWH,GAAuBR,IAAoB9B,CAAU,CAAC,GAE/DqF,KAAe3C,EAAY,CAACQ,GAAuBP,GAAWC,MAAkB;AACpF,QAAIM,EAAO;AACT,aAAOA,EAAO;AAAA,QACZA,EAAO,YAAYP,EAAOO,EAAO,SAAS,IAAI;AAAA,QAC9CP;AAAA,QACAC;AAAA,MAAA;AAGJ,QAAIM,EAAO,WAAW;AACpB,YAAM3E,IAAQoE,EAAOO,EAAO,SAAS;AACrC,aAA8B3E,KAAU,OAAO,OAAOA,CAAK,IAAI;AAAA,IACjE;AACA,WAAO;AAAA,EACT,GAAG,CAAA,CAAE,GAEC+G,KAAgB,CAACC,MACjBA,MAAU,WAAiB,gBAC3BA,MAAU,UAAgB,eACvB,aAIHC,KAAsB9C,EAAY,CAAC+C,GAAqBC,IAAW,OAA8D;AACrI,UAAMxC,IAASV,EAAeiD,CAAW;AACzC,QAAI,CAACvC,GAAQ,MAAO,QAAO,EAAE,WAAW,GAAA;AAExC,UAAMyC,IAAU,CAAC,UAAU,aAAa;AACxC,QAAIC,IAAS;AACb,UAAMC,IAA6B;AAAA,MACjC,WAAW;AAAA,IAAA;AAGb,QAAI3C,EAAO,UAAU,QAAQ;AAC3B,eAAS+B,IAAI,GAAGA,IAAIQ,GAAaR;AAC/B,YAAIzC,EAAeyC,CAAC,EAAE,UAAU,UAAUzC,EAAeyC,CAAC,EAAE,OAAO;AACjE,gBAAMa,IAAWtD,EAAeyC,CAAC,EAAE,OAC7Bc,IAAQ,OAAOD,KAAa,WAAWA,IAAW,SAAS,OAAOA,CAAQ,CAAC;AACjF,UAAK,MAAMC,CAAK,MAAGH,KAAUG;AAAA,QAC/B;AAEF,MAAIH,MAAW,IACbD,EAAQ,KAAK,QAAQ,IAErBE,EAAM,OAAO,GAAGD,CAAM,MAExBD,EAAQ,KAAKD,IAAW,SAAS,MAAM;AAEvC,UAAIM,IAAqB;AACzB,eAASf,IAAIzC,EAAe,SAAS,GAAGyC,KAAK,GAAGA;AAC9C,YAAIzC,EAAeyC,CAAC,EAAE,UAAU,QAAQ;AACtC,UAAAe,IAAqBf;AACrB;AAAA,QACF;AAEF,MAAIQ,MAAgBO,MAClBH,EAAM,YAAY;AAAA,IAEtB;AAEA,QAAI3C,EAAO,UAAU,SAAS;AAC5B,eAAS+B,IAAIQ,IAAc,GAAGR,IAAIzC,EAAe,QAAQyC;AACvD,YAAIzC,EAAeyC,CAAC,EAAE,UAAU,WAAWzC,EAAeyC,CAAC,EAAE,OAAO;AAClE,gBAAMa,IAAWtD,EAAeyC,CAAC,EAAE,OAC7Bc,IAAQ,OAAOD,KAAa,WAAWA,IAAW,SAAS,OAAOA,CAAQ,CAAC;AACjF,UAAK,MAAMC,CAAK,MAAGH,KAAUG;AAAA,QAC/B;AAEF,MAAIH,MAAW,IACbD,EAAQ,KAAK,SAAS,IAEtBE,EAAM,QAAQ,GAAGD,CAAM,MAEzBD,EAAQ,KAAKD,IAAW,SAAS,MAAM,GAEbD,MAAgBjD,EAAe,UAAU,CAACrB,MAAQA,EAAI,UAAU,OAAO,MAE/F0E,EAAM,YAAY;AAAA,IAEtB;AAEA,WAAO;AAAA,MACL,WAAWF,EAAQ,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC3C,OAAO,OAAO,KAAKE,CAAK,EAAE,SAAS,IAAIA,IAAQ;AAAA,IAAA;AAAA,EAEnD,GAAG,CAACrD,CAAc,CAAC,GAEbyD,KAAe;AAAA,IACnB3K;AAAA,IACA;AAAA,IACAoC,GAAY8B,CAAI;AAAA,IAChBG,KAAWhE;AAAA,IACXiE,KAAWhE;AAAA,IACXiE,KAAWhE;AAAA,IACXqE;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELgG,KAAkB1D,EAAe,KAAK,CAACrB,MAAQA,EAAI,KAAK,GACxDgF,IAAgBnG,MAAe,QAE/BoG,IAAoC,CAAA;AAC1C,EAAInG,GAAQ,MACVmG,EAAa,YAAY,QACzBA,EAAa,WAAW,OAAOnG,EAAO,KAAM,WAAW,GAAGA,EAAO,CAAC,OAAOA,EAAO,IAE9EA,GAAQ,MACVmG,EAAa,YAAY,QACzBA,EAAa,YAAY,OAAOnG,EAAO,KAAM,WAAW,GAAGA,EAAO,CAAC,OAAOA,EAAO;AAGnF,QAAMoG,KAAiB;AAAA,KACpB,CAACzG,KAAWsG,MAAmBjG,GAAQ,MAAM;AAAA,IAC9CR,KAAY;AAAA,EAAA,EAEX,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,MAAIF;AACF,WACE,gBAAAT,EAAC,SAAI,WAAU,wCAAuC,eAAa,GAAG2B,CAAU,YAC9E,UAAA,gBAAA3B,EAAC,QAAA,EAAK,WAAW,GAAG/B,EAAQ,IAAIC,EAAe,IAAIC,EAAU,IAAI,cAAW,WAAU,EAAA,CACxF;AAIJ,QAAMqJ,KAAgBxC,EAAc,SAAS,KAC3CA,EAAc,MAAM,CAACnB,GAAQC,MAAUP,EAAsB,SAASI,EAAUE,GAAQC,CAAK,CAAC,CAAC,GAC3F2D,KAAiBzC,EAAc,KAAK,CAACnB,GAAQC,MAAUP,EAAsB,SAASI,EAAUE,GAAQC,CAAK,CAAC,CAAC,GAE/G4D,KAAYzI,IAAQ,aAAa,WAGjC0I,MAAkB1G,IAAe,IAAI,MAAMoG,IAAgB,IAAI,IAE/DO,KAAmB,MAAM;AAE7B,QADI,CAACnE,KAAuBoB,KAAc,KACtC,OAAO7D,KAAe,UAAW,QAAO;AAE5C,UAAM6G,IAAqC7G,KAAc,CAAA,GACnD8G,IAAWD,EAAiB,YAAY,eACxCE,IAAkBF,EAAiB,iBACnCG,IAAkBH,EAAiB,iBACnCI,IAAYJ,EAAiB,WAC7BK,IAAkBL,EAAiB,mBAAmB,CAAC,IAAI,IAAI,IAAI,GAAG,GAEtEM,IAAeL,EAAS,SAAS,MAAM,IAAI,kBAAkBA,EAAS,SAAS,QAAQ,IAAI,mBAAmB;AAgGpH,WA7FE,gBAAA/H,EAAC,OAAA,EAAI,WAAW,2BAA2BoI,CAAY,IAAI,eAAa,GAAGxG,CAAU,eAClF,UAAA;AAAA,MAAAsG,KACC,gBAAAjI,EAAC,QAAA,EAAK,WAAU,gCACb,YAAU4E,GAAY,CAACE,KAAa,GAAG,KAAK,IAAIC,IAAUH,CAAU,CAAC,CAAC,GACzE;AAAA,MAGDmD,KACC,gBAAA/H;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,GAAG1B,EAAO,IAAIC,EAAS,IAAIC,EAAe;AAAA,UACrD,OAAOyD;AAAA,UACP,UAAU,CAACnC,MAAMsF,GAAqB,OAAOtF,EAAE,OAAO,KAAK,CAAC;AAAA,UAC5D,cAAW;AAAA,UACX,eAAa,GAAG6B,CAAU;AAAA,UAEzB,YAAgB,IAAI,CAACjB,MACpB,gBAAAX,EAAC,UAAA,EAAkB,OAAOW,GAAO,UAAA;AAAA,YAAAA;AAAAA,YAAK;AAAA,UAAA,EAAA,GAAzBA,CAAgC,CAC9C;AAAA,QAAA;AAAA,MAAA;AAAA,MAIL,gBAAAX,EAAC,OAAA,EAAI,WAAW3B,IACd,UAAA;AAAA,QAAA,gBAAA4B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,GAAG3B,EAAS,IAAIlB,CAAI,IAAIG,EAAM;AAAA,YACzC,SAAS,MAAM2H,EAAiBpD,IAAc,CAAC;AAAA,YAC/C,UAAUA,MAAgB;AAAA,YAC1B,cAAW;AAAA,YACX,eAAa,GAAGF,CAAU;AAAA,YAC3B,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGA,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAIkD,GAAY,CAAC,EAAA,GAAK,CAACuD,GAAGjC,MAAM;AACzD,cAAIjB;AACJ,iBAAIL,KAAc,KAEPhD,KAAe,IADxBqD,IAAOiB,IAAI,IAGFtE,KAAegD,IAAa,IACrCK,IAAOL,IAAa,IAAIsB,IAExBjB,IAAOrD,IAAc,IAAIsE,GAGzB,gBAAAnG;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,WAAW,GAAG3B,EAAS,IAAIlB,CAAI,IAAIG,EAAM,IAAIuE,MAAgBqD,IAAO1H,KAAa,EAAE;AAAA,cACnF,SAAS,MAAMyH,EAAiBC,CAAI;AAAA,cACpC,cAAY,QAAQA,CAAI;AAAA,cACxB,gBAAcrD,MAAgBqD,IAAO,SAAS;AAAA,cAC9C,eAAa,GAAGvD,CAAU,SAASuD,CAAI;AAAA,cAEtC,UAAAA;AAAA,YAAA;AAAA,YARIA;AAAA,UAAA;AAAA,QAWX,CAAC;AAAA,QACD,gBAAAlF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,GAAG3B,EAAS,IAAIlB,CAAI,IAAIG,EAAM;AAAA,YACzC,SAAS,MAAM2H,EAAiBpD,IAAc,CAAC;AAAA,YAC/C,UAAUA,MAAgBgD;AAAA,YAC1B,cAAW;AAAA,YACX,eAAa,GAAGlD,CAAU;AAAA,YAC3B,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GACF;AAAA,MAECqG,KACC,gBAAAjI,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,SAAK;AAAA,QAC/B,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,GAAGvB,EAAM,IAAIC,EAAQ,IAAIC,EAAc;AAAA,YAClD,KAAK;AAAA,YACL,KAAKkG;AAAA,YACL,WAAW,CAAC/E,MAAM;AAChB,kBAAIA,EAAE,QAAQ,SAAS;AACrB,sBAAML,IAAQ,SAAUK,EAAE,OAA4B,KAAK;AAC3D,gBAAIL,KAAS,KAAKA,KAASoF,KACzBI,EAAiBxF,CAAK;AAAA,cAE1B;AAAA,YACF;AAAA,YACA,cAAW;AAAA,YACX,eAAa,GAAGkC,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5B,EAAA,CACF;AAAA,IAAA,GAEJ;AAAA,EAIJ,GAEM0G,KAAqBrH,KAAc,OAAOA,KAAe,YAAYA,EAAW,WAAW,QAC3FsH,KAAgB7E,KAAuB4E,IAAoB,WAAW,KAAK,IAAIT,OAAqB,MACpGW,KAAmB9E,MAAwB,CAAC4E,MAAsBA,GAAmB,WAAW,QAAQ,KAAKT,GAAA,IAAqB;AAExI,2BACG,OAAA,EAAI,WAAU,aAAY,eAAajG,GAAa,GAAGF,IACrD,UAAA;AAAA,IAAA6G;AAAA,IAED,gBAAAtI,EAAC,OAAA,EAAI,WAAWuH,IAAgB,OAAOD,GACrC,UAAA,gBAAAvH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA2B;AAAA,QACA,WAAWyF;AAAA,QACX,OAAO,EAAE,gBAAgB,YAAY,eAAe,GAAG,aAAa,QAAA;AAAA,QACpE,MAAK;AAAA,QACL,cAAY3F;AAAA,QACZ,iBAAe6C,EAAW;AAAA,QAC1B,eAAa,GAAG1C,CAAU;AAAA,QAE1B,UAAA;AAAA,UAAA,gBAAA3B,EAAC,SAAA,EACC,UAAA,gBAAAD,EAAC,MAAA,EAAG,MAAK,OACN,UAAA;AAAA,YAAAsH,uBACE,MAAA,EAAG,OAAO,EAAE,OAAO,MAAM,WAAU,kCAAiC,MAAK,gBACxE,UAAA,gBAAArH,EAAC,QAAA,EAAK,WAAU,WAAU,oBAAM,GAClC;AAAA,YAEDiB,KACC,gBAAAjB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,OAAO,GAAA;AAAA,gBAChB,WAAW,UAAUqH,IAAgB,KAAK,QAAQ;AAAA,gBAClD,MAAK;AAAA,gBAEJ,UAAApG,EAAa,SAAS,WACrB,gBAAAjB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAW,GAAGtC,EAAS,gBAAgBE,EAAgB;AAAA,oBACvD,SAAS4J;AAAA,oBACT,KAAK,CAACgB,MAAO;AACX,sBAAIA,MAAIA,EAAG,gBAAgBf,MAAkB,CAACD;AAAA,oBAChD;AAAA,oBACA,UAAU,CAAC,MAAM7B,GAAgB,EAAE,OAAO,OAAO;AAAA,oBACjD,cAAY1G,IAAQ,aAAa;AAAA,oBACjC,eAAa,GAAG0C,CAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC5B;AAAA,YAAA;AAAA,YAIL+B,EAAe,IAAI,CAACU,GAAQuC,MAAgB;AAC3C,oBAAM8B,IAAa/B,GAAoBC,GAAa,EAAI,GAElD+B,IADWxF,EAAmB,cAAckB,EAAO,MAC5BlB,EAAmB,QAAQ;AAExD,qBACE,gBAAAlD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAW,GAAGwG,GAAcpC,EAAO,KAAK,CAAC,IAAIqE,EAAW,SAAS;AAAA,kBACjE,OAAO;AAAA,oBACL,GAAIrE,EAAO,QAAQ,EAAE,OAAOA,EAAO,MAAA,IAAU,CAAA;AAAA,oBAC7C,GAAGqE,EAAW;AAAA,kBAAA;AAAA,kBAEhB,MAAK;AAAA,kBACL,aAAWC,MAAc,WAAW,cAAcA,MAAc,YAAY,eAAe;AAAA,kBAC3F,eAAa,GAAG/G,CAAU,WAAWyC,EAAO,GAAG;AAAA,kBAE/C,UAAA,gBAAArE,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAA,gBAAAC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWoE,EAAO,SAAS,kDAAkD;AAAA,wBAC7E,SAAS,MAAMA,EAAO,UAAUkB,GAAWlB,EAAO,GAAG;AAAA,wBACrD,WAAW,CAACtE,MAAM;AAChB,0BAAIsE,EAAO,WAAWtE,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACnDA,EAAE,eAAA,GACFwF,GAAWlB,EAAO,GAAG;AAAA,wBAEzB;AAAA,wBACA,UAAUA,EAAO,SAAS,IAAI;AAAA,wBAC9B,MAAMA,EAAO,SAAS,WAAW;AAAA,wBACjC,cAAYA,EAAO,SAAS,WAAWA,EAAO,KAAK,KAAK;AAAA,wBAEvD,UAAAA,EAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAETA,EAAO,UACN,gBAAArE,EAAC,SAAI,WAAU,iBAAgB,eAAY,QACzC,UAAA;AAAA,sBAAA,gBAAAC;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAW,WAAW0I,MAAc,WAAW,iBAAiB,sBAAsB;AAAA,0BACtF,MAAK;AAAA,0BACL,SAAQ;AAAA,0BAER,UAAA,gBAAA1I,EAAC,QAAA,EAAK,GAAE,yIAAA,CAAyI;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAEnJ,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAW,iBAAiB0I,MAAc,YAAY,iBAAiB,sBAAsB;AAAA,0BAC7F,MAAK;AAAA,0BACL,SAAQ;AAAA,0BAER,UAAA,gBAAA1I,EAAC,QAAA,EAAK,GAAE,0IAAA,CAA0I;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACpJ,GACF;AAAA,oBAEDoE,EAAO,WACN,gBAAApE;AAAA,sBAACnB;AAAA,sBAAA;AAAA,wBACC,SAASuF,EAAO;AAAA,wBAChB,gBAAgBf,EAAqBe,EAAO,GAAG,KAAK,CAAA;AAAA,wBACpD,UAAU,CAACqB,MAAWD,GAAmBpB,EAAO,KAAKqB,CAAM;AAAA,wBAC3D,QAAAxG;AAAA,wBACA,QAAQ,GAAG0C,CAAU,IAAIyC,EAAO,GAAG;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACrC,EAAA,CAEJ;AAAA,gBAAA;AAAA,gBArDKA,EAAO;AAAA,cAAA;AAAA,YAwDlB,CAAC;AAAA,UAAA,EAAA,CACH,EAAA,CACF;AAAA,UACA,gBAAApE,EAAC,WACE,UAAAgF,EAAc,WAAW,IACxB,gBAAAhF,EAAC,MAAA,EAAG,MAAK,OACP,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS0D,EAAe,SAASiE;AAAA,cACjC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,eAAa,GAAGhG,CAAU;AAAA,cAEzB,UAAA+F;AAAA,YAAA;AAAA,UAAA,GAEL,IAEA1C,EAAc,IAAI,CAACnB,GAAQC,MAAU;AACnC,kBAAM6E,IAAWtH,KAAQwC,GAAQC,CAAK,KAAK,CAAA,GACrCkC,IAAMrC,EAAUE,GAAQC,CAAK,GAC7B8E,IAAarF,EAAsB,SAASyC,CAAG,GAC/CK,IAAa7C,EAAsB,SAASwC,CAAG,GAC/C6C,IAAe3H,GAAY,gBAAgBA,EAAW,cAAc2C,CAAM,IAAI,IAC9EiF,IAAa;AAAA,cACjBlI,KAAa;AAAA,cACbgI,KAAc;AAAA,YAAA,EAEb,OAAO,OAAO,EACd,KAAK,GAAG,GAELG,IAAgB9H,GAAc,mBAAmB4C,CAAM,KAAK,CAAA,GAE5DmF,IAAiB,CAAClJ,MAA6C;AACnE,cAAA6I,EAAS,UAAU7I,CAAC,GAChBoB,GAAY,oBAAoB2H,KAClCzC,GAAavC,GAAQC,CAAK;AAAA,YAE9B;AAEA,mBACE,gBAAA/D,EAACkJ,GAAM,UAAN,EACC,UAAA;AAAA,cAAA,gBAAAlJ;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW+I;AAAA,kBACX,MAAK;AAAA,kBACL,iBAAeF;AAAA,kBACf,eAAa,GAAGjH,CAAU,QAAQmC,CAAK;AAAA,kBACvC,cAAY8E,IAAa,aAAa;AAAA,kBACrC,GAAGD;AAAA,kBACJ,SAASK;AAAA,kBAER,UAAA;AAAA,oBAAA3B,KACC,gBAAArH,EAAC,MAAA,EAAG,WAAU,kCAAiC,MAAK,YACjD,UAAA6I,MACC3H,EAAW,aACTA,EAAW,WAAW;AAAA,sBACpB,UAAUmF;AAAA,sBACV,UAAU,MAAMD,GAAavC,GAAQC,CAAK;AAAA,sBAC1C,QAAAD;AAAA,oBAAA,CACD,IAED,gBAAA7D;AAAA,sBAACE;AAAA,sBAAA;AAAA,wBACC,UAAUmG;AAAA,wBACV,UAAU,MAAMD,GAAavC,GAAQC,CAAK;AAAA,sBAAA;AAAA,oBAAA,IAIlD;AAAA,oBAED7C,KACC,gBAAAjB;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAW,UAAUqH,IAAgB,KAAK,QAAQ;AAAA,wBAClD,MAAK;AAAA,wBAEL,UAAA,gBAAArH;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,MAAMiB,EAAa,SAAS,UAAU,UAAU;AAAA,4BAChD,WAAWA,EAAa,SAAS,UAAU,GAAGpD,EAAM,IAAIC,EAAQ,IAAIC,EAAa,KAAK,GAAGL,EAAS,gBAAgBE,EAAgB;AAAA,4BAClI,SAASgL;AAAA,4BACT,UAAU,CAAC9I,MAAMiG,GAAgBlC,GAAQC,GAAOhE,EAAE,OAAO,OAAO;AAAA,4BAChE,cAAY,cAAcgE,IAAQ,CAAC;AAAA,4BACnC,eAAa,GAAGnC,CAAU,QAAQmC,CAAK;AAAA,4BACtC,GAAGiF;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACN;AAAA,oBAAA;AAAA,oBAGHrF,EAAe,IAAI,CAACU,GAAQuC,OAAgB;AAC3C,4BAAM8B,KAAa/B,GAAoBC,IAAa,EAAK,GACnDuC,KAAc3C,GAAanC,GAAQP,GAAQC,CAAK;AAEtD,6BACE,gBAAA9D;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BAEC,WAAW,GAAGwG,GAAcpC,EAAO,KAAK,CAAC,IAAIqE,GAAW,SAAS,IAAIrE,EAAO,WAAW,qBAAqB,EAAE;AAAA,0BAC9G,OAAOqE,GAAW;AAAA,0BAClB,MAAK;AAAA,0BACL,OAAOrE,EAAO,YAAY,OAAO8E,MAAgB,WAAWA,KAAc;AAAA,0BAC1E,eAAa,GAAGvH,CAAU,QAAQmC,CAAK,IAAIM,EAAO,GAAG;AAAA,0BAEpD,UAAA8E;AAAA,wBAAA;AAAA,wBAPI9E,EAAO;AAAA,sBAAA;AAAA,oBAUlB,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEFiD,KAAiBhB,KAChB,gBAAArG;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,eAAa,GAAG2B,CAAU,QAAQmC,CAAK;AAAA,kBAEvC,UAAA,gBAAA9D;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,SAAS0D,EAAe,SAASiE;AAAA,sBACjC,WAAU;AAAA,sBACV,MAAK;AAAA,sBAEJ,UAAAzG,EAAW,kBAAkB2C,GAAQC,GAAOuC,CAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACzD;AAAA,cAAA;AAAA,YACF,EAAA,GA3EiBL,CA6ErB;AAAA,UAEJ,CAAC,EAAA,CAEL;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IAECuC;AAAA,EAAA,GACH;AAEJ;AAEO,MAAMY,KAAQC,GAAW/I,EAAU;"}
|
package/dist/components/Tabs.js
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import
|
|
3
|
-
const
|
|
4
|
-
box:
|
|
5
|
-
border:
|
|
6
|
-
lift:
|
|
7
|
-
},
|
|
8
|
-
xs:
|
|
9
|
-
sm:
|
|
10
|
-
md:
|
|
11
|
-
lg:
|
|
12
|
-
xl:
|
|
1
|
+
import { jsx as t, jsxs as b, Fragment as d } from "react/jsx-runtime";
|
|
2
|
+
import y, { useState as N } from "react";
|
|
3
|
+
const P = "tabs", L = "tabs-box", S = "tabs-border", R = "tabs-lift", X = "tabs-xs", D = "tabs-sm", E = "tabs-md", F = "tabs-lg", I = "tabs-xl", K = "tab", M = "tab-active", O = "tab-disabled", V = {
|
|
4
|
+
box: L,
|
|
5
|
+
border: S,
|
|
6
|
+
lift: R
|
|
7
|
+
}, q = {
|
|
8
|
+
xs: X,
|
|
9
|
+
sm: D,
|
|
10
|
+
md: E,
|
|
11
|
+
lg: F,
|
|
12
|
+
xl: I
|
|
13
13
|
};
|
|
14
|
-
function
|
|
15
|
-
children:
|
|
16
|
-
items:
|
|
14
|
+
function w({
|
|
15
|
+
children: a,
|
|
16
|
+
items: e,
|
|
17
17
|
activeKey: n,
|
|
18
|
-
defaultActiveKey:
|
|
18
|
+
defaultActiveKey: h,
|
|
19
19
|
onChange: x,
|
|
20
|
-
variant:
|
|
21
|
-
size:
|
|
22
|
-
position:
|
|
23
|
-
className:
|
|
20
|
+
variant: i,
|
|
21
|
+
size: l,
|
|
22
|
+
position: r = "top",
|
|
23
|
+
className: u = "",
|
|
24
24
|
...g
|
|
25
25
|
}) {
|
|
26
|
-
const
|
|
27
|
-
(
|
|
28
|
-
).map((
|
|
29
|
-
...
|
|
30
|
-
_key:
|
|
31
|
-
})),
|
|
32
|
-
_key:
|
|
33
|
-
tab:
|
|
34
|
-
children:
|
|
35
|
-
disabled:
|
|
36
|
-
icon:
|
|
37
|
-
})) :
|
|
38
|
-
|
|
39
|
-
),
|
|
40
|
-
n === void 0 &&
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
].filter(Boolean).join(" "),
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
26
|
+
const _ = y.Children.toArray(a).filter(
|
|
27
|
+
(s) => y.isValidElement(s) && s.type === k
|
|
28
|
+
).map((s) => ({
|
|
29
|
+
...s.props,
|
|
30
|
+
_key: s.key != null ? String(s.key) : ""
|
|
31
|
+
})), o = e && e.length > 0 ? e.map((s) => ({
|
|
32
|
+
_key: s.key,
|
|
33
|
+
tab: s.label,
|
|
34
|
+
children: s.children,
|
|
35
|
+
disabled: s.disabled,
|
|
36
|
+
icon: s.icon
|
|
37
|
+
})) : _, [p, A] = N(
|
|
38
|
+
h || o[0]?._key || ""
|
|
39
|
+
), T = n !== void 0 ? n : p, C = (s) => {
|
|
40
|
+
n === void 0 && A(s), x?.(s);
|
|
41
|
+
}, j = [
|
|
42
|
+
P,
|
|
43
|
+
i && V[i],
|
|
44
|
+
l && q[l],
|
|
45
|
+
u
|
|
46
|
+
].filter(Boolean).join(" "), m = o.find((s) => s._key === T), f = /* @__PURE__ */ t("div", { role: "tablist", className: j, children: o.map((s) => {
|
|
47
|
+
const c = T === s._key, B = [
|
|
48
|
+
K,
|
|
49
|
+
c && M,
|
|
50
|
+
s.disabled && O
|
|
51
51
|
].filter(Boolean).join(" ");
|
|
52
|
-
return /* @__PURE__ */
|
|
52
|
+
return /* @__PURE__ */ b(
|
|
53
53
|
"button",
|
|
54
54
|
{
|
|
55
55
|
role: "tab",
|
|
56
|
-
className:
|
|
57
|
-
onClick: () => !
|
|
58
|
-
disabled:
|
|
59
|
-
"data-state":
|
|
60
|
-
"aria-selected":
|
|
56
|
+
className: B,
|
|
57
|
+
onClick: () => !s.disabled && C(s._key),
|
|
58
|
+
disabled: s.disabled,
|
|
59
|
+
"data-state": c ? "active" : "inactive",
|
|
60
|
+
"aria-selected": c,
|
|
61
61
|
children: [
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
s.icon && /* @__PURE__ */ t("span", { className: "mr-1", children: s.icon }),
|
|
63
|
+
s.tab
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
|
-
|
|
66
|
+
s._key
|
|
67
67
|
);
|
|
68
|
-
}) }),
|
|
69
|
-
return /* @__PURE__ */
|
|
70
|
-
|
|
71
|
-
y
|
|
72
|
-
] }) : /* @__PURE__ */ o(c, { children: [
|
|
73
|
-
y,
|
|
68
|
+
}) }), v = m && /* @__PURE__ */ t("div", { className: r === "top" ? "mt-4" : "mb-4", role: "tabpanel", children: m.children });
|
|
69
|
+
return /* @__PURE__ */ t("div", { ...g, children: r === "top" ? /* @__PURE__ */ b(d, { children: [
|
|
70
|
+
f,
|
|
74
71
|
v
|
|
72
|
+
] }) : /* @__PURE__ */ b(d, { children: [
|
|
73
|
+
v,
|
|
74
|
+
f
|
|
75
75
|
] }) });
|
|
76
76
|
}
|
|
77
|
-
function
|
|
78
|
-
return /* @__PURE__ */
|
|
77
|
+
function k({ children: a }) {
|
|
78
|
+
return /* @__PURE__ */ t(d, { children: a });
|
|
79
79
|
}
|
|
80
|
-
const
|
|
81
|
-
Panel:
|
|
80
|
+
const H = Object.assign(w, {
|
|
81
|
+
Panel: k
|
|
82
82
|
});
|
|
83
83
|
export {
|
|
84
|
-
|
|
84
|
+
H as Tabs
|
|
85
85
|
};
|
|
86
86
|
//# sourceMappingURL=Tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import React, { useState } from 'react'\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}\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:
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import React, { useState } from 'react'\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}\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\nfunction TabsRoot({\n children,\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant,\n size,\n position = 'top',\n className = '',\n ...rest\n}: TabsProps) {\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 size && sizeClasses[size],\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}>\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 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\">\n {activePanel.children}\n </div>\n )\n\n return (\n <div {...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","children","items","activeKey","defaultActiveKey","onChange","variant","size","position","className","rest","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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"}
|