@duro-app/ui 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Table-P-UHkEqJ.js.map +1 -1
- package/dist/components/Table/tanstack-augmentation.d.ts +1 -1
- package/dist/components/Table/tanstack-augmentation.d.ts.map +1 -1
- package/dist/components/VirtualTable/VirtualTable.d.ts.map +1 -1
- package/dist/index.js +1852 -1841
- package/dist/index.js.map +1 -1
- package/dist/table.js +12 -12
- package/dist/table.js.map +1 -1
- package/package.json +2 -2
- package/src/components/Table/Table.tsx +1 -1
- package/src/components/Table/tanstack-augmentation.ts +1 -2
- package/src/components/Tabs/Tabs.tsx +2 -2
- package/src/components/VirtualTable/VirtualTable.tsx +1 -2
package/dist/table.js
CHANGED
|
@@ -607,25 +607,25 @@ function Ht({
|
|
|
607
607
|
const ut = (d) => {
|
|
608
608
|
const v = d.meta;
|
|
609
609
|
return typeof v?.stackLabel == "string" ? v.stackLabel : typeof v?.label == "string" ? v.label : typeof d.header == "string" ? d.header : "";
|
|
610
|
-
}, nt = (d, v, W, I) => j ? /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
610
|
+
}, nt = (d, v, W, I) => j ? /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:240", role: "row", "aria-label": i?.(d.original), onClick: r ? () => r(d.original) : void 0, ...p(b.div, g.stackRow, !!r && g.rowClickable), children: d.getVisibleCells().map((z) => {
|
|
611
611
|
const L = ut(z.column.columnDef);
|
|
612
|
-
return /* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
613
|
-
L ? /* @__PURE__ */ u("span", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
614
|
-
/* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
612
|
+
return /* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:250", role: "cell", ...p(b.div, g.stackCell), children: [
|
|
613
|
+
L ? /* @__PURE__ */ u("span", { "data-element-src": "VirtualTable/VirtualTable.tsx:251", ...p(b.span, g.stackCellLabel), children: L }) : null,
|
|
614
|
+
/* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:252", ...p(b.div, g.stackCellValue), children: E(z.column.columnDef.cell, z.getContext()) })
|
|
615
615
|
] }, z.id);
|
|
616
|
-
}) }, d.id) : /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
617
|
-
return /* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
618
|
-
/* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
619
|
-
j ? null : /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
616
|
+
}) }, d.id) : /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:260", ref: I, "data-index": v, role: "row", "aria-label": i?.(d.original), onClick: r ? () => r(d.original) : void 0, ...p(b.div, g.row, !!r && g.rowClickable, W), children: d.getVisibleCells().map((z) => /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:270", role: "cell", ...p(b.div, g.cell, g.cellFlex(z.column.getSize())), children: E(z.column.columnDef.cell, z.getContext()) }, z.id)) }, d.id), gt = k?.(X) ?? (a.length ? `${X.from}–${X.to} / ${X.total}` : "");
|
|
617
|
+
return /* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:285", ref: R, ...p(b.div, g.wrap), children: [
|
|
618
|
+
/* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:286", ref: et, role: "table", ...p(b.div, j ? g.stackScroll : g.scroll, P && g.scrollMax(y)), children: [
|
|
619
|
+
j ? null : /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:295", role: "rowgroup", ...p(b.div, g.head), children: $.getHeaderGroups().map((d) => /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:297", role: "row", ...p(b.div, g.headRow), children: d.headers.map((v) => {
|
|
620
620
|
const W = v.column, I = W.getIsSorted();
|
|
621
|
-
return /* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
621
|
+
return /* @__PURE__ */ B("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:302", role: "columnheader", "aria-sort": I === "asc" ? "ascending" : I === "desc" ? "descending" : void 0, onClick: W.getCanSort() ? W.getToggleSortingHandler() : void 0, ...p(b.div, g.headCell, W.getCanSort() && g.headCellSortable, g.cellFlex(v.getSize())), children: [
|
|
622
622
|
v.isPlaceholder ? null : E(W.columnDef.header, v.getContext()),
|
|
623
|
-
I ? /* @__PURE__ */ u("span", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
623
|
+
I ? /* @__PURE__ */ u("span", { "data-element-src": "VirtualTable/VirtualTable.tsx:323", ...p(b.span, g.sortMark), children: I === "asc" ? "↑" : "↓" }) : null
|
|
624
624
|
] }, v.id);
|
|
625
625
|
}) }, d.id)) }),
|
|
626
|
-
a.length === 0 ? /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
626
|
+
a.length === 0 ? /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:336", ...p(b.div, g.empty), children: S }) : /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:338", role: "rowgroup", ...p(b.div, j ? g.stackBody : P ? g.bodyTotal(Y.getTotalSize()) : void 0), children: P ? N.map((d) => nt(a[d.index], d.index, g.rowAbsolute(d.start), Y.measureElement)) : a.map((d, v) => nt(d, v)) })
|
|
627
627
|
] }),
|
|
628
|
-
P && a.length > 0 ? /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:
|
|
628
|
+
P && a.length > 0 ? /* @__PURE__ */ u("div", { "data-element-src": "VirtualTable/VirtualTable.tsx:363", "aria-live": "polite", ...p(b.div, g.pos), children: gt }) : null
|
|
629
629
|
] });
|
|
630
630
|
}
|
|
631
631
|
const Ot = {
|
package/dist/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sources":["../src/components/Table/Pagination.tsx","../src/components/Table/SortIndicator.tsx","../src/components/Table/ColumnFilter.tsx","../src/components/Table/SortChip.tsx","../src/components/Table/FromTanstack.tsx","../src/components/Table/useDataTable.ts","../src/components/VirtualTable/styles.css.ts","../src/components/VirtualTable/VirtualTable.tsx","../src/table.ts"],"sourcesContent":["import type {Table} from '@tanstack/react-table'\nimport {html} from 'react-strict-dom'\nimport {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nconst styles = css.create({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.sm,\n },\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: 6,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n fontSize: typography.fontSizeSm,\n cursor: 'pointer',\n transitionProperty: 'background-color',\n transitionDuration: '150ms',\n },\n buttonDisabled: {\n opacity: 0.4,\n cursor: 'not-allowed',\n backgroundColor: 'transparent',\n },\n pageInfo: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n})\n\ninterface PaginationProps<TData> {\n table: Table<TData>\n}\n\nexport function Pagination<TData>({table}: PaginationProps<TData>) {\n const {pageIndex, pageSize} = table.getState().pagination\n const pageCount = table.getPageCount()\n const totalRows = table.getFilteredRowModel().rows.length\n\n if (totalRows <= pageSize) return null\n\n return (\n <html.div style={styles.root}>\n <html.button\n style={[styles.button, !table.getCanPreviousPage() && styles.buttonDisabled]}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Previous\n </html.button>\n <html.span style={styles.pageInfo}>\n {pageIndex + 1} / {pageCount}\n </html.span>\n <html.button\n style={[styles.button, !table.getCanNextPage() && styles.buttonDisabled]}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </html.button>\n </html.div>\n )\n}\n","import type {Column} from '@tanstack/react-table'\nimport {html} from 'react-strict-dom'\nimport {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nconst styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: 4,\n fontSize: 10,\n userSelect: 'none',\n // Hidden by default, shown on hover or when active\n opacity: 0,\n transitionProperty: 'opacity',\n transitionDuration: '120ms',\n },\n active: {\n opacity: 1,\n color: colors.accent,\n },\n inactive: {\n color: colors.textMuted,\n },\n})\n\ninterface SortIndicatorProps<TData> {\n column: Column<TData, unknown>\n}\n\n/**\n * Sort direction chevron for table column headers.\n *\n * - Shows \\u25B2 (asc), \\u25BC (desc), or \\u21C5 (unsorted)\n * - Hidden by default, visible on header hover or when actively sorted\n * - Clicking the header cell should call column.getToggleSortingHandler()\n *\n * The parent HeaderCell applies a :hover rule that sets child opacity to 1.\n */\nexport function SortIndicator<TData>({column}: SortIndicatorProps<TData>) {\n if (!column.getCanSort()) return null\n\n const sorted = column.getIsSorted()\n\n return (\n <html.span\n style={[styles.root, sorted ? styles.active : styles.inactive]}\n data-sort-indicator=\"\"\n >\n {sorted === 'asc' ? '\\u25B2' : sorted === 'desc' ? '\\u25BC' : '\\u21C5'}\n </html.span>\n )\n}\n","import type {Column} from '@tanstack/react-table'\nimport {html} from 'react-strict-dom'\nimport {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nconst styles = css.create({\n input: {\n width: '100%',\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n marginTop: spacing.xs,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.xs,\n backgroundColor: colors.bg,\n color: colors.text,\n fontSize: typography.fontSizeXs,\n outline: 'none',\n },\n})\n\ninterface ColumnFilterProps<TData> {\n column: Column<TData, unknown>\n placeholder?: string\n}\n\nexport function ColumnFilter<TData>({column, placeholder}: ColumnFilterProps<TData>) {\n if (!column.getCanFilter()) return null\n\n const filterValue = (column.getFilterValue() as string) ?? ''\n\n return (\n <html.input\n style={styles.input}\n type=\"text\"\n value={filterValue}\n onChange={(e: any) => column.setFilterValue(e.target.value || undefined)}\n placeholder={placeholder ?? `Filter...`}\n />\n )\n}\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {Menu} from '../Menu/Menu'\n\nexport interface SortValue {\n readonly id: string\n readonly desc: boolean\n}\n\nexport interface SortChipProps {\n readonly options: ReadonlyArray<{readonly id: string; readonly label: string}>\n readonly value: SortValue | null\n readonly onChange: (next: SortValue | null) => void\n /** Visible label preceding the sort field, e.g. \"Sort by\". */\n readonly label?: string\n}\n\n/**\n * Sort selector for stack-mode Tables. Hidden in default/compact via\n * `@container` query — see styles.sortChip. Consumers render this inside\n * a `Table.Container` so the same query target reaches it.\n *\n * The chip is a simple controlled wrapper around `Menu`. It does NOT\n * couple to @tanstack/react-table — the consumer wires `value` and\n * `onChange` from whatever sort state they manage.\n */\nexport function SortChip({options, value, onChange, label = 'Sort by'}: SortChipProps) {\n const current = value ? options.find((o) => o.id === value.id) : null\n const triggerLabel = current ? `${label}: ${current.label} ${value!.desc ? '↓' : '↑'}` : label\n\n return (\n <html.div style={styles.sortChip}>\n <Menu.Root>\n <Menu.Trigger>{triggerLabel}</Menu.Trigger>\n <Menu.Popup>\n {options.map((opt) => {\n const isCurrent = value?.id === opt.id\n const nextDesc = isCurrent ? !value!.desc : false\n return (\n <Menu.Item key={opt.id} onClick={() => onChange({id: opt.id, desc: nextDesc})}>\n {opt.label}\n {isCurrent ? ` ${value!.desc ? '↓' : '↑'}` : ''}\n </Menu.Item>\n )\n })}\n {value !== null && <Menu.Item onClick={() => onChange(null)}>Clear sort</Menu.Item>}\n </Menu.Popup>\n </Menu.Root>\n </html.div>\n )\n}\nSortChip.displayName = 'SortChip'\n","import {type ReactNode} from 'react'\nimport {type Row, type Table as TanstackTable, flexRender} from '@tanstack/react-table'\nimport {\n Body,\n Cell,\n Header,\n HeaderCell,\n Root,\n Row as TableRow,\n type TableSize,\n type TableVariant,\n} from './Table'\nimport {Pagination} from './Pagination'\nimport {SortChip, type SortValue} from './SortChip'\n\n// ColumnMeta is augmented in `./tanstack-augmentation` so the types\n// register independently of whether the consumer imports FromTanstack.\n\n// Base props shared by both clickable and non-clickable variants.\ninterface FromTanstackBaseProps<TData> {\n readonly table: TanstackTable<TData>\n readonly variant?: TableVariant\n readonly size?: TableSize\n readonly responsive?: boolean\n /** Min width (px) each flexible column keeps before the table scrolls\n * horizontally. Forwarded to Table.Root — see its `minColumnWidth`. */\n readonly minColumnWidth?: number\n /** Render a SortChip above the grid (stack-mode only). Options derive from\n * columns where `column.getCanSort()` returns true. Wires value/onChange\n * through the TanStack sorting state automatically. */\n readonly sortChip?: boolean\n /** Render Pagination below the grid. */\n readonly pagination?: boolean\n /** Key extractor; defaults to TanStack's row.id. */\n readonly rowKey?: (row: Row<TData>) => string\n}\n\n// Discriminated union: rowAriaLabel is required when onRowClick is set so\n// keyboard / screen-reader users always get an accessible name for the\n// interactive row.\nexport type FromTanstackProps<TData> = FromTanstackBaseProps<TData> &\n (\n | {\n readonly onRowClick: (row: Row<TData>) => void\n /** Accessible name for each clickable row. Required because the row's\n * visible cell content alone is rarely a useful accessible name. */\n readonly rowAriaLabel: (row: Row<TData>) => string\n }\n | {\n readonly onRowClick?: undefined\n readonly rowAriaLabel?: undefined\n }\n )\n\n/**\n * Renders a styled Table directly from a TanStack table instance.\n *\n * Labels for stack mode are derived in this order:\n * 1. `column.columnDef.meta?.stackLabel` (explicit override)\n * 2. `column.columnDef.header` when it's a string\n * 3. Empty (use only for the actions column or when meta.stackLabel is set)\n *\n * Mark the actions column with `meta: { isActions: true }` to apply the\n * stack-mode footer styling to its body cells.\n *\n * @example\n * <Table.FromTanstack table={tanstackTable} sortChip pagination onRowClick={(r) => nav(r)} />\n */\nexport function FromTanstack<TData>({\n table,\n variant = 'default',\n size = 'md',\n responsive = true,\n minColumnWidth,\n sortChip,\n pagination,\n rowKey,\n onRowClick,\n rowAriaLabel,\n}: FromTanstackProps<TData>) {\n const sortChipNode: ReactNode = sortChip ? buildSortChip(table) : undefined\n const paginationNode: ReactNode = pagination ? <Pagination table={table} /> : undefined\n\n return (\n <Root\n variant={variant}\n size={size}\n responsive={responsive}\n minColumnWidth={minColumnWidth}\n sortChip={sortChipNode}\n pagination={paginationNode}\n >\n <Header>\n {table.getHeaderGroups().map((group) => (\n <TableRow key={group.id}>\n {group.headers.map((header) => {\n const def = header.column.columnDef\n const meta = def.meta\n const labelFromHeader = typeof def.header === 'string' ? def.header : undefined\n const label = meta?.stackLabel ?? labelFromHeader ?? ''\n return (\n <HeaderCell\n key={header.id}\n label={label}\n aria-label={meta?.isActions ? label || 'Actions' : undefined}\n >\n {header.isPlaceholder ? null : flexRender(def.header, header.getContext())}\n </HeaderCell>\n )\n })}\n </TableRow>\n ))}\n </Header>\n <Body>\n {table.getRowModel().rows.map((row) => {\n const key = rowKey?.(row) ?? row.id\n // Row handles its own click/keyboard/focus affordance — no outer\n // wrapper, so the role=\"rowgroup\" → role=\"row\" ARIA hierarchy\n // stays intact, and clicks inside interactive cell content (e.g.\n // an action button) are correctly attributed to the inner widget.\n return (\n <TableRow\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n aria-label={rowAriaLabel?.(row)}\n >\n {row.getVisibleCells().map((cell) => (\n <Cell key={cell.id} isActions={cell.column.columnDef.meta?.isActions === true}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Cell>\n ))}\n </TableRow>\n )\n })}\n </Body>\n </Root>\n )\n}\nFromTanstack.displayName = 'FromTanstack'\n\n// --- helpers ---\n\nfunction buildSortChip<TData>(table: TanstackTable<TData>): ReactNode {\n const options = table\n .getAllColumns()\n .filter((c) => c.getCanSort())\n .map((c) => {\n const fromHeader = typeof c.columnDef.header === 'string' ? c.columnDef.header : c.id\n return {id: c.id, label: c.columnDef.meta?.stackLabel ?? fromHeader}\n })\n\n if (options.length === 0) return null\n\n const current = table.getState().sorting[0]\n const value: SortValue | null = current ? {id: current.id, desc: current.desc} : null\n\n return (\n <SortChip\n options={options}\n value={value}\n onChange={(next) => table.setSorting(next ? [{id: next.id, desc: next.desc}] : [])}\n />\n )\n}\n","import {useCallback, useState} from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n type ColumnDef,\n type SortingState,\n type ColumnFiltersState,\n type PaginationState,\n type RowSelectionState,\n type Table,\n} from '@tanstack/react-table'\n\nexport interface UseDataTableOptions<TData> {\n /** Initial pagination state */\n pagination?: {pageSize?: number; pageIndex?: number}\n /** Enable sorting on columns that don't explicitly disable it */\n enableSorting?: boolean\n /** Enable column filtering */\n enableFiltering?: boolean\n /** Enable row selection (checkbox) */\n enableRowSelection?: boolean | ((row: any) => boolean)\n /** Callback when row selection changes */\n onRowSelectionChange?: (selection: RowSelectionState) => void\n}\n\n/**\n * Thin wrapper around TanStack's useReactTable.\n * Pre-configures row models for pagination, sorting, and filtering.\n * Returns the full TanStack table instance.\n *\n * @example\n * ```tsx\n * const table = useDataTable(users, columns, {\n * pagination: { pageSize: 20 },\n * enableSorting: true,\n * enableFiltering: true,\n * })\n * ```\n */\nexport function useDataTable<TData>(\n data: TData[],\n columns: ColumnDef<TData, any>[],\n options: UseDataTableOptions<TData> = {},\n): Table<TData> {\n const {\n enableSorting = false,\n enableFiltering = false,\n enableRowSelection = false,\n onRowSelectionChange: onSelectionChangeProp,\n } = options\n\n const enablePagination = options.pagination != null\n\n const [sorting, setSorting] = useState<SortingState>([])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [pagination, setPagination] = useState<PaginationState>({\n pageIndex: options.pagination?.pageIndex ?? 0,\n pageSize: options.pagination?.pageSize ?? 10,\n })\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n\n const handleRowSelectionChange = useCallback(\n (updater: any) => {\n setRowSelection((prev: RowSelectionState) => {\n const next = typeof updater === 'function' ? updater(prev) : updater\n onSelectionChangeProp?.(next)\n return next\n })\n },\n [onSelectionChangeProp],\n )\n\n // Follow TanStack's recommended pattern: always pass all row models\n // unconditionally and let the library handle unused ones. Conditional\n // spreads create unstable option shapes that can trigger infinite loops.\n return useReactTable({\n data,\n columns,\n state: {sorting, columnFilters, pagination, rowSelection},\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onPaginationChange: setPagination,\n enableSorting,\n enableRowSelection:\n typeof enableRowSelection === 'function' ? enableRowSelection : !!enableRowSelection,\n onRowSelectionChange: handleRowSelectionChange,\n // When pagination is disabled, set a very large page size to show all rows\n ...(!enablePagination && {\n autoResetPageIndex: false,\n }),\n })\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n wrap: {\n position: 'relative',\n width: '100%',\n },\n scroll: {\n position: 'relative',\n width: '100%',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n backgroundColor: colors.bgCard,\n },\n // Dynamic: only virtualized lists get a capped, scrollable viewport.\n scrollMax: (maxHeight: number | string) => ({\n maxHeight,\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n }),\n head: {\n position: 'sticky',\n top: 0,\n zIndex: 1,\n backgroundColor: colors.bgCard,\n },\n headRow: {\n display: 'flex',\n flexDirection: 'row',\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n headCell: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n color: colors.textMuted,\n },\n headCellSortable: {\n cursor: 'pointer',\n userSelect: 'none',\n color: {default: colors.textMuted, ':hover': colors.text},\n },\n sortMark: {\n fontSize: typography.fontSizeXs,\n color: colors.accent,\n },\n bodyTotal: (height: number) => ({\n position: 'relative',\n width: '100%',\n height,\n }),\n row: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n rowClickable: {\n cursor: 'pointer',\n backgroundColor: {default: 'transparent', ':hover': colors.bgCardHover},\n },\n // Dynamic: absolute placement of a windowed row.\n rowAbsolute: (y: number) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${y}px)`,\n }),\n cell: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n // Dynamic: proportional column width from the TanStack column size (fr-like).\n cellFlex: (size: number) => ({\n flexGrow: size,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n }),\n // --- Stack (card) mode: narrow containers ---\n // The scroll frame drops its border/background so each row card stands on\n // its own; windowing is off in this mode so no capped viewport.\n stackScroll: {\n position: 'relative',\n width: '100%',\n backgroundColor: 'transparent',\n },\n stackBody: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n stackRow: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n width: '100%',\n padding: spacing.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n backgroundColor: colors.bgCard,\n },\n stackCell: {\n display: 'grid',\n gridTemplateColumns: '1fr 2fr',\n gap: spacing.sm,\n alignItems: 'center',\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n },\n stackCellLabel: {\n color: colors.textMuted,\n fontWeight: typography.fontWeightMedium,\n fontSize: typography.fontSizeXs,\n },\n stackCellValue: {\n minWidth: 0,\n overflowWrap: 'break-word',\n },\n empty: {\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center' as const,\n color: colors.textMuted,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n },\n // Floating position indicator, pinned bottom-right of the viewport.\n pos: {\n position: 'absolute',\n right: spacing.sm,\n bottom: spacing.sm,\n paddingTop: 3,\n paddingBottom: 3,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n borderRadius: radii.full,\n backgroundColor: colors.bgCardHover,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n color: colors.textMuted,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n pointerEvents: 'none',\n },\n})\n","import {useEffect, useLayoutEffect, useRef, useState, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type OnChangeFn,\n type Row,\n} from '@tanstack/react-table'\nimport {useVirtualizer} from '@tanstack/react-virtual'\nimport {breakpointsPx, type Breakpoint} from '@duro-app/tokens/tokens/breakpoints.css'\nimport {styles} from './styles.css'\n\n// Measure + commit before paint on the client; no-op-safe on the server.\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\nexport interface VirtualTableRange {\n /** 1-based index of the first visible row (0 when empty). */\n from: number\n /** 1-based index of the last visible row (0 when empty). */\n to: number\n total: number\n /** 1-based page the first visible row falls in. */\n page: number\n pages: number\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface VirtualTableProps<TData> {\n data: TData[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<TData, any>[]\n /** Controlled sorting (pairs with a SortChip in the caller). */\n sorting?: SortingState\n onSortingChange?: OnChangeFn<SortingState>\n getRowId?: (row: TData, index: number) => string\n onRowClick?: (row: TData) => void\n rowLabel?: (row: TData) => string\n /**\n * 1-based page to restore the scroll position to on mount (read from the URL\n * by the caller). Only meaningful when the list virtualizes.\n */\n initialPage?: number\n /**\n * Fired (debounced) when the top-visible page changes — wire it to the URL.\n * Only fires in the virtualized branch; small lists render in one scroll and\n * have no page concept.\n */\n onVisiblePageChange?: (range: VirtualTableRange) => void\n /** Build the floating position-indicator label (i18n stays with the caller). */\n rangeLabel?: (range: VirtualTableRange) => string\n /** Rows per \"page\" for the URL/indicator math. Default 50. */\n pageSize?: number\n /** Estimated row height for the virtualizer. Default 44. */\n estimateRowHeight?: number\n /** Max height of the scroll viewport once virtualized. Default '70vh'. */\n maxHeight?: number | string\n /** Render every row (no windowing) at or below this count. Default 150. */\n virtualizeThreshold?: number\n /**\n * Below this container width (px) the table cards up: the header hides and\n * each row becomes a label/value card (like Table's stack mode). Defaults to\n * the shared `sm` breakpoint (640px) so every table cards up at the same\n * line. Cards disable windowing (variable heights), so keep phone lists\n * reasonably short. Set `responsive={false}` to disable entirely.\n */\n stackBelow?: Breakpoint | number\n /** Opt out of the card-up-on-narrow behavior. Default true. */\n responsive?: boolean\n emptyLabel?: ReactNode\n}\n\n/**\n * A sortable data table that windows its rows above a threshold (default 150)\n * via @tanstack/react-virtual, keeps a floating position indicator, and reports\n * the visible page so the caller can mirror it in the URL. Below the threshold\n * it renders every row in one scroll (find-in-page + a11y intact) — no\n * pagination, no windowing. Web-only (uses DOM scroll measurement).\n *\n * URL-decoupled by design: pass `initialPage` (restore) and `onVisiblePageChange`\n * (persist); the component never touches the router itself.\n */\nexport function VirtualTable<TData>({\n data,\n columns,\n sorting,\n onSortingChange,\n getRowId,\n onRowClick,\n rowLabel,\n initialPage,\n onVisiblePageChange,\n rangeLabel,\n pageSize = 50,\n estimateRowHeight = 44,\n maxHeight = '70vh',\n virtualizeThreshold = 150,\n stackBelow = 'sm',\n responsive = true,\n emptyLabel,\n}: VirtualTableProps<TData>) {\n // Support both controlled sorting (SortChip in the caller) and standalone use.\n const [internalSorting, setInternalSorting] = useState<SortingState>([])\n const sortingState = sorting ?? internalSorting\n const handleSortingChange = onSortingChange ?? setInternalSorting\n\n const table = useReactTable({\n data,\n columns,\n state: {sorting: sortingState},\n onSortingChange: handleSortingChange,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n })\n\n const rows = table.getRowModel().rows\n\n // Card-up on narrow containers. Flex cells truncate rather than overflow, so\n // there's no content-overflow signal to measure (as in Table) — we use a\n // deliberate phone-width breakpoint. Cards render every row (no windowing),\n // so `virtualize` is forced off while stacked.\n const wrapRef = useRef<HTMLDivElement>(null)\n const [stacked, setStacked] = useState(false)\n const stackBelowPx = typeof stackBelow === 'number' ? stackBelow : breakpointsPx[stackBelow]\n useIsoLayoutEffect(() => {\n if (!responsive) {\n setStacked(false)\n return\n }\n const el = wrapRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const apply = (width: number) => {\n if (width > 0) setStacked(width < stackBelowPx)\n }\n apply(el.getBoundingClientRect().width)\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n const box = entry.contentBoxSize?.[0]\n apply(box ? box.inlineSize : entry.contentRect.width)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [responsive, stackBelowPx])\n\n const virtualize = rows.length > virtualizeThreshold && !stacked\n\n const scrollRef = useRef<HTMLDivElement>(null)\n const rv = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => estimateRowHeight,\n overscan: 12,\n })\n\n // Restore the scroll position from `initialPage` on mount, and suppress the\n // page-change callback briefly so that restore scroll doesn't immediately\n // report (and overwrite) the URL.\n const suppressWrite = useRef(true)\n useEffect(() => {\n if (!virtualize) {\n suppressWrite.current = false\n return\n }\n if (initialPage && initialPage > 1) {\n rv.scrollToIndex((initialPage - 1) * pageSize, {align: 'start'})\n }\n const id = setTimeout(() => {\n suppressWrite.current = false\n }, 300)\n return () => clearTimeout(id)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [virtualize])\n\n const vItems = rv.getVirtualItems()\n const firstIndex = vItems[0]?.index ?? 0\n const lastIndex = vItems.length ? vItems[vItems.length - 1].index : 0\n const pages = Math.max(1, Math.ceil(rows.length / pageSize))\n // page = which pageSize-sized block the top visible row is in, so it only\n // changes when you cross a boundary (no per-scroll-tick churn).\n const curPage = Math.floor(Math.max(0, firstIndex) / pageSize) + 1\n\n const range: VirtualTableRange = {\n from: rows.length ? firstIndex + 1 : 0,\n to: rows.length ? lastIndex + 1 : 0,\n total: rows.length,\n page: curPage,\n pages,\n }\n\n // Report the visible page so the caller can sync the URL. Fire once per\n // distinct page rather than debouncing a timer — `curPage` only changes at a\n // pageSize boundary (coarse), and react-virtual's frequent re-renders during\n // scroll/measurement would keep resetting a debounce timer so it never fires.\n // The `lastReported` guard prevents redundant calls; callers use replace, so\n // there's no history churn.\n const lastReported = useRef<number | null>(null)\n useEffect(() => {\n if (!virtualize || !onVisiblePageChange) return\n if (suppressWrite.current) {\n // Still in the mount-restore window — record the page so we don't emit a\n // spurious change once it clears, but don't call out.\n lastReported.current = curPage\n return\n }\n if (lastReported.current === curPage) return\n lastReported.current = curPage\n onVisiblePageChange({\n from: rows.length ? firstIndex + 1 : 0,\n to: rows.length ? lastIndex + 1 : 0,\n total: rows.length,\n page: curPage,\n pages,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [curPage, virtualize])\n\n // Stack-mode label for a column: explicit meta override, else the string\n // header, else nothing (value renders label-less, e.g. an actions column).\n const columnStackLabel = (columnDef: {\n header?: unknown\n meta?: {stackLabel?: string; label?: string}\n }): string => {\n const meta = columnDef.meta\n if (typeof meta?.stackLabel === 'string') return meta.stackLabel\n if (typeof meta?.label === 'string') return meta.label\n return typeof columnDef.header === 'string' ? columnDef.header : ''\n }\n\n const renderRow = (\n row: Row<TData>,\n index: number,\n positioned?: ReturnType<typeof styles.rowAbsolute>,\n measureRef?: (node: Element | null) => void,\n ) =>\n stacked ? (\n <html.div\n key={row.id}\n role=\"row\"\n aria-label={rowLabel?.(row.original)}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n style={[styles.stackRow, Boolean(onRowClick) && styles.rowClickable]}\n >\n {row.getVisibleCells().map((cell) => {\n const lbl = columnStackLabel(cell.column.columnDef)\n return (\n <html.div key={cell.id} role=\"cell\" style={styles.stackCell}>\n {lbl ? <html.span style={styles.stackCellLabel}>{lbl}</html.span> : null}\n <html.div style={styles.stackCellValue}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </html.div>\n </html.div>\n )\n })}\n </html.div>\n ) : (\n <html.div\n key={row.id}\n ref={measureRef}\n data-index={index}\n role=\"row\"\n aria-label={rowLabel?.(row.original)}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n style={[styles.row, Boolean(onRowClick) && styles.rowClickable, positioned]}\n >\n {row.getVisibleCells().map((cell) => (\n <html.div\n key={cell.id}\n role=\"cell\"\n style={[styles.cell, styles.cellFlex(cell.column.getSize())]}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </html.div>\n ))}\n </html.div>\n )\n\n const label =\n rangeLabel?.(range) ?? (rows.length ? `${range.from}–${range.to} / ${range.total}` : '')\n\n return (\n <html.div ref={wrapRef} style={styles.wrap}>\n <html.div\n ref={scrollRef}\n role=\"table\"\n style={[\n stacked ? styles.stackScroll : styles.scroll,\n virtualize && styles.scrollMax(maxHeight),\n ]}\n >\n {stacked ? null : (\n <html.div role=\"rowgroup\" style={styles.head}>\n {table.getHeaderGroups().map((headerGroup) => (\n <html.div key={headerGroup.id} role=\"row\" style={styles.headRow}>\n {headerGroup.headers.map((header) => {\n const col = header.column\n const sorted = col.getIsSorted()\n return (\n <html.div\n key={header.id}\n role=\"columnheader\"\n aria-sort={\n sorted === 'asc'\n ? 'ascending'\n : sorted === 'desc'\n ? 'descending'\n : undefined\n }\n onClick={col.getCanSort() ? col.getToggleSortingHandler() : undefined}\n style={[\n styles.headCell,\n col.getCanSort() && styles.headCellSortable,\n styles.cellFlex(header.getSize()),\n ]}\n >\n {header.isPlaceholder\n ? null\n : flexRender(col.columnDef.header, header.getContext())}\n {sorted ? (\n <html.span style={styles.sortMark}>\n {sorted === 'asc' ? '↑' : '↓'}\n </html.span>\n ) : null}\n </html.div>\n )\n })}\n </html.div>\n ))}\n </html.div>\n )}\n\n {rows.length === 0 ? (\n <html.div style={styles.empty}>{emptyLabel}</html.div>\n ) : (\n <html.div\n role=\"rowgroup\"\n style={\n stacked\n ? styles.stackBody\n : virtualize\n ? styles.bodyTotal(rv.getTotalSize())\n : undefined\n }\n >\n {virtualize\n ? vItems.map((vi) =>\n renderRow(\n rows[vi.index],\n vi.index,\n styles.rowAbsolute(vi.start),\n rv.measureElement,\n ),\n )\n : rows.map((row, i) => renderRow(row, i))}\n </html.div>\n )}\n </html.div>\n\n {virtualize && rows.length > 0 ? (\n <html.div aria-live=\"polite\" style={styles.pos}>\n {label}\n </html.div>\n ) : null}\n </html.div>\n )\n}\n","/**\n * `@duro-app/ui/table` — the TanStack-aware half of the table.\n *\n * Everything here reaches `@tanstack/react-table`, which is a peer dependency\n * a consumer only has if they asked for it. Keeping it out of the package root\n * is what makes that peer genuinely optional: a bundler must RESOLVE every\n * static import before tree-shaking can drop the code behind it, so a single\n * `import ... from '@tanstack/react-table'` anywhere in the root's graph fails\n * the build of an app that never renders a data table.\n *\n * `Table` exported here is the root's object with the TanStack pieces\n * attached, so migrating is one import line and no call sites change:\n *\n * -import {Table, useDataTable} from '@duro-app/ui'\n * +import {Table, useDataTable} from '@duro-app/ui/table'\n *\n * Plain `<Table.Root>` users need nothing — that stays on the package root.\n */\n\n// Side-effect: registers our augmentation of TanStack's ColumnMeta\n// (stackLabel / isActions). It belongs here rather than at the root because\n// the augmentation only means anything once TanStack is in the program, and\n// declaring it at the root made the root's types depend on the peer.\nimport './components/Table/tanstack-augmentation'\n\nimport {TableCore} from './components/Table/Table'\nimport {Pagination} from './components/Table/Pagination'\nimport {SortIndicator} from './components/Table/SortIndicator'\nimport {ColumnFilter} from './components/Table/ColumnFilter'\nimport {SortChip} from './components/Table/SortChip'\nimport {FromTanstack} from './components/Table/FromTanstack'\n\n/** The full table: the presentational parts plus the TanStack integration. */\nexport const Table = {\n ...TableCore,\n Pagination,\n SortIndicator,\n ColumnFilter,\n SortChip,\n /** Renders a styled Table directly from a TanStack table instance. */\n FromTanstack,\n}\n\nexport {useDataTable} from './components/Table/useDataTable'\n\n// Web-only (DOM scroll measurement + @tanstack/react-virtual), and TanStack\n// Table-aware, so it lives here rather than at the root.\nexport {VirtualTable, type VirtualTableRange} from './components/VirtualTable/VirtualTable'\n\nexport type {TableVariant, TableSize} from './components/Table/Table'\n"],"names":["styles","root","$$css","button","buttonDisabled","pageInfo","Pagination","t0","$","_c","table","t1","getState","pageIndex","pageSize","pagination","t2","getPageCount","pageCount","getFilteredRowModel","rows","length","t3","getCanPreviousPage","t4","t5","t6","previousPage","t7","t8","_rsdMerge","_rsdDefaultStyles","t9","t10","span","t11","getCanNextPage","t12","t13","t14","nextPage","t15","t16","t17","jsxs","div","active","inactive","SortIndicator","column","getCanSort","sorted","getIsSorted","input","ColumnFilter","placeholder","getCanFilter","getFilterValue","filterValue","e","setFilterValue","target","value","undefined","jsx","SortChip","options","onChange","label","find","o","id","current","triggerLabel","desc","Menu","opt","isCurrent","nextDesc","map","sortChip","displayName","FromTanstack","variant","size","responsive","minColumnWidth","rowKey","onRowClick","rowAriaLabel","buildSortChip","sortChipNode","paginationNode","getHeaderGroups","_temp2","Header","row","key","TableRow","getVisibleCells","_temp3","getRowModel","Body","Root","cell","Cell","columnDef","meta","isActions","flexRender","getContext","group","headers","_temp","header","def","labelFromHeader","stackLabel","HeaderCell","isPlaceholder","getAllColumns","filter","c","fromHeader","sorting","next","setSorting","useDataTable","data","columns","enableSorting","enableFiltering","enableRowSelection","onRowSelectionChange","onSelectionChangeProp","enablePagination","useState","columnFilters","setColumnFilters","setPagination","rowSelection","setRowSelection","handleRowSelectionChange","useCallback","updater","prev","useReactTable","state","getCoreRowModel","getSortedRowModel","getPaginationRowModel","onSortingChange","onColumnFiltersChange","onPaginationChange","autoResetPageIndex","_temp4","wrap","scroll","scrollMax","maxHeight","val","head","headRow","headCell","headCellSortable","sortMark","bodyTotal","height","rowClickable","rowAbsolute","y","cellFlex","stackScroll","stackBody","stackRow","stackCell","stackCellLabel","stackCellValue","empty","pos","useIsoLayoutEffect","window","useLayoutEffect","useEffect","VirtualTable","getRowId","rowLabel","initialPage","onVisiblePageChange","rangeLabel","estimateRowHeight","virtualizeThreshold","stackBelow","emptyLabel","internalSorting","setInternalSorting","sortingState","wrapRef","useRef","stacked","setStacked","stackBelowPx","breakpointsPx","el","ResizeObserver","apply","width","getBoundingClientRect","ro","entries","entry","box","contentBoxSize","inlineSize","contentRect","observe","disconnect","virtualize","scrollRef","rv","useVirtualizer","count","getScrollElement","estimateSize","overscan","suppressWrite","scrollToIndex","align","setTimeout","clearTimeout","vItems","getVirtualItems","firstIndex","index","lastIndex","pages","Math","max","ceil","curPage","floor","range","from","to","total","page","lastReported","columnStackLabel","renderRow","positioned","measureRef","original","Boolean","lbl","getSize","headerGroup","col","getToggleSortingHandler","getTotalSize","vi","start","measureElement","i","Table","TableCore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../src/components/Table/Pagination.tsx","../src/components/Table/SortIndicator.tsx","../src/components/Table/ColumnFilter.tsx","../src/components/Table/SortChip.tsx","../src/components/Table/FromTanstack.tsx","../src/components/Table/useDataTable.ts","../src/components/VirtualTable/styles.css.ts","../src/components/VirtualTable/VirtualTable.tsx","../src/table.ts"],"sourcesContent":["import type {Table} from '@tanstack/react-table'\nimport {html} from 'react-strict-dom'\nimport {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nconst styles = css.create({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.sm,\n },\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: 6,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n fontSize: typography.fontSizeSm,\n cursor: 'pointer',\n transitionProperty: 'background-color',\n transitionDuration: '150ms',\n },\n buttonDisabled: {\n opacity: 0.4,\n cursor: 'not-allowed',\n backgroundColor: 'transparent',\n },\n pageInfo: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n})\n\ninterface PaginationProps<TData> {\n table: Table<TData>\n}\n\nexport function Pagination<TData>({table}: PaginationProps<TData>) {\n const {pageIndex, pageSize} = table.getState().pagination\n const pageCount = table.getPageCount()\n const totalRows = table.getFilteredRowModel().rows.length\n\n if (totalRows <= pageSize) return null\n\n return (\n <html.div style={styles.root}>\n <html.button\n style={[styles.button, !table.getCanPreviousPage() && styles.buttonDisabled]}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Previous\n </html.button>\n <html.span style={styles.pageInfo}>\n {pageIndex + 1} / {pageCount}\n </html.span>\n <html.button\n style={[styles.button, !table.getCanNextPage() && styles.buttonDisabled]}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </html.button>\n </html.div>\n )\n}\n","import type {Column} from '@tanstack/react-table'\nimport {html} from 'react-strict-dom'\nimport {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nconst styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: 4,\n fontSize: 10,\n userSelect: 'none',\n // Hidden by default, shown on hover or when active\n opacity: 0,\n transitionProperty: 'opacity',\n transitionDuration: '120ms',\n },\n active: {\n opacity: 1,\n color: colors.accent,\n },\n inactive: {\n color: colors.textMuted,\n },\n})\n\ninterface SortIndicatorProps<TData> {\n column: Column<TData, unknown>\n}\n\n/**\n * Sort direction chevron for table column headers.\n *\n * - Shows \\u25B2 (asc), \\u25BC (desc), or \\u21C5 (unsorted)\n * - Hidden by default, visible on header hover or when actively sorted\n * - Clicking the header cell should call column.getToggleSortingHandler()\n *\n * The parent HeaderCell applies a :hover rule that sets child opacity to 1.\n */\nexport function SortIndicator<TData>({column}: SortIndicatorProps<TData>) {\n if (!column.getCanSort()) return null\n\n const sorted = column.getIsSorted()\n\n return (\n <html.span\n style={[styles.root, sorted ? styles.active : styles.inactive]}\n data-sort-indicator=\"\"\n >\n {sorted === 'asc' ? '\\u25B2' : sorted === 'desc' ? '\\u25BC' : '\\u21C5'}\n </html.span>\n )\n}\n","import type {Column} from '@tanstack/react-table'\nimport {html} from 'react-strict-dom'\nimport {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nconst styles = css.create({\n input: {\n width: '100%',\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n marginTop: spacing.xs,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.xs,\n backgroundColor: colors.bg,\n color: colors.text,\n fontSize: typography.fontSizeXs,\n outline: 'none',\n },\n})\n\ninterface ColumnFilterProps<TData> {\n column: Column<TData, unknown>\n placeholder?: string\n}\n\nexport function ColumnFilter<TData>({column, placeholder}: ColumnFilterProps<TData>) {\n if (!column.getCanFilter()) return null\n\n const filterValue = (column.getFilterValue() as string) ?? ''\n\n return (\n <html.input\n style={styles.input}\n type=\"text\"\n value={filterValue}\n onChange={(e: any) => column.setFilterValue(e.target.value || undefined)}\n placeholder={placeholder ?? `Filter...`}\n />\n )\n}\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {Menu} from '../Menu/Menu'\n\nexport interface SortValue {\n readonly id: string\n readonly desc: boolean\n}\n\nexport interface SortChipProps {\n readonly options: ReadonlyArray<{readonly id: string; readonly label: string}>\n readonly value: SortValue | null\n readonly onChange: (next: SortValue | null) => void\n /** Visible label preceding the sort field, e.g. \"Sort by\". */\n readonly label?: string\n}\n\n/**\n * Sort selector for stack-mode Tables. Hidden in default/compact via\n * `@container` query — see styles.sortChip. Consumers render this inside\n * a `Table.Container` so the same query target reaches it.\n *\n * The chip is a simple controlled wrapper around `Menu`. It does NOT\n * couple to @tanstack/react-table — the consumer wires `value` and\n * `onChange` from whatever sort state they manage.\n */\nexport function SortChip({options, value, onChange, label = 'Sort by'}: SortChipProps) {\n const current = value ? options.find((o) => o.id === value.id) : null\n const triggerLabel = current ? `${label}: ${current.label} ${value!.desc ? '↓' : '↑'}` : label\n\n return (\n <html.div style={styles.sortChip}>\n <Menu.Root>\n <Menu.Trigger>{triggerLabel}</Menu.Trigger>\n <Menu.Popup>\n {options.map((opt) => {\n const isCurrent = value?.id === opt.id\n const nextDesc = isCurrent ? !value!.desc : false\n return (\n <Menu.Item key={opt.id} onClick={() => onChange({id: opt.id, desc: nextDesc})}>\n {opt.label}\n {isCurrent ? ` ${value!.desc ? '↓' : '↑'}` : ''}\n </Menu.Item>\n )\n })}\n {value !== null && <Menu.Item onClick={() => onChange(null)}>Clear sort</Menu.Item>}\n </Menu.Popup>\n </Menu.Root>\n </html.div>\n )\n}\nSortChip.displayName = 'SortChip'\n","import {type ReactNode} from 'react'\nimport {type Row, type Table as TanstackTable, flexRender} from '@tanstack/react-table'\nimport {\n Body,\n Cell,\n Header,\n HeaderCell,\n Root,\n Row as TableRow,\n type TableSize,\n type TableVariant,\n} from './Table'\nimport {Pagination} from './Pagination'\nimport {SortChip, type SortValue} from './SortChip'\n\n// ColumnMeta is augmented in `./tanstack-augmentation` so the types\n// register independently of whether the consumer imports FromTanstack.\n\n// Base props shared by both clickable and non-clickable variants.\ninterface FromTanstackBaseProps<TData> {\n readonly table: TanstackTable<TData>\n readonly variant?: TableVariant\n readonly size?: TableSize\n readonly responsive?: boolean\n /** Min width (px) each flexible column keeps before the table scrolls\n * horizontally. Forwarded to Table.Root — see its `minColumnWidth`. */\n readonly minColumnWidth?: number\n /** Render a SortChip above the grid (stack-mode only). Options derive from\n * columns where `column.getCanSort()` returns true. Wires value/onChange\n * through the TanStack sorting state automatically. */\n readonly sortChip?: boolean\n /** Render Pagination below the grid. */\n readonly pagination?: boolean\n /** Key extractor; defaults to TanStack's row.id. */\n readonly rowKey?: (row: Row<TData>) => string\n}\n\n// Discriminated union: rowAriaLabel is required when onRowClick is set so\n// keyboard / screen-reader users always get an accessible name for the\n// interactive row.\nexport type FromTanstackProps<TData> = FromTanstackBaseProps<TData> &\n (\n | {\n readonly onRowClick: (row: Row<TData>) => void\n /** Accessible name for each clickable row. Required because the row's\n * visible cell content alone is rarely a useful accessible name. */\n readonly rowAriaLabel: (row: Row<TData>) => string\n }\n | {\n readonly onRowClick?: undefined\n readonly rowAriaLabel?: undefined\n }\n )\n\n/**\n * Renders a styled Table directly from a TanStack table instance.\n *\n * Labels for stack mode are derived in this order:\n * 1. `column.columnDef.meta?.stackLabel` (explicit override)\n * 2. `column.columnDef.header` when it's a string\n * 3. Empty (use only for the actions column or when meta.stackLabel is set)\n *\n * Mark the actions column with `meta: { isActions: true }` to apply the\n * stack-mode footer styling to its body cells.\n *\n * @example\n * <Table.FromTanstack table={tanstackTable} sortChip pagination onRowClick={(r) => nav(r)} />\n */\nexport function FromTanstack<TData>({\n table,\n variant = 'default',\n size = 'md',\n responsive = true,\n minColumnWidth,\n sortChip,\n pagination,\n rowKey,\n onRowClick,\n rowAriaLabel,\n}: FromTanstackProps<TData>) {\n const sortChipNode: ReactNode = sortChip ? buildSortChip(table) : undefined\n const paginationNode: ReactNode = pagination ? <Pagination table={table} /> : undefined\n\n return (\n <Root\n variant={variant}\n size={size}\n responsive={responsive}\n minColumnWidth={minColumnWidth}\n sortChip={sortChipNode}\n pagination={paginationNode}\n >\n <Header>\n {table.getHeaderGroups().map((group) => (\n <TableRow key={group.id}>\n {group.headers.map((header) => {\n const def = header.column.columnDef\n const meta = def.meta\n const labelFromHeader = typeof def.header === 'string' ? def.header : undefined\n const label = meta?.stackLabel ?? labelFromHeader ?? ''\n return (\n <HeaderCell\n key={header.id}\n label={label}\n aria-label={meta?.isActions ? label || 'Actions' : undefined}\n >\n {header.isPlaceholder ? null : flexRender(def.header, header.getContext())}\n </HeaderCell>\n )\n })}\n </TableRow>\n ))}\n </Header>\n <Body>\n {table.getRowModel().rows.map((row) => {\n const key = rowKey?.(row) ?? row.id\n // Row handles its own click/keyboard/focus affordance — no outer\n // wrapper, so the role=\"rowgroup\" → role=\"row\" ARIA hierarchy\n // stays intact, and clicks inside interactive cell content (e.g.\n // an action button) are correctly attributed to the inner widget.\n return (\n <TableRow\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n aria-label={rowAriaLabel?.(row)}\n >\n {row.getVisibleCells().map((cell) => (\n <Cell key={cell.id} isActions={cell.column.columnDef.meta?.isActions === true}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Cell>\n ))}\n </TableRow>\n )\n })}\n </Body>\n </Root>\n )\n}\nFromTanstack.displayName = 'FromTanstack'\n\n// --- helpers ---\n\nfunction buildSortChip<TData>(table: TanstackTable<TData>): ReactNode {\n const options = table\n .getAllColumns()\n .filter((c) => c.getCanSort())\n .map((c) => {\n const fromHeader = typeof c.columnDef.header === 'string' ? c.columnDef.header : c.id\n return {id: c.id, label: c.columnDef.meta?.stackLabel ?? fromHeader}\n })\n\n if (options.length === 0) return null\n\n const current = table.getState().sorting[0]\n const value: SortValue | null = current ? {id: current.id, desc: current.desc} : null\n\n return (\n <SortChip\n options={options}\n value={value}\n onChange={(next) => table.setSorting(next ? [{id: next.id, desc: next.desc}] : [])}\n />\n )\n}\n","import {useCallback, useState} from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n type ColumnDef,\n type SortingState,\n type ColumnFiltersState,\n type PaginationState,\n type RowSelectionState,\n type Table,\n} from '@tanstack/react-table'\n\nexport interface UseDataTableOptions<TData> {\n /** Initial pagination state */\n pagination?: {pageSize?: number; pageIndex?: number}\n /** Enable sorting on columns that don't explicitly disable it */\n enableSorting?: boolean\n /** Enable column filtering */\n enableFiltering?: boolean\n /** Enable row selection (checkbox) */\n enableRowSelection?: boolean | ((row: any) => boolean)\n /** Callback when row selection changes */\n onRowSelectionChange?: (selection: RowSelectionState) => void\n}\n\n/**\n * Thin wrapper around TanStack's useReactTable.\n * Pre-configures row models for pagination, sorting, and filtering.\n * Returns the full TanStack table instance.\n *\n * @example\n * ```tsx\n * const table = useDataTable(users, columns, {\n * pagination: { pageSize: 20 },\n * enableSorting: true,\n * enableFiltering: true,\n * })\n * ```\n */\nexport function useDataTable<TData>(\n data: TData[],\n columns: ColumnDef<TData, any>[],\n options: UseDataTableOptions<TData> = {},\n): Table<TData> {\n const {\n enableSorting = false,\n enableFiltering = false,\n enableRowSelection = false,\n onRowSelectionChange: onSelectionChangeProp,\n } = options\n\n const enablePagination = options.pagination != null\n\n const [sorting, setSorting] = useState<SortingState>([])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [pagination, setPagination] = useState<PaginationState>({\n pageIndex: options.pagination?.pageIndex ?? 0,\n pageSize: options.pagination?.pageSize ?? 10,\n })\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n\n const handleRowSelectionChange = useCallback(\n (updater: any) => {\n setRowSelection((prev: RowSelectionState) => {\n const next = typeof updater === 'function' ? updater(prev) : updater\n onSelectionChangeProp?.(next)\n return next\n })\n },\n [onSelectionChangeProp],\n )\n\n // Follow TanStack's recommended pattern: always pass all row models\n // unconditionally and let the library handle unused ones. Conditional\n // spreads create unstable option shapes that can trigger infinite loops.\n return useReactTable({\n data,\n columns,\n state: {sorting, columnFilters, pagination, rowSelection},\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onPaginationChange: setPagination,\n enableSorting,\n enableRowSelection:\n typeof enableRowSelection === 'function' ? enableRowSelection : !!enableRowSelection,\n onRowSelectionChange: handleRowSelectionChange,\n // When pagination is disabled, set a very large page size to show all rows\n ...(!enablePagination && {\n autoResetPageIndex: false,\n }),\n })\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n wrap: {\n position: 'relative',\n width: '100%',\n },\n scroll: {\n position: 'relative',\n width: '100%',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n backgroundColor: colors.bgCard,\n },\n // Dynamic: only virtualized lists get a capped, scrollable viewport.\n scrollMax: (maxHeight: number | string) => ({\n maxHeight,\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n }),\n head: {\n position: 'sticky',\n top: 0,\n zIndex: 1,\n backgroundColor: colors.bgCard,\n },\n headRow: {\n display: 'flex',\n flexDirection: 'row',\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n headCell: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.03em',\n color: colors.textMuted,\n },\n headCellSortable: {\n cursor: 'pointer',\n userSelect: 'none',\n color: {default: colors.textMuted, ':hover': colors.text},\n },\n sortMark: {\n fontSize: typography.fontSizeXs,\n color: colors.accent,\n },\n bodyTotal: (height: number) => ({\n position: 'relative',\n width: '100%',\n height,\n }),\n row: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n rowClickable: {\n cursor: 'pointer',\n backgroundColor: {default: 'transparent', ':hover': colors.bgCardHover},\n },\n // Dynamic: absolute placement of a windowed row.\n rowAbsolute: (y: number) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${y}px)`,\n }),\n cell: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n // Dynamic: proportional column width from the TanStack column size (fr-like).\n cellFlex: (size: number) => ({\n flexGrow: size,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n }),\n // --- Stack (card) mode: narrow containers ---\n // The scroll frame drops its border/background so each row card stands on\n // its own; windowing is off in this mode so no capped viewport.\n stackScroll: {\n position: 'relative',\n width: '100%',\n backgroundColor: 'transparent',\n },\n stackBody: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n stackRow: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n width: '100%',\n padding: spacing.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n backgroundColor: colors.bgCard,\n },\n stackCell: {\n display: 'grid',\n gridTemplateColumns: '1fr 2fr',\n gap: spacing.sm,\n alignItems: 'center',\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n },\n stackCellLabel: {\n color: colors.textMuted,\n fontWeight: typography.fontWeightMedium,\n fontSize: typography.fontSizeXs,\n },\n stackCellValue: {\n minWidth: 0,\n overflowWrap: 'break-word',\n },\n empty: {\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center' as const,\n color: colors.textMuted,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n },\n // Floating position indicator, pinned bottom-right of the viewport.\n pos: {\n position: 'absolute',\n right: spacing.sm,\n bottom: spacing.sm,\n paddingTop: 3,\n paddingBottom: 3,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n borderRadius: radii.full,\n backgroundColor: colors.bgCardHover,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n color: colors.textMuted,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n pointerEvents: 'none',\n },\n})\n","import {useEffect, useLayoutEffect, useRef, useState, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type OnChangeFn,\n type Row,\n} from '@tanstack/react-table'\nimport {useVirtualizer} from '@tanstack/react-virtual'\nimport {breakpointsPx, type Breakpoint} from '@duro-app/tokens/tokens/breakpoints.css'\nimport {styles} from './styles.css'\n\n// Measure + commit before paint on the client; no-op-safe on the server.\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\nexport interface VirtualTableRange {\n /** 1-based index of the first visible row (0 when empty). */\n from: number\n /** 1-based index of the last visible row (0 when empty). */\n to: number\n total: number\n /** 1-based page the first visible row falls in. */\n page: number\n pages: number\n}\n\ninterface VirtualTableProps<TData> {\n data: TData[]\n\n columns: ColumnDef<TData, any>[]\n /** Controlled sorting (pairs with a SortChip in the caller). */\n sorting?: SortingState\n onSortingChange?: OnChangeFn<SortingState>\n getRowId?: (row: TData, index: number) => string\n onRowClick?: (row: TData) => void\n rowLabel?: (row: TData) => string\n /**\n * 1-based page to restore the scroll position to on mount (read from the URL\n * by the caller). Only meaningful when the list virtualizes.\n */\n initialPage?: number\n /**\n * Fired (debounced) when the top-visible page changes — wire it to the URL.\n * Only fires in the virtualized branch; small lists render in one scroll and\n * have no page concept.\n */\n onVisiblePageChange?: (range: VirtualTableRange) => void\n /** Build the floating position-indicator label (i18n stays with the caller). */\n rangeLabel?: (range: VirtualTableRange) => string\n /** Rows per \"page\" for the URL/indicator math. Default 50. */\n pageSize?: number\n /** Estimated row height for the virtualizer. Default 44. */\n estimateRowHeight?: number\n /** Max height of the scroll viewport once virtualized. Default '70vh'. */\n maxHeight?: number | string\n /** Render every row (no windowing) at or below this count. Default 150. */\n virtualizeThreshold?: number\n /**\n * Below this container width (px) the table cards up: the header hides and\n * each row becomes a label/value card (like Table's stack mode). Defaults to\n * the shared `sm` breakpoint (640px) so every table cards up at the same\n * line. Cards disable windowing (variable heights), so keep phone lists\n * reasonably short. Set `responsive={false}` to disable entirely.\n */\n stackBelow?: Breakpoint | number\n /** Opt out of the card-up-on-narrow behavior. Default true. */\n responsive?: boolean\n emptyLabel?: ReactNode\n}\n\n/**\n * A sortable data table that windows its rows above a threshold (default 150)\n * via @tanstack/react-virtual, keeps a floating position indicator, and reports\n * the visible page so the caller can mirror it in the URL. Below the threshold\n * it renders every row in one scroll (find-in-page + a11y intact) — no\n * pagination, no windowing. Web-only (uses DOM scroll measurement).\n *\n * URL-decoupled by design: pass `initialPage` (restore) and `onVisiblePageChange`\n * (persist); the component never touches the router itself.\n */\nexport function VirtualTable<TData>({\n data,\n columns,\n sorting,\n onSortingChange,\n getRowId,\n onRowClick,\n rowLabel,\n initialPage,\n onVisiblePageChange,\n rangeLabel,\n pageSize = 50,\n estimateRowHeight = 44,\n maxHeight = '70vh',\n virtualizeThreshold = 150,\n stackBelow = 'sm',\n responsive = true,\n emptyLabel,\n}: VirtualTableProps<TData>) {\n // Support both controlled sorting (SortChip in the caller) and standalone use.\n const [internalSorting, setInternalSorting] = useState<SortingState>([])\n const sortingState = sorting ?? internalSorting\n const handleSortingChange = onSortingChange ?? setInternalSorting\n\n const table = useReactTable({\n data,\n columns,\n state: {sorting: sortingState},\n onSortingChange: handleSortingChange,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n })\n\n const rows = table.getRowModel().rows\n\n // Card-up on narrow containers. Flex cells truncate rather than overflow, so\n // there's no content-overflow signal to measure (as in Table) — we use a\n // deliberate phone-width breakpoint. Cards render every row (no windowing),\n // so `virtualize` is forced off while stacked.\n const wrapRef = useRef<HTMLDivElement>(null)\n const [stacked, setStacked] = useState(false)\n const stackBelowPx = typeof stackBelow === 'number' ? stackBelow : breakpointsPx[stackBelow]\n useIsoLayoutEffect(() => {\n if (!responsive) {\n setStacked(false)\n return\n }\n const el = wrapRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const apply = (width: number) => {\n if (width > 0) setStacked(width < stackBelowPx)\n }\n apply(el.getBoundingClientRect().width)\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n const box = entry.contentBoxSize?.[0]\n apply(box ? box.inlineSize : entry.contentRect.width)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [responsive, stackBelowPx])\n\n const virtualize = rows.length > virtualizeThreshold && !stacked\n\n const scrollRef = useRef<HTMLDivElement>(null)\n const rv = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => estimateRowHeight,\n overscan: 12,\n })\n\n // Restore the scroll position from `initialPage` on mount, and suppress the\n // page-change callback briefly so that restore scroll doesn't immediately\n // report (and overwrite) the URL.\n const suppressWrite = useRef(true)\n useEffect(() => {\n if (!virtualize) {\n suppressWrite.current = false\n return\n }\n if (initialPage && initialPage > 1) {\n rv.scrollToIndex((initialPage - 1) * pageSize, {align: 'start'})\n }\n const id = setTimeout(() => {\n suppressWrite.current = false\n }, 300)\n return () => clearTimeout(id)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [virtualize])\n\n const vItems = rv.getVirtualItems()\n const firstIndex = vItems[0]?.index ?? 0\n const lastIndex = vItems.length ? vItems[vItems.length - 1].index : 0\n const pages = Math.max(1, Math.ceil(rows.length / pageSize))\n // page = which pageSize-sized block the top visible row is in, so it only\n // changes when you cross a boundary (no per-scroll-tick churn).\n const curPage = Math.floor(Math.max(0, firstIndex) / pageSize) + 1\n\n const range: VirtualTableRange = {\n from: rows.length ? firstIndex + 1 : 0,\n to: rows.length ? lastIndex + 1 : 0,\n total: rows.length,\n page: curPage,\n pages,\n }\n\n // Report the visible page so the caller can sync the URL. Fire once per\n // distinct page rather than debouncing a timer — `curPage` only changes at a\n // pageSize boundary (coarse), and react-virtual's frequent re-renders during\n // scroll/measurement would keep resetting a debounce timer so it never fires.\n // The `lastReported` guard prevents redundant calls; callers use replace, so\n // there's no history churn.\n const lastReported = useRef<number | null>(null)\n useEffect(() => {\n if (!virtualize || !onVisiblePageChange) return\n if (suppressWrite.current) {\n // Still in the mount-restore window — record the page so we don't emit a\n // spurious change once it clears, but don't call out.\n lastReported.current = curPage\n return\n }\n if (lastReported.current === curPage) return\n lastReported.current = curPage\n onVisiblePageChange({\n from: rows.length ? firstIndex + 1 : 0,\n to: rows.length ? lastIndex + 1 : 0,\n total: rows.length,\n page: curPage,\n pages,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [curPage, virtualize])\n\n // Stack-mode label for a column: explicit meta override, else the string\n // header, else nothing (value renders label-less, e.g. an actions column).\n const columnStackLabel = (columnDef: {\n header?: unknown\n meta?: {stackLabel?: string; label?: string}\n }): string => {\n const meta = columnDef.meta\n if (typeof meta?.stackLabel === 'string') return meta.stackLabel\n if (typeof meta?.label === 'string') return meta.label\n return typeof columnDef.header === 'string' ? columnDef.header : ''\n }\n\n const renderRow = (\n row: Row<TData>,\n index: number,\n positioned?: ReturnType<typeof styles.rowAbsolute>,\n measureRef?: (node: Element | null) => void,\n ) =>\n stacked ? (\n <html.div\n key={row.id}\n role=\"row\"\n aria-label={rowLabel?.(row.original)}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n style={[styles.stackRow, Boolean(onRowClick) && styles.rowClickable]}\n >\n {row.getVisibleCells().map((cell) => {\n const lbl = columnStackLabel(cell.column.columnDef)\n return (\n <html.div key={cell.id} role=\"cell\" style={styles.stackCell}>\n {lbl ? <html.span style={styles.stackCellLabel}>{lbl}</html.span> : null}\n <html.div style={styles.stackCellValue}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </html.div>\n </html.div>\n )\n })}\n </html.div>\n ) : (\n <html.div\n key={row.id}\n ref={measureRef}\n data-index={index}\n role=\"row\"\n aria-label={rowLabel?.(row.original)}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n style={[styles.row, Boolean(onRowClick) && styles.rowClickable, positioned]}\n >\n {row.getVisibleCells().map((cell) => (\n <html.div\n key={cell.id}\n role=\"cell\"\n style={[styles.cell, styles.cellFlex(cell.column.getSize())]}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </html.div>\n ))}\n </html.div>\n )\n\n const label =\n rangeLabel?.(range) ?? (rows.length ? `${range.from}–${range.to} / ${range.total}` : '')\n\n return (\n <html.div ref={wrapRef} style={styles.wrap}>\n <html.div\n ref={scrollRef}\n role=\"table\"\n style={[\n stacked ? styles.stackScroll : styles.scroll,\n virtualize && styles.scrollMax(maxHeight),\n ]}\n >\n {stacked ? null : (\n <html.div role=\"rowgroup\" style={styles.head}>\n {table.getHeaderGroups().map((headerGroup) => (\n <html.div key={headerGroup.id} role=\"row\" style={styles.headRow}>\n {headerGroup.headers.map((header) => {\n const col = header.column\n const sorted = col.getIsSorted()\n return (\n <html.div\n key={header.id}\n role=\"columnheader\"\n aria-sort={\n sorted === 'asc'\n ? 'ascending'\n : sorted === 'desc'\n ? 'descending'\n : undefined\n }\n onClick={col.getCanSort() ? col.getToggleSortingHandler() : undefined}\n style={[\n styles.headCell,\n col.getCanSort() && styles.headCellSortable,\n styles.cellFlex(header.getSize()),\n ]}\n >\n {header.isPlaceholder\n ? null\n : flexRender(col.columnDef.header, header.getContext())}\n {sorted ? (\n <html.span style={styles.sortMark}>\n {sorted === 'asc' ? '↑' : '↓'}\n </html.span>\n ) : null}\n </html.div>\n )\n })}\n </html.div>\n ))}\n </html.div>\n )}\n\n {rows.length === 0 ? (\n <html.div style={styles.empty}>{emptyLabel}</html.div>\n ) : (\n <html.div\n role=\"rowgroup\"\n style={\n stacked\n ? styles.stackBody\n : virtualize\n ? styles.bodyTotal(rv.getTotalSize())\n : undefined\n }\n >\n {virtualize\n ? vItems.map((vi) =>\n renderRow(\n rows[vi.index],\n vi.index,\n styles.rowAbsolute(vi.start),\n rv.measureElement,\n ),\n )\n : rows.map((row, i) => renderRow(row, i))}\n </html.div>\n )}\n </html.div>\n\n {virtualize && rows.length > 0 ? (\n <html.div aria-live=\"polite\" style={styles.pos}>\n {label}\n </html.div>\n ) : null}\n </html.div>\n )\n}\n","/**\n * `@duro-app/ui/table` — the TanStack-aware half of the table.\n *\n * Everything here reaches `@tanstack/react-table`, which is a peer dependency\n * a consumer only has if they asked for it. Keeping it out of the package root\n * is what makes that peer genuinely optional: a bundler must RESOLVE every\n * static import before tree-shaking can drop the code behind it, so a single\n * `import ... from '@tanstack/react-table'` anywhere in the root's graph fails\n * the build of an app that never renders a data table.\n *\n * `Table` exported here is the root's object with the TanStack pieces\n * attached, so migrating is one import line and no call sites change:\n *\n * -import {Table, useDataTable} from '@duro-app/ui'\n * +import {Table, useDataTable} from '@duro-app/ui/table'\n *\n * Plain `<Table.Root>` users need nothing — that stays on the package root.\n */\n\n// Side-effect: registers our augmentation of TanStack's ColumnMeta\n// (stackLabel / isActions). It belongs here rather than at the root because\n// the augmentation only means anything once TanStack is in the program, and\n// declaring it at the root made the root's types depend on the peer.\nimport './components/Table/tanstack-augmentation'\n\nimport {TableCore} from './components/Table/Table'\nimport {Pagination} from './components/Table/Pagination'\nimport {SortIndicator} from './components/Table/SortIndicator'\nimport {ColumnFilter} from './components/Table/ColumnFilter'\nimport {SortChip} from './components/Table/SortChip'\nimport {FromTanstack} from './components/Table/FromTanstack'\n\n/** The full table: the presentational parts plus the TanStack integration. */\nexport const Table = {\n ...TableCore,\n Pagination,\n SortIndicator,\n ColumnFilter,\n SortChip,\n /** Renders a styled Table directly from a TanStack table instance. */\n FromTanstack,\n}\n\nexport {useDataTable} from './components/Table/useDataTable'\n\n// Web-only (DOM scroll measurement + @tanstack/react-virtual), and TanStack\n// Table-aware, so it lives here rather than at the root.\nexport {VirtualTable, type VirtualTableRange} from './components/VirtualTable/VirtualTable'\n\nexport type {TableVariant, TableSize} from './components/Table/Table'\n"],"names":["styles","root","$$css","button","buttonDisabled","pageInfo","Pagination","t0","$","_c","table","t1","getState","pageIndex","pageSize","pagination","t2","getPageCount","pageCount","getFilteredRowModel","rows","length","t3","getCanPreviousPage","t4","t5","t6","previousPage","t7","t8","_rsdMerge","_rsdDefaultStyles","t9","t10","span","t11","getCanNextPage","t12","t13","t14","nextPage","t15","t16","t17","jsxs","div","active","inactive","SortIndicator","column","getCanSort","sorted","getIsSorted","input","ColumnFilter","placeholder","getCanFilter","getFilterValue","filterValue","e","setFilterValue","target","value","undefined","jsx","SortChip","options","onChange","label","find","o","id","current","triggerLabel","desc","Menu","opt","isCurrent","nextDesc","map","sortChip","displayName","FromTanstack","variant","size","responsive","minColumnWidth","rowKey","onRowClick","rowAriaLabel","buildSortChip","sortChipNode","paginationNode","getHeaderGroups","_temp2","Header","row","key","TableRow","getVisibleCells","_temp3","getRowModel","Body","Root","cell","Cell","columnDef","meta","isActions","flexRender","getContext","group","headers","_temp","header","def","labelFromHeader","stackLabel","HeaderCell","isPlaceholder","getAllColumns","filter","c","fromHeader","sorting","next","setSorting","useDataTable","data","columns","enableSorting","enableFiltering","enableRowSelection","onRowSelectionChange","onSelectionChangeProp","enablePagination","useState","columnFilters","setColumnFilters","setPagination","rowSelection","setRowSelection","handleRowSelectionChange","useCallback","updater","prev","useReactTable","state","getCoreRowModel","getSortedRowModel","getPaginationRowModel","onSortingChange","onColumnFiltersChange","onPaginationChange","autoResetPageIndex","_temp4","wrap","scroll","scrollMax","maxHeight","val","head","headRow","headCell","headCellSortable","sortMark","bodyTotal","height","rowClickable","rowAbsolute","y","cellFlex","stackScroll","stackBody","stackRow","stackCell","stackCellLabel","stackCellValue","empty","pos","useIsoLayoutEffect","window","useLayoutEffect","useEffect","VirtualTable","getRowId","rowLabel","initialPage","onVisiblePageChange","rangeLabel","estimateRowHeight","virtualizeThreshold","stackBelow","emptyLabel","internalSorting","setInternalSorting","sortingState","wrapRef","useRef","stacked","setStacked","stackBelowPx","breakpointsPx","el","ResizeObserver","apply","width","getBoundingClientRect","ro","entries","entry","box","contentBoxSize","inlineSize","contentRect","observe","disconnect","virtualize","scrollRef","rv","useVirtualizer","count","getScrollElement","estimateSize","overscan","suppressWrite","scrollToIndex","align","setTimeout","clearTimeout","vItems","getVirtualItems","firstIndex","index","lastIndex","pages","Math","max","ceil","curPage","floor","range","from","to","total","page","lastReported","columnStackLabel","renderRow","positioned","measureRef","original","Boolean","lbl","getSize","headerGroup","col","getToggleSortingHandler","getTotalSize","vi","start","measureElement","i","Table","TableCore"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duro-app/ui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@tanstack/react-virtual": "^3.14.6",
|
|
67
|
-
"@duro-app/tokens": "^1.1.
|
|
67
|
+
"@duro-app/tokens": "^1.1.2"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
70
|
"@babel/preset-typescript": "^7.28.0",
|
|
@@ -52,7 +52,7 @@ const _devWarned = new Set<string>()
|
|
|
52
52
|
function devWarnOnce(code: string, message: string) {
|
|
53
53
|
if (_IS_PROD || _devWarned.has(code)) return
|
|
54
54
|
_devWarned.add(code)
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
console.warn(`[duro-app/ui Table] ${message}`)
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -10,10 +10,9 @@
|
|
|
10
10
|
// of co-located with `FromTanstack.tsx`) also keeps it from being
|
|
11
11
|
// tree-shaken out of the published types.
|
|
12
12
|
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
14
13
|
declare module '@tanstack/react-table' {
|
|
15
14
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
16
|
-
interface ColumnMeta<TData
|
|
15
|
+
interface ColumnMeta<TData, TValue> {
|
|
17
16
|
/** Override the stack-mode label when columnDef.header is JSX (icon + text, etc). */
|
|
18
17
|
stackLabel?: string
|
|
19
18
|
/**
|
|
@@ -81,12 +81,12 @@ function List({children}: ListProps) {
|
|
|
81
81
|
useEffect(() => {
|
|
82
82
|
const el = listRef.current
|
|
83
83
|
if (!el) return
|
|
84
|
+
const listEl = el
|
|
84
85
|
|
|
85
|
-
function handleKeyDown(
|
|
86
|
+
function handleKeyDown(e: KeyboardEvent) {
|
|
86
87
|
const order = orderRef.current
|
|
87
88
|
const tabs = tabsRef.current
|
|
88
89
|
if (order.length === 0) return
|
|
89
|
-
const listEl = this
|
|
90
90
|
|
|
91
91
|
const prevKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'
|
|
92
92
|
const nextKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown'
|
|
@@ -28,10 +28,9 @@ export interface VirtualTableRange {
|
|
|
28
28
|
pages: number
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
31
|
interface VirtualTableProps<TData> {
|
|
33
32
|
data: TData[]
|
|
34
|
-
|
|
33
|
+
|
|
35
34
|
columns: ColumnDef<TData, any>[]
|
|
36
35
|
/** Controlled sorting (pairs with a SortChip in the caller). */
|
|
37
36
|
sorting?: SortingState
|