@pk-design/react-tailwind 1.7.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/cjs/components/Button/Button.js +46 -28
  2. package/dist/cjs/components/Button/Button.js.map +1 -1
  3. package/dist/cjs/components/Checkbox/Checkbox.js +10 -4
  4. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  5. package/dist/cjs/components/CheckboxGroup/CheckboxGroup.js +19 -13
  6. package/dist/cjs/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
  7. package/dist/cjs/components/DataList/DataList.js +2 -2
  8. package/dist/cjs/components/DataList/DataList.js.map +1 -1
  9. package/dist/cjs/components/DataTable/DataTable.js +72 -40
  10. package/dist/cjs/components/DataTable/DataTable.js.map +1 -1
  11. package/dist/cjs/components/DataTable/DataTable.utils.js +2 -1
  12. package/dist/cjs/components/DataTable/DataTable.utils.js.map +1 -1
  13. package/dist/cjs/components/Input/Input.js +11 -8
  14. package/dist/cjs/components/Input/Input.js.map +1 -1
  15. package/dist/cjs/components/Pagination/Pagination.js +27 -15
  16. package/dist/cjs/components/Pagination/Pagination.js.map +1 -1
  17. package/dist/cjs/components/Radio/Radio.js +9 -5
  18. package/dist/cjs/components/Radio/Radio.js.map +1 -1
  19. package/dist/cjs/components/RadioGroup/RadioGroup.js +8 -3
  20. package/dist/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  21. package/dist/cjs/components/SelectBox/SelectBox.js +24 -25
  22. package/dist/cjs/components/SelectBox/SelectBox.js.map +1 -1
  23. package/dist/cjs/components/Textarea/Textarea.js +8 -5
  24. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  25. package/dist/es/components/Button/Button.js +46 -28
  26. package/dist/es/components/Button/Button.js.map +1 -1
  27. package/dist/es/components/Checkbox/Checkbox.js +10 -4
  28. package/dist/es/components/Checkbox/Checkbox.js.map +1 -1
  29. package/dist/es/components/CheckboxGroup/CheckboxGroup.js +20 -14
  30. package/dist/es/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
  31. package/dist/es/components/DataList/DataList.js +2 -2
  32. package/dist/es/components/DataList/DataList.js.map +1 -1
  33. package/dist/es/components/DataTable/DataTable.js +74 -42
  34. package/dist/es/components/DataTable/DataTable.js.map +1 -1
  35. package/dist/es/components/DataTable/DataTable.utils.js +2 -1
  36. package/dist/es/components/DataTable/DataTable.utils.js.map +1 -1
  37. package/dist/es/components/Input/Input.js +12 -9
  38. package/dist/es/components/Input/Input.js.map +1 -1
  39. package/dist/es/components/Pagination/Pagination.js +27 -15
  40. package/dist/es/components/Pagination/Pagination.js.map +1 -1
  41. package/dist/es/components/Radio/Radio.js +9 -5
  42. package/dist/es/components/Radio/Radio.js.map +1 -1
  43. package/dist/es/components/RadioGroup/RadioGroup.js +9 -4
  44. package/dist/es/components/RadioGroup/RadioGroup.js.map +1 -1
  45. package/dist/es/components/SelectBox/SelectBox.js +24 -25
  46. package/dist/es/components/SelectBox/SelectBox.js.map +1 -1
  47. package/dist/es/components/Textarea/Textarea.js +9 -6
  48. package/dist/es/components/Textarea/Textarea.js.map +1 -1
  49. package/dist/react-tailwind.cjs.js +264 -177
  50. package/dist/react-tailwind.cjs.js.map +1 -1
  51. package/dist/react-tailwind.es.js +264 -177
  52. package/dist/react-tailwind.es.js.map +1 -1
  53. package/dist/types/components/Button/Button.types.d.ts +5 -0
  54. package/dist/types/components/CheckboxGroup/CheckboxGroup.types.d.ts +9 -1
  55. package/dist/types/components/DataList/DataList.d.ts +1 -1
  56. package/dist/types/components/DataList/DataList.types.d.ts +8 -0
  57. package/dist/types/components/DataTable/DataTable.d.ts +1 -1
  58. package/dist/types/components/DataTable/DataTable.types.d.ts +46 -0
  59. package/dist/types/components/Pagination/Pagination.types.d.ts +21 -24
  60. package/dist/types/components/RadioGroup/RadioGroup.types.d.ts +8 -0
  61. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataList.js","sources":["../../../../../src/components/DataList/DataList.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react'\nimport type { DataListProps, DataListSortDirection } from './DataList.types'\nimport { SwipeableRow } from '../SwipeableRow'\nimport { Checkbox } from '../Checkbox'\nimport { Pagination } from '../Pagination'\nimport { Input } from '../Input'\nimport { Drawer } from '../Drawer'\nimport { Button } from '../Button'\nimport { get } from '../../utils/get'\nimport { buildClassName } from '../../utils/build-classname'\n\nfunction SearchIcon() {\n return (\n <svg className=\"size-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n )\n}\n\nfunction FilterIcon() {\n return (\n <svg className=\"size-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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 />\n </svg>\n )\n}\n\nfunction SortIcon() {\n return (\n <svg className=\"size-3.5 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\"\n />\n </svg>\n )\n}\n\nfunction CheckIcon() {\n return (\n <svg\n className=\"size-4 text-blue-600 dark:text-blue-400 shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2.5} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nconst parseNumericValue = (val: any): number => {\n if (typeof val === 'number') return val\n if (val === null || val === undefined) return NaN\n const cleaned = String(val).replace(/[^0-9.-]/g, '')\n return cleaned !== '' ? Number(cleaned) : NaN\n}\n\nexport function DataList<T extends Record<string, any> = Record<string, any>>({\n items,\n columns,\n renderItem,\n searchable = false,\n searchQuery: externalSearchQuery,\n onSearchChange,\n searchFields,\n filterFields,\n selectedFilters: externalFilters,\n onFilterChange,\n sorting: externalSorting,\n onSortChange,\n swipeableActions,\n rowKey = 'id',\n selectable = false,\n selectedKeys = [],\n onSelectionChange,\n onItemClick,\n loading = false,\n emptyMessage = 'No items found',\n pagination,\n setPagination,\n containerClass = '',\n itemClass = '',\n}: DataListProps<T>) {\n // Internal Search State\n const [internalSearchQuery, setInternalSearchQuery] = useState('')\n const searchQuery = externalSearchQuery !== undefined ? externalSearchQuery : internalSearchQuery\n\n const handleSearchInput = (query: string) => {\n onSearchChange ? onSearchChange(query) : setInternalSearchQuery(query)\n }\n\n // Internal Filter State\n const [internalFilters, setInternalFilters] = useState<\n Record<string, Array<string | number> | string | number>\n >({})\n const selectedFilters = externalFilters !== undefined ? externalFilters : internalFilters\n\n // Mobile Bottom Sheet Filter Drawer State\n const [isFilterSheetOpen, setIsFilterSheetOpen] = useState(false)\n const [draftFilters, setDraftFilters] = useState<\n Record<string, Array<string | number> | string | number>\n >({})\n\n // Mobile Bottom Sheet Sort Drawer State\n const [isSortSheetOpen, setIsSortSheetOpen] = useState(false)\n\n // Active Filter Count Calculation\n const activeFilterCount = useMemo(() => {\n let count = 0\n Object.values(selectedFilters).forEach((val) => {\n if (Array.isArray(val)) {\n count += val.length\n } else if (val !== '' && val !== null && val !== undefined && val !== 'all') {\n count += 1\n }\n })\n return count\n }, [selectedFilters])\n\n // Internal Sort State\n const [internalSort, setInternalSort] = useState<{\n field: string\n dir: DataListSortDirection\n } | null>(() => {\n if (externalSorting && Object.keys(externalSorting).length > 0) {\n const field = Object.keys(externalSorting)[0]\n return { field, dir: externalSorting[field] }\n }\n return null\n })\n\n React.useEffect(() => {\n if (externalSorting !== undefined) {\n if (Object.keys(externalSorting).length > 0) {\n const field = Object.keys(externalSorting)[0]\n setInternalSort({ field, dir: externalSorting[field] })\n } else {\n setInternalSort(null)\n }\n }\n }, [externalSorting])\n\n const activeSort = internalSort\n\n const sortableColumns = useMemo(() => columns?.filter((c) => c.sortable) || [], [columns])\n\n const sortOptions = useMemo(() => {\n const opts: Array<{ label: string; value: string }> = [{ label: 'Default Order', value: '' }]\n sortableColumns.forEach((col) => {\n const isNum = col.type === 'number'\n const isDate = col.type === 'date'\n const lowHigh = isNum\n ? `${col.label} (Low to High)`\n : isDate\n ? `${col.label} (Oldest First)`\n : `${col.label} (A to Z)`\n const highLow = isNum\n ? `${col.label} (High to Low)`\n : isDate\n ? `${col.label} (Newest First)`\n : `${col.label} (Z to A)`\n\n opts.push({ label: lowHigh, value: `${col.name}:asc` })\n opts.push({ label: highLow, value: `${col.name}:desc` })\n })\n return opts\n }, [sortableColumns])\n\n const handleSortSelect = (val: string) => {\n if (!val) {\n setInternalSort(null)\n onSortChange?.({})\n return\n }\n const [field, dir] = val.split(':')\n const sortObj = { [field]: dir as DataListSortDirection }\n setInternalSort({ field, dir: dir as DataListSortDirection })\n onSortChange?.(sortObj)\n }\n\n const activeSortLabel = useMemo(() => {\n if (!activeSort) return 'Sort'\n const currVal = `${activeSort.field}:${activeSort.dir}`\n const match = sortOptions.find((o) => o.value === currVal)\n if (!match || !match.value) return 'Sort'\n return `Sort: ${match.label}`\n }, [activeSort, sortOptions])\n\n // Processed Items (Filter + Search + Sort)\n const processedItems = useMemo(() => {\n let result = [...items]\n\n // 1. Apply Search\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase().trim()\n const fieldsToSearch = searchFields || columns?.map((c) => c.name) || ['id', 'name', 'title']\n result = result.filter((item) =>\n fieldsToSearch.some((field) => {\n const val = get(item, field)\n return val !== null && val !== undefined && String(val).toLowerCase().includes(q)\n }),\n )\n }\n\n // 2. Apply Filters (supporting array checkboxes or single values)\n const filterKeys = Object.keys(selectedFilters)\n if (filterKeys.length > 0) {\n result = result.filter((item) =>\n filterKeys.every((key) => {\n const filterVal = selectedFilters[key]\n if (filterVal === undefined || filterVal === null || filterVal === '') return true\n const actual = String(get(item, key))\n if (Array.isArray(filterVal)) {\n if (filterVal.length === 0) return true\n return filterVal.map(String).includes(actual)\n }\n return actual === String(filterVal)\n }),\n )\n }\n\n // 3. Apply Auto Sorting\n if (activeSort) {\n const { field, dir } = activeSort\n const colDef = columns?.find((c) => c.name === field)\n const isAsc = dir === 'asc' || dir === '1'\n\n result.sort((a, b) => {\n const valA = get(a, field)\n const valB = get(b, field)\n\n const numA = parseNumericValue(valA)\n const numB = parseNumericValue(valB)\n\n if (colDef?.type === 'number' || (!isNaN(numA) && !isNaN(numB))) {\n return isAsc ? numA - numB : numB - numA\n }\n\n if (colDef?.type === 'date') {\n const dA = new Date(valA).getTime()\n const dB = new Date(valB).getTime()\n if (!isNaN(dA) && !isNaN(dB)) {\n return isAsc ? dA - dB : dB - dA\n }\n }\n\n const strA = String(valA ?? '')\n const strB = String(valB ?? '')\n return isAsc\n ? strA.localeCompare(strB, undefined, { numeric: true })\n : strB.localeCompare(strA, undefined, { numeric: true })\n })\n }\n\n return result\n }, [items, searchQuery, searchFields, columns, selectedFilters, activeSort])\n\n // Draft Filters Matching Count\n const draftMatchingCount = useMemo(() => {\n let result = [...items]\n const filterKeys = Object.keys(draftFilters)\n if (filterKeys.length > 0) {\n result = result.filter((item) =>\n filterKeys.every((key) => {\n const filterVal = draftFilters[key]\n if (filterVal === undefined || filterVal === null || filterVal === '') return true\n const actual = String(get(item, key))\n if (Array.isArray(filterVal)) {\n if (filterVal.length === 0) return true\n return filterVal.map(String).includes(actual)\n }\n return actual === String(filterVal)\n }),\n )\n }\n return result.length\n }, [items, draftFilters])\n\n const getKey = (item: T, idx: number): string | number => {\n if (typeof rowKey === 'function') return rowKey(item)\n return (item as any)[rowKey] ?? idx\n }\n\n const isSelected = (key: string | number) => selectedKeys.includes(key)\n\n const toggleSelectAll = () => {\n if (selectedKeys.length === processedItems.length) {\n onSelectionChange?.([], [])\n } else {\n const allKeys = processedItems.map(getKey)\n onSelectionChange?.(allKeys, processedItems)\n }\n }\n\n const toggleItemSelect = (key: string | number, item: T) => {\n const nextKeys = isSelected(key)\n ? selectedKeys.filter((k) => k !== key)\n : [...selectedKeys, key]\n const nextItems = processedItems.filter((it, idx) => nextKeys.includes(getKey(it, idx)))\n onSelectionChange?.(nextKeys, nextItems)\n }\n\n const getItemClassStr = (item: T, idx: number): string => {\n if (typeof itemClass === 'function') return itemClass(item, idx)\n return itemClass\n }\n\n return (\n <div className={buildClassName('w-full space-y-3', containerClass)} data-testid=\"data-list\">\n {/* Top Search, Filter, Sort Toolbar */}\n {(searchable || (filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] space-y-3\">\n {searchable && (\n <Input\n value={searchQuery}\n onChange={(e) => handleSearchInput(e.target.value)}\n placeholder=\"Search items...\"\n leftGroup={<SearchIcon />}\n clearable\n onClear={() => handleSearchInput('')}\n className=\"w-full text-xs\"\n size=\"sm\"\n />\n )}\n\n {((filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (\n <div className=\"flex items-center gap-2\">\n {filterFields && filterFields.length > 0 && (\n <Button\n theme=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setDraftFilters(selectedFilters)\n setIsFilterSheetOpen(true)\n }}\n className=\"flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center\"\n data-testid=\"data-list-filter-btn\"\n >\n <FilterIcon />\n <span>Filters</span>\n {activeFilterCount > 0 && (\n <span className=\"ml-1 size-4 rounded-full bg-blue-600 text-white text-[10px] font-bold flex items-center justify-center\">\n {activeFilterCount}\n </span>\n )}\n </Button>\n )}\n\n {sortableColumns.length > 0 && (\n <Button\n theme=\"secondary\"\n size=\"sm\"\n onClick={() => setIsSortSheetOpen(true)}\n className=\"flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center\"\n data-testid=\"data-list-sort-btn\"\n >\n <SortIcon />\n <span>{activeSortLabel}</span>\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Mobile Bottom Sheet Filter Drawer */}\n {filterFields && filterFields.length > 0 && (\n <Drawer\n isOpen={isFilterSheetOpen}\n onClose={() => setIsFilterSheetOpen(false)}\n align=\"bottom\"\n title=\"Filter Items\"\n dragHandle\n panelClass=\"max-h-[85vh] rounded-t-2xl\"\n footer={\n <div className=\"flex items-center gap-3 w-full\">\n <Button\n theme=\"secondary\"\n size=\"md\"\n onClick={() => setDraftFilters({})}\n className=\"flex-1 text-xs\"\n >\n Clear All\n </Button>\n <Button\n theme=\"primary\"\n size=\"md\"\n onClick={() => {\n onFilterChange ? onFilterChange(draftFilters) : setInternalFilters(draftFilters)\n setIsFilterSheetOpen(false)\n }}\n className=\"flex-1 text-xs font-semibold\"\n data-testid=\"data-list-apply-filters-btn\"\n >\n Apply Filters ({draftMatchingCount})\n </Button>\n </div>\n }\n footerSticky\n >\n <div className=\"space-y-6 py-2\">\n {filterFields.map((field) => {\n const selectedArray = Array.isArray(draftFilters[field.name])\n ? (draftFilters[field.name] as Array<string | number>)\n : draftFilters[field.name] !== undefined && draftFilters[field.name] !== ''\n ? [draftFilters[field.name] as string | number]\n : []\n\n return (\n <div key={field.name} className=\"space-y-2.5\">\n <h4 className=\"text-xs font-bold uppercase tracking-wider text-gray-500 dark:text-gray-400 px-1\">\n {field.label}\n </h4>\n <div className=\"space-y-1.5 bg-gray-50 dark:bg-gray-800/60 p-2.5 rounded-xl border border-[var(--ui-border-muted)]\">\n {field.options.map((opt) => {\n const checked = selectedArray.includes(opt.value)\n return (\n <label\n key={String(opt.value)}\n className=\"flex items-center justify-between p-2 rounded-lg hover:bg-white dark:hover:bg-gray-800 cursor-pointer transition-colors\"\n >\n <span className=\"text-sm font-medium text-gray-800 dark:text-gray-200\">\n {opt.label}\n </span>\n <Checkbox\n checked={checked}\n onChange={() => {\n const next = checked\n ? selectedArray.filter((v) => v !== opt.value)\n : [...selectedArray, opt.value]\n setDraftFilters((prev) => ({\n ...prev,\n [field.name]: next,\n }))\n }}\n />\n </label>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n </Drawer>\n )}\n\n {/* Mobile Bottom Sheet Sort Drawer */}\n {sortableColumns.length > 0 && (\n <Drawer\n isOpen={isSortSheetOpen}\n onClose={() => setIsSortSheetOpen(false)}\n align=\"bottom\"\n title=\"Sort Items By\"\n dragHandle\n panelClass=\"max-h-[70vh] rounded-t-2xl\"\n >\n <div className=\"space-y-1 py-2\">\n {sortOptions.map((opt) => {\n const isSelected =\n (activeSort ? `${activeSort.field}:${activeSort.dir}` : '') === opt.value\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => {\n handleSortSelect(opt.value)\n setIsSortSheetOpen(false)\n }}\n className={buildClassName(\n 'w-full flex items-center justify-between p-3.5 rounded-xl text-left transition-colors cursor-pointer',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-950/40 text-blue-600 dark:text-blue-400 font-semibold'\n : 'hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 font-medium',\n )}\n data-testid={`data-list-sort-opt-${opt.value || 'default'}`}\n >\n <span className=\"text-sm\">{opt.label}</span>\n {isSelected && <CheckIcon />}\n </button>\n )\n })}\n </div>\n </Drawer>\n )}\n\n {/* Select All Toolbar */}\n {selectable && processedItems.length > 0 && (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] flex items-center justify-between text-xs\">\n <label className=\"flex items-center gap-2 font-medium text-gray-700 dark:text-gray-300 cursor-pointer\">\n <Checkbox\n checked={processedItems.length > 0 && selectedKeys.length === processedItems.length}\n onChange={toggleSelectAll}\n />\n <span>Select All Items</span>\n </label>\n <span className=\"text-gray-400 font-semibold\">\n {selectedKeys.length} of {processedItems.length}\n </span>\n </div>\n )}\n\n {/* Items List */}\n <div className=\"space-y-3\">\n {loading ? (\n <div className=\"p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]\">\n Loading items...\n </div>\n ) : processedItems.length === 0 ? (\n <div className=\"p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]\">\n {emptyMessage}\n </div>\n ) : (\n processedItems.map((item, idx) => {\n const key = getKey(item, idx)\n const selected = isSelected(key)\n const actions = swipeableActions?.(item)\n const customClass = getItemClassStr(item, idx)\n\n const contentNode = renderItem ? (\n renderItem(item, idx)\n ) : (\n <div\n onClick={() => onItemClick?.(item, idx)}\n className={buildClassName(\n 'p-4 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)] shadow-xs space-y-3 transition-colors',\n onItemClick && 'cursor-pointer hover:border-blue-500/50',\n selected && 'ring-2 ring-blue-500/50 bg-blue-50/20 dark:bg-blue-950/20',\n customClass,\n )}\n data-testid={`data-list-item-${key}`}\n >\n {/* Card Header Row */}\n <div className=\"flex items-center justify-between gap-3 border-b border-[var(--ui-border-muted)] pb-2.5\">\n <div className=\"flex items-center gap-2.5 min-w-0 flex-1\">\n {selectable ? (\n <Checkbox\n checked={selected}\n onChange={() => toggleItemSelect(key, item)}\n aria-label={`Select item ${key}`}\n label={\n <span className=\"font-bold text-sm text-gray-900 dark:text-white truncate block\">\n {columns && columns[0]?.render\n ? columns[0].render(item)\n : String(get(item, columns?.[0]?.name ?? 'title') ?? '')}\n </span>\n }\n />\n ) : (\n <div className=\"font-bold text-sm text-gray-900 dark:text-white truncate\">\n {columns && columns[0]?.render\n ? columns[0].render(item)\n : String(get(item, columns?.[0]?.name ?? 'title') ?? '')}\n </div>\n )}\n </div>\n {columns && columns[1] && (\n <div className=\"shrink-0 text-xs\">\n {columns[1].render\n ? columns[1].render(item)\n : String(get(item, columns[1].name) ?? '')}\n </div>\n )}\n </div>\n\n {/* Key-Value Details Grid */}\n {columns && columns.length > 2 && (\n <div className=\"grid grid-cols-2 gap-2 text-xs pt-1\">\n {columns.slice(2).map((col) => {\n const val = col.render ? col.render(item) : get(item, col.name)\n if (val === null || val === undefined || val === '') return null\n return (\n <div key={String(col.name)} className=\"min-w-0\">\n <span className=\"text-gray-400 dark:text-gray-500 font-medium block truncate\">\n {col.label}\n </span>\n <span className=\"text-gray-800 dark:text-gray-200 font-semibold block truncate mt-0.5\">\n {val}\n </span>\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n\n if (actions && (actions.leftActions?.length || actions.rightActions?.length)) {\n return (\n <SwipeableRow\n key={key}\n leftActions={actions.leftActions}\n rightActions={actions.rightActions}\n >\n {contentNode}\n </SwipeableRow>\n )\n }\n\n return <div key={key}>{contentNode}</div>\n })\n )}\n </div>\n\n {/* Pagination Footer */}\n {pagination && pagination.total > 0 && (\n <div className=\"pt-2 flex justify-center\">\n <Pagination {...pagination} onChange={(newPag) => setPagination?.(newPag)} />\n </div>\n )}\n </div>\n )\n}\n\nDataList.displayName = 'DataList'\n"],"names":["_jsx","React","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"DataList.js","sources":["../../../../../src/components/DataList/DataList.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react'\nimport type { DataListProps, DataListSortDirection } from './DataList.types'\nimport { SwipeableRow } from '../SwipeableRow'\nimport { Checkbox } from '../Checkbox'\nimport { Pagination } from '../Pagination'\nimport { Input } from '../Input'\nimport { Drawer } from '../Drawer'\nimport { Button } from '../Button'\nimport { get } from '../../utils/get'\nimport { buildClassName } from '../../utils/build-classname'\n\nfunction SearchIcon() {\n return (\n <svg className=\"size-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n )\n}\n\nfunction FilterIcon() {\n return (\n <svg className=\"size-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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 />\n </svg>\n )\n}\n\nfunction SortIcon() {\n return (\n <svg className=\"size-3.5 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\"\n />\n </svg>\n )\n}\n\nfunction CheckIcon() {\n return (\n <svg\n className=\"size-4 text-blue-600 dark:text-blue-400 shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2.5} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nconst parseNumericValue = (val: any): number => {\n if (typeof val === 'number') return val\n if (val === null || val === undefined) return NaN\n const cleaned = String(val).replace(/[^0-9.-]/g, '')\n return cleaned !== '' ? Number(cleaned) : NaN\n}\n\nexport function DataList<T extends Record<string, any> = Record<string, any>>({\n items,\n columns,\n renderItem,\n searchable = false,\n searchQuery: externalSearchQuery,\n onSearchChange,\n searchFields,\n filterFields,\n selectedFilters: externalFilters,\n onFilterChange,\n sorting: externalSorting,\n onSortChange,\n swipeableActions,\n rowKey = 'id',\n selectable = false,\n selectedKeys = [],\n onSelectionChange,\n onItemClick,\n loading = false,\n emptyMessage = 'No items found',\n pagination,\n setPagination,\n paginationClass,\n paginationContainerClass,\n paginationProps,\n renderPagination,\n containerClass = '',\n itemClass = '',\n}: DataListProps<T>) {\n // Internal Search State\n const [internalSearchQuery, setInternalSearchQuery] = useState('')\n const searchQuery = externalSearchQuery !== undefined ? externalSearchQuery : internalSearchQuery\n\n const handleSearchInput = (query: string) => {\n onSearchChange ? onSearchChange(query) : setInternalSearchQuery(query)\n }\n\n // Internal Filter State\n const [internalFilters, setInternalFilters] = useState<\n Record<string, Array<string | number> | string | number>\n >({})\n const selectedFilters = externalFilters !== undefined ? externalFilters : internalFilters\n\n // Mobile Bottom Sheet Filter Drawer State\n const [isFilterSheetOpen, setIsFilterSheetOpen] = useState(false)\n const [draftFilters, setDraftFilters] = useState<\n Record<string, Array<string | number> | string | number>\n >({})\n\n // Mobile Bottom Sheet Sort Drawer State\n const [isSortSheetOpen, setIsSortSheetOpen] = useState(false)\n\n // Active Filter Count Calculation\n const activeFilterCount = useMemo(() => {\n let count = 0\n Object.values(selectedFilters).forEach((val) => {\n if (Array.isArray(val)) {\n count += val.length\n } else if (val !== '' && val !== null && val !== undefined && val !== 'all') {\n count += 1\n }\n })\n return count\n }, [selectedFilters])\n\n // Internal Sort State\n const [internalSort, setInternalSort] = useState<{\n field: string\n dir: DataListSortDirection\n } | null>(() => {\n if (externalSorting && Object.keys(externalSorting).length > 0) {\n const field = Object.keys(externalSorting)[0]\n return { field, dir: externalSorting[field] }\n }\n return null\n })\n\n React.useEffect(() => {\n if (externalSorting !== undefined) {\n if (Object.keys(externalSorting).length > 0) {\n const field = Object.keys(externalSorting)[0]\n setInternalSort({ field, dir: externalSorting[field] })\n } else {\n setInternalSort(null)\n }\n }\n }, [externalSorting])\n\n const activeSort = internalSort\n\n const sortableColumns = useMemo(() => columns?.filter((c) => c.sortable) || [], [columns])\n\n const sortOptions = useMemo(() => {\n const opts: Array<{ label: string; value: string }> = [{ label: 'Default Order', value: '' }]\n sortableColumns.forEach((col) => {\n const isNum = col.type === 'number'\n const isDate = col.type === 'date'\n const lowHigh = isNum\n ? `${col.label} (Low to High)`\n : isDate\n ? `${col.label} (Oldest First)`\n : `${col.label} (A to Z)`\n const highLow = isNum\n ? `${col.label} (High to Low)`\n : isDate\n ? `${col.label} (Newest First)`\n : `${col.label} (Z to A)`\n\n opts.push({ label: lowHigh, value: `${col.name}:asc` })\n opts.push({ label: highLow, value: `${col.name}:desc` })\n })\n return opts\n }, [sortableColumns])\n\n const handleSortSelect = (val: string) => {\n if (!val) {\n setInternalSort(null)\n onSortChange?.({})\n return\n }\n const [field, dir] = val.split(':')\n const sortObj = { [field]: dir as DataListSortDirection }\n setInternalSort({ field, dir: dir as DataListSortDirection })\n onSortChange?.(sortObj)\n }\n\n const activeSortLabel = useMemo(() => {\n if (!activeSort) return 'Sort'\n const currVal = `${activeSort.field}:${activeSort.dir}`\n const match = sortOptions.find((o) => o.value === currVal)\n if (!match || !match.value) return 'Sort'\n return `Sort: ${match.label}`\n }, [activeSort, sortOptions])\n\n // Processed Items (Filter + Search + Sort)\n const processedItems = useMemo(() => {\n let result = [...items]\n\n // 1. Apply Search\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase().trim()\n const fieldsToSearch = searchFields || columns?.map((c) => c.name) || ['id', 'name', 'title']\n result = result.filter((item) =>\n fieldsToSearch.some((field) => {\n const val = get(item, field)\n return val !== null && val !== undefined && String(val).toLowerCase().includes(q)\n }),\n )\n }\n\n // 2. Apply Filters (supporting array checkboxes or single values)\n const filterKeys = Object.keys(selectedFilters)\n if (filterKeys.length > 0) {\n result = result.filter((item) =>\n filterKeys.every((key) => {\n const filterVal = selectedFilters[key]\n if (filterVal === undefined || filterVal === null || filterVal === '') return true\n const actual = String(get(item, key))\n if (Array.isArray(filterVal)) {\n if (filterVal.length === 0) return true\n return filterVal.map(String).includes(actual)\n }\n return actual === String(filterVal)\n }),\n )\n }\n\n // 3. Apply Auto Sorting\n if (activeSort) {\n const { field, dir } = activeSort\n const colDef = columns?.find((c) => c.name === field)\n const isAsc = dir === 'asc' || dir === '1'\n\n result.sort((a, b) => {\n const valA = get(a, field)\n const valB = get(b, field)\n\n const numA = parseNumericValue(valA)\n const numB = parseNumericValue(valB)\n\n if (colDef?.type === 'number' || (!isNaN(numA) && !isNaN(numB))) {\n return isAsc ? numA - numB : numB - numA\n }\n\n if (colDef?.type === 'date') {\n const dA = new Date(valA).getTime()\n const dB = new Date(valB).getTime()\n if (!isNaN(dA) && !isNaN(dB)) {\n return isAsc ? dA - dB : dB - dA\n }\n }\n\n const strA = String(valA ?? '')\n const strB = String(valB ?? '')\n return isAsc\n ? strA.localeCompare(strB, undefined, { numeric: true })\n : strB.localeCompare(strA, undefined, { numeric: true })\n })\n }\n\n return result\n }, [items, searchQuery, searchFields, columns, selectedFilters, activeSort])\n\n // Draft Filters Matching Count\n const draftMatchingCount = useMemo(() => {\n let result = [...items]\n const filterKeys = Object.keys(draftFilters)\n if (filterKeys.length > 0) {\n result = result.filter((item) =>\n filterKeys.every((key) => {\n const filterVal = draftFilters[key]\n if (filterVal === undefined || filterVal === null || filterVal === '') return true\n const actual = String(get(item, key))\n if (Array.isArray(filterVal)) {\n if (filterVal.length === 0) return true\n return filterVal.map(String).includes(actual)\n }\n return actual === String(filterVal)\n }),\n )\n }\n return result.length\n }, [items, draftFilters])\n\n const getKey = (item: T, idx: number): string | number => {\n if (typeof rowKey === 'function') return rowKey(item)\n return (item as any)[rowKey] ?? idx\n }\n\n const isSelected = (key: string | number) => selectedKeys.includes(key)\n\n const toggleSelectAll = () => {\n if (selectedKeys.length === processedItems.length) {\n onSelectionChange?.([], [])\n } else {\n const allKeys = processedItems.map(getKey)\n onSelectionChange?.(allKeys, processedItems)\n }\n }\n\n const toggleItemSelect = (key: string | number, item: T) => {\n const nextKeys = isSelected(key)\n ? selectedKeys.filter((k) => k !== key)\n : [...selectedKeys, key]\n const nextItems = processedItems.filter((it, idx) => nextKeys.includes(getKey(it, idx)))\n onSelectionChange?.(nextKeys, nextItems)\n }\n\n const getItemClassStr = (item: T, idx: number): string => {\n if (typeof itemClass === 'function') return itemClass(item, idx)\n return itemClass\n }\n\n return (\n <div className={buildClassName('w-full space-y-3', containerClass)} data-testid=\"data-list\">\n {/* Top Search, Filter, Sort Toolbar */}\n {(searchable || (filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] space-y-3\">\n {searchable && (\n <Input\n value={searchQuery}\n onChange={(e) => handleSearchInput(e.target.value)}\n placeholder=\"Search items...\"\n leftGroup={<SearchIcon />}\n clearable\n onClear={() => handleSearchInput('')}\n className=\"w-full text-xs\"\n size=\"sm\"\n />\n )}\n\n {((filterFields && filterFields.length > 0) || sortableColumns.length > 0) && (\n <div className=\"flex items-center gap-2\">\n {filterFields && filterFields.length > 0 && (\n <Button\n theme=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setDraftFilters(selectedFilters)\n setIsFilterSheetOpen(true)\n }}\n className=\"flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center\"\n data-testid=\"data-list-filter-btn\"\n >\n <FilterIcon />\n <span>Filters</span>\n {activeFilterCount > 0 && (\n <span className=\"ml-1 size-4 rounded-full bg-blue-600 text-white text-[10px] font-bold flex items-center justify-center\">\n {activeFilterCount}\n </span>\n )}\n </Button>\n )}\n\n {sortableColumns.length > 0 && (\n <Button\n theme=\"secondary\"\n size=\"sm\"\n onClick={() => setIsSortSheetOpen(true)}\n className=\"flex items-center gap-1.5 text-xs font-semibold flex-1 justify-center\"\n data-testid=\"data-list-sort-btn\"\n >\n <SortIcon />\n <span>{activeSortLabel}</span>\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Mobile Bottom Sheet Filter Drawer */}\n {filterFields && filterFields.length > 0 && (\n <Drawer\n isOpen={isFilterSheetOpen}\n onClose={() => setIsFilterSheetOpen(false)}\n align=\"bottom\"\n title=\"Filter Items\"\n dragHandle\n panelClass=\"max-h-[85vh] rounded-t-2xl\"\n footer={\n <div className=\"flex items-center gap-3 w-full\">\n <Button\n theme=\"secondary\"\n size=\"md\"\n onClick={() => setDraftFilters({})}\n className=\"flex-1 text-xs\"\n >\n Clear All\n </Button>\n <Button\n theme=\"primary\"\n size=\"md\"\n onClick={() => {\n onFilterChange ? onFilterChange(draftFilters) : setInternalFilters(draftFilters)\n setIsFilterSheetOpen(false)\n }}\n className=\"flex-1 text-xs font-semibold\"\n data-testid=\"data-list-apply-filters-btn\"\n >\n Apply Filters ({draftMatchingCount})\n </Button>\n </div>\n }\n footerSticky\n >\n <div className=\"space-y-6 py-2\">\n {filterFields.map((field) => {\n const selectedArray = Array.isArray(draftFilters[field.name])\n ? (draftFilters[field.name] as Array<string | number>)\n : draftFilters[field.name] !== undefined && draftFilters[field.name] !== ''\n ? [draftFilters[field.name] as string | number]\n : []\n\n return (\n <div key={field.name} className=\"space-y-2.5\">\n <h4 className=\"text-xs font-bold uppercase tracking-wider text-gray-500 dark:text-gray-400 px-1\">\n {field.label}\n </h4>\n <div className=\"space-y-1.5 bg-gray-50 dark:bg-gray-800/60 p-2.5 rounded-xl border border-[var(--ui-border-muted)]\">\n {field.options.map((opt) => {\n const checked = selectedArray.includes(opt.value)\n return (\n <label\n key={String(opt.value)}\n className=\"flex items-center justify-between p-2 rounded-lg hover:bg-white dark:hover:bg-gray-800 cursor-pointer transition-colors\"\n >\n <span className=\"text-sm font-medium text-gray-800 dark:text-gray-200\">\n {opt.label}\n </span>\n <Checkbox\n checked={checked}\n onChange={() => {\n const next = checked\n ? selectedArray.filter((v) => v !== opt.value)\n : [...selectedArray, opt.value]\n setDraftFilters((prev) => ({\n ...prev,\n [field.name]: next,\n }))\n }}\n />\n </label>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n </Drawer>\n )}\n\n {/* Mobile Bottom Sheet Sort Drawer */}\n {sortableColumns.length > 0 && (\n <Drawer\n isOpen={isSortSheetOpen}\n onClose={() => setIsSortSheetOpen(false)}\n align=\"bottom\"\n title=\"Sort Items By\"\n dragHandle\n panelClass=\"max-h-[70vh] rounded-t-2xl\"\n >\n <div className=\"space-y-1 py-2\">\n {sortOptions.map((opt) => {\n const isSelected =\n (activeSort ? `${activeSort.field}:${activeSort.dir}` : '') === opt.value\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => {\n handleSortSelect(opt.value)\n setIsSortSheetOpen(false)\n }}\n className={buildClassName(\n 'w-full flex items-center justify-between p-3.5 rounded-xl text-left transition-colors cursor-pointer',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-950/40 text-blue-600 dark:text-blue-400 font-semibold'\n : 'hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 font-medium',\n )}\n data-testid={`data-list-sort-opt-${opt.value || 'default'}`}\n >\n <span className=\"text-sm\">{opt.label}</span>\n {isSelected && <CheckIcon />}\n </button>\n )\n })}\n </div>\n </Drawer>\n )}\n\n {/* Select All Toolbar */}\n {selectable && processedItems.length > 0 && (\n <div className=\"p-3 bg-gray-50 dark:bg-gray-800/80 rounded-xl border border-[var(--ui-border)] flex items-center justify-between text-xs\">\n <label className=\"flex items-center gap-2 font-medium text-gray-700 dark:text-gray-300 cursor-pointer\">\n <Checkbox\n checked={processedItems.length > 0 && selectedKeys.length === processedItems.length}\n onChange={toggleSelectAll}\n />\n <span>Select All Items</span>\n </label>\n <span className=\"text-gray-400 font-semibold\">\n {selectedKeys.length} of {processedItems.length}\n </span>\n </div>\n )}\n\n {/* Items List */}\n <div className=\"space-y-3\">\n {loading ? (\n <div className=\"p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]\">\n Loading items...\n </div>\n ) : processedItems.length === 0 ? (\n <div className=\"p-8 text-center text-sm text-gray-500 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)]\">\n {emptyMessage}\n </div>\n ) : (\n processedItems.map((item, idx) => {\n const key = getKey(item, idx)\n const selected = isSelected(key)\n const actions = swipeableActions?.(item)\n const customClass = getItemClassStr(item, idx)\n\n const contentNode = renderItem ? (\n renderItem(item, idx)\n ) : (\n <div\n onClick={() => onItemClick?.(item, idx)}\n className={buildClassName(\n 'p-4 bg-white dark:bg-gray-800 rounded-xl border border-[var(--ui-border)] shadow-xs space-y-3 transition-colors',\n onItemClick && 'cursor-pointer hover:border-blue-500/50',\n selected && 'ring-2 ring-blue-500/50 bg-blue-50/20 dark:bg-blue-950/20',\n customClass,\n )}\n data-testid={`data-list-item-${key}`}\n >\n {/* Card Header Row */}\n <div className=\"flex items-center justify-between gap-3 border-b border-[var(--ui-border-muted)] pb-2.5\">\n <div className=\"flex items-center gap-2.5 min-w-0 flex-1\">\n {selectable ? (\n <Checkbox\n checked={selected}\n onChange={() => toggleItemSelect(key, item)}\n aria-label={`Select item ${key}`}\n label={\n <span className=\"font-bold text-sm text-gray-900 dark:text-white truncate block\">\n {columns && columns[0]?.render\n ? columns[0].render(item)\n : String(get(item, columns?.[0]?.name ?? 'title') ?? '')}\n </span>\n }\n />\n ) : (\n <div className=\"font-bold text-sm text-gray-900 dark:text-white truncate\">\n {columns && columns[0]?.render\n ? columns[0].render(item)\n : String(get(item, columns?.[0]?.name ?? 'title') ?? '')}\n </div>\n )}\n </div>\n {columns && columns[1] && (\n <div className=\"shrink-0 text-xs\">\n {columns[1].render\n ? columns[1].render(item)\n : String(get(item, columns[1].name) ?? '')}\n </div>\n )}\n </div>\n\n {/* Key-Value Details Grid */}\n {columns && columns.length > 2 && (\n <div className=\"grid grid-cols-2 gap-2 text-xs pt-1\">\n {columns.slice(2).map((col) => {\n const val = col.render ? col.render(item) : get(item, col.name)\n if (val === null || val === undefined || val === '') return null\n return (\n <div key={String(col.name)} className=\"min-w-0\">\n <span className=\"text-gray-400 dark:text-gray-500 font-medium block truncate\">\n {col.label}\n </span>\n <span className=\"text-gray-800 dark:text-gray-200 font-semibold block truncate mt-0.5\">\n {val}\n </span>\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n\n if (actions && (actions.leftActions?.length || actions.rightActions?.length)) {\n return (\n <SwipeableRow\n key={key}\n leftActions={actions.leftActions}\n rightActions={actions.rightActions}\n >\n {contentNode}\n </SwipeableRow>\n )\n }\n\n return <div key={key}>{contentNode}</div>\n })\n )}\n </div>\n\n {/* Pagination Footer */}\n {pagination && pagination.total > 0 && (\n <div\n className={buildClassName(\n 'pt-2 flex justify-center w-full',\n paginationClass,\n paginationContainerClass,\n )}\n >\n {renderPagination ? (\n renderPagination(pagination, setPagination)\n ) : (\n <Pagination\n {...pagination}\n {...paginationProps}\n onChange={(newPag) => setPagination?.(newPag)}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n\nDataList.displayName = 'DataList'\n"],"names":["_jsx","React","_jsxs"],"mappings":"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"}
@@ -1,14 +1,17 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useRef, useState, useEffect } from 'react';
2
+ import { useState, useCallback, useMemo } from 'react';
3
3
  import { Table, TableHead, TableHeaderCell, TableBody, EmptyTableRow, TableRow, TableCell, TableFoot } from '../Table/Table.js';
4
4
  import { buildClassName } from '../../utils/build-classname.js';
5
5
  import { TextContent } from '../TextContent/TextContent.js';
6
6
  import { Pagination } from '../Pagination/Pagination.js';
7
7
  import { Checkbox } from '../Checkbox/Checkbox.js';
8
+ import { Button } from '../Button/Button.js';
8
9
  import { get } from '../../utils/get.js';
9
- import { useRowSelection, updateSortQuery } from './DataTable.utils.js';
10
+ import { updateSortQuery, useRowSelection } from './DataTable.utils.js';
10
11
  import { getSortIcon } from './DataTable.icons.js';
11
12
 
13
+ const OVERFLOW_REGEX = /\boverflow-(x-|y-)?(auto|hidden|scroll|visible|clip)\b/;
14
+ const NOOP = () => { };
12
15
  const DENSITY_CELL_CLASS = {
13
16
  compact: 'px-2 py-1.5',
14
17
  default: '',
@@ -38,41 +41,33 @@ const autoSortItems = (items, column, sort) => {
38
41
  return 0;
39
42
  });
40
43
  };
41
- function DataTable({ items, columns, sorting = {}, onSort, loading, pagination, setPagination = () => { }, emptyMessage = 'No data found', containerClass = '', wrapperClass = '', tableClass = '', headClass = '', footerRow, rowKey = 'id', onRowClick, rowClass, density = 'default', striped = false, layout = 'auto', selectable = false, selectedRowKeys, defaultSelectedRowKeys, onSelectionChange, isRowSelectable, stickyHeader = true, stickyPagination = true, paginationContainerClass, }) {
42
- const internalSorting = useRef({});
43
- const [sortedItems, setSortedItems] = useState(items);
44
- useEffect(() => {
45
- setSortedItems(items);
46
- }, [items]);
47
- const doAutoSort = (column) => {
48
- internalSorting.current = updateSortQuery(internalSorting.current, column.name, column.type);
49
- setSortedItems(autoSortItems(items, column, internalSorting.current[column.name]));
50
- };
51
- const handleSort = (column) => {
44
+ function DataTable({ items, columns, sorting = {}, onSort, loading, pagination, setPagination = NOOP, emptyMessage = 'No data found', containerClass = '', wrapperClass = '', tableClass = '', headClass = '', footerRow, rowKey = 'id', onRowClick, rowClass, density = 'default', striped = false, layout = 'auto', selectable = false, selectedRowKeys, defaultSelectedRowKeys, onSelectionChange, isRowSelectable, stickyHeader = true, stickyPagination = true, rowHoverActions, renderRowHoverActions, rowHoverActionHeader, rowHoverActionMode = 'overlay', rowHoverActionClass, paginationClass, paginationContainerClass, paginationProps, renderPagination, }) {
45
+ const [internalSortingState, setInternalSortingState] = useState({});
46
+ const handleSort = useCallback((column) => {
52
47
  if (!column.sortable)
53
48
  return;
54
- onSort ? onSort(column) : doAutoSort(column);
55
- };
56
- const getKey = (item, idx) => {
57
- var _a;
58
- if (typeof rowKey === 'function')
59
- return rowKey(item);
60
- return (_a = item[rowKey]) !== null && _a !== void 0 ? _a : idx;
61
- };
62
- const getRowClass = (item, idx) => {
63
- if (!rowClass)
64
- return '';
65
- if (typeof rowClass === 'function')
66
- return rowClass(item, idx);
67
- return rowClass;
68
- };
69
- const getCellClass = (column, item) => {
70
- if (!column.cellClass)
71
- return '';
72
- if (typeof column.cellClass === 'function')
73
- return column.cellClass(item);
74
- return column.cellClass;
75
- };
49
+ if (onSort) {
50
+ onSort(column);
51
+ }
52
+ else {
53
+ setInternalSortingState((prev) => updateSortQuery(prev, column.name, column.type));
54
+ }
55
+ }, [onSort]);
56
+ const activeSorting = useMemo(() => ({ ...sorting, ...internalSortingState }), [sorting, internalSortingState]);
57
+ const sortedItems = useMemo(() => {
58
+ if (onSort)
59
+ return items;
60
+ const activeSortKey = Object.keys(activeSorting)[0];
61
+ if (!activeSortKey)
62
+ return items;
63
+ const column = columns.find((c) => c.name === activeSortKey);
64
+ if (!column)
65
+ return items;
66
+ return autoSortItems(items, column, activeSorting[activeSortKey]);
67
+ }, [items, columns, onSort, activeSorting]);
68
+ const getKey = useCallback((item, idx) => { var _a; return typeof rowKey === 'function' ? rowKey(item) : ((_a = item[rowKey]) !== null && _a !== void 0 ? _a : idx); }, [rowKey]);
69
+ const getRowClass = useCallback((item, idx) => typeof rowClass === 'function' ? rowClass(item, idx) : rowClass || '', [rowClass]);
70
+ const getCellClass = useCallback((column, item) => typeof column.cellClass === 'function' ? column.cellClass(item) : column.cellClass || '', []);
76
71
  const { isSelected, toggleRow, toggleAll, allSelected, someSelected } = useRowSelection({
77
72
  items: sortedItems,
78
73
  getKey,
@@ -81,15 +76,50 @@ function DataTable({ items, columns, sorting = {}, onSort, loading, pagination,
81
76
  onSelectionChange,
82
77
  isRowSelectable,
83
78
  });
79
+ const hasRowHoverActions = Boolean(rowHoverActions || renderRowHoverActions);
80
+ const isInlineMode = hasRowHoverActions && rowHoverActionMode === 'inline';
81
+ const isOverlayMode = hasRowHoverActions && rowHoverActionMode !== 'inline';
84
82
  const densityCellClass = DENSITY_CELL_CLASS[density];
85
- const colSize = columns.length + (selectable ? 1 : 0);
86
- const wrapperHasOverflow = /\boverflow-(x-|y-)?(auto|hidden|scroll|visible|clip)\b/.test(wrapperClass);
83
+ const colSize = columns.length + (selectable ? 1 : 0) + (isInlineMode ? 1 : 0);
84
+ const wrapperHasOverflow = OVERFLOW_REGEX.test(wrapperClass);
85
+ const renderActionsContent = useCallback((item, idx) => {
86
+ if (renderRowHoverActions)
87
+ return renderRowHoverActions(item, idx);
88
+ if (!rowHoverActions)
89
+ return null;
90
+ return rowHoverActions(item, idx).map((act) => {
91
+ const isDisabled = typeof act.disabled === 'function' ? act.disabled(item) : act.disabled;
92
+ const isIconOnly = Boolean(act.icon && !act.label);
93
+ return (jsxs(Button, { size: "xs", theme: act.theme || 'secondary', variant: act.variant || 'plain', disabled: isDisabled, title: act.title || (typeof act.label === 'string' ? act.label : undefined), className: buildClassName(isIconOnly
94
+ ? 'p-1.5 rounded-full hover:bg-black/5 dark:hover:bg-white/10'
95
+ : 'px-2 py-1', act.className), onClick: (e) => {
96
+ e.stopPropagation();
97
+ act.onClick(item, idx, e);
98
+ }, children: [act.icon && jsx("span", { className: "shrink-0", children: act.icon }), act.label && jsx("span", { children: act.label })] }, act.id));
99
+ });
100
+ }, [renderRowHoverActions, rowHoverActions]);
87
101
  return (jsxs("div", { className: buildClassName('w-full rounded-lg relative', containerClass), children: [jsx("div", { className: buildClassName(!wrapperHasOverflow && 'overflow-x-auto', 'rounded-lg border border-[var(--ui-border)]', wrapperClass, pagination && 'rounded-b-none border-b-0'), children: jsxs(Table, { className: buildClassName('relative w-full max-w-full h-fit', tableClass), layout: layout, children: [jsxs(TableHead, { className: headClass, children: [selectable && (jsx(TableHeaderCell, { className: buildClassName('bg-gray-50 dark:bg-gray-800 w-px', densityCellClass, stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]'), children: jsx(Checkbox, { "aria-label": "Select all rows", checked: allSelected, ref: (el) => {
88
102
  if (el)
89
103
  el.indeterminate = someSelected;
90
- }, onChange: toggleAll }) })), columns.map((column) => (jsx(TableHeaderCell, { align: column.headerAlign, style: { width: column.width || 'auto' }, className: buildClassName('bg-gray-50 dark:bg-gray-800', densityCellClass, stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]', column.sticky === 'left' &&
91
- 'sticky left-0 z-30 shadow-[2px_0_6px_rgba(0,0,0,0.06)]', column.sticky === 'right' &&
92
- 'sticky right-0 z-30 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]', column.headerClass), children: jsxs(TextContent, { role: column.sortable ? 'button' : undefined, className: buildClassName('group', column.sortable && 'inline-flex items-center gap-2 cursor-pointer select-none'), onClick: () => handleSort(column), children: [jsx(TextContent, { className: "shrink-0", children: column.label }), column.sortable ? getSortIcon(sorting[column.name]) : null] }) }, column.name)))] }), jsx(TableBody, { loading: loading, colSize: colSize, rowSize: (pagination === null || pagination === void 0 ? void 0 : pagination.limit) || 5, children: !loading && sortedItems.length === 0 ? (jsx(EmptyTableRow, { colSpan: colSize, children: emptyMessage })) : (sortedItems.map((item, idx) => {
104
+ }, onChange: toggleAll }) })), columns.map((column) => {
105
+ const sortState = activeSorting[column.name];
106
+ const ariaSortValue = column.sortable
107
+ ? sortState === 'asc' || sortState === '1'
108
+ ? 'ascending'
109
+ : sortState === 'desc' || sortState === '-1'
110
+ ? 'descending'
111
+ : 'none'
112
+ : undefined;
113
+ return (jsx(TableHeaderCell, { align: column.headerAlign, style: { width: column.width || 'auto' }, "aria-sort": ariaSortValue, className: buildClassName('bg-gray-50 dark:bg-gray-800', densityCellClass, stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]', column.sticky === 'left' &&
114
+ 'sticky left-0 z-30 shadow-[2px_0_6px_rgba(0,0,0,0.06)]', column.sticky === 'right' &&
115
+ 'sticky right-0 z-30 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]', column.headerClass), children: jsxs(TextContent, { role: column.sortable ? 'button' : undefined, tabIndex: column.sortable ? 0 : undefined, "aria-label": column.sortable ? `Sort by ${column.label}` : undefined, className: buildClassName('group', column.sortable &&
116
+ 'inline-flex items-center gap-2 cursor-pointer select-none focus:outline-none focus-visible:ring-1 focus-visible:ring-blue-500 rounded'), onClick: () => handleSort(column), onKeyDown: (e) => {
117
+ if (column.sortable && (e.key === 'Enter' || e.key === ' ')) {
118
+ e.preventDefault();
119
+ handleSort(column);
120
+ }
121
+ }, children: [jsx(TextContent, { className: "shrink-0", children: column.label }), column.sortable ? getSortIcon(activeSorting[column.name]) : null] }) }, column.name));
122
+ }), isInlineMode && (jsx(TableHeaderCell, { align: "right", className: buildClassName('bg-gray-50 dark:bg-gray-800 text-right w-px', densityCellClass, stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]'), children: rowHoverActionHeader !== null && rowHoverActionHeader !== void 0 ? rowHoverActionHeader : '' })), isOverlayMode && (jsx(TableHeaderCell, { align: "right", style: { padding: 0, width: 0, minWidth: 0, maxWidth: 0 }, className: buildClassName('sticky right-0 z-20 !p-0 !pr-0 !pl-0 !py-0 w-0 max-w-0 min-w-0 border-0 bg-gray-50 dark:bg-gray-800', stickyHeader && 'top-0'), children: null }))] }), jsx(TableBody, { loading: loading, colSize: colSize, rowSize: (pagination === null || pagination === void 0 ? void 0 : pagination.limit) || 5, children: !loading && sortedItems.length === 0 ? (jsx(EmptyTableRow, { colSpan: colSize, children: emptyMessage })) : (sortedItems.map((item, idx) => {
93
123
  const key = getKey(item, idx);
94
124
  const rowSelectable = !isRowSelectable || isRowSelectable(item);
95
125
  return (jsxs(TableRow, { className: buildClassName('group', onRowClick && 'cursor-pointer', striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40', getRowClass(item, idx)), onClick: onRowClick ? () => onRowClick(item, idx) : undefined, children: [selectable && (jsx(TableCell, { className: buildClassName(densityCellClass, striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40'), children: jsx("span", { onClick: (e) => e.stopPropagation(), children: jsx(Checkbox, { "aria-label": "Select row", checked: isSelected(key), disabled: !rowSelectable, onChange: () => toggleRow(key) }) }) })), columns.map((column) => {
@@ -99,8 +129,10 @@ function DataTable({ items, columns, sorting = {}, onSort, loading, pagination,
99
129
  'sticky right-0 z-10 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]', getCellClass(column, item)), children: column.render
100
130
  ? column.render(item)
101
131
  : ((_a = get(item, column.name)) !== null && _a !== void 0 ? _a : 'Not set') }, column.name));
102
- })] }, key));
103
- })) }), footerRow && jsx(TableFoot, { children: footerRow })] }) }), pagination && (jsx(Pagination, { ...pagination, className: buildClassName('rounded-b-lg border border-[var(--ui-border)]', stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800', paginationContainerClass), onChange: setPagination }))] }));
132
+ }), isInlineMode && (jsx(TableCell, { align: "right", className: buildClassName(densityCellClass, striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40'), onClick: (e) => e.stopPropagation(), children: jsx("div", { className: buildClassName('opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition-opacity duration-150 flex items-center justify-end gap-1.5', rowHoverActionClass), "data-testid": `row-hover-actions-${key}`, children: renderActionsContent(item, idx) }) })), isOverlayMode && (jsx(TableCell, { align: "right", style: { padding: 0, width: 0, minWidth: 0, maxWidth: 0 }, className: "sticky right-0 z-20 !p-0 !pr-0 !pl-0 !py-0 w-0 max-w-0 min-w-0 border-0 overflow-visible text-right", onClick: (e) => e.stopPropagation(), children: jsx("div", { className: buildClassName('absolute right-0 top-0 bottom-0 h-full opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition-opacity duration-150 flex items-center justify-end gap-1 px-3 z-30 pointer-events-none group-hover:pointer-events-auto whitespace-nowrap', striped && idx % 2 === 1
133
+ ? 'bg-gray-100 dark:bg-gray-800'
134
+ : 'bg-white group-hover:bg-gray-50 dark:bg-gray-900 dark:group-hover:bg-gray-800', rowHoverActionClass), "data-testid": `row-hover-actions-${key}`, children: renderActionsContent(item, idx) }) }))] }, key));
135
+ })) }), footerRow && jsx(TableFoot, { children: footerRow })] }) }), pagination && (jsx("div", { className: buildClassName(stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800', paginationClass, paginationContainerClass), children: renderPagination ? (renderPagination(pagination, setPagination)) : (jsx(Pagination, { ...pagination, ...paginationProps, className: buildClassName('rounded-t-none rounded-b-lg border border-[var(--ui-border)]', stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800', paginationProps === null || paginationProps === void 0 ? void 0 : paginationProps.className), onChange: setPagination })) }))] }));
104
136
  }
105
137
  DataTable.displayName = 'DataTable';
106
138
 
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sources":["../../../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport {\n EmptyTableRow,\n Table,\n TableBody,\n TableCell,\n TableFoot,\n TableHead,\n TableHeaderCell,\n TableRow,\n} from '../Table'\nimport { buildClassName } from '../../utils/build-classname'\nimport type {\n DataTableProps,\n DataTableColumn,\n DataTableDensity,\n Sorting,\n SortQuery,\n} from './DataTable.types'\nimport { TextContent } from '../TextContent'\nimport { Pagination } from '../Pagination'\nimport { Checkbox } from '../Checkbox'\nimport { get } from '../../utils/get'\nimport { updateSortQuery, useRowSelection } from './DataTable.utils'\nimport { getSortIcon } from './DataTable.icons'\n\nconst DENSITY_CELL_CLASS: Record<DataTableDensity, string> = {\n compact: 'px-2 py-1.5',\n default: '',\n spacious: 'px-4 py-4',\n}\n\nconst autoSortItems = <T,>(items: T[], column: DataTableColumn<T>, sort: Sorting): T[] => {\n const path = column.name\n return [...items].sort((a, b) => {\n const valueA = get(a as Record<string, any>, path)\n const valueB = get(b as Record<string, any>, path)\n\n if (column.type === 'number') {\n const nA = Number(valueA)\n const nB = Number(valueB)\n return sort === 'asc' || sort === '1' ? nA - nB : nB - nA\n }\n\n if (column.type === 'date') {\n const dA = new Date(valueA).getTime()\n const dB = new Date(valueB).getTime()\n return sort === 'asc' || sort === '1' ? dA - dB : dB - dA\n }\n\n const sA = String(valueA).toLowerCase()\n const sB = String(valueB).toLowerCase()\n if (sA < sB) return sort === 'asc' || sort === '1' ? -1 : 1\n if (sA > sB) return sort === 'asc' || sort === '1' ? 1 : -1\n return 0\n })\n}\n\nexport function DataTable<T extends Record<string, any> = Record<string, any>>({\n items,\n columns,\n sorting = {},\n onSort,\n loading,\n pagination,\n setPagination = () => {},\n emptyMessage = 'No data found',\n containerClass = '',\n wrapperClass = '',\n tableClass = '',\n headClass = '',\n footerRow,\n rowKey = 'id',\n onRowClick,\n rowClass,\n density = 'default',\n striped = false,\n layout = 'auto',\n selectable = false,\n selectedRowKeys,\n defaultSelectedRowKeys,\n onSelectionChange,\n isRowSelectable,\n stickyHeader = true,\n stickyPagination = true,\n paginationContainerClass,\n}: DataTableProps<T>) {\n const internalSorting = useRef<SortQuery>({})\n const [sortedItems, setSortedItems] = useState(items)\n\n useEffect(() => {\n setSortedItems(items)\n }, [items])\n\n const doAutoSort = (column: DataTableColumn<T>) => {\n internalSorting.current = updateSortQuery(internalSorting.current, column.name, column.type)\n setSortedItems(autoSortItems(items, column, internalSorting.current[column.name]))\n }\n\n const handleSort = (column: DataTableColumn<T>) => {\n if (!column.sortable) return\n onSort ? onSort(column) : doAutoSort(column)\n }\n\n const getKey = (item: T, idx: number): string | number => {\n if (typeof rowKey === 'function') return rowKey(item)\n return (item as any)[rowKey] ?? idx\n }\n\n const getRowClass = (item: T, idx: number): string => {\n if (!rowClass) return ''\n if (typeof rowClass === 'function') return rowClass(item, idx)\n return rowClass\n }\n\n const getCellClass = (column: DataTableColumn<T>, item: T): string => {\n if (!column.cellClass) return ''\n if (typeof column.cellClass === 'function') return column.cellClass(item)\n return column.cellClass\n }\n\n const { isSelected, toggleRow, toggleAll, allSelected, someSelected } = useRowSelection({\n items: sortedItems,\n getKey,\n selectedRowKeys,\n defaultSelectedRowKeys,\n onSelectionChange,\n isRowSelectable,\n })\n\n const densityCellClass = DENSITY_CELL_CLASS[density]\n const colSize = columns.length + (selectable ? 1 : 0)\n const wrapperHasOverflow = /\\boverflow-(x-|y-)?(auto|hidden|scroll|visible|clip)\\b/.test(\n wrapperClass,\n )\n\n return (\n <div className={buildClassName('w-full rounded-lg relative', containerClass)}>\n <div\n className={buildClassName(\n !wrapperHasOverflow && 'overflow-x-auto',\n 'rounded-lg border border-[var(--ui-border)]',\n wrapperClass,\n pagination && 'rounded-b-none border-b-0',\n )}\n >\n <Table\n className={buildClassName('relative w-full max-w-full h-fit', tableClass)}\n layout={layout}\n >\n <TableHead className={headClass}>\n {selectable && (\n <TableHeaderCell\n className={buildClassName(\n 'bg-gray-50 dark:bg-gray-800 w-px',\n densityCellClass,\n stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]',\n )}\n >\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected\n }}\n onChange={toggleAll}\n />\n </TableHeaderCell>\n )}\n {columns.map((column) => (\n <TableHeaderCell\n key={column.name}\n align={column.headerAlign}\n style={{ width: column.width || 'auto' }}\n className={buildClassName(\n 'bg-gray-50 dark:bg-gray-800',\n densityCellClass,\n stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]',\n column.sticky === 'left' &&\n 'sticky left-0 z-30 shadow-[2px_0_6px_rgba(0,0,0,0.06)]',\n column.sticky === 'right' &&\n 'sticky right-0 z-30 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]',\n column.headerClass,\n )}\n >\n <TextContent\n role={column.sortable ? 'button' : undefined}\n className={buildClassName(\n 'group',\n column.sortable && 'inline-flex items-center gap-2 cursor-pointer select-none',\n )}\n onClick={() => handleSort(column)}\n >\n <TextContent className=\"shrink-0\">{column.label}</TextContent>\n {column.sortable ? getSortIcon(sorting[column.name]) : null}\n </TextContent>\n </TableHeaderCell>\n ))}\n </TableHead>\n\n <TableBody loading={loading} colSize={colSize} rowSize={pagination?.limit || 5}>\n {!loading && sortedItems.length === 0 ? (\n <EmptyTableRow colSpan={colSize}>{emptyMessage}</EmptyTableRow>\n ) : (\n sortedItems.map((item, idx) => {\n const key = getKey(item, idx)\n const rowSelectable = !isRowSelectable || isRowSelectable(item)\n\n return (\n <TableRow\n key={key}\n className={buildClassName(\n 'group',\n onRowClick && 'cursor-pointer',\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n getRowClass(item, idx),\n )}\n onClick={onRowClick ? () => onRowClick(item, idx) : undefined}\n >\n {selectable && (\n <TableCell\n className={buildClassName(\n densityCellClass,\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n )}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label=\"Select row\"\n checked={isSelected(key)}\n disabled={!rowSelectable}\n onChange={() => toggleRow(key)}\n />\n </span>\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell\n key={column.name}\n align={column.align}\n className={buildClassName(\n densityCellClass,\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n column.sticky === 'left' &&\n 'sticky left-0 z-10 shadow-[2px_0_6px_rgba(0,0,0,0.06)]',\n column.sticky === 'right' &&\n 'sticky right-0 z-10 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]',\n getCellClass(column, item),\n )}\n >\n {column.render\n ? column.render(item)\n : ((get(item, column.name) as any) ?? 'Not set')}\n </TableCell>\n ))}\n </TableRow>\n )\n })\n )}\n </TableBody>\n\n {footerRow && <TableFoot>{footerRow}</TableFoot>}\n </Table>\n </div>\n\n {pagination && (\n <Pagination\n {...pagination}\n className={buildClassName(\n 'rounded-b-lg border border-[var(--ui-border)]',\n stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800',\n paginationContainerClass,\n )}\n onChange={setPagination}\n />\n )}\n </div>\n )\n}\n\nDataTable.displayName = 'DataTable'\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","sources":["../../../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n EmptyTableRow,\n Table,\n TableBody,\n TableCell,\n TableFoot,\n TableHead,\n TableHeaderCell,\n TableRow,\n} from '../Table'\nimport { buildClassName } from '../../utils/build-classname'\nimport type {\n DataTableProps,\n DataTableColumn,\n DataTableDensity,\n Sorting,\n SortQuery,\n} from './DataTable.types'\nimport { TextContent } from '../TextContent'\nimport { Pagination } from '../Pagination'\nimport { Checkbox } from '../Checkbox'\nimport { Button } from '../Button'\nimport { get } from '../../utils/get'\nimport { updateSortQuery, useRowSelection } from './DataTable.utils'\nimport { getSortIcon } from './DataTable.icons'\n\nconst OVERFLOW_REGEX = /\\boverflow-(x-|y-)?(auto|hidden|scroll|visible|clip)\\b/\nconst NOOP = () => {}\n\nconst DENSITY_CELL_CLASS: Record<DataTableDensity, string> = {\n compact: 'px-2 py-1.5',\n default: '',\n spacious: 'px-4 py-4',\n}\n\nconst autoSortItems = <T,>(items: T[], column: DataTableColumn<T>, sort: Sorting): T[] => {\n const path = column.name\n return [...items].sort((a, b) => {\n const valueA = get(a as Record<string, any>, path)\n const valueB = get(b as Record<string, any>, path)\n\n if (column.type === 'number') {\n const nA = Number(valueA)\n const nB = Number(valueB)\n return sort === 'asc' || sort === '1' ? nA - nB : nB - nA\n }\n\n if (column.type === 'date') {\n const dA = new Date(valueA).getTime()\n const dB = new Date(valueB).getTime()\n return sort === 'asc' || sort === '1' ? dA - dB : dB - dA\n }\n\n const sA = String(valueA).toLowerCase()\n const sB = String(valueB).toLowerCase()\n if (sA < sB) return sort === 'asc' || sort === '1' ? -1 : 1\n if (sA > sB) return sort === 'asc' || sort === '1' ? 1 : -1\n return 0\n })\n}\n\nexport function DataTable<T extends Record<string, any> = Record<string, any>>({\n items,\n columns,\n sorting = {},\n onSort,\n loading,\n pagination,\n setPagination = NOOP,\n emptyMessage = 'No data found',\n containerClass = '',\n wrapperClass = '',\n tableClass = '',\n headClass = '',\n footerRow,\n rowKey = 'id',\n onRowClick,\n rowClass,\n density = 'default',\n striped = false,\n layout = 'auto',\n selectable = false,\n selectedRowKeys,\n defaultSelectedRowKeys,\n onSelectionChange,\n isRowSelectable,\n stickyHeader = true,\n stickyPagination = true,\n rowHoverActions,\n renderRowHoverActions,\n rowHoverActionHeader,\n rowHoverActionMode = 'overlay',\n rowHoverActionClass,\n paginationClass,\n paginationContainerClass,\n paginationProps,\n renderPagination,\n}: DataTableProps<T>) {\n const [internalSortingState, setInternalSortingState] = useState<SortQuery>({})\n\n const handleSort = useCallback(\n (column: DataTableColumn<T>) => {\n if (!column.sortable) return\n if (onSort) {\n onSort(column)\n } else {\n setInternalSortingState((prev) => updateSortQuery(prev, column.name, column.type))\n }\n },\n [onSort],\n )\n\n const activeSorting = useMemo(\n () => ({ ...sorting, ...internalSortingState }),\n [sorting, internalSortingState],\n )\n\n const sortedItems: T[] = useMemo(() => {\n if (onSort) return items\n const activeSortKey = Object.keys(activeSorting)[0]\n if (!activeSortKey) return items\n const column = columns.find((c) => c.name === activeSortKey)\n if (!column) return items\n return autoSortItems(items, column, activeSorting[activeSortKey])\n }, [items, columns, onSort, activeSorting])\n\n const getKey = useCallback(\n (item: T, idx: number): string | number =>\n typeof rowKey === 'function' ? rowKey(item) : ((item as any)[rowKey] ?? idx),\n [rowKey],\n )\n\n const getRowClass = useCallback(\n (item: T, idx: number): string =>\n typeof rowClass === 'function' ? rowClass(item, idx) : rowClass || '',\n [rowClass],\n )\n\n const getCellClass = useCallback(\n (column: DataTableColumn<T>, item: T): string =>\n typeof column.cellClass === 'function' ? column.cellClass(item) : column.cellClass || '',\n [],\n )\n\n const { isSelected, toggleRow, toggleAll, allSelected, someSelected } = useRowSelection({\n items: sortedItems,\n getKey,\n selectedRowKeys,\n defaultSelectedRowKeys,\n onSelectionChange,\n isRowSelectable,\n })\n\n const hasRowHoverActions = Boolean(rowHoverActions || renderRowHoverActions)\n const isInlineMode = hasRowHoverActions && rowHoverActionMode === 'inline'\n const isOverlayMode = hasRowHoverActions && rowHoverActionMode !== 'inline'\n\n const densityCellClass = DENSITY_CELL_CLASS[density]\n const colSize = columns.length + (selectable ? 1 : 0) + (isInlineMode ? 1 : 0)\n const wrapperHasOverflow = OVERFLOW_REGEX.test(wrapperClass)\n\n const renderActionsContent = useCallback(\n (item: T, idx: number) => {\n if (renderRowHoverActions) return renderRowHoverActions(item, idx)\n if (!rowHoverActions) return null\n return rowHoverActions(item, idx).map((act) => {\n const isDisabled = typeof act.disabled === 'function' ? act.disabled(item) : act.disabled\n const isIconOnly = Boolean(act.icon && !act.label)\n\n return (\n <Button\n key={act.id}\n size=\"xs\"\n theme={act.theme || 'secondary'}\n variant={act.variant || 'plain'}\n disabled={isDisabled}\n title={act.title || (typeof act.label === 'string' ? act.label : undefined)}\n className={buildClassName(\n isIconOnly\n ? 'p-1.5 rounded-full hover:bg-black/5 dark:hover:bg-white/10'\n : 'px-2 py-1',\n act.className,\n )}\n onClick={(e) => {\n e.stopPropagation()\n act.onClick(item, idx, e)\n }}\n >\n {act.icon && <span className=\"shrink-0\">{act.icon}</span>}\n {act.label && <span>{act.label}</span>}\n </Button>\n )\n })\n },\n [renderRowHoverActions, rowHoverActions],\n )\n\n return (\n <div className={buildClassName('w-full rounded-lg relative', containerClass)}>\n <div\n className={buildClassName(\n !wrapperHasOverflow && 'overflow-x-auto',\n 'rounded-lg border border-[var(--ui-border)]',\n wrapperClass,\n pagination && 'rounded-b-none border-b-0',\n )}\n >\n <Table\n className={buildClassName('relative w-full max-w-full h-fit', tableClass)}\n layout={layout}\n >\n <TableHead className={headClass}>\n {selectable && (\n <TableHeaderCell\n className={buildClassName(\n 'bg-gray-50 dark:bg-gray-800 w-px',\n densityCellClass,\n stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]',\n )}\n >\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected\n }}\n onChange={toggleAll}\n />\n </TableHeaderCell>\n )}\n {columns.map((column) => {\n const sortState = activeSorting[column.name]\n const ariaSortValue = column.sortable\n ? sortState === 'asc' || sortState === '1'\n ? 'ascending'\n : sortState === 'desc' || sortState === '-1'\n ? 'descending'\n : 'none'\n : undefined\n\n return (\n <TableHeaderCell\n key={column.name}\n align={column.headerAlign}\n style={{ width: column.width || 'auto' }}\n aria-sort={ariaSortValue}\n className={buildClassName(\n 'bg-gray-50 dark:bg-gray-800',\n densityCellClass,\n stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]',\n column.sticky === 'left' &&\n 'sticky left-0 z-30 shadow-[2px_0_6px_rgba(0,0,0,0.06)]',\n column.sticky === 'right' &&\n 'sticky right-0 z-30 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]',\n column.headerClass,\n )}\n >\n <TextContent\n role={column.sortable ? 'button' : undefined}\n tabIndex={column.sortable ? 0 : undefined}\n aria-label={column.sortable ? `Sort by ${column.label}` : undefined}\n className={buildClassName(\n 'group',\n column.sortable &&\n 'inline-flex items-center gap-2 cursor-pointer select-none focus:outline-none focus-visible:ring-1 focus-visible:ring-blue-500 rounded',\n )}\n onClick={() => handleSort(column)}\n onKeyDown={(e) => {\n if (column.sortable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n handleSort(column)\n }\n }}\n >\n <TextContent className=\"shrink-0\">{column.label}</TextContent>\n {column.sortable ? getSortIcon(activeSorting[column.name]) : null}\n </TextContent>\n </TableHeaderCell>\n )\n })}\n {isInlineMode && (\n <TableHeaderCell\n align=\"right\"\n className={buildClassName(\n 'bg-gray-50 dark:bg-gray-800 text-right w-px',\n densityCellClass,\n stickyHeader && 'sticky top-0 z-20 shadow-[0_1px_2px_rgba(0,0,0,0.06)]',\n )}\n >\n {rowHoverActionHeader ?? ''}\n </TableHeaderCell>\n )}\n {isOverlayMode && (\n <TableHeaderCell\n align=\"right\"\n style={{ padding: 0, width: 0, minWidth: 0, maxWidth: 0 }}\n className={buildClassName(\n 'sticky right-0 z-20 !p-0 !pr-0 !pl-0 !py-0 w-0 max-w-0 min-w-0 border-0 bg-gray-50 dark:bg-gray-800',\n stickyHeader && 'top-0',\n )}\n >\n {null}\n </TableHeaderCell>\n )}\n </TableHead>\n\n <TableBody loading={loading} colSize={colSize} rowSize={pagination?.limit || 5}>\n {!loading && sortedItems.length === 0 ? (\n <EmptyTableRow colSpan={colSize}>{emptyMessage}</EmptyTableRow>\n ) : (\n sortedItems.map((item, idx) => {\n const key = getKey(item, idx)\n const rowSelectable = !isRowSelectable || isRowSelectable(item)\n\n return (\n <TableRow\n key={key}\n className={buildClassName(\n 'group',\n onRowClick && 'cursor-pointer',\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n getRowClass(item, idx),\n )}\n onClick={onRowClick ? () => onRowClick(item, idx) : undefined}\n >\n {selectable && (\n <TableCell\n className={buildClassName(\n densityCellClass,\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n )}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label=\"Select row\"\n checked={isSelected(key)}\n disabled={!rowSelectable}\n onChange={() => toggleRow(key)}\n />\n </span>\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell\n key={column.name}\n align={column.align}\n className={buildClassName(\n densityCellClass,\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n column.sticky === 'left' &&\n 'sticky left-0 z-10 shadow-[2px_0_6px_rgba(0,0,0,0.06)]',\n column.sticky === 'right' &&\n 'sticky right-0 z-10 shadow-[-2px_0_6px_rgba(0,0,0,0.06)]',\n getCellClass(column, item),\n )}\n >\n {column.render\n ? column.render(item)\n : ((get(item, column.name) as any) ?? 'Not set')}\n </TableCell>\n ))}\n {isInlineMode && (\n <TableCell\n align=\"right\"\n className={buildClassName(\n densityCellClass,\n striped && idx % 2 === 1 && 'bg-gray-50 dark:bg-gray-800/40',\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n className={buildClassName(\n 'opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition-opacity duration-150 flex items-center justify-end gap-1.5',\n rowHoverActionClass,\n )}\n data-testid={`row-hover-actions-${key}`}\n >\n {renderActionsContent(item, idx)}\n </div>\n </TableCell>\n )}\n {isOverlayMode && (\n <TableCell\n align=\"right\"\n style={{ padding: 0, width: 0, minWidth: 0, maxWidth: 0 }}\n className=\"sticky right-0 z-20 !p-0 !pr-0 !pl-0 !py-0 w-0 max-w-0 min-w-0 border-0 overflow-visible text-right\"\n onClick={(e) => e.stopPropagation()}\n >\n <div\n className={buildClassName(\n 'absolute right-0 top-0 bottom-0 h-full opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition-opacity duration-150 flex items-center justify-end gap-1 px-3 z-30 pointer-events-none group-hover:pointer-events-auto whitespace-nowrap',\n striped && idx % 2 === 1\n ? 'bg-gray-100 dark:bg-gray-800'\n : 'bg-white group-hover:bg-gray-50 dark:bg-gray-900 dark:group-hover:bg-gray-800',\n rowHoverActionClass,\n )}\n data-testid={`row-hover-actions-${key}`}\n >\n {renderActionsContent(item, idx)}\n </div>\n </TableCell>\n )}\n </TableRow>\n )\n })\n )}\n </TableBody>\n\n {footerRow && <TableFoot>{footerRow}</TableFoot>}\n </Table>\n </div>\n\n {pagination && (\n <div\n className={buildClassName(\n stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800',\n paginationClass,\n paginationContainerClass,\n )}\n >\n {renderPagination ? (\n renderPagination(pagination, setPagination)\n ) : (\n <Pagination\n {...pagination}\n {...paginationProps}\n className={buildClassName(\n 'rounded-t-none rounded-b-lg border border-[var(--ui-border)]',\n stickyPagination && 'sticky bottom-0 z-20 bg-white dark:bg-gray-800',\n paginationProps?.className,\n )}\n onChange={setPagination}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n\nDataTable.displayName = 'DataTable'\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;AA2BA,MAAM,cAAc,GAAG,wDAAwD;AAC/E,MAAM,IAAI,GAAG,MAAK,EAAE,CAAC;AAErB,MAAM,kBAAkB,GAAqC;AAC3D,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,QAAQ,EAAE,WAAW;CACtB;AAED,MAAM,aAAa,GAAG,CAAK,KAAU,EAAE,MAA0B,EAAE,IAAa,KAAS;AACvF,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACxB,IAAA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAwB,EAAE,IAAI,CAAC;QAClD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAwB,EAAE,IAAI,CAAC;AAElD,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;AACzB,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;AACzB,YAAA,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QAC3D;AAEA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC1B,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;YACrC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;AACrC,YAAA,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QAC3D;QAEA,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;QACvC,IAAI,EAAE,GAAG,EAAE;AAAE,YAAA,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC;QAC3D,IAAI,EAAE,GAAG,EAAE;AAAE,YAAA,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE;AAC3D,QAAA,OAAO,CAAC;AACV,IAAA,CAAC,CAAC;AACJ,CAAC;AAEK,SAAU,SAAS,CAAsD,EAC7E,KAAK,EACL,OAAO,EACP,OAAO,GAAG,EAAE,EACZ,MAAM,EACN,OAAO,EACP,UAAU,EACV,aAAa,GAAG,IAAI,EACpB,YAAY,GAAG,eAAe,EAC9B,cAAc,GAAG,EAAE,EACnB,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,EAAE,EACd,SAAS,EACT,MAAM,GAAG,IAAI,EACb,UAAU,EACV,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,OAAO,GAAG,KAAK,EACf,MAAM,GAAG,MAAM,EACf,UAAU,GAAG,KAAK,EAClB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,YAAY,GAAG,IAAI,EACnB,gBAAgB,GAAG,IAAI,EACvB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GAAG,SAAS,EAC9B,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,gBAAgB,GACE,EAAA;IAClB,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC;AAE/E,IAAA,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,MAA0B,KAAI;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;QACtB,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,MAAM,CAAC;QAChB;aAAO;AACL,YAAA,uBAAuB,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACpF;AACF,IAAA,CAAC,EACD,CAAC,MAAM,CAAC,CACT;IAED,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC,EAC/C,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAChC;AAED,IAAA,MAAM,WAAW,GAAQ,OAAO,CAAC,MAAK;AACpC,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,KAAK;QACxB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,KAAK;AAChC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QACzB,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACnE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAE3C,IAAA,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAO,EAAE,GAAW,KAAqB,EAAA,IAAA,EAAA,CAAA,CACxC,OAAA,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA,EAAA,GAAC,IAAY,CAAC,MAAM,CAAC,mCAAI,GAAG,CAAC,CAAA,CAAA,CAAA,EAC9E,CAAC,MAAM,CAAC,CACT;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,IAAO,EAAE,GAAW,KACnB,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,IAAI,EAAE,EACvE,CAAC,QAAQ,CAAC,CACX;AAED,IAAA,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAA0B,EAAE,IAAO,KAClC,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,EAC1F,EAAE,CACH;AAED,IAAA,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC;AACtF,QAAA,KAAK,EAAE,WAAW;QAClB,MAAM;QACN,eAAe;QACf,sBAAsB;QACtB,iBAAiB;QACjB,eAAe;AAChB,KAAA,CAAC;IAEF,MAAM,kBAAkB,GAAG,OAAO,CAAC,eAAe,IAAI,qBAAqB,CAAC;AAC5E,IAAA,MAAM,YAAY,GAAG,kBAAkB,IAAI,kBAAkB,KAAK,QAAQ;AAC1E,IAAA,MAAM,aAAa,GAAG,kBAAkB,IAAI,kBAAkB,KAAK,QAAQ;AAE3E,IAAA,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC;AACpD,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;IAE5D,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,IAAO,EAAE,GAAW,KAAI;AACvB,QAAA,IAAI,qBAAqB;AAAE,YAAA,OAAO,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC;AAClE,QAAA,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,OAAO,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC5C,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ;AACzF,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAElD,QACEA,IAAA,CAAC,MAAM,EAAA,EAEL,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,WAAW,EAC/B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,EAC/B,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,EAC3E,SAAS,EAAE,cAAc,CACvB;AACE,sBAAE;AACF,sBAAE,WAAW,EACf,GAAG,CAAC,SAAS,CACd,EACD,OAAO,EAAE,CAAC,CAAC,KAAI;oBACb,CAAC,CAAC,eAAe,EAAE;oBACnB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3B,gBAAA,CAAC,EAAA,QAAA,EAAA,CAEA,GAAG,CAAC,IAAI,IAAIC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,UAAU,EAAA,QAAA,EAAE,GAAG,CAAC,IAAI,EAAA,CAAQ,EACxD,GAAG,CAAC,KAAK,IAAIA,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,GAAG,CAAC,KAAK,EAAA,CAAQ,CAAA,EAAA,EAlBjC,GAAG,CAAC,EAAE,CAmBJ;AAEb,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,qBAAqB,EAAE,eAAe,CAAC,CACzC;AAED,IAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,cAAc,CAAC,4BAA4B,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,CAC1EC,aACE,SAAS,EAAE,cAAc,CACvB,CAAC,kBAAkB,IAAI,iBAAiB,EACxC,6CAA6C,EAC7C,YAAY,EACZ,UAAU,IAAI,2BAA2B,CAC1C,EAAA,QAAA,EAEDD,IAAA,CAAC,KAAK,EAAA,EACJ,SAAS,EAAE,cAAc,CAAC,kCAAkC,EAAE,UAAU,CAAC,EACzE,MAAM,EAAE,MAAM,aAEdA,IAAA,CAAC,SAAS,IAAC,SAAS,EAAE,SAAS,EAAA,QAAA,EAAA,CAC5B,UAAU,KACTC,IAAC,eAAe,EAAA,EACd,SAAS,EAAE,cAAc,CACvB,kCAAkC,EAClC,gBAAgB,EAChB,YAAY,IAAI,uDAAuD,CACxE,EAAA,QAAA,EAEDA,GAAA,CAAC,QAAQ,EAAA,EAAA,YAAA,EACI,iBAAiB,EAC5B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,CAAC,EAAE,KAAI;AACV,4CAAA,IAAI,EAAE;AAAE,gDAAA,EAAE,CAAC,aAAa,GAAG,YAAY;AACzC,wCAAA,CAAC,EACD,QAAQ,EAAE,SAAS,GACnB,EAAA,CACc,CACnB,EACA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;oCACtB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5C,oCAAA,MAAM,aAAa,GAAG,MAAM,CAAC;AAC3B,0CAAE,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK;AACrC,8CAAE;AACF,8CAAE,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK;AACtC,kDAAE;AACF,kDAAE;0CACJ,SAAS;AAEb,oCAAA,QACEA,GAAA,CAAC,eAAe,IAEd,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,EAAE,EAAA,WAAA,EAC7B,aAAa,EACxB,SAAS,EAAE,cAAc,CACvB,6BAA6B,EAC7B,gBAAgB,EAChB,YAAY,IAAI,uDAAuD,EACvE,MAAM,CAAC,MAAM,KAAK,MAAM;AACtB,4CAAA,wDAAwD,EAC1D,MAAM,CAAC,MAAM,KAAK,OAAO;AACvB,4CAAA,0DAA0D,EAC5D,MAAM,CAAC,WAAW,CACnB,EAAA,QAAA,EAEDD,IAAA,CAAC,WAAW,EAAA,EACV,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,SAAS,EAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAA,YAAA,EAC7B,MAAM,CAAC,QAAQ,GAAG,CAAA,QAAA,EAAW,MAAM,CAAC,KAAK,CAAA,CAAE,GAAG,SAAS,EACnE,SAAS,EAAE,cAAc,CACvB,OAAO,EACP,MAAM,CAAC,QAAQ;AACb,gDAAA,uIAAuI,CAC1I,EACD,OAAO,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,EACjC,SAAS,EAAE,CAAC,CAAC,KAAI;AACf,gDAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;oDAC3D,CAAC,CAAC,cAAc,EAAE;oDAClB,UAAU,CAAC,MAAM,CAAC;gDACpB;AACF,4CAAA,CAAC,aAEDC,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,UAAU,EAAA,QAAA,EAAE,MAAM,CAAC,KAAK,EAAA,CAAe,EAC7D,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IACrD,EAAA,EAlCT,MAAM,CAAC,IAAI,CAmCA;AAEtB,gCAAA,CAAC,CAAC,EACD,YAAY,KACXA,GAAA,CAAC,eAAe,EAAA,EACd,KAAK,EAAC,OAAO,EACb,SAAS,EAAE,cAAc,CACvB,6CAA6C,EAC7C,gBAAgB,EAChB,YAAY,IAAI,uDAAuD,CACxE,EAAA,QAAA,EAEA,oBAAoB,KAAA,IAAA,IAApB,oBAAoB,KAAA,MAAA,GAApB,oBAAoB,GAAI,EAAE,EAAA,CACX,CACnB,EACA,aAAa,KACZA,GAAA,CAAC,eAAe,IACd,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EACzD,SAAS,EAAE,cAAc,CACvB,qGAAqG,EACrG,YAAY,IAAI,OAAO,CACxB,EAAA,QAAA,EAEA,IAAI,EAAA,CACW,CACnB,CAAA,EAAA,CACS,EAEZA,GAAA,CAAC,SAAS,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,KAAK,KAAI,CAAC,EAAA,QAAA,EAC3E,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IACnCA,GAAA,CAAC,aAAa,EAAA,EAAC,OAAO,EAAE,OAAO,EAAA,QAAA,EAAG,YAAY,EAAA,CAAiB,KAE/D,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;gCAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;gCAC7B,MAAM,aAAa,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC;AAE/D,gCAAA,QACED,IAAA,CAAC,QAAQ,EAAA,EAEP,SAAS,EAAE,cAAc,CACvB,OAAO,EACP,UAAU,IAAI,gBAAgB,EAC9B,OAAO,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,gCAAgC,EAC5D,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CACvB,EACD,OAAO,EAAE,UAAU,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,SAAS,EAAA,QAAA,EAAA,CAE5D,UAAU,KACTC,GAAA,CAAC,SAAS,EAAA,EACR,SAAS,EAAE,cAAc,CACvB,gBAAgB,EAChB,OAAO,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,gCAAgC,CAC7D,EAAA,QAAA,EAEDA,GAAA,CAAA,MAAA,EAAA,EAAM,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAA,QAAA,EACvCA,GAAA,CAAC,QAAQ,EAAA,EAAA,YAAA,EACI,YAAY,EACvB,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,EACxB,QAAQ,EAAE,CAAC,aAAa,EACxB,QAAQ,EAAE,MAAM,SAAS,CAAC,GAAG,CAAC,EAAA,CAC9B,EAAA,CACG,EAAA,CACG,CACb,EACA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;;AAAC,4CAAA,QACvBA,GAAA,CAAC,SAAS,EAAA,EAER,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,SAAS,EAAE,cAAc,CACvB,gBAAgB,EAChB,OAAO,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,gCAAgC,EAC5D,MAAM,CAAC,MAAM,KAAK,MAAM;AACtB,oDAAA,wDAAwD,EAC1D,MAAM,CAAC,MAAM,KAAK,OAAO;oDACvB,0DAA0D,EAC5D,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAC3B,EAAA,QAAA,EAEA,MAAM,CAAC;AACN,sDAAE,MAAM,CAAC,MAAM,CAAC,IAAI;uDACjB,CAAA,EAAA,GAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAS,CAAC,EAAA,EAd7C,MAAM,CAAC,IAAI,CAeN;yCACb,CAAC,EACD,YAAY,KACXA,GAAA,CAAC,SAAS,EAAA,EACR,KAAK,EAAC,OAAO,EACb,SAAS,EAAE,cAAc,CACvB,gBAAgB,EAChB,OAAO,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,gCAAgC,CAC7D,EACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAA,QAAA,EAEnCA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,cAAc,CACvB,wIAAwI,EACxI,mBAAmB,CACpB,EAAA,aAAA,EACY,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,EAAA,QAAA,EAEtC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA,CAC5B,EAAA,CACI,CACb,EACA,aAAa,KACZA,GAAA,CAAC,SAAS,EAAA,EACR,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EACzD,SAAS,EAAC,qGAAqG,EAC/G,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAA,QAAA,EAEnCA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,cAAc,CACvB,6PAA6P,EAC7P,OAAO,IAAI,GAAG,GAAG,CAAC,KAAK;AACrB,sDAAE;sDACA,+EAA+E,EACnF,mBAAmB,CACpB,EAAA,aAAA,EACY,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,EAAA,QAAA,EAEtC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA,CAC5B,EAAA,CACI,CACb,CAAA,EAAA,EArFI,GAAG,CAsFC;AAEf,4BAAA,CAAC,CAAC,CACH,EAAA,CACS,EAEX,SAAS,IAAIA,GAAA,CAAC,SAAS,EAAA,EAAA,QAAA,EAAE,SAAS,GAAa,CAAA,EAAA,CAC1C,EAAA,CACJ,EAEL,UAAU,KACTA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,cAAc,CACvB,gBAAgB,IAAI,gDAAgD,EACpE,eAAe,EACf,wBAAwB,CACzB,EAAA,QAAA,EAEA,gBAAgB,IACf,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,KAE3CA,GAAA,CAAC,UAAU,EAAA,EAAA,GACL,UAAU,EAAA,GACV,eAAe,EACnB,SAAS,EAAE,cAAc,CACvB,8DAA8D,EAC9D,gBAAgB,IAAI,gDAAgD,EACpE,eAAe,KAAA,IAAA,IAAf,eAAe,uBAAf,eAAe,CAAE,SAAS,CAC3B,EACD,QAAQ,EAAE,aAAa,EAAA,CACvB,CACH,GACG,CACP,CAAA,EAAA,CACG;AAEV;AAEA,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
@@ -69,9 +69,10 @@ const useRowSelection = ({ items, getKey, selectedRowKeys, defaultSelectedRowKey
69
69
  emit(Array.from(new Set([...keys, ...selectableKeySet])));
70
70
  }
71
71
  }, [allSelected, selectableEntries, keys, emit]);
72
+ const isSelected = useCallback((key) => keySet.has(key), [keySet]);
72
73
  return {
73
74
  selectedKeys: keys,
74
- isSelected: (key) => keySet.has(key),
75
+ isSelected,
75
76
  toggleRow,
76
77
  toggleAll,
77
78
  allSelected,
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.utils.js","sources":["../../../../../src/components/DataTable/DataTable.utils.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react'\nimport type { DataValueType, Sorting, SortQuery } from './DataTable.types'\n\n/**\n * Compute the next sorting direction for a column.\n * - string: undefined → asc → desc → undefined\n * - number/date: undefined → 1 → -1 → undefined\n */\nexport const nextSortDirection = (\n prev: Sorting | undefined,\n type: 'string' | 'number' | 'date' = 'string',\n): Sorting | undefined => {\n if (type === 'string') {\n if (!prev) return 'asc'\n if (prev === 'asc') return 'desc'\n return undefined\n }\n\n // number / date\n if (!prev) return '1'\n if (prev === '1') return '-1'\n return undefined\n}\n\n/**\n * Update the sort query object for a table column.\n * Toggles sort direction, removing key when reset.\n */\nexport const updateSortQuery = (\n sortQuery: SortQuery,\n name: string,\n type: DataValueType = 'string',\n): SortQuery => {\n const next = nextSortDirection(sortQuery[name], type)\n\n // Shallow clone once\n const updated = { ...sortQuery }\n\n if (next == null) {\n delete updated[name]\n } else {\n updated[name] = next\n }\n\n return updated\n}\n\n/** Options for {@link useRowSelection}. */\nexport interface UseRowSelectionOptions<T> {\n items: T[]\n getKey: (item: T, idx: number) => string | number\n selectedRowKeys?: Array<string | number>\n defaultSelectedRowKeys?: Array<string | number>\n onSelectionChange?: (selectedRowKeys: Array<string | number>, selectedItems: T[]) => void\n isRowSelectable?: (item: T) => boolean\n}\n\n/**\n * Shared row-selection state/behaviour used by DataTable and VirtualizedDataTable.\n * Supports controlled (`selectedRowKeys`) and uncontrolled (`defaultSelectedRowKeys`) usage.\n */\nexport const useRowSelection = <T>({\n items,\n getKey,\n selectedRowKeys,\n defaultSelectedRowKeys = [],\n onSelectionChange,\n isRowSelectable,\n}: UseRowSelectionOptions<T>) => {\n const [internalKeys, setInternalKeys] = useState<Array<string | number>>(defaultSelectedRowKeys)\n const isControlled = selectedRowKeys !== undefined\n const keys = isControlled ? selectedRowKeys : internalKeys\n const keySet = useMemo(() => new Set(keys), [keys])\n\n const selectableEntries = useMemo(\n () =>\n items\n .map((item, idx) => ({ item, key: getKey(item, idx) }))\n .filter(({ item }) => !isRowSelectable || isRowSelectable(item)),\n [items, getKey, isRowSelectable],\n )\n\n const emit = useCallback(\n (nextKeys: Array<string | number>) => {\n if (!isControlled) setInternalKeys(nextKeys)\n const nextKeySet = new Set(nextKeys)\n const nextItems = items.filter((item, idx) => nextKeySet.has(getKey(item, idx)))\n onSelectionChange?.(nextKeys, nextItems)\n },\n [isControlled, items, getKey, onSelectionChange],\n )\n\n const toggleRow = useCallback(\n (key: string | number) => {\n emit(keySet.has(key) ? keys.filter((k) => k !== key) : [...keys, key])\n },\n [keys, keySet, emit],\n )\n\n const allSelected =\n selectableEntries.length > 0 && selectableEntries.every(({ key }) => keySet.has(key))\n const someSelected = !allSelected && selectableEntries.some(({ key }) => keySet.has(key))\n\n const toggleAll = useCallback(() => {\n const selectableKeySet = new Set(selectableEntries.map(({ key }) => key))\n if (allSelected) {\n emit(keys.filter((k) => !selectableKeySet.has(k)))\n } else {\n emit(Array.from(new Set([...keys, ...selectableKeySet])))\n }\n }, [allSelected, selectableEntries, keys, emit])\n\n return {\n selectedKeys: keys,\n isSelected: (key: string | number) => keySet.has(key),\n toggleRow,\n toggleAll,\n allSelected,\n someSelected,\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.utils.js","sources":["../../../../../src/components/DataTable/DataTable.utils.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react'\nimport type { DataValueType, Sorting, SortQuery } from './DataTable.types'\n\n/**\n * Compute the next sorting direction for a column.\n * - string: undefined → asc → desc → undefined\n * - number/date: undefined → 1 → -1 → undefined\n */\nexport const nextSortDirection = (\n prev: Sorting | undefined,\n type: 'string' | 'number' | 'date' = 'string',\n): Sorting | undefined => {\n if (type === 'string') {\n if (!prev) return 'asc'\n if (prev === 'asc') return 'desc'\n return undefined\n }\n\n // number / date\n if (!prev) return '1'\n if (prev === '1') return '-1'\n return undefined\n}\n\n/**\n * Update the sort query object for a table column.\n * Toggles sort direction, removing key when reset.\n */\nexport const updateSortQuery = (\n sortQuery: SortQuery,\n name: string,\n type: DataValueType = 'string',\n): SortQuery => {\n const next = nextSortDirection(sortQuery[name], type)\n\n // Shallow clone once\n const updated = { ...sortQuery }\n\n if (next == null) {\n delete updated[name]\n } else {\n updated[name] = next\n }\n\n return updated\n}\n\n/** Options for {@link useRowSelection}. */\nexport interface UseRowSelectionOptions<T> {\n items: T[]\n getKey: (item: T, idx: number) => string | number\n selectedRowKeys?: Array<string | number>\n defaultSelectedRowKeys?: Array<string | number>\n onSelectionChange?: (selectedRowKeys: Array<string | number>, selectedItems: T[]) => void\n isRowSelectable?: (item: T) => boolean\n}\n\n/**\n * Shared row-selection state/behaviour used by DataTable and VirtualizedDataTable.\n * Supports controlled (`selectedRowKeys`) and uncontrolled (`defaultSelectedRowKeys`) usage.\n */\nexport const useRowSelection = <T>({\n items,\n getKey,\n selectedRowKeys,\n defaultSelectedRowKeys = [],\n onSelectionChange,\n isRowSelectable,\n}: UseRowSelectionOptions<T>) => {\n const [internalKeys, setInternalKeys] = useState<Array<string | number>>(defaultSelectedRowKeys)\n const isControlled = selectedRowKeys !== undefined\n const keys = isControlled ? selectedRowKeys : internalKeys\n const keySet = useMemo(() => new Set(keys), [keys])\n\n const selectableEntries = useMemo(\n () =>\n items\n .map((item, idx) => ({ item, key: getKey(item, idx) }))\n .filter(({ item }) => !isRowSelectable || isRowSelectable(item)),\n [items, getKey, isRowSelectable],\n )\n\n const emit = useCallback(\n (nextKeys: Array<string | number>) => {\n if (!isControlled) setInternalKeys(nextKeys)\n const nextKeySet = new Set(nextKeys)\n const nextItems = items.filter((item, idx) => nextKeySet.has(getKey(item, idx)))\n onSelectionChange?.(nextKeys, nextItems)\n },\n [isControlled, items, getKey, onSelectionChange],\n )\n\n const toggleRow = useCallback(\n (key: string | number) => {\n emit(keySet.has(key) ? keys.filter((k) => k !== key) : [...keys, key])\n },\n [keys, keySet, emit],\n )\n\n const allSelected =\n selectableEntries.length > 0 && selectableEntries.every(({ key }) => keySet.has(key))\n const someSelected = !allSelected && selectableEntries.some(({ key }) => keySet.has(key))\n\n const toggleAll = useCallback(() => {\n const selectableKeySet = new Set(selectableEntries.map(({ key }) => key))\n if (allSelected) {\n emit(keys.filter((k) => !selectableKeySet.has(k)))\n } else {\n emit(Array.from(new Set([...keys, ...selectableKeySet])))\n }\n }, [allSelected, selectableEntries, keys, emit])\n\n const isSelected = useCallback((key: string | number) => keySet.has(key), [keySet])\n\n return {\n selectedKeys: keys,\n isSelected,\n toggleRow,\n toggleAll,\n allSelected,\n someSelected,\n }\n}\n"],"names":[],"mappings":"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"}