@nocoo/basalt 2.1.2 → 2.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/INTEGRATION.md +17 -1
- package/ai/USAGE.md +1 -1
- package/ai/registry.json +75 -75
- package/dist/charts/charts.d.ts +1 -1
- package/dist/charts/charts.js +3 -16
- package/dist/charts/charts.js.map +1 -1
- package/dist/charts/custom-chart.d.ts +1 -1
- package/dist/charts/custom-chart.js +3 -16
- package/dist/charts/custom-chart.js.map +1 -1
- package/dist/charts/grouped-bar.d.ts +1 -1
- package/dist/charts/grouped-bar.js +11 -48
- package/dist/charts/grouped-bar.js.map +1 -1
- package/dist/charts/heatmap-calendar.js +80 -136
- package/dist/charts/heatmap-calendar.js.map +1 -1
- package/dist/charts/slot-bar.js +2 -12
- package/dist/charts/slot-bar.js.map +1 -1
- package/dist/charts/stat-card.js +2 -7
- package/dist/charts/stat-card.js.map +1 -1
- package/dist/charts/timeseries.d.ts +1 -1
- package/dist/charts/timeseries.js +3 -16
- package/dist/charts/timeseries.js.map +1 -1
- package/dist/charts/tooltip.js +13 -51
- package/dist/charts/tooltip.js.map +1 -1
- package/dist/components/autocomplete.d.ts +1 -1
- package/dist/components/autocomplete.js +3 -16
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/banner.js +28 -28
- package/dist/components/banner.js.map +1 -1
- package/dist/components/button.js +6 -7
- package/dist/components/button.js.map +1 -1
- package/dist/components/chat-composer.js +1 -2
- package/dist/components/chat-composer.js.map +1 -1
- package/dist/components/checkbox.js +50 -82
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/code.js +1 -1
- package/dist/components/code.js.map +1 -1
- package/dist/components/combobox.d.ts +1 -1
- package/dist/components/combobox.js +3 -16
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/context-menu.d.ts +1 -67
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/data-table.js +111 -123
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +236 -245
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dock.js +15 -16
- package/dist/components/dock.js.map +1 -1
- package/dist/components/field.js +20 -23
- package/dist/components/field.js.map +1 -1
- package/dist/components/layer-card.d.ts +1 -1
- package/dist/components/layer-card.js +44 -51
- package/dist/components/layer-card.js.map +1 -1
- package/dist/components/skeleton-line.d.ts +2 -2
- package/dist/components/skeleton-line.js +1 -1
- package/dist/components/skeleton-line.js.map +1 -1
- package/dist/components/switch.js +46 -78
- package/dist/components/switch.js.map +1 -1
- package/dist/providers/accent.js +89 -198
- package/dist/providers/accent.js.map +1 -1
- package/dist/providers/theme.js +46 -144
- package/dist/providers/theme.js.map +1 -1
- package/dist/utils/preference-store.d.ts +16 -0
- package/dist/utils/preference-store.js +106 -0
- package/dist/utils/preference-store.js.map +1 -0
- package/dist/utils/use-checkable-group.d.ts +19 -0
- package/dist/utils/use-checkable-group.js +61 -0
- package/dist/utils/use-checkable-group.js.map +1 -0
- package/package.json +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","names":[],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Pagination } from \"./pagination\";\nimport { SkeletonLine } from \"./skeleton-line\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\";\n\nexport type DataTableColumn<T> = {\n\tid: string;\n\theader: string;\n\taccessor: (row: T) => ReactNode;\n\tsortValue?: (row: T) => string | number | bigint;\n\tfilterValue?: (row: T) => string | number | bigint;\n\t/** Rich header content; header remains the plain text accessible name. */\n\theaderContent?: ReactNode;\n\t/** Whether the header changes sorting. @default true */\n\tsortable?: boolean;\n\t/** Width of the header and its column. */\n\twidth?: CSSProperties[\"width\"];\n\t/** Classes applied to the header cell. */\n\theaderClassName?: string;\n\t/** Classes applied to each data cell. */\n\tcellClassName?: string;\n};\n\nexport type DataTableSort = { id: string; dir: \"asc\" | \"desc\" };\n\nfunction asBigint(value: unknown): bigint | null {\n\tif (typeof value === \"bigint\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\" && Number.isFinite(value) && Number.isInteger(value)) {\n\t\treturn BigInt(value);\n\t}\n\treturn null;\n}\n\nfunction compareNumberAndBigint(num: number, big: bigint): number {\n\tconst truncated = BigInt(Math.trunc(num));\n\tif (truncated < big) {\n\t\treturn -1;\n\t}\n\tif (truncated > big) {\n\t\treturn 1;\n\t}\n\treturn num > Number(truncated) ? 1 : -1;\n}\n\nfunction rank(value: unknown): number {\n\tif (value === Number.NEGATIVE_INFINITY) {\n\t\treturn 0;\n\t}\n\tif (typeof value === \"bigint\" || (typeof value === \"number\" && Number.isFinite(value))) {\n\t\treturn 1;\n\t}\n\tif (value === Number.POSITIVE_INFINITY) {\n\t\treturn 2;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn 3;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn 4;\n\t}\n\treturn 5;\n}\n\nfunction compareUnknown(left: unknown, right: unknown): number {\n\tconst leftRank = rank(left);\n\tconst rightRank = rank(right);\n\tif (leftRank !== rightRank) {\n\t\treturn leftRank - rightRank;\n\t}\n\tif (leftRank === 1) {\n\t\tif (typeof left === \"bigint\" && typeof right === \"bigint\") {\n\t\t\treturn left < right ? -1 : left > right ? 1 : 0;\n\t\t}\n\t\tconst leftInt = asBigint(left);\n\t\tconst rightInt = asBigint(right);\n\t\tif (leftInt !== null && rightInt !== null) {\n\t\t\treturn leftInt < rightInt ? -1 : leftInt > rightInt ? 1 : 0;\n\t\t}\n\t\tif (typeof left === \"number\" && typeof right === \"bigint\") {\n\t\t\treturn compareNumberAndBigint(left, right);\n\t\t}\n\t\tif (typeof left === \"bigint\" && typeof right === \"number\") {\n\t\t\treturn -compareNumberAndBigint(right, left);\n\t\t}\n\t\treturn (left as number) - (right as number);\n\t}\n\tconst leftStr = String(left);\n\tconst rightStr = String(right);\n\treturn leftStr < rightStr ? -1 : leftStr > rightStr ? 1 : 0;\n}\n\nfunction primitiveKey(\n\trow: unknown,\n\tindex: number,\n\tsymbols: Map<symbol, string>,\n\tseq: { current: number },\n): string {\n\tif (row === null) {\n\t\treturn \"prim:null\";\n\t}\n\tif (row === undefined) {\n\t\treturn \"prim:undefined\";\n\t}\n\tif (typeof row === \"symbol\") {\n\t\tlet key = symbols.get(row);\n\t\tif (!key) {\n\t\t\tkey = `prim:symbol:${seq.current++}`;\n\t\t\tsymbols.set(row, key);\n\t\t}\n\t\treturn key;\n\t}\n\tconst type = typeof row;\n\tif (type === \"number\") {\n\t\tif (Object.is(row, -0)) {\n\t\t\treturn \"prim:number:-0\";\n\t\t}\n\t\treturn `prim:number:${String(row)}`;\n\t}\n\tif (type === \"string\" || type === \"bigint\" || type === \"boolean\") {\n\t\treturn `prim:${type}:${String(row)}`;\n\t}\n\treturn `prim:${index}`;\n}\n\nfunction isInstanceKey(key: string) {\n\treturn key.startsWith(\"dup:\") || key.startsWith(\"gen:\");\n}\n\nfunction isCanonicalKey(key: string) {\n\treturn key.startsWith(\"id:\") || key.startsWith(\"get:\");\n}\n\nfunction isRefRow(row: unknown): row is object {\n\treturn typeof row === \"function\" || (typeof row === \"object\" && row !== null);\n}\n\nfunction filterSource<T>(column: DataTableColumn<T>, row: T): string {\n\tif (column.filterValue) {\n\t\treturn String(column.filterValue(row));\n\t}\n\tif (column.sortValue) {\n\t\treturn String(column.sortValue(row));\n\t}\n\tconst rendered = column.accessor(row);\n\tif (\n\t\ttypeof rendered === \"string\" ||\n\t\ttypeof rendered === \"number\" ||\n\t\ttypeof rendered === \"bigint\"\n\t) {\n\t\treturn String(rendered);\n\t}\n\treturn \"\";\n}\n\nfunction publicSelectId<T>(\n\trow: T,\n\tindex: number,\n\tkey: string,\n\tgetRowId?: (row: T, index: number) => string,\n): string {\n\tconst requested = getRowId?.(row, index);\n\tif (requested !== undefined) {\n\t\treturn requested;\n\t}\n\tif (isRefRow(row) && \"id\" in row && row.id != null) {\n\t\treturn String(row.id);\n\t}\n\treturn key;\n}\n\nexport type DataTableProps<T = unknown> = {\n\t/**\n\t * Rows to render.\n\t */\n\tdata: T[];\n\t/**\n\t * Column descriptors.\n\t */\n\tcolumns: DataTableColumn<T>[];\n\t/**\n\t * Filter query matched against column values.\n\t * @default \"\"\n\t */\n\tfilter?: string;\n\t/**\n\t * Replace rows with a loading placeholder.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Copy shown when no rows remain after filtering.\n\t * @default \"No results\"\n\t */\n\tempty?: ReactNode;\n\t/**\n\t * Controlled selected row ids.\n\t */\n\tselected?: string[];\n\t/**\n\t * Uncontrolled initial selected row ids.\n\t */\n\tdefaultSelected?: string[];\n\t/**\n\t * Called when selected row ids change.\n\t */\n\tonSelectedChange?: (ids: string[]) => void;\n\t/**\n\t * Allow more than one selected row.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\t/**\n\t * Controlled 1-based page. Used with pageSize.\n\t */\n\tpage?: number;\n\t/**\n\t * Uncontrolled initial page.\n\t * @default 1\n\t */\n\tdefaultPage?: number;\n\t/**\n\t * Rows per page. Omit to show every row.\n\t */\n\tpageSize?: number;\n\t/**\n\t * Called when the page changes.\n\t */\n\tonPageChange?: (page: number) => void;\n\t/**\n\t * Stable id for a row.\n\t */\n\tgetRowId?: (row: T, index: number) => string;\n\t/**\n\t * Additional classes for the table.\n\t */\n\tclassName?: string;\n\t/** Controlled sorting. null explicitly disables sorting. */\n\tsort?: DataTableSort | null;\n\t/** Initial sorting for uncontrolled usage. @default null */\n\tdefaultSort?: DataTableSort | null;\n\t/** Reports header sorting requests. Controlled values change only when the caller accepts. */\n\tonSortChange?: (sort: DataTableSort | null) => void;\n\t/** Caller supplies sorted rows; headers only report requests. @default false */\n\tmanualSorting?: boolean;\n\t/** Caller supplies the current page; rows are never sliced again. Use stable row IDs across pages. @default false */\n\tmanualPagination?: boolean;\n\t/** Caller supplies filtered rows; filter is not applied locally. @default false */\n\tmanualFiltering?: boolean;\n\t/** Total matching row count in manualPagination mode; defaults to data.length. */\n\ttotal?: number;\n\t/** Error content replacing rows after loading finishes. */\n\terror?: ReactNode;\n\t/** Optional retry action for an error. The caller owns the request. */\n\tonRetry?: () => void;\n\t/** Retry button text. @default \"Try again\" */\n\tretryLabel?: string;\n\t/** Accessible table name. @default \"Data table\" */\n\t\"aria-label\"?: string;\n\t/** ID of additional table instructions or summary. */\n\t\"aria-describedby\"?: string;\n};\n\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tfilter = \"\",\n\tloading = false,\n\tempty = \"No results\",\n\tselected,\n\tdefaultSelected,\n\tonSelectedChange,\n\tmultiple = false,\n\tpage,\n\tdefaultPage = 1,\n\tpageSize,\n\tonPageChange,\n\tgetRowId,\n\tclassName,\n\tsort: controlledSort,\n\tdefaultSort = null,\n\tonSortChange,\n\tmanualSorting = false,\n\tmanualPagination = false,\n\tmanualFiltering = false,\n\ttotal,\n\terror,\n\tonRetry,\n\tretryLabel = \"Try again\",\n\t\"aria-label\": ariaLabel = \"Data table\",\n\t\"aria-describedby\": ariaDescribedBy,\n}: DataTableProps<T>) {\n\tconst [uncontrolledSort, setUncontrolledSort] = useState<DataTableSort | null>(defaultSort);\n\tconst sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n\tconst requestSort = (next: DataTableSort) => {\n\t\tif (controlledSort === undefined) setUncontrolledSort(next);\n\t\tonSortChange?.(next);\n\t};\n\tconst [uncontrolledSelected, setUncontrolledSelected] = useState<string[]>(defaultSelected ?? []);\n\tconst [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\tconst rowIds = useRef(new WeakMap<object, string>());\n\tconst rowSeq = useRef(0);\n\tconst assignedKeys = useRef(new WeakMap<object, string[]>());\n\tconst lastCanonical = useRef(new Map<string, object>());\n\tconst lastOwner = useRef(new Map<string, object>());\n\tconst lastKeyByCanonical = useRef(new Map<string, string>());\n\tconst lastDupsByCanonical = useRef(new Map<string, string[]>());\n\tconst symbolKeys = useRef(new Map<symbol, string>());\n\tconst query = filter.trim().toLowerCase();\n\n\tconst rows = useMemo(() => {\n\t\tconst identityOf = (row: object) => {\n\t\t\tlet stored = rowIds.current.get(row);\n\t\t\tif (!stored) {\n\t\t\t\tstored = `basalt-row-${rowSeq.current++}`;\n\t\t\t\trowIds.current.set(row, stored);\n\t\t\t}\n\t\t\treturn stored;\n\t\t};\n\t\tconst canonicalOf = (row: T, index: number) => {\n\t\t\tconst requested = getRowId?.(row, index);\n\t\t\tif (requested !== undefined) {\n\t\t\t\treturn `get:${requested}`;\n\t\t\t}\n\t\t\tif (isRefRow(row) && \"id\" in row) {\n\t\t\t\tconst raw = (row as { id: unknown }).id;\n\t\t\t\tif (raw != null) {\n\t\t\t\t\treturn `id:${String(raw)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst used = new Set<string>();\n\t\tconst nextLastKey = new Map<string, string>();\n\t\tconst nextDups = new Map<string, string[]>();\n\t\tconst nextAssigned = new Map<object, string[]>();\n\t\tconst nextOwner = new Map<string, object>();\n\t\tconst nextCanonical = new Map<string, object>();\n\t\tconst rememberKey = (row: T, index: number, key: string, objectRow: object | null) => {\n\t\t\tif (!objectRow) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst list = nextAssigned.get(objectRow) ?? [];\n\t\t\tlist.push(key);\n\t\t\tnextAssigned.set(objectRow, list);\n\t\t\tnextOwner.set(key, objectRow);\n\t\t\tif (isCanonicalKey(key)) {\n\t\t\t\tnextCanonical.set(key, objectRow);\n\t\t\t}\n\t\t\tconst canonical = canonicalOf(row, index);\n\t\t\tif (!canonical) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextLastKey.set(canonical, key);\n\t\t\tif (isInstanceKey(key)) {\n\t\t\t\tconst dups = nextDups.get(canonical) ?? [];\n\t\t\t\tdups.push(key);\n\t\t\t\tnextDups.set(canonical, dups);\n\t\t\t}\n\t\t};\n\t\tconst counts = new WeakMap<object, number>();\n\t\tconst pending = data.map((row, index) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tconst occurrence = objectRow ? (counts.get(objectRow) ?? 0) : 0;\n\t\t\tif (objectRow) {\n\t\t\t\tcounts.set(objectRow, occurrence + 1);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trow,\n\t\t\t\tindex,\n\t\t\t\toccurrence,\n\t\t\t\tkey: undefined as string | undefined,\n\t\t\t};\n\t\t});\n\t\tfor (const item of pending) {\n\t\t\tconst objectRow = isRefRow(item.row) ? item.row : null;\n\t\t\tif (!objectRow) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst previous = assignedKeys.current.get(objectRow)?.[item.occurrence];\n\t\t\tif (!previous || used.has(previous)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lastOwner.current.get(previous) === objectRow) {\n\t\t\t\titem.key = previous;\n\t\t\t\tused.add(previous);\n\t\t\t}\n\t\t}\n\t\tconst keyed = pending.map(({ row, index, occurrence, key: reserved }) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tif (reserved) {\n\t\t\t\trememberKey(row, index, reserved, objectRow);\n\t\t\t\treturn {\n\t\t\t\t\trow,\n\t\t\t\t\tkey: reserved,\n\t\t\t\t\tselectId: publicSelectId(row, index, reserved, getRowId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst isRepeat = occurrence > 0;\n\t\t\tlet key: string | undefined;\n\t\t\tconst requested = canonicalOf(row, index);\n\t\t\tif (requested) {\n\t\t\t\tkey = requested;\n\t\t\t}\n\t\t\tif (objectRow) {\n\t\t\t\tconst stored = identityOf(objectRow);\n\t\t\t\tif (!key) {\n\t\t\t\t\tkey = isRepeat ? `gen:${stored}#${occurrence}` : `gen:${stored}`;\n\t\t\t\t} else if (used.has(key) || isRepeat) {\n\t\t\t\t\tconst reused = (lastDupsByCanonical.current.get(key) ?? []).find(\n\t\t\t\t\t\t(candidate) => !used.has(candidate),\n\t\t\t\t\t);\n\t\t\t\t\tkey = reused ?? (isRepeat ? `dup:${stored}#${occurrence}` : `dup:${stored}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst inherited = lastKeyByCanonical.current.get(key);\n\t\t\t\t\tif (inherited && !used.has(inherited) && isInstanceKey(inherited)) {\n\t\t\t\t\t\tkey = inherited;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tkey = key ?? primitiveKey(row, index, symbolKeys.current, rowSeq);\n\t\t\tif (used.has(key)) {\n\t\t\t\tlet n = 0;\n\t\t\t\tlet candidate = `occ:${key}#${n}`;\n\t\t\t\twhile (used.has(candidate)) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tcandidate = `occ:${key}#${n}`;\n\t\t\t\t}\n\t\t\t\tkey = candidate;\n\t\t\t}\n\t\t\tused.add(key);\n\t\t\trememberKey(row, index, key, objectRow);\n\t\t\treturn { row, key, selectId: publicSelectId(row, index, key, getRowId) };\n\t\t});\n\t\tconst filtered =\n\t\t\tquery && !manualFiltering\n\t\t\t\t? keyed.filter(({ row }) =>\n\t\t\t\t\t\tcolumns.some((column) => filterSource(column, row).toLowerCase().includes(query)),\n\t\t\t\t\t)\n\t\t\t\t: keyed;\n\t\tconst sorted = (() => {\n\t\t\tif (!sort || manualSorting) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\tconst column = columns.find((item) => item.id === sort.id);\n\t\t\tif (!column) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\treturn [...filtered].sort((a, b) => {\n\t\t\t\tconst left = column.sortValue?.(a.row) ?? column.accessor(a.row);\n\t\t\t\tconst right = column.sortValue?.(b.row) ?? column.accessor(b.row);\n\t\t\t\tconst cmp = compareUnknown(left, right);\n\t\t\t\treturn sort.dir === \"asc\" ? cmp : -cmp;\n\t\t\t});\n\t\t})();\n\t\treturn {\n\t\t\trows: sorted,\n\t\t\tassigned: nextAssigned,\n\t\t\towner: nextOwner,\n\t\t\tcanonical: nextCanonical,\n\t\t\tlastKey: nextLastKey,\n\t\t\tdups: nextDups,\n\t\t};\n\t}, [columns, data, getRowId, query, sort, manualFiltering, manualSorting]);\n\n\tuseLayoutEffect(() => {\n\t\tfor (const [objectRow, keys] of rows.assigned) {\n\t\t\tassignedKeys.current.set(objectRow, keys);\n\t\t}\n\t\tlastOwner.current = rows.owner;\n\t\tlastCanonical.current = rows.canonical;\n\t\tlastKeyByCanonical.current = rows.lastKey;\n\t\tlastDupsByCanonical.current = rows.dups;\n\t}, [rows]);\n\n\tconst selectable =\n\t\tselected !== undefined || defaultSelected !== undefined || onSelectedChange !== undefined;\n\tconst selectedIds = selected ?? uncontrolledSelected;\n\tconst setSelectedIds = useCallback(\n\t\t(next: string[]) => {\n\t\t\tif (selected === undefined) {\n\t\t\t\tsetUncontrolledSelected(next);\n\t\t\t}\n\t\t\tonSelectedChange?.(next);\n\t\t},\n\t\t[onSelectedChange, selected],\n\t);\n\tconst rowCount = manualPagination && total !== undefined ? Math.max(0, total) : rows.rows.length;\n\tconst pageCount = pageSize && pageSize > 0 ? Math.max(1, Math.ceil(rowCount / pageSize)) : 1;\n\tconst resolvedPage = Math.min(pageCount, Math.max(1, page ?? uncontrolledPage));\n\tconst setResolvedPage = useCallback(\n\t\t(next: number) => {\n\t\t\tif (page === undefined) {\n\t\t\t\tsetUncontrolledPage(next);\n\t\t\t}\n\t\t\tonPageChange?.(next);\n\t\t},\n\t\t[onPageChange, page],\n\t);\n\tconst lastCorrection = useRef<string | null>(null);\n\tuseEffect(() => {\n\t\tconst requested = page ?? uncontrolledPage;\n\t\tif (requested === resolvedPage || loading) {\n\t\t\tlastCorrection.current = null;\n\t\t\treturn;\n\t\t}\n\t\tconst correction = `${requested}:${resolvedPage}`;\n\t\tif (lastCorrection.current !== correction) {\n\t\t\tlastCorrection.current = correction;\n\t\t\tsetResolvedPage(resolvedPage);\n\t\t}\n\t}, [page, uncontrolledPage, resolvedPage, loading, setResolvedPage]);\n\tconst paged =\n\t\t!manualPagination && pageSize && pageSize > 0\n\t\t\t? rows.rows.slice((resolvedPage - 1) * pageSize, resolvedPage * pageSize)\n\t\t\t: rows.rows;\n\tconst colCount = columns.length + (selectable ? 1 : 0);\n\tconst toggleSelected = (id: string) => {\n\t\tif (multiple) {\n\t\t\tsetSelectedIds(\n\t\t\t\tselectedIds.includes(id) ? selectedIds.filter((item) => item !== id) : [...selectedIds, id],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tsetSelectedIds(selectedIds.includes(id) ? [] : [id]);\n\t};\n\n\treturn (\n\t\t<div className=\"flex min-w-0 flex-col gap-3\">\n\t\t\t<div\n\t\t\t\trole=\"region\"\n\t\t\t\taria-label={`${ariaLabel} scroll area`}\n\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: Named overflow regions need keyboard scrolling.\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName=\"min-w-0 overflow-x-auto rounded-basalt-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-basalt-primary\"\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tclassName={cn(\"w-full\", className)}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Select</span>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\tclassName={column.headerClassName}\n\t\t\t\t\t\t\t\t\tstyle={{ width: column.width }}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tcolumn.sortable === false\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: sort?.id === column.id\n\t\t\t\t\t\t\t\t\t\t\t\t? sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"ascending\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"descending\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"none\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{column.sortable === false ? (\n\t\t\t\t\t\t\t\t\t\t(column.headerContent ?? column.header)\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\taria-label={column.header}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"appearance-none border-0 bg-transparent p-0 font-inherit text-inherit font-medium cursor-pointer rounded-sm focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-basalt-primary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\trequestSort(\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort?.id === column.id && sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { id: column.id, dir: \"desc\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { id: column.id, dir: \"asc\" },\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.headerContent ?? column.header}\n\t\t\t\t\t\t\t\t\t\t\t{sort?.id === column.id ? (sort.dir === \"asc\" ? \" ↑\" : \" ↓\") : \"\"}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\" className=\"flex flex-col gap-2 py-2\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Loading</span>\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : error != null && error !== false ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"alert\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex flex-wrap items-center justify-between gap-3 py-6\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div>{error}</div>\n\t\t\t\t\t\t\t\t\t\t{onRetry ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" onClick={onRetry}>\n\t\t\t\t\t\t\t\t\t\t\t\t{retryLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : paged.length === 0 ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\">{empty}</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaged.map(({ row, key, selectId }) => {\n\t\t\t\t\t\t\t\tconst isSelected = selectedIds.includes(selectId);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\tvariant={isSelected ? \"selected\" : \"default\"}\n\t\t\t\t\t\t\t\t\t\taria-selected={selectable ? isSelected : undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Select ${selectId}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={() => toggleSelected(selectId)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t{columns.map((column) => {\n\t\t\t\t\t\t\t\t\t\t\tconst cell = column.accessor(row);\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={column.id} className={column.cellClassName}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof cell === \"bigint\" ? String(cell) : cell}\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{pageSize && pageSize > 0 ? (\n\t\t\t\t<Pagination\n\t\t\t\t\tpage={resolvedPage}\n\t\t\t\t\tpageCount={pageCount}\n\t\t\t\t\tdisabled={loading}\n\t\t\t\t\tonPageChange={setResolvedPage}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table.js","names":[],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Pagination } from \"./pagination\";\nimport { SkeletonLine } from \"./skeleton-line\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\";\n\nexport type DataTableColumn<T> = {\n\tid: string;\n\theader: string;\n\taccessor: (row: T) => ReactNode;\n\tsortValue?: (row: T) => string | number | bigint;\n\tfilterValue?: (row: T) => string | number | bigint;\n\t/** Rich header content; header remains the plain text accessible name. */\n\theaderContent?: ReactNode;\n\t/** Whether the header changes sorting. @default true */\n\tsortable?: boolean;\n\t/** Width of the header and its column. */\n\twidth?: CSSProperties[\"width\"];\n\t/** Classes applied to the header cell. */\n\theaderClassName?: string;\n\t/** Classes applied to each data cell. */\n\tcellClassName?: string;\n};\n\nexport type DataTableSort = { id: string; dir: \"asc\" | \"desc\" };\n\nfunction rank(value: unknown): number {\n\tif (value === Number.NEGATIVE_INFINITY) {\n\t\treturn 0;\n\t}\n\tif (typeof value === \"bigint\" || (typeof value === \"number\" && Number.isFinite(value))) {\n\t\treturn 1;\n\t}\n\tif (value === Number.POSITIVE_INFINITY) {\n\t\treturn 2;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn 3;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn 4;\n\t}\n\treturn 5;\n}\n\nfunction compareUnknown(left: unknown, right: unknown): number {\n\tconst leftRank = rank(left);\n\tconst rightRank = rank(right);\n\tif (leftRank !== rightRank) {\n\t\treturn leftRank - rightRank;\n\t}\n\tif (leftRank === 1) {\n\t\tconst a = left as number | bigint;\n\t\tconst b = right as number | bigint;\n\t\treturn a < b ? -1 : a > b ? 1 : 0;\n\t}\n\tconst leftStr = String(left);\n\tconst rightStr = String(right);\n\treturn leftStr < rightStr ? -1 : leftStr > rightStr ? 1 : 0;\n}\n\nfunction primitiveKey(\n\trow: unknown,\n\tindex: number,\n\tsymbols: Map<symbol, string>,\n\tseq: { current: number },\n): string {\n\tif (row === null) {\n\t\treturn \"prim:null\";\n\t}\n\tif (row === undefined) {\n\t\treturn \"prim:undefined\";\n\t}\n\tif (typeof row === \"symbol\") {\n\t\tlet key = symbols.get(row);\n\t\tif (!key) {\n\t\t\tkey = `prim:symbol:${seq.current++}`;\n\t\t\tsymbols.set(row, key);\n\t\t}\n\t\treturn key;\n\t}\n\tconst type = typeof row;\n\tif (type === \"number\") {\n\t\tif (Object.is(row, -0)) {\n\t\t\treturn \"prim:number:-0\";\n\t\t}\n\t\treturn `prim:number:${String(row)}`;\n\t}\n\tif (type === \"string\" || type === \"bigint\" || type === \"boolean\") {\n\t\treturn `prim:${type}:${String(row)}`;\n\t}\n\treturn `prim:${index}`;\n}\n\nfunction isInstanceKey(key: string) {\n\treturn key.startsWith(\"dup:\") || key.startsWith(\"gen:\");\n}\n\nfunction isRefRow(row: unknown): row is object {\n\treturn typeof row === \"function\" || (typeof row === \"object\" && row !== null);\n}\n\nfunction filterSource<T>(column: DataTableColumn<T>, row: T): string {\n\tif (column.filterValue) {\n\t\treturn String(column.filterValue(row));\n\t}\n\tif (column.sortValue) {\n\t\treturn String(column.sortValue(row));\n\t}\n\tconst rendered = column.accessor(row);\n\tif (\n\t\ttypeof rendered === \"string\" ||\n\t\ttypeof rendered === \"number\" ||\n\t\ttypeof rendered === \"bigint\"\n\t) {\n\t\treturn String(rendered);\n\t}\n\treturn \"\";\n}\n\nfunction publicSelectId<T>(\n\trow: T,\n\tindex: number,\n\tkey: string,\n\tgetRowId?: (row: T, index: number) => string,\n): string {\n\tconst requested = getRowId?.(row, index);\n\tif (requested !== undefined) {\n\t\treturn requested;\n\t}\n\tif (isRefRow(row) && \"id\" in row && row.id != null) {\n\t\treturn String(row.id);\n\t}\n\treturn key;\n}\n\nexport type DataTableProps<T = unknown> = {\n\t/**\n\t * Rows to render.\n\t */\n\tdata: T[];\n\t/**\n\t * Column descriptors.\n\t */\n\tcolumns: DataTableColumn<T>[];\n\t/**\n\t * Filter query matched against column values.\n\t * @default \"\"\n\t */\n\tfilter?: string;\n\t/**\n\t * Replace rows with a loading placeholder.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Copy shown when no rows remain after filtering.\n\t * @default \"No results\"\n\t */\n\tempty?: ReactNode;\n\t/**\n\t * Controlled selected row ids.\n\t */\n\tselected?: string[];\n\t/**\n\t * Uncontrolled initial selected row ids.\n\t */\n\tdefaultSelected?: string[];\n\t/**\n\t * Called when selected row ids change.\n\t */\n\tonSelectedChange?: (ids: string[]) => void;\n\t/**\n\t * Allow more than one selected row.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\t/**\n\t * Controlled 1-based page. Used with pageSize.\n\t */\n\tpage?: number;\n\t/**\n\t * Uncontrolled initial page.\n\t * @default 1\n\t */\n\tdefaultPage?: number;\n\t/**\n\t * Rows per page. Omit to show every row.\n\t */\n\tpageSize?: number;\n\t/**\n\t * Called when the page changes.\n\t */\n\tonPageChange?: (page: number) => void;\n\t/**\n\t * Stable id for a row.\n\t */\n\tgetRowId?: (row: T, index: number) => string;\n\t/**\n\t * Additional classes for the table.\n\t */\n\tclassName?: string;\n\t/** Controlled sorting. null explicitly disables sorting. */\n\tsort?: DataTableSort | null;\n\t/** Initial sorting for uncontrolled usage. @default null */\n\tdefaultSort?: DataTableSort | null;\n\t/** Reports header sorting requests. Controlled values change only when the caller accepts. */\n\tonSortChange?: (sort: DataTableSort | null) => void;\n\t/** Caller supplies sorted rows; headers only report requests. @default false */\n\tmanualSorting?: boolean;\n\t/** Caller supplies the current page; rows are never sliced again. Use stable row IDs across pages. @default false */\n\tmanualPagination?: boolean;\n\t/** Caller supplies filtered rows; filter is not applied locally. @default false */\n\tmanualFiltering?: boolean;\n\t/** Total matching row count in manualPagination mode; defaults to data.length. */\n\ttotal?: number;\n\t/** Error content replacing rows after loading finishes. */\n\terror?: ReactNode;\n\t/** Optional retry action for an error. The caller owns the request. */\n\tonRetry?: () => void;\n\t/** Retry button text. @default \"Try again\" */\n\tretryLabel?: string;\n\t/** Accessible table name. @default \"Data table\" */\n\t\"aria-label\"?: string;\n\t/** ID of additional table instructions or summary. */\n\t\"aria-describedby\"?: string;\n};\n\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tfilter = \"\",\n\tloading = false,\n\tempty = \"No results\",\n\tselected,\n\tdefaultSelected,\n\tonSelectedChange,\n\tmultiple = false,\n\tpage,\n\tdefaultPage = 1,\n\tpageSize,\n\tonPageChange,\n\tgetRowId,\n\tclassName,\n\tsort: controlledSort,\n\tdefaultSort = null,\n\tonSortChange,\n\tmanualSorting = false,\n\tmanualPagination = false,\n\tmanualFiltering = false,\n\ttotal,\n\terror,\n\tonRetry,\n\tretryLabel = \"Try again\",\n\t\"aria-label\": ariaLabel = \"Data table\",\n\t\"aria-describedby\": ariaDescribedBy,\n}: DataTableProps<T>) {\n\tconst [uncontrolledSort, setUncontrolledSort] = useState<DataTableSort | null>(defaultSort);\n\tconst sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n\tconst requestSort = (next: DataTableSort) => {\n\t\tif (controlledSort === undefined) setUncontrolledSort(next);\n\t\tonSortChange?.(next);\n\t};\n\tconst [uncontrolledSelected, setUncontrolledSelected] = useState<string[]>(defaultSelected ?? []);\n\tconst [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\tconst rowIds = useRef(new WeakMap<object, string>());\n\tconst rowSeq = useRef(0);\n\tconst assignedKeys = useRef(new WeakMap<object, string[]>());\n\tconst lastOwner = useRef(new Map<string, object>());\n\tconst lastKeyByCanonical = useRef(new Map<string, string>());\n\tconst lastDupsByCanonical = useRef(new Map<string, string[]>());\n\tconst symbolKeys = useRef(new Map<symbol, string>());\n\tconst query = filter.trim().toLowerCase();\n\n\tconst rows = useMemo(() => {\n\t\tconst identityOf = (row: object) => {\n\t\t\tlet stored = rowIds.current.get(row);\n\t\t\tif (!stored) {\n\t\t\t\tstored = `basalt-row-${rowSeq.current++}`;\n\t\t\t\trowIds.current.set(row, stored);\n\t\t\t}\n\t\t\treturn stored;\n\t\t};\n\t\tconst canonicalOf = (row: T, index: number) => {\n\t\t\tconst requested = getRowId?.(row, index);\n\t\t\tif (requested !== undefined) {\n\t\t\t\treturn `get:${requested}`;\n\t\t\t}\n\t\t\tif (isRefRow(row) && \"id\" in row) {\n\t\t\t\tconst raw = (row as { id: unknown }).id;\n\t\t\t\tif (raw != null) {\n\t\t\t\t\treturn `id:${String(raw)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst used = new Set<string>();\n\t\tconst nextLastKey = new Map<string, string>();\n\t\tconst nextDups = new Map<string, string[]>();\n\t\tconst nextAssigned = new Map<object, string[]>();\n\t\tconst nextOwner = new Map<string, object>();\n\t\tconst rememberKey = (row: T, index: number, key: string, objectRow: object | null) => {\n\t\t\tif (!objectRow) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst list = nextAssigned.get(objectRow) ?? [];\n\t\t\tlist.push(key);\n\t\t\tnextAssigned.set(objectRow, list);\n\t\t\tnextOwner.set(key, objectRow);\n\t\t\tconst canonical = canonicalOf(row, index);\n\t\t\tif (!canonical) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextLastKey.set(canonical, key);\n\t\t\tif (isInstanceKey(key)) {\n\t\t\t\tconst dups = nextDups.get(canonical) ?? [];\n\t\t\t\tdups.push(key);\n\t\t\t\tnextDups.set(canonical, dups);\n\t\t\t}\n\t\t};\n\t\tconst counts = new WeakMap<object, number>();\n\t\tconst pending = data.map((row, index) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tconst occurrence = objectRow ? (counts.get(objectRow) ?? 0) : 0;\n\t\t\tif (objectRow) {\n\t\t\t\tcounts.set(objectRow, occurrence + 1);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trow,\n\t\t\t\tindex,\n\t\t\t\toccurrence,\n\t\t\t\tkey: undefined as string | undefined,\n\t\t\t};\n\t\t});\n\t\tfor (const item of pending) {\n\t\t\tconst objectRow = isRefRow(item.row) ? item.row : null;\n\t\t\tif (!objectRow) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst previous = assignedKeys.current.get(objectRow)?.[item.occurrence];\n\t\t\tif (!previous || used.has(previous)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lastOwner.current.get(previous) === objectRow) {\n\t\t\t\titem.key = previous;\n\t\t\t\tused.add(previous);\n\t\t\t}\n\t\t}\n\t\tconst keyed = pending.map(({ row, index, occurrence, key: reserved }) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tif (reserved) {\n\t\t\t\trememberKey(row, index, reserved, objectRow);\n\t\t\t\treturn {\n\t\t\t\t\trow,\n\t\t\t\t\tkey: reserved,\n\t\t\t\t\tselectId: publicSelectId(row, index, reserved, getRowId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst isRepeat = occurrence > 0;\n\t\t\tlet key: string | undefined;\n\t\t\tconst requested = canonicalOf(row, index);\n\t\t\tif (requested) {\n\t\t\t\tkey = requested;\n\t\t\t}\n\t\t\tif (objectRow) {\n\t\t\t\tconst stored = identityOf(objectRow);\n\t\t\t\tif (!key) {\n\t\t\t\t\tkey = isRepeat ? `gen:${stored}#${occurrence}` : `gen:${stored}`;\n\t\t\t\t} else if (used.has(key) || isRepeat) {\n\t\t\t\t\tconst reused = (lastDupsByCanonical.current.get(key) ?? []).find(\n\t\t\t\t\t\t(candidate) => !used.has(candidate),\n\t\t\t\t\t);\n\t\t\t\t\tkey = reused ?? (isRepeat ? `dup:${stored}#${occurrence}` : `dup:${stored}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst inherited = lastKeyByCanonical.current.get(key);\n\t\t\t\t\tif (inherited && !used.has(inherited) && isInstanceKey(inherited)) {\n\t\t\t\t\t\tkey = inherited;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tkey = key ?? primitiveKey(row, index, symbolKeys.current, rowSeq);\n\t\t\tif (used.has(key)) {\n\t\t\t\tlet n = 0;\n\t\t\t\tlet candidate = `occ:${key}#${n}`;\n\t\t\t\twhile (used.has(candidate)) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tcandidate = `occ:${key}#${n}`;\n\t\t\t\t}\n\t\t\t\tkey = candidate;\n\t\t\t}\n\t\t\tused.add(key);\n\t\t\trememberKey(row, index, key, objectRow);\n\t\t\treturn { row, key, selectId: publicSelectId(row, index, key, getRowId) };\n\t\t});\n\t\tconst filtered =\n\t\t\tquery && !manualFiltering\n\t\t\t\t? keyed.filter(({ row }) =>\n\t\t\t\t\t\tcolumns.some((column) => filterSource(column, row).toLowerCase().includes(query)),\n\t\t\t\t\t)\n\t\t\t\t: keyed;\n\t\tconst sorted = (() => {\n\t\t\tif (!sort || manualSorting) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\tconst column = columns.find((item) => item.id === sort.id);\n\t\t\tif (!column) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\treturn [...filtered].sort((a, b) => {\n\t\t\t\tconst left = column.sortValue?.(a.row) ?? column.accessor(a.row);\n\t\t\t\tconst right = column.sortValue?.(b.row) ?? column.accessor(b.row);\n\t\t\t\tconst cmp = compareUnknown(left, right);\n\t\t\t\treturn sort.dir === \"asc\" ? cmp : -cmp;\n\t\t\t});\n\t\t})();\n\t\treturn {\n\t\t\trows: sorted,\n\t\t\tassigned: nextAssigned,\n\t\t\towner: nextOwner,\n\t\t\tlastKey: nextLastKey,\n\t\t\tdups: nextDups,\n\t\t};\n\t}, [columns, data, getRowId, query, sort, manualFiltering, manualSorting]);\n\n\tuseLayoutEffect(() => {\n\t\tfor (const [objectRow, keys] of rows.assigned) {\n\t\t\tassignedKeys.current.set(objectRow, keys);\n\t\t}\n\t\tlastOwner.current = rows.owner;\n\t\tlastKeyByCanonical.current = rows.lastKey;\n\t\tlastDupsByCanonical.current = rows.dups;\n\t}, [rows]);\n\n\tconst selectable =\n\t\tselected !== undefined || defaultSelected !== undefined || onSelectedChange !== undefined;\n\tconst selectedIds = selected ?? uncontrolledSelected;\n\tconst setSelectedIds = useCallback(\n\t\t(next: string[]) => {\n\t\t\tif (selected === undefined) {\n\t\t\t\tsetUncontrolledSelected(next);\n\t\t\t}\n\t\t\tonSelectedChange?.(next);\n\t\t},\n\t\t[onSelectedChange, selected],\n\t);\n\tconst rowCount = manualPagination && total !== undefined ? Math.max(0, total) : rows.rows.length;\n\tconst pageCount = pageSize && pageSize > 0 ? Math.max(1, Math.ceil(rowCount / pageSize)) : 1;\n\tconst resolvedPage = Math.min(pageCount, Math.max(1, page ?? uncontrolledPage));\n\tconst setResolvedPage = useCallback(\n\t\t(next: number) => {\n\t\t\tif (page === undefined) {\n\t\t\t\tsetUncontrolledPage(next);\n\t\t\t}\n\t\t\tonPageChange?.(next);\n\t\t},\n\t\t[onPageChange, page],\n\t);\n\tconst lastCorrection = useRef<string | null>(null);\n\tuseEffect(() => {\n\t\tconst requested = page ?? uncontrolledPage;\n\t\tif (requested === resolvedPage || loading) {\n\t\t\tlastCorrection.current = null;\n\t\t\treturn;\n\t\t}\n\t\tconst correction = `${requested}:${resolvedPage}`;\n\t\tif (lastCorrection.current !== correction) {\n\t\t\tlastCorrection.current = correction;\n\t\t\tsetResolvedPage(resolvedPage);\n\t\t}\n\t}, [page, uncontrolledPage, resolvedPage, loading, setResolvedPage]);\n\tconst paged =\n\t\t!manualPagination && pageSize && pageSize > 0\n\t\t\t? rows.rows.slice((resolvedPage - 1) * pageSize, resolvedPage * pageSize)\n\t\t\t: rows.rows;\n\tconst colCount = columns.length + (selectable ? 1 : 0);\n\tconst toggleSelected = (id: string) => {\n\t\tif (multiple) {\n\t\t\tsetSelectedIds(\n\t\t\t\tselectedIds.includes(id) ? selectedIds.filter((item) => item !== id) : [...selectedIds, id],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tsetSelectedIds(selectedIds.includes(id) ? [] : [id]);\n\t};\n\n\treturn (\n\t\t<div className=\"flex min-w-0 flex-col gap-3\">\n\t\t\t<div\n\t\t\t\trole=\"region\"\n\t\t\t\taria-label={`${ariaLabel} scroll area`}\n\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: Named overflow regions need keyboard scrolling.\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName=\"min-w-0 overflow-x-auto rounded-basalt-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-basalt-primary\"\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tclassName={cn(\"w-full\", className)}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Select</span>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\tclassName={column.headerClassName}\n\t\t\t\t\t\t\t\t\tstyle={{ width: column.width }}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tcolumn.sortable === false\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: sort?.id === column.id\n\t\t\t\t\t\t\t\t\t\t\t\t? sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"ascending\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"descending\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"none\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{column.sortable === false ? (\n\t\t\t\t\t\t\t\t\t\t(column.headerContent ?? column.header)\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\taria-label={column.header}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"appearance-none border-0 bg-transparent p-0 font-inherit text-inherit font-medium cursor-pointer rounded-sm focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-basalt-primary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\trequestSort(\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort?.id === column.id && sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { id: column.id, dir: \"desc\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { id: column.id, dir: \"asc\" },\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.headerContent ?? column.header}\n\t\t\t\t\t\t\t\t\t\t\t{sort?.id === column.id ? (sort.dir === \"asc\" ? \" ↑\" : \" ↓\") : \"\"}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\" className=\"flex flex-col gap-2 py-2\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Loading</span>\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : error != null && error !== false ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"alert\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex flex-wrap items-center justify-between gap-3 py-6\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div>{error}</div>\n\t\t\t\t\t\t\t\t\t\t{onRetry ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" onClick={onRetry}>\n\t\t\t\t\t\t\t\t\t\t\t\t{retryLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : paged.length === 0 ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\">{empty}</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaged.map(({ row, key, selectId }) => {\n\t\t\t\t\t\t\t\tconst isSelected = selectedIds.includes(selectId);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\tvariant={isSelected ? \"selected\" : \"default\"}\n\t\t\t\t\t\t\t\t\t\taria-selected={selectable ? isSelected : undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Select ${selectId}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={() => toggleSelected(selectId)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t{columns.map((column) => {\n\t\t\t\t\t\t\t\t\t\t\tconst cell = column.accessor(row);\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={column.id} className={column.cellClassName}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof cell === \"bigint\" ? String(cell) : cell}\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{pageSize && pageSize > 0 ? (\n\t\t\t\t<Pagination\n\t\t\t\t\tpage={resolvedPage}\n\t\t\t\t\tpageCount={pageCount}\n\t\t\t\t\tdisabled={loading}\n\t\t\t\t\tonPageChange={setResolvedPage}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|