@scattered-light/loomiere-base-ui 0.19.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +4 -2
  2. package/dist/{chunk-M7KJASGK.js → chunk-43IJNNXK.js} +86 -3
  3. package/dist/chunk-43IJNNXK.js.map +1 -0
  4. package/dist/{chunk-2BFNETZZ.js → chunk-B5FH3RF5.js} +33 -15
  5. package/dist/chunk-B5FH3RF5.js.map +1 -0
  6. package/dist/chunk-Z6SR3KMB.js +77 -0
  7. package/dist/chunk-Z6SR3KMB.js.map +1 -0
  8. package/dist/custom/collection/index.d.ts +37 -2
  9. package/dist/custom/collection/index.js +70 -5
  10. package/dist/custom/collection/index.js.map +1 -1
  11. package/dist/custom/index.d.ts +1 -1
  12. package/dist/custom/index.js +2 -2
  13. package/dist/design-system/components/CollectionCards/README.md +32 -0
  14. package/dist/design-system/components/CollectionCards/preview.html +2 -2
  15. package/dist/design-system/components/CollectionToolbar/README.md +3 -1
  16. package/dist/design-system/components/PickerButton/README.md +1 -1
  17. package/dist/design-system/components/SplitButton/README.md +25 -0
  18. package/dist/design-system/components/SplitButton/preview.html +19 -0
  19. package/dist/design-system/components/StatCard/README.md +4 -1
  20. package/dist/design-system/components/StatCard/preview.html +1 -1
  21. package/dist/design-system/components/bundle.js +7 -7
  22. package/dist/design-system/components/index.d.ts +1 -1
  23. package/dist/design-system/components/styles.css +180 -67
  24. package/dist/{index-ywBkS0AA.d.ts → index-CB3_OECu.d.ts} +35 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +5 -18
  27. package/dist/index.js.map +1 -1
  28. package/dist/styles/components/Accordion.css +1 -1
  29. package/dist/styles/components/AlertDialog.css +1 -1
  30. package/dist/styles/components/Autocomplete.css +1 -1
  31. package/dist/styles/components/Avatar.css +1 -1
  32. package/dist/styles/components/Button.css +1 -1
  33. package/dist/styles/components/Checkbox.css +1 -1
  34. package/dist/styles/components/CheckboxGroup.css +1 -1
  35. package/dist/styles/components/Collapsible.css +1 -1
  36. package/dist/styles/components/Combobox.css +1 -1
  37. package/dist/styles/components/ContextMenu.css +1 -1
  38. package/dist/styles/components/Dialog.css +1 -1
  39. package/dist/styles/components/Drawer.css +1 -1
  40. package/dist/styles/components/Field.css +1 -1
  41. package/dist/styles/components/Fieldset.css +1 -1
  42. package/dist/styles/components/Form.css +1 -1
  43. package/dist/styles/components/Input.css +1 -1
  44. package/dist/styles/components/Menu.css +1 -1
  45. package/dist/styles/components/Menubar.css +1 -1
  46. package/dist/styles/components/Meter.css +1 -1
  47. package/dist/styles/components/NavigationMenu.css +1 -1
  48. package/dist/styles/components/NumberField.css +1 -1
  49. package/dist/styles/components/OTPField.css +1 -1
  50. package/dist/styles/components/Popover.css +1 -1
  51. package/dist/styles/components/PreviewCard.css +1 -1
  52. package/dist/styles/components/Progress.css +1 -1
  53. package/dist/styles/components/Radio.css +1 -1
  54. package/dist/styles/components/ScrollArea.css +1 -1
  55. package/dist/styles/components/Select.css +1 -1
  56. package/dist/styles/components/Separator.css +1 -1
  57. package/dist/styles/components/Slider.css +1 -1
  58. package/dist/styles/components/Switch.css +1 -1
  59. package/dist/styles/components/Tabs.css +1 -1
  60. package/dist/styles/components/Toast.css +1 -1
  61. package/dist/styles/components/Toggle.css +1 -1
  62. package/dist/styles/components/ToggleGroup.css +1 -1
  63. package/dist/styles/components/Toolbar.css +1 -1
  64. package/dist/styles/components/Tooltip.css +1 -1
  65. package/dist/styles/custom/AppBar.css +1 -1
  66. package/dist/styles/custom/Badge.css +1 -1
  67. package/dist/styles/custom/Collection.css +1 -1
  68. package/dist/styles/custom/CollectionCards.css +1 -1
  69. package/dist/styles/custom/CollectionPagination.css +1 -1
  70. package/dist/styles/custom/CollectionToolbar.css +47 -1
  71. package/dist/styles/custom/DataList.css +1 -1
  72. package/dist/styles/custom/DataTable.css +1 -1
  73. package/dist/styles/custom/DatePicker.css +1 -1
  74. package/dist/styles/custom/DescriptionList.css +1 -1
  75. package/dist/styles/custom/EditableList.css +1 -1
  76. package/dist/styles/custom/EmptyState.css +1 -1
  77. package/dist/styles/custom/ListDetail.css +1 -1
  78. package/dist/styles/custom/MoneyField.css +1 -1
  79. package/dist/styles/custom/PickerButton.css +4 -4
  80. package/dist/styles/custom/PickerSplit.css +2 -2
  81. package/dist/styles/custom/Sheet.css +1 -1
  82. package/dist/styles/custom/SideNav.css +1 -1
  83. package/dist/styles/custom/SplitButton.css +23 -0
  84. package/dist/styles/custom/Splitter.css +1 -1
  85. package/dist/styles/custom/StatCard.css +44 -1
  86. package/dist/styles/custom/StatFigure.css +1 -1
  87. package/dist/styles/custom/Table.css +1 -1
  88. package/dist/styles/index.css +2 -1
  89. package/dist/styles/reset/accessibility.css +1 -1
  90. package/dist/styles/reset/reset-accessibility.css +1 -1
  91. package/dist/styles/reset/reset-tailwind.css +1 -1
  92. package/dist/styles/reset/reset.css +1 -1
  93. package/dist/styles/tailwind.css +2 -1
  94. package/package.json +2 -2
  95. package/dist/chunk-2BFNETZZ.js.map +0 -1
  96. package/dist/chunk-M7KJASGK.js.map +0 -1
  97. package/dist/chunk-Y2CPBMFJ.js +0 -147
  98. package/dist/chunk-Y2CPBMFJ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/custom/collection/columns.ts","../../../src/custom/collection/format.ts","../../../src/custom/collection/view.tsx","../../../src/custom/collection/data-list.tsx","../../../src/custom/collection/data-table.tsx","../../../src/custom/collection/cards.tsx","../../../src/custom/collection/pagination.tsx","../../../src/custom/collection/toolbar.tsx","../../../src/custom/collection/collection-model.ts","../../../src/custom/collection/use-collection.ts"],"names":["sum","React","React2","jsxs","jsx","selectableIds","React3","label","Fragment","value","useRef","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- The escape hatch is TanStack's ColumnDef, whose first arguments are its feature and row types. */\nimport type { ReactNode } from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\n\nexport type CollectionKind = 'text' | 'number' | 'money' | 'percent' | 'date' | 'boolean';\nexport type CollectionAlign = 'start' | 'end' | 'center';\nexport type ListSlot = 'primary' | 'secondary' | 'meta' | 'amount' | 'status' | 'hidden';\nexport type FilterKind = 'tabs' | 'select' | 'multi-select' | 'boolean';\n\nexport interface FilterOption {\n value: string;\n label: string;\n /** A tab with an empty value, or this flag, means no filter. Its count is the whole facet. */\n all?: boolean;\n}\n\nexport interface CollectionFilter {\n kind: FilterKind;\n label?: string;\n options?: FilterOption[];\n}\n\nexport interface CellContext {\n view: 'table' | 'list';\n selected: boolean;\n active: boolean;\n}\n\nexport interface CollectionColumn<T> {\n id: string;\n header: string | { label: string; content: ReactNode };\n value: (row: T) => unknown;\n cell?: (row: T, ctx: CellContext) => ReactNode;\n kind?: CollectionKind;\n currency?: string | ((row: T) => string);\n fractionDigits?: number;\n negative?: 'minus' | 'parens';\n /** True searches the formatted value. A function also searches text that is not shown. */\n searchable?: boolean | ((row: T) => string | string[]);\n sortable?: boolean;\n filter?: CollectionFilter;\n total?: 'sum' | 'count' | ((rows: T[]) => ReactNode);\n /** The row's name. One column should set this. Its cell is the row header and the primary action. */\n rowHeader?: boolean;\n hidden?: boolean;\n /** 'auto', 'min' (as wide as the content), or a size token path such as space.16. No pixel values. */\n width?: 'auto' | 'min' | string;\n align?: CollectionAlign;\n list?: ListSlot;\n dateFormat?: Intl.DateTimeFormatOptions;\n /** When every row shares one currency, the header can say \"Amount (USD)\" and the cells drop the symbol. */\n showCurrencyInHeader?: boolean;\n /** Rare needs that the column shape does not cover. Merged into the TanStack column. */\n tanstack?: Partial<ColumnDef<any, any>>;\n}\n\nexport function headerLabel<T>(column: CollectionColumn<T>): string {\n return typeof column.header === 'string' ? column.header : column.header.label;\n}\n\nexport function headerContent<T>(column: CollectionColumn<T>): ReactNode {\n return typeof column.header === 'string' ? column.header : column.header.content;\n}\n\nexport function defineColumns<T>(columns: CollectionColumn<T>[]): CollectionColumn<T>[] {\n if (process.env.NODE_ENV !== 'production') {\n const headers = columns.filter((column) => column.rowHeader);\n if (headers.length !== 1) {\n console.warn(`A collection should have exactly one rowHeader column so each row has a name. This one has ${headers.length}.`);\n }\n const tabs = columns.filter((column) => column.filter?.kind === 'tabs');\n if (tabs.length > 1) console.warn('Only one column can use a tabs filter. The toolbar shows the first.');\n }\n return columns;\n}\n\nexport function defaultAlign<T>(column: CollectionColumn<T>): CollectionAlign {\n if (column.align) return column.align;\n const kind = column.kind ?? 'text';\n if (kind === 'number' || kind === 'money' || kind === 'percent') return 'end';\n return 'start';\n}\n\n/** Where a column sits in the list when the column does not say. */\nexport function listSlot<T>(column: CollectionColumn<T>, columns: readonly CollectionColumn<T>[]): ListSlot {\n if (column.list) return column.list;\n if (column.rowHeader) return 'primary';\n if (column.kind === 'money') return 'amount';\n if (column.filter?.kind === 'tabs') return 'status';\n if (column.cell && column.kind == null && column.id.toLowerCase().includes('status')) return 'status';\n const primary = columns.find((item) => item.rowHeader) ?? columns[0];\n const secondary = columns.find((item) => item !== primary && item.searchable && (item.kind ?? 'text') === 'text' && !item.rowHeader);\n if (column === secondary) return 'secondary';\n const meta = columns.filter((item) => item !== primary && item !== secondary && item.kind !== 'money' && item.filter?.kind !== 'tabs');\n if (meta.slice(0, 3).includes(column)) return 'meta';\n return 'hidden';\n}\n\nexport function currencyOf<T>(column: CollectionColumn<T>, row: T): string {\n if (typeof column.currency === 'function') return column.currency(row);\n return column.currency ?? 'USD';\n}\n","import { currencyOf, defaultAlign, headerLabel, type CollectionColumn } from './columns';\nimport {\n formatDate,\n formatMoney,\n formatNumber,\n formatPercent,\n fractionDigitsOf,\n isoDate,\n isEmptyValue,\n minorToDecimal,\n moneySearchForms,\n searchHaystack,\n sumMoney,\n} from './collection-utils';\n\nexport { isoDate };\n\nexport function rowSearchText<T>(row: T, columns: readonly CollectionColumn<T>[], locale: string): string {\n const parts: string[] = [];\n for (const column of columns) {\n if (column.searchable == null || column.searchable === false) continue;\n const value = column.value(row);\n if (typeof column.searchable === 'function') {\n const extra = column.searchable(row);\n parts.push(...(Array.isArray(extra) ? extra : [extra]));\n }\n if (isEmptyValue(value)) continue;\n if (column.kind === 'money') {\n parts.push(...moneySearchForms(value as number | string, currencyOf(column, row), locale, column.fractionDigits));\n } else if (column.kind === 'number' || column.kind === 'percent') {\n parts.push(String(value), formatNumber(value as number | string, locale, column.fractionDigits));\n } else if (column.kind === 'date') {\n parts.push(String(value), formatDate(value, locale, column.dateFormat), isoDate(value));\n } else {\n parts.push(String(value));\n }\n }\n return searchHaystack(parts);\n}\n\nexport function formattedValue<T>(column: CollectionColumn<T>, row: T, locale: string, hideCurrency = false): string {\n const value = column.value(row);\n if (isEmptyValue(value)) return '';\n if (column.kind === 'money') {\n const currency = currencyOf(column, row);\n if (hideCurrency) {\n const digits = column.fractionDigits ?? fractionDigitsOf(currency);\n return formatNumber(value as number | string, locale, digits);\n }\n return formatMoney(value as number | string, {\n locale,\n currency,\n fractionDigits: column.fractionDigits,\n negative: column.negative,\n });\n }\n if (column.kind === 'number') return formatNumber(value as number | string, locale, column.fractionDigits);\n if (column.kind === 'percent') return formatPercent(value as number | string, locale);\n if (column.kind === 'date') return formatDate(value, locale, column.dateFormat);\n if (column.kind === 'boolean') return value ? 'Yes' : 'No';\n return String(value);\n}\n\nexport function columnSharesCurrency<T>(column: CollectionColumn<T>, rows: readonly T[]): string | null {\n if (column.kind !== 'money') return null;\n const currencies = new Set(rows.map((row) => currencyOf(column, row)));\n return currencies.size === 1 ? [...currencies][0] : null;\n}\n\nexport function displayHeader<T>(column: CollectionColumn<T>, rows: readonly T[]): string {\n const label = headerLabel(column);\n if (!column.showCurrencyInHeader) return label;\n const currency = columnSharesCurrency(column, rows);\n return currency ? `${label} (${currency})` : label;\n}\n\nexport function hideCurrencyInCells<T>(column: CollectionColumn<T>, rows: readonly T[]): boolean {\n return Boolean(column.showCurrencyInHeader && columnSharesCurrency(column, rows));\n}\n\n/**\n * Totals add leaf rows. A tree parent's amount is the children already, so counting both would double it.\n * Zero money rows use the column's currency. \"Mixed currencies\" is only when more than one currency is present.\n * A number or percent sum is not money.\n */\nexport function totalText<T>(column: CollectionColumn<T>, rows: readonly T[], locale: string): string {\n if (!column.total) return '';\n if (column.total === 'count') return String(rows.length);\n if (typeof column.total === 'function') return '';\n if (column.kind === 'number' || column.kind === 'percent') {\n let sum = 0;\n for (const row of rows) {\n const value = column.value(row);\n if (isEmptyValue(value)) continue;\n const numeric = typeof value === 'number' ? value : Number(String(value).replace(/,/g, ''));\n if (Number.isFinite(numeric)) sum += numeric;\n }\n return column.kind === 'percent' ? formatPercent(sum, locale) : formatNumber(sum, locale, column.fractionDigits);\n }\n const values = rows.map((row) => ({ amount: column.value(row) as number | string | null, currency: currencyOf(column, row) }));\n const sum = sumMoney(values, column.fractionDigits);\n if (sum.mixed) {\n if (process.env.NODE_ENV !== 'production') console.warn(`Column \"${column.id}\" has more than one currency, so it has no single total.`);\n return 'Mixed currencies';\n }\n const currency = sum.currency ?? (typeof column.currency === 'string' ? column.currency : 'USD');\n const digits = column.fractionDigits ?? fractionDigitsOf(currency);\n return formatMoney(minorToDecimal(sum.minor ?? 0n, digits), {\n locale,\n currency,\n fractionDigits: digits,\n negative: column.negative,\n });\n}\n\nexport { defaultAlign };\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { Checkbox } from '../../components/checkbox';\nimport { EmptyState } from '../empty-state';\nimport { Menu } from '../../components/menu';\nimport { defaultAlign, headerLabel, type CellContext, type CollectionColumn } from './columns';\nimport type { CollectionRow } from './collection-model';\nimport { toMinor } from './collection-utils';\nimport { formattedValue, hideCurrencyInCells, isoDate } from './format';\nimport type { CollectionApi } from './use-collection';\n\nexport interface CollectionViewProps<T> {\n collection: CollectionApi<T>;\n label: string;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n activeRowId?: string;\n rowActions?: (row: T) => RowAction[];\n /** Shown when the data itself is empty. A search with no matches uses the built-in no-results state. */\n empty?: React.ReactNode;\n loading?: boolean;\n /**\n * One tab stop for the rows. Defaults to on when a row can be activated.\n * `data-no-activate` on a control inside a row keeps a click there from opening the row.\n */\n rowNavigation?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport interface RowAction {\n label: string;\n onSelect: () => void;\n disabled?: boolean;\n tone?: 'danger';\n}\n\nexport function rowHeaderText<T>(collection: CollectionApi<T>, row: T): string {\n const column = collection.columns.find((item) => item.id === collection.rowHeaderId);\n if (!column) return collection.getRowId(row);\n const value = column.value(row);\n return value == null || value === '' ? 'None' : String(value);\n}\n\nexport function levelName<T>(collection: CollectionApi<T>, tableRow: CollectionRow, text: string): string {\n if (!tableRow.depth) return text;\n const parent = tableRow.getParentRow?.();\n const parentText = parent ? rowHeaderText(collection, parent.original as T) : '';\n return parentText ? `${text}, level ${tableRow.depth + 1}, in ${parentText}` : `${text}, level ${tableRow.depth + 1}`;\n}\n\nexport function CellValue<T>({ column, row, locale, rows, view, selected, active }: {\n column: CollectionColumn<T>;\n row: T;\n locale: string;\n rows: readonly T[];\n view: 'table' | 'list';\n selected: boolean;\n active: boolean;\n}) {\n const ctx: CellContext = { view, selected, active };\n if (column.cell) return <>{column.cell(row, ctx)}</>;\n const value = column.value(row);\n if (value == null || value === '') {\n return <span data-subtle=\"\">—<span className=\"visually-hidden\"> None</span></span>;\n }\n if (column.kind === 'boolean') {\n return (\n <span>\n {value ? <span className=\"material-symbols-outlined\" aria-hidden=\"true\">check</span> : null}\n <span className=\"visually-hidden\">{value ? 'Yes' : 'No'}</span>\n </span>\n );\n }\n if (column.kind === 'date') {\n const text = formattedValue(column, row, locale);\n return <time dateTime={isoDate(value)}>{text}</time>;\n }\n const negative = column.kind === 'money' && (toMinor(value as number | string, column.fractionDigits ?? 2) ?? 0n) < 0n;\n return <span data-negative={negative ? '' : undefined}>{formattedValue(column, row, locale, hideCurrencyInCells(column, rows))}</span>;\n}\n\nexport function SelectBox({ checked, indeterminate, label, onChange }: {\n checked: boolean;\n indeterminate?: boolean;\n label: string;\n onChange: (checked: boolean) => void;\n}) {\n return (\n <Checkbox.Root\n checked={checked}\n indeterminate={indeterminate}\n onCheckedChange={(value) => onChange(value === true)}\n aria-label={label}\n >\n <Checkbox.Indicator>\n <span className=\"material-symbols-outlined CheckboxIcon\" aria-hidden=\"true\">{indeterminate ? 'remove' : 'check'}</span>\n </Checkbox.Indicator>\n </Checkbox.Root>\n );\n}\n\nexport function RowMenu({ label, actions }: { label: string; actions: RowAction[] }) {\n return (\n <Menu.Root>\n <Menu.Trigger className=\"Button\" data-emphasis=\"quiet\" data-icon-only=\"\" aria-label={label}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">more_horiz</span>\n </Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner>\n <Menu.Popup>\n {actions.map((action) => (\n <Menu.Item key={action.label} disabled={action.disabled} data-color={action.tone === 'danger' ? 'error' : undefined} onClick={action.onSelect}>\n {action.label}\n </Menu.Item>\n ))}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n}\n\nexport function useRovingRows(count: number, enabled: boolean) {\n const [cursor, setCursor] = React.useState(0);\n const refs = React.useRef<Array<HTMLButtonElement | HTMLAnchorElement | null>>([]);\n React.useEffect(() => {\n if (cursor > count - 1) setCursor(Math.max(0, count - 1));\n }, [count, cursor]);\n const focusAt = (index: number) => {\n const next = Math.min(Math.max(0, index), Math.max(0, count - 1));\n setCursor(next);\n refs.current[next]?.focus();\n };\n const onKeyDown = (event: React.KeyboardEvent, index: number, toggle?: () => void, activate?: () => void, tree?: { expanded: boolean; toggle: () => void }) => {\n const target = event.target as HTMLElement;\n if (target.closest('input, textarea, select, [role=\"menu\"], [role=\"listbox\"]')) return;\n // ArrowRight opens a closed parent and ArrowLeft closes an open one. RTL swaps them, because right is \"inward\" in the reading direction.\n // Opening a parent is not activating the row, so it works even when the row has no action.\n const rtl = Boolean(target.closest('[dir=\"rtl\"]'));\n const openKey = rtl ? 'ArrowLeft' : 'ArrowRight';\n const closeKey = rtl ? 'ArrowRight' : 'ArrowLeft';\n if (tree && event.key === openKey && !tree.expanded) {\n event.preventDefault();\n tree.toggle();\n return;\n }\n if (tree && event.key === closeKey && tree.expanded) {\n event.preventDefault();\n tree.toggle();\n return;\n }\n if (!enabled) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n focusAt(index + 1);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n focusAt(index - 1);\n } else if (event.key === 'Home') {\n event.preventDefault();\n focusAt(0);\n } else if (event.key === 'End') {\n event.preventDefault();\n focusAt(count - 1);\n } else if (event.key === ' ' && toggle) {\n event.preventDefault();\n toggle();\n } else if (event.key === 'Enter' && !(event.target instanceof HTMLAnchorElement) && activate) {\n event.preventDefault();\n activate();\n }\n };\n return { cursor, refs, focusAt, onKeyDown };\n}\n\nexport function interactiveTarget(target: EventTarget | null): boolean {\n return target instanceof Element && Boolean(target.closest('a, button, input, textarea, select, label, [role=\"menu\"], [role=\"menuitem\"], [role=\"listbox\"], [role=\"checkbox\"], [role=\"option\"], [data-no-activate]'));\n}\n\nexport function selectingText(): boolean {\n const selection = typeof window === 'undefined' ? null : window.getSelection();\n return Boolean(selection && !selection.isCollapsed);\n}\n\nexport function EmptyRow({ colSpan, filtered, onClear, empty, title = 'No results', description = 'Nothing matches the current search or filters.', clearLabel = 'Clear filters', emptyTitle = 'Nothing here yet' }: {\n colSpan: number;\n filtered: boolean;\n onClear: () => void;\n empty?: React.ReactNode;\n title?: string;\n description?: string;\n clearLabel?: string;\n emptyTitle?: string;\n}) {\n return (\n <tr>\n <td data-empty=\"\" colSpan={colSpan}>\n {filtered ? (\n <EmptyState\n size=\"compact\"\n kind=\"no-results\"\n title={title}\n description={description}\n actions={<Button emphasis=\"standard\" onClick={onClear}>{clearLabel}</Button>}\n />\n ) : (\n empty ?? <EmptyState size=\"compact\" kind=\"start\" title={emptyTitle} />\n )}\n </td>\n </tr>\n );\n}\n\n/** Mounts empty, then says \"Loading\" one frame later, so a screen reader hears the change. */\nexport function LoadingNote({ text }: { text: string }) {\n const [live, setLive] = React.useState('');\n React.useEffect(() => {\n const frame = requestAnimationFrame(() => setLive(text));\n return () => cancelAnimationFrame(frame);\n }, [text]);\n return <span className=\"CollectionStatus visually-hidden\" role=\"status\">{live}</span>;\n}\n\nexport function alignOf<T>(column: CollectionColumn<T>): 'start' | 'end' | 'center' | undefined {\n const align = defaultAlign(column);\n return align === 'start' ? undefined : align;\n}\n\nexport function columnHeader<T>(column: CollectionColumn<T>): string {\n return headerLabel(column);\n}\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { EmptyState } from '../empty-state';\nimport { cn } from '../../utils/cn';\nimport { listSlot } from './columns';\nimport { totalText } from './format';\nimport type { CollectionRow } from './collection-model';\nimport { CellValue, LoadingNote, RowMenu, SelectBox, interactiveTarget, levelName, rowHeaderText, selectingText, useRovingRows, type CollectionViewProps } from './view';\nimport type { CollectionApi } from './use-collection';\n\nexport interface DataListProps<T> extends CollectionViewProps<T> {\n /** 'rows' share one container, like the table body. 'cards' separates them when a queue should read as items. */\n variant?: 'rows' | 'cards';\n totals?: 'summary' | 'none';\n renderItemExtra?: (row: T) => React.ReactNode;\n}\n\n/**\n * The same rows as DataTable, read as a list. Sorting lives in the toolbar because a list has no headers.\n */\nexport function DataList<T>({\n collection,\n label,\n onRowActivate,\n getRowHref,\n activeRowId,\n rowActions,\n empty,\n loading,\n rowNavigation,\n size = 'sm',\n className,\n variant = 'rows',\n totals = 'summary',\n renderItemExtra,\n}: DataListProps<T>) {\n const leaves = collection.pageEntries.filter((entry) => entry.kind === 'leaf');\n const navigate = rowNavigation ?? Boolean(onRowActivate || getRowHref);\n const roving = useRovingRows(leaves.length, navigate);\n React.useEffect(() => {\n collection.registerRowFocus(() => roving.focusAt(0));\n return () => collection.registerRowFocus(null);\n }, [collection, roving]);\n React.useLayoutEffect(() => {\n if (!collection.focusAfterPage.current) return;\n collection.focusAfterPage.current = false;\n roving.focusAt(0);\n }, [collection, collection.page, roving]);\n\n const slots = slotMap(collection);\n const filteredEmpty = collection.totalCount > 0 && collection.filteredCount === 0;\n\n return (\n <div\n className={cn('DataList', className)}\n data-view=\"list\"\n data-size={size}\n data-variant={variant}\n data-filtered={collection.isFiltered ? '' : undefined}\n data-selecting={collection.selection.length ? '' : undefined}\n data-loading={loading ? '' : undefined}\n data-grouped={collection.grouping ? '' : undefined}\n aria-busy={loading || undefined}\n >\n {/* role=list: list-style:none drops the list role in Safari. */}\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles */}\n <ul role=\"list\" aria-label={label}>\n {loading && collection.totalCount === 0 ? <li><LoadingNote text={collection.messages.loading} /></li> : null}\n {!loading || collection.totalCount > 0 ? (\n leaves.length === 0 ? (\n <li>\n {filteredEmpty || collection.isFiltered ? (\n <EmptyState size=\"compact\" kind=\"no-results\" title={collection.messages.noResults} description={collection.messages.noResultsDescription} actions={<Button emphasis=\"standard\" onClick={collection.clearFilters}>{collection.messages.clearFilters}</Button>} />\n ) : (\n empty ?? <EmptyState size=\"compact\" kind=\"start\" title={collection.messages.nothingHere} />\n )}\n </li>\n ) : (\n listItems({ collection, slots, roving, navigate, onRowActivate, getRowHref, activeRowId, rowActions, renderItemExtra })\n )\n ) : null}\n </ul>\n {totals === 'summary' && Object.keys(collection.totals).length ? (\n <p className=\"DataListSummary\">\n {collection.filteredCount} rows\n {Object.entries(collection.totals).map(([id, text]) => <span key={id}> · Total {text}</span>)}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction listItems<T>(args: {\n collection: CollectionApi<T>;\n slots: ReturnType<typeof slotMap<T>>;\n roving: ReturnType<typeof useRovingRows>;\n navigate: boolean;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n activeRowId?: string;\n rowActions?: CollectionViewProps<T>['rowActions'];\n renderItemExtra?: (row: T) => React.ReactNode;\n}) {\n const nodes: React.ReactNode[] = [];\n let leafIndex = 0;\n for (const entry of args.collection.pageEntries) {\n if (entry.kind === 'group') {\n const row = entry.row;\n const children: React.ReactNode[] = [];\n const rest = args.collection.pageEntries.slice(args.collection.pageEntries.indexOf(entry) + 1);\n for (const child of rest) {\n if (child.kind === 'group') break;\n children.push(<ListRow key={child.row.id} entry={child} index={leafIndex} {...args} />);\n leafIndex += 1;\n }\n const selectable = (row.subRows ?? []).filter((child) => args.collection.canSelect?.(child.original as T));\n const subtotal = args.slots.amount ? totalText(args.slots.amount, (row.subRows ?? []).map((child) => child.original as T), args.collection.locale) : '';\n nodes.push(\n <li key={`g-${row.id}`} className=\"DataListGroup\">\n <div className=\"DataListGroupHeader\">\n <button type=\"button\" className=\"CollectionGroupButton\" aria-expanded={row.getIsExpanded()} onClick={() => row.toggleExpanded()}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{row.getIsExpanded() ? 'expand_more' : 'chevron_right'}</span>\n {String(row.groupingValue ?? '')}{entry.continued ? ' (continued)' : ''} · {selectable.length || (row.subRows?.length ?? 0)}\n </button>\n {selectable.length && args.collection.canSelect ? (\n <SelectBox checked={row.getIsAllSubRowsSelected?.() ?? false} indeterminate={Boolean(row.getIsSomeSelected?.() && !row.getIsAllSubRowsSelected?.())} label={`Select ${selectable.length} rows in ${row.groupingValue ?? 'group'}`} onChange={() => row.toggleSelected?.()} />\n ) : null}\n {subtotal ? <span>{subtotal}</span> : null}\n </div>\n {/* list-style: none drops the implicit list role in Safari, so the role stays. */}\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles */}\n {row.getIsExpanded() ? <ul role=\"list\">{children}</ul> : null}\n </li>,\n );\n continue;\n }\n if (entry.row.getParentRow?.()?.getIsGrouped?.()) continue;\n nodes.push(\n <ListRow key={entry.row.id} entry={entry} index={leafIndex} {...args} />,\n );\n leafIndex += 1;\n }\n return nodes;\n}\n\nfunction ListRow<T>({ entry, index, collection, slots, roving, navigate, onRowActivate, getRowHref, activeRowId, rowActions, renderItemExtra }: {\n entry: { row: CollectionRow };\n index: number;\n collection: CollectionApi<T>;\n slots: ReturnType<typeof slotMap<T>>;\n roving: ReturnType<typeof useRovingRows>;\n navigate: boolean;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n activeRowId?: string;\n rowActions?: CollectionViewProps<T>['rowActions'];\n renderItemExtra?: (row: T) => React.ReactNode;\n}) {\n const original = entry.row.original as T;\n const selected = collection.selectionSet.has(entry.row.id);\n const active = activeRowId === entry.row.id;\n const name = rowHeaderText(collection, original);\n const named = levelName(collection, entry.row, name);\n const canSelect = collection.canSelect?.(original) ?? false;\n const href = getRowHref?.(original);\n const activate = () => onRowActivate?.(original);\n const tabIndex = navigate ? (roving.cursor === index ? 0 : -1) : undefined;\n const onKeyDown = (event: React.KeyboardEvent) => roving.onKeyDown(event, index, canSelect ? () => entry.row.toggleSelected?.(!selected) : undefined, href ? undefined : activate);\n const primary = href ? (\n <a ref={(node) => { roving.refs.current[index] = node; }} href={href} tabIndex={tabIndex} aria-label={named === name ? undefined : named} onKeyDown={onKeyDown}>{name}</a>\n ) : (\n <button type=\"button\" className=\"CollectionRowButton\" ref={(node) => { roving.refs.current[index] = node; }} tabIndex={tabIndex} aria-label={named === name ? undefined : named} onKeyDown={onKeyDown} onClick={() => { roving.focusAt(index); activate(); }}>{name}</button>\n );\n return (\n // The row is not a control. The primary button is. The checkbox carries selection.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events\n <li\n data-selected={selected ? '' : undefined}\n aria-current={active ? 'true' : undefined}\n onClick={(event) => {\n if (interactiveTarget(event.target) || selectingText()) return;\n if (event.target instanceof Element && event.target.closest('.DataListExtra, [data-actions]')) return;\n if (href && !onRowActivate) {\n (event.currentTarget.querySelector('a') as HTMLAnchorElement | null)?.click();\n return;\n }\n activate();\n }}\n >\n {collection.canSelect ? (canSelect ? <SelectBox checked={selected} label={`Select ${named}`} onChange={(checked) => entry.row.toggleSelected?.(checked)} /> : <span />) : null}\n <div className=\"DataListBody\">\n <div className=\"DataListPrimary\">{slots.primary ? primary : name}</div>\n {slots.secondary ? <div className=\"DataListSecondary\" data-subtle=\"\"><CellValue column={slots.secondary} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></div> : null}\n {slots.meta.length ? (\n <div className=\"DataListMeta\" data-subtle=\"\">\n {slots.meta.map((column) => <span key={column.id}><CellValue column={column} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></span>)}\n </div>\n ) : null}\n {renderItemExtra ? <div className=\"DataListExtra\">{renderItemExtra(original)}</div> : null}\n </div>\n {slots.amount ? <div className=\"DataListAmount\" data-align=\"end\"><CellValue column={slots.amount} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></div> : null}\n {slots.status ? <div className=\"DataListStatus\"><CellValue column={slots.status} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></div> : null}\n {rowActions ? <span data-actions=\"\"><RowMenu label={collection.messages.actionsFor(name)} actions={rowActions(original)} /></span> : null}\n </li>\n );\n}\n\nfunction slotMap<T>(collection: CollectionApi<T>) {\n const placed = collection.columns.map((column) => ({ column, slot: listSlot(column, collection.columns) }));\n return {\n primary: placed.find((item) => item.slot === 'primary')?.column,\n secondary: placed.find((item) => item.slot === 'secondary')?.column,\n amount: placed.find((item) => item.slot === 'amount')?.column,\n status: placed.find((item) => item.slot === 'status')?.column,\n meta: placed.filter((item) => item.slot === 'meta').map((item) => item.column).slice(0, 3),\n };\n}\n","import * as React from 'react';\n\nimport { cn } from '../../utils/cn';\nimport { useUnderWidth } from '../use-under-width';\nimport { displayHeader, totalText } from './format';\nimport type { CollectionColumn } from './columns';\nimport type { CollectionRow } from './collection-model';\nimport { DataList } from './data-list';\nimport {\n CellValue,\n EmptyRow,\n LoadingNote,\n RowMenu,\n SelectBox,\n alignOf,\n interactiveTarget,\n levelName,\n rowHeaderText,\n selectingText,\n useRovingRows,\n type CollectionViewProps,\n type RowAction,\n} from './view';\nimport type { CollectionApi } from './use-collection';\n\nexport interface DataTableProps<T> extends CollectionViewProps<T> {\n /** Accessible name when there is no caption. */\n label: string;\n caption?: React.ReactNode;\n stickyHeader?: boolean;\n stickyRowHeader?: boolean;\n /** 'scroll' keeps the table. 'list' swaps in DataList when the table is narrower than collection.narrow-width. */\n narrow?: 'scroll' | 'list';\n size?: 'sm' | 'md';\n /**\n * How the footer's totals row looks. 'band' (the default) is the header tray. 'subtotal' rules\n * a single line above it; 'grand' adds a double rule under it, as on a working paper.\n */\n totalStyle?: 'band' | 'subtotal' | 'grand';\n /**\n * Several footer rows, top to bottom, each totalling a scope: 'page' is the rows on this page,\n * 'all' every filtered row. A 'page' row is ruled as a subtotal and an 'all' row as the grand\n * total, so totalStyle is ignored. The label defaults to the messages for page subtotal and total.\n */\n totalRows?: DataTableTotalRow<T>[];\n /** 'caps' sets the column names, and the labels in total rows, in caps-condense, as on a working paper. */\n headerStyle?: 'default' | 'caps';\n /** Sets right-aligned cells (numbers) in the figures text family: mono, tabular. Total rows included. */\n figures?: boolean;\n /** Draws an elbow connector from each child row's name back up to its parent. Use it with getSubRows. */\n treeLines?: boolean;\n /** 'small' shrinks the expand/collapse button so a parent row stays the height of its siblings. */\n disclosure?: 'default' | 'small';\n /** Names a row's kind, set as `data-kind` on the row. 'link' draws the row's name as a link, for a row that opens more rows or a page. */\n getRowKind?: (row: T) => 'link' | (string & {}) | undefined;\n}\n\nexport interface DataTableTotalRow<T = unknown> {\n scope: 'page' | 'all';\n /** Text, or a function of the collection for a label such as \"Page 2 of 5 subtotal\". */\n label?: React.ReactNode | ((collection: CollectionApi<T>) => React.ReactNode);\n}\n\n/**\n * A data table, the APG pattern: one tab stop for the rows, headers announce sort, and it is\n * not a grid. A grid would say this is a spreadsheet, and it is not. AG Grid is that tool.\n */\nexport function DataTable<T>({\n collection,\n label,\n caption,\n onRowActivate,\n getRowHref,\n activeRowId,\n rowActions,\n empty,\n loading,\n stickyHeader = true,\n stickyRowHeader = false,\n narrow = 'scroll',\n size = 'sm',\n totalStyle = 'band',\n totalRows,\n treeLines,\n headerStyle = 'default',\n figures,\n disclosure = 'default',\n getRowKind,\n rowNavigation,\n className,\n}: DataTableProps<T>) {\n const narrowWidth = useUnderWidth('--sl-collection-narrow-width');\n const asList = narrow === 'list' && narrowWidth.under;\n const columns = visibleColumns(collection);\n const leaves = collection.pageEntries.filter((entry) => entry.kind === 'leaf');\n const navigate = rowNavigation ?? Boolean(onRowActivate || getRowHref);\n const colSpan = columns.length + (collection.canSelect ? 1 : 0) + (rowActions ? 1 : 0);\n const selectableIds = collection.filteredRows.filter((row) => collection.canSelect?.(row)).map((row) => collection.getRowId(row));\n const selectedFiltered = selectableIds.filter((id) => collection.selection.includes(id));\n const allSelected = selectableIds.length > 0 && selectedFiltered.length === selectableIds.length;\n const someSelected = selectedFiltered.length > 0 && !allSelected;\n\n const view = asList ? (\n <DataList\n collection={collection}\n label={label}\n onRowActivate={onRowActivate}\n getRowHref={getRowHref}\n activeRowId={activeRowId}\n rowActions={rowActions}\n empty={empty}\n loading={loading}\n size={size}\n rowNavigation={rowNavigation}\n />\n ) : (\n <TableView\n collection={collection}\n columns={columns}\n label={label}\n caption={caption}\n colSpan={colSpan}\n leaves={leaves}\n navigate={navigate}\n allSelected={allSelected}\n someSelected={someSelected}\n loading={loading}\n empty={empty}\n stickyHeader={stickyHeader}\n stickyRowHeader={stickyRowHeader}\n size={size}\n totalStyle={totalStyle}\n totalRows={totalRows}\n treeLines={treeLines}\n headerStyle={headerStyle}\n figures={figures}\n disclosure={disclosure}\n getRowKind={getRowKind}\n className={className}\n onRowActivate={onRowActivate}\n getRowHref={getRowHref}\n activeRowId={activeRowId}\n rowActions={rowActions}\n />\n );\n return (\n <div ref={narrowWidth.ref} className={cn('CollectionView', asList ? className : undefined)} data-narrow={narrowWidth.under ? '' : undefined}>\n {view}\n </div>\n );\n}\n\nfunction TableView<T>({ collection, columns, label, caption, colSpan, leaves, navigate, allSelected, someSelected, loading, empty, stickyHeader, stickyRowHeader, size, totalStyle, totalRows, treeLines, headerStyle, figures, disclosure, getRowKind, className, onRowActivate, getRowHref, activeRowId, rowActions }: {\n collection: CollectionApi<T>;\n columns: CollectionColumn<T>[];\n label: string;\n caption?: React.ReactNode;\n colSpan: number;\n leaves: Array<{ row: CollectionRow }>;\n navigate: boolean;\n allSelected: boolean;\n someSelected: boolean;\n loading?: boolean;\n empty?: React.ReactNode;\n stickyHeader: boolean;\n stickyRowHeader: boolean;\n size: 'sm' | 'md';\n totalStyle: NonNullable<DataTableProps<T>['totalStyle']>;\n totalRows?: DataTableTotalRow<T>[];\n treeLines?: boolean;\n headerStyle: 'default' | 'caps';\n figures?: boolean;\n disclosure: 'default' | 'small';\n getRowKind?: DataTableProps<T>['getRowKind'];\n className?: string;\n onRowActivate?: CollectionViewProps<T>['onRowActivate'];\n getRowHref?: CollectionViewProps<T>['getRowHref'];\n activeRowId?: string;\n rowActions?: CollectionViewProps<T>['rowActions'];\n}) {\n const roving = useRovingRows(leaves.length, navigate);\n const scrollerRef = React.useRef<HTMLDivElement>(null);\n const [overflows, setOverflows] = React.useState(false);\n React.useEffect(() => {\n collection.registerRowFocus(() => roving.focusAt(0));\n return () => collection.registerRowFocus(null);\n }, [collection, roving]);\n React.useLayoutEffect(() => {\n if (!collection.focusAfterPage.current) return;\n collection.focusAfterPage.current = false;\n roving.focusAt(0);\n }, [collection, collection.page, roving]);\n React.useEffect(() => {\n const node = scrollerRef.current;\n if (!node) return;\n const watch = () => {\n const wide = node.scrollWidth > node.clientWidth + 1;\n const tall = stickyHeader && node.scrollHeight > node.clientHeight + 1;\n setOverflows(wide || tall);\n };\n const observer = new ResizeObserver(watch);\n observer.observe(node);\n watch();\n return () => observer.disconnect();\n }, [stickyHeader, leaves.length, columns.length]);\n\n const filteredEmpty = collection.totalCount > 0 && collection.filteredCount === 0;\n const text = collection.messages;\n const ruled = totalStyle !== 'band';\n\n return (\n <div\n ref={scrollerRef}\n className={cn('CollectionScroll', className)}\n // A region only when the table actually scrolls, so a short table is not a second name.\n tabIndex={overflows ? 0 : undefined}\n role={overflows ? 'region' : undefined}\n aria-label={overflows ? `${label}, scrollable` : undefined}\n >\n <table\n className=\"Table DataTable\"\n aria-label={caption ? undefined : label}\n aria-busy={loading || undefined}\n data-size={size}\n data-view=\"table\"\n data-sorted={collection.sort ? '' : undefined}\n data-filtered={collection.isFiltered ? '' : undefined}\n data-selecting={collection.selection.length ? '' : undefined}\n data-loading={loading ? '' : undefined}\n data-grouped={collection.grouping ? '' : undefined}\n data-sticky-header={stickyHeader ? '' : undefined}\n data-sticky-row-header={stickyRowHeader ? '' : undefined}\n data-tree-lines={treeLines ? '' : undefined}\n data-header-style={headerStyle === 'caps' ? 'caps' : undefined}\n data-figures={figures ? '' : undefined}\n data-disclosure={disclosure === 'small' ? 'small' : undefined}\n >\n {caption ? <caption>{caption}</caption> : null}\n <thead>\n <tr>\n {collection.canSelect ? (\n <th scope=\"col\" data-width=\"min\" className=\"CollectionSelectColumn\">\n <SelectBox\n checked={allSelected}\n indeterminate={someSelected}\n label={text.selectAll(collection.filteredRows.filter((row) => collection.canSelect?.(row)).length)}\n onChange={(checked) => (checked ? collection.selectAllFiltered() : collection.clearFilteredSelection())}\n />\n </th>\n ) : null}\n {columns.map((column) => {\n const sorted = collection.sort?.id === column.id ? (collection.sort.desc ? 'descending' : 'ascending') : 'none';\n return (\n <th key={column.id} scope=\"col\" aria-sort={column.sortable ? sorted : undefined} data-align={alignOf(column)} data-width={column.width === 'min' ? 'min' : undefined} style={widthStyle(column.width)}>\n {column.sortable ? (\n <button type=\"button\" className=\"TableSortButton\" onClick={() => collection.cycleSort(column.id)}>\n {displayHeader(column, collection.filteredRows)}\n <span className=\"material-symbols-outlined TableSortIcon\" data-state={sorted} aria-hidden=\"true\">\n {sorted === 'ascending' ? 'arrow_upward' : sorted === 'descending' ? 'arrow_downward' : 'swap_vert'}\n </span>\n </button>\n ) : (\n displayHeader(column, collection.filteredRows)\n )}\n </th>\n );\n })}\n {rowActions ? <th scope=\"col\" data-width=\"min\"><span className=\"visually-hidden\">Actions</span></th> : null}\n </tr>\n </thead>\n {collection.pageEntries.some((entry) => entry.kind === 'group') ? (\n groupedBodies({ collection, columns, leaves, roving, navigate, onRowActivate, getRowHref, getRowKind, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })\n ) : (\n <tbody>\n {bodyRows({ collection, columns, leaves, roving, navigate, onRowActivate, getRowHref, getRowKind, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })}\n </tbody>\n )}\n {Object.keys(collection.totals).length ? (\n <tfoot>\n {(totalRows ?? [{ scope: 'all' as const }]).map((total, rowIndex) => {\n const custom = Boolean(totalRows);\n const ruledRow = custom ? (total.scope === 'page' ? 'subtotal' : 'grand') : ruled ? totalStyle : undefined;\n const rowsInScope = total.scope === 'page' ? collection.pageRows : collection.filteredRows;\n const label = total.label == null ? (total.scope === 'page' ? text.pageSubtotal : text.total) : typeof total.label === 'function' ? total.label(collection) : total.label;\n return (\n <tr key={rowIndex} data-total={ruledRow}>\n {collection.canSelect ? <td data-rule={ruledRow ? 'none' : undefined} /> : null}\n {columns.map((column, index) => (\n // Ruled totals draw their lines under the figures only, not the label or blank cells.\n <td key={column.id} data-align={alignOf(column)} data-rule={ruledRow && (index === 0 || !column.total) ? 'none' : undefined}>\n {index === 0 ? label : column.total ? (\n // With figures, a grand total's double rule sits under the number itself, so it is wrapped to draw it.\n figures && ruledRow === 'grand' ? (\n <span className=\"TableFigure\">{typeof column.total === 'function' ? column.total(rowsInScope) : totalText(column, rowsInScope, collection.locale)}</span>\n ) : typeof column.total === 'function' ? column.total(rowsInScope) : totalText(column, rowsInScope, collection.locale)\n ) : ''}\n {index === 0 && total.scope === 'all' && collection.isFiltered ? <span className=\"visually-hidden\"> of {collection.filteredCount} filtered rows</span> : null}\n </td>\n ))}\n {rowActions ? <td data-rule={ruledRow ? 'none' : undefined} /> : null}\n </tr>\n );\n })}\n </tfoot>\n ) : null}\n </table>\n {loading && collection.totalCount === 0 ? <LoadingNote text={text.loading} /> : null}\n </div>\n );\n}\n\nfunction bodyRows<T>(args: RowArgs<T>) {\n if (args.loading && args.collection.totalCount === 0) return null;\n if (args.leaves.length === 0) {\n return <EmptyRow colSpan={args.colSpan} filtered={args.filteredEmpty || args.collection.isFiltered} onClear={args.collection.clearFilters} empty={args.empty} />;\n }\n return args.leaves.map((entry, index) => (\n <DataRow key={entry.row.id} entry={entry} index={index} {...args} />\n ));\n}\n\nfunction groupedBodies<T>(args: RowArgs<T>) {\n const groups: React.ReactNode[] = [];\n let buffer: Array<{ row: CollectionRow; index: number }> = [];\n let header: React.ReactNode = null;\n let bodyKey = 'rows';\n const flush = () => {\n if (!header && buffer.length === 0) return;\n groups.push(\n <tbody key={bodyKey}>\n {header}\n {buffer.map((item) => <DataRow key={item.row.id} entry={item} index={item.index} {...args} />)}\n </tbody>,\n );\n header = null;\n buffer = [];\n };\n let leafIndex = 0;\n for (const entry of args.collection.pageEntries) {\n if (entry.kind === 'group') {\n flush();\n const row = entry.row;\n bodyKey = row.id;\n const selectable = (row.subRows ?? []).filter((child) => args.collection.canSelect?.(child.original as T));\n const count = selectable.length;\n const name = `${String(row.groupingValue ?? 'group')}${entry.continued ? ' (continued)' : ''}`;\n const leaves = (row.subRows ?? []).map((child) => child.original as T);\n header = (\n <tr data-group=\"\">\n {args.collection.canSelect ? (\n <td data-width=\"min\">\n {count > 0 ? (\n <SelectBox\n checked={row.getIsAllSubRowsSelected?.() ?? false}\n indeterminate={Boolean(row.getIsSomeSelected?.() && !row.getIsAllSubRowsSelected?.())}\n label={`Select ${count} rows in ${row.groupingValue ?? 'group'}`}\n onChange={() => row.toggleSelected?.()}\n />\n ) : null}\n </td>\n ) : null}\n {args.columns.map((column, index) => {\n const subtotal = column.total ? (typeof column.total === 'function' ? column.total(leaves) : totalText(column, leaves, args.collection.locale)) : '';\n const label = `${name} · ${count}`;\n if (index === 0) {\n return (\n <th key={column.id} scope=\"rowgroup\" data-align={alignOf(column)}>\n <button type=\"button\" className=\"CollectionGroupButton\" aria-expanded={row.getIsExpanded()} onClick={() => row.toggleExpanded()}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{row.getIsExpanded() ? 'expand_more' : 'chevron_right'}</span>\n {label}\n </button>\n {subtotal ? <span>{subtotal}</span> : null}\n </th>\n );\n }\n return <td key={column.id} data-align={alignOf(column)}>{subtotal}</td>;\n })}\n {args.rowActions ? <td /> : null}\n </tr>\n );\n continue;\n }\n buffer.push({ row: entry.row, index: leafIndex });\n leafIndex += 1;\n }\n flush();\n if (!groups.length) return <tbody>{bodyRows(args)}</tbody>;\n return groups;\n}\n\ninterface RowArgs<T> {\n collection: CollectionApi<T>;\n columns: CollectionColumn<T>[];\n leaves: Array<{ row: CollectionRow }>;\n roving: ReturnType<typeof useRovingRows>;\n navigate: boolean;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n getRowKind?: (row: T) => string | undefined;\n activeRowId?: string;\n rowActions?: (row: T) => RowAction[];\n colSpan: number;\n filteredEmpty: boolean;\n empty?: React.ReactNode;\n loading?: boolean;\n}\n\nfunction DataRow<T>({ entry, index, collection, columns, roving, navigate, onRowActivate, getRowHref, getRowKind, activeRowId, rowActions }: { entry: { row: CollectionRow }; index: number } & RowArgs<T>) {\n const original = entry.row.original as T;\n const id = entry.row.id;\n const selected = collection.selectionSet.has(id);\n const active = activeRowId === id;\n const name = rowHeaderText(collection, original);\n const named = levelName(collection, entry.row, name);\n const canSelect = collection.canSelect?.(original) ?? false;\n const href = getRowHref?.(original);\n const rowKind = getRowKind?.(original);\n const headerColumn = columns.find((column) => column.rowHeader);\n const headerContent = headerColumn?.cell ? headerColumn.cell(original, { view: 'table', selected, active }) : name;\n const customHeader = Boolean(headerColumn?.cell);\n const activate = () => onRowActivate?.(original);\n const toggle = canSelect ? () => entry.row.toggleSelected?.(!selected) : undefined;\n const tabIndex = navigate ? (roving.cursor === index ? 0 : -1) : undefined;\n const parent = Boolean(entry.row.subRows?.length);\n const onKeyDown = (event: React.KeyboardEvent) => roving.onKeyDown(event, index, toggle, href ? undefined : activate, parent ? { expanded: Boolean(entry.row.getIsExpanded?.()), toggle: () => entry.row.toggleExpanded?.() } : undefined);\n const disclosure = parent ? (\n <button type=\"button\" className=\"CollectionGroupButton\" aria-expanded={entry.row.getIsExpanded()} aria-label={`${entry.row.getIsExpanded() ? 'Collapse' : 'Expand'} ${name}`} onClick={(event) => { event.stopPropagation(); entry.row.toggleExpanded?.(); }}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{entry.row.getIsExpanded() ? 'expand_more' : 'chevron_right'}</span>\n </button>\n ) : null;\n const header = href ? (\n <a ref={(node) => { roving.refs.current[index] = node; }} href={href} tabIndex={tabIndex} aria-label={customHeader ? named : undefined} onKeyDown={onKeyDown} onClick={() => roving.focusAt(index)}>\n {headerContent}\n </a>\n ) : (\n <button\n type=\"button\"\n className=\"CollectionRowButton\"\n ref={(node) => { roving.refs.current[index] = node; }}\n tabIndex={tabIndex}\n aria-label={named === name && !customHeader ? undefined : named}\n onKeyDown={onKeyDown}\n onClick={() => { roving.focusAt(index); activate(); }}\n >\n {headerContent}\n </button>\n );\n return (\n <tr\n aria-selected={selected || undefined}\n aria-current={active ? 'true' : undefined}\n data-depth={entry.row.depth || undefined}\n data-kind={rowKind}\n data-activates={href || onRowActivate ? '' : undefined}\n onClick={(event) => {\n const target = event.target;\n if (interactiveTarget(target) || selectingText()) return;\n if (target instanceof Element && target.closest('.CollectionSelectColumn, [data-actions]')) return;\n if (href && !onRowActivate) {\n (event.currentTarget.querySelector('a') as HTMLAnchorElement | null)?.click();\n return;\n }\n activate();\n }}\n >\n {collection.canSelect ? <td data-width=\"min\">{canSelect ? <SelectBox checked={selected} label={`Select ${named}`} onChange={(checked) => entry.row.toggleSelected?.(checked)} /> : null}</td> : null}\n {columns.map((column) => {\n const Tag = column.rowHeader ? 'th' : 'td';\n return (\n <Tag key={column.id} scope={column.rowHeader ? 'row' : undefined} data-align={alignOf(column)} style={column.rowHeader ? ({ paddingInlineStart: `calc(var(--sl-table-cell-padding-inline) + var(--sl-collection-tree-indent) * ${entry.row.depth})`, '--row-depth': entry.row.depth } as React.CSSProperties) : undefined}>\n {column.rowHeader ? <>{disclosure}{header}</> : <CellValue column={column} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"table\" selected={selected} active={active} />}\n </Tag>\n );\n })}\n {rowActions ? <td data-width=\"min\" data-actions=\"\"><RowMenu label={collection.messages.actionsFor(name)} actions={rowActions(original)} /></td> : null}\n </tr>\n );\n}\n\nfunction visibleColumns<T>(collection: CollectionApi<T>): CollectionColumn<T>[] {\n const order = collection.columnOrder.length ? collection.columnOrder : collection.columns.map((column) => column.id);\n return order\n .map((id) => collection.columns.find((column) => column.id === id))\n .filter((column): column is CollectionColumn<T> => Boolean(column && collection.columnVisibility[column.id] !== false));\n}\n\nfunction widthStyle(width: CollectionColumn<unknown>['width']): React.CSSProperties | undefined {\n if (!width || width === 'auto' || width === 'min') return undefined;\n return { width: `var(--sl-${width.replace(/\\./g, '-')})` };\n}\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { EmptyState } from '../empty-state';\nimport { cn } from '../../utils/cn';\nimport { LoadingNote } from './view';\nimport type { CollectionApi } from './use-collection';\n\nexport interface CollectionCardsProps<T> {\n collection: CollectionApi<T>;\n /** Names the list for screen readers: \"Entities\". */\n label: string;\n /** One card for a row, such as a StatCard. */\n renderCard: (row: T) => React.ReactNode;\n /** Shown when the data itself is empty. A search with no matches uses the built-in no-results state. */\n empty?: React.ReactNode;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * The rows of a collection as a grid of cards, for a page that lists things such as Entities or\n * accounts. Search, filter, sort and paging come from the same collection the table and list use,\n * so CollectionToolbar and CollectionPagination work with it unchanged. It shows the current page.\n */\nexport function CollectionCards<T>({ collection, label, renderCard, empty, loading, className }: CollectionCardsProps<T>) {\n const rows = collection.pageRows;\n if (loading && collection.totalCount === 0) {\n return <LoadingNote text={collection.messages.loading} />;\n }\n if (!rows.length) {\n return collection.totalCount > 0 || collection.isFiltered ? (\n <EmptyState\n size=\"compact\"\n kind=\"no-results\"\n title={collection.messages.noResults}\n description={collection.messages.noResultsDescription}\n actions={<Button emphasis=\"standard\" onClick={collection.clearFilters}>{collection.messages.clearFilters}</Button>}\n />\n ) : (\n <>{empty ?? <EmptyState size=\"compact\" kind=\"start\" title={collection.messages.nothingHere} />}</>\n );\n }\n return (\n <ul className={cn('CollectionCards', className)} aria-label={label}>\n {rows.map((row) => (\n <li key={collection.getRowId(row)}>{renderCard(row)}</li>\n ))}\n </ul>\n );\n}\n","import { Button } from '../../components/button';\nimport { Select } from '../../components/select';\nimport { cn } from '../../utils/cn';\n\nexport interface CollectionPaginationProps {\n /** 1-based. */\n page: number;\n pageCount: number;\n pageSize?: number;\n total: number;\n filtered?: boolean;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n pageSizeOptions?: number[];\n /** Used in the nav label: \"Pagination for Transactions\". */\n label: string;\n previousLabel?: string;\n nextLabel?: string;\n rowsPerPageLabel?: string;\n className?: string;\n}\n\n/**\n * Generic on purpose: page, pageCount, pageSize, total and onPageChange are enough\n * to use it without a collection. A collection passes those through.\n */\nexport function CollectionPagination({\n page,\n pageCount,\n pageSize,\n total,\n filtered,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions,\n label,\n previousLabel = 'Previous',\n nextLabel = 'Next',\n rowsPerPageLabel = 'Rows per page',\n className,\n}: CollectionPaginationProps) {\n const size = pageSize && pageSize > 0 ? pageSize : total;\n const start = total === 0 ? 0 : (page - 1) * size + 1;\n const end = Math.min(total, page * size);\n return (\n <nav className={cn('CollectionPagination', className)} aria-label={`Pagination for ${label}`}>\n <p>\n {total === 0 ? '0' : `${start}–${end}`} of {total}{filtered ? ' filtered' : ''}\n </p>\n <Button emphasis=\"quiet\" disabled={page <= 1} onClick={() => onPageChange(page - 1)}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">chevron_left</span>\n {previousLabel}\n </Button>\n <Button emphasis=\"quiet\" disabled={page >= pageCount} onClick={() => onPageChange(page + 1)}>\n {nextLabel}\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">chevron_right</span>\n </Button>\n {pageSizeOptions?.length && onPageSizeChange ? (\n <Select.Root\n items={pageSizeOptions.map((option) => ({ value: String(option), label: `${option} per page` }))}\n value={String(pageSize ?? '')}\n onValueChange={(value) => onPageSizeChange(Number(value))}\n >\n <Select.Trigger aria-label={rowsPerPageLabel}>\n <Select.Value />\n <Select.Icon><span className=\"material-symbols-outlined\">expand_more</span></Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Positioner>\n <Select.Popup>\n <Select.List>\n {pageSizeOptions.map((option) => (\n <Select.Item key={option} value={String(option)}>{option} per page</Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n ) : null}\n </nav>\n );\n}\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { Combobox } from '../../components/combobox';\nimport { Input } from '../../components/input';\nimport { Select } from '../../components/select';\nimport { Tabs } from '../../components/tabs';\nimport { cn } from '../../utils/cn';\nimport { useUnderWidth } from '../use-under-width';\nimport { headerLabel, type CollectionColumn, type FilterOption } from './columns';\nimport type { CollectionApi } from './use-collection';\n\n/** A select longer than this becomes a combobox, the same cutoff MoneyField uses. */\nconst COMBOBOX_AT = 12;\n\nexport interface CollectionToolbarProps<T> {\n collection: CollectionApi<T>;\n /** Required when any column is searchable. */\n searchLabel?: string;\n searchLabelVisible?: boolean;\n /** The table sorts from its headers. The list, and a table that asks, sorts from here. */\n showSort?: boolean;\n /** Adds a Group by select. The hook already holds the grouping. */\n groupOptions?: Array<{ value: string; label: string }>;\n actions?: React.ReactNode;\n bulkActions?: React.ReactNode;\n /** Placeholder text in the search box, such as \"Find a client\". The label still names it for screen readers. */\n searchPlaceholder?: string;\n /** 'fill' (the default) lets the search grow. 'fixed' gives it collection.search-fixed-width, so the meta beside it has room. */\n searchWidth?: 'fill' | 'fixed';\n /** Quiet text beside the search, such as \"12 clients\". */\n meta?: React.ReactNode;\n /** Quiet text at the far end of the row, such as \"Sorted by most open\". */\n metaEnd?: React.ReactNode;\n /** Pads the toolbar and rules it from the table below, for a toolbar inside a Sheet above an edge-to-edge table. */\n framed?: boolean;\n className?: string;\n}\n\n/**\n * Tabs and search stay put while rows are selected. The trailing controls swap for the\n * selection bar, so the bar takes their place and the row does not grow.\n */\nfunction CollectionToolbarImpl<T>({ collection, searchLabel, searchLabelVisible, searchPlaceholder, showSort, groupOptions, actions, bulkActions, searchWidth = 'fill', meta, metaEnd, framed, className }: CollectionToolbarProps<T>) {\n const tabs = collection.columns.find((column) => column.filter?.kind === 'tabs');\n const selects = collection.columns.filter((column) => column.filter && column.filter.kind !== 'tabs');\n const searchable = collection.columns.some((column) => column.searchable);\n if (process.env.NODE_ENV !== 'production' && searchable && !searchLabel) {\n console.warn('CollectionToolbar needs searchLabel when a column is searchable.');\n }\n const [announced, setAnnounced] = React.useState('');\n const seenSelection = React.useRef(false);\n React.useEffect(() => {\n const first = !seenSelection.current;\n seenSelection.current = true;\n if (first && collection.selection.length === 0) return;\n setAnnounced('');\n const timer = window.setTimeout(() => {\n if (!collection.selection.length) {\n setAnnounced(collection.messages.selectionCleared);\n return;\n }\n const hidden = collection.hiddenSelectedCount ? `, ${collection.messages.hiddenByFilters(collection.hiddenSelectedCount)}` : '';\n setAnnounced(`${collection.messages.selected(collection.selection.length)}${hidden}`);\n }, 200);\n return () => window.clearTimeout(timer);\n }, [collection.selection, collection.hiddenSelectedCount, collection.messages]);\n\n const selecting = collection.selection.length > 0;\n const narrow = useUnderWidth('--sl-collection-narrow-width');\n\n return (\n <div ref={narrow.ref} className={cn('CollectionToolbar', className)} data-selecting={selecting ? '' : undefined} data-narrow={narrow.under ? '' : undefined} data-search={searchWidth === 'fixed' ? 'fixed' : undefined} data-framed={framed ? '' : undefined}>\n {tabs ? <ToolbarTabs collection={collection} column={tabs} /> : null}\n <div className=\"CollectionToolbarMain\">\n {searchable ? (\n <SearchField\n label={searchLabel ?? 'Search'}\n visible={searchLabelVisible}\n placeholder={searchPlaceholder}\n value={collection.search}\n onChange={collection.setSearch}\n clearLabel={collection.messages.clearSearch}\n />\n ) : null}\n {meta ? <p className=\"CollectionToolbarMeta\" aria-live=\"polite\">{meta}</p> : null}\n {metaEnd ? <p className=\"CollectionToolbarMeta CollectionToolbarMetaEnd\">{metaEnd}</p> : null}\n {selecting ? (\n <div className=\"CollectionSelectionBar\" role=\"region\" aria-label=\"Selection\">\n <p className=\"CollectionCount\">\n {collection.messages.selected(collection.selection.length)}\n {collection.hiddenSelectedCount > 0 ? <span> · {collection.messages.hiddenByFilters(collection.hiddenSelectedCount)}</span> : null}\n </p>\n <div className=\"CollectionToolbarActions\">{bulkActions}</div>\n <Button emphasis=\"quiet\" onClick={collection.clearSelection}>Clear selection</Button>\n </div>\n ) : (\n <div className=\"CollectionToolbarTrailing\">\n {selects.map((column) => <FilterControl key={column.id} collection={collection} column={column} />)}\n {groupOptions?.length ? (\n <FilterSelect\n label=\"Group by\"\n value={collection.grouping ?? ''}\n options={[{ value: '', label: 'No grouping' }, ...groupOptions]}\n onChange={(value) => collection.setGrouping(typeof value === 'string' && value ? value : null)}\n />\n ) : null}\n {showSort ? <SortControl collection={collection} /> : null}\n {actions ? <div className=\"CollectionToolbarActions\">{actions}</div> : null}\n </div>\n )}\n </div>\n <div className=\"visually-hidden\" aria-live=\"polite\">{announced}</div>\n </div>\n );\n}\n\nfunction ToolbarTabs<T>({ collection, column }: { collection: CollectionApi<T>; column: CollectionColumn<T> }) {\n const counts = collection.facetCounts(column.id);\n const options: FilterOption[] = column.filter?.options ?? [...counts.keys()].filter((value) => value !== '').sort().map((value) => ({ value, label: value }));\n const allCount = [...counts.values()].reduce((sum, count) => sum + count, 0);\n const current = collection.filters[column.id];\n const value = current == null || current === '' ? '' : String(current);\n return (\n <Tabs.Root value={value} onValueChange={(next) => collection.setFilter(column.id, next === '' ? undefined : next)}>\n <Tabs.List>\n {options.map((option) => {\n const count = option.value === '' || option.all ? allCount : counts.get(option.value) ?? 0;\n const tabValue = option.all ? '' : option.value;\n return (\n <Tabs.Tab key={tabValue || 'all'} value={tabValue}>\n {option.label} {count}\n </Tabs.Tab>\n );\n })}\n </Tabs.List>\n </Tabs.Root>\n );\n}\n\n/**\n * The icon and the clear button sit inside the field. The clear button is the only clear\n * control and shows only when there is text. Escape clears too.\n */\nfunction SearchField({ label, visible, placeholder, value, onChange, clearLabel = 'Clear search' }: {\n label: string;\n placeholder?: string;\n visible?: boolean;\n value: string;\n onChange: (value: string) => void;\n clearLabel?: string;\n}) {\n const id = React.useId();\n const input = React.useRef<HTMLInputElement>(null);\n return (\n <div className=\"CollectionSearch\">\n <label htmlFor={id} className={visible ? undefined : 'visually-hidden'}>{label}</label>\n <div className=\"CollectionSearchField\" data-filled={value ? '' : undefined}>\n <span className=\"CollectionSearchIcon material-symbols-outlined\" aria-hidden=\"true\">search</span>\n <Input\n ref={input}\n id={id}\n type=\"search\"\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && value) {\n event.preventDefault();\n onChange('');\n }\n }}\n />\n {value ? (\n <button\n type=\"button\"\n className=\"CollectionSearchClear\"\n aria-label={clearLabel}\n onClick={() => {\n onChange('');\n input.current?.focus();\n }}\n >\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">close</span>\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction FilterControl<T>({ collection, column }: { collection: CollectionApi<T>; column: CollectionColumn<T> }) {\n const counts = collection.facetCounts(column.id);\n const options = column.filter?.options ?? [...counts.keys()].filter((value) => value !== '').sort().map((value) => ({ value, label: value }));\n const label = column.filter?.label ?? headerLabel(column);\n if (column.filter?.kind === 'boolean') {\n const value = collection.filters[column.id];\n return (\n <FilterSelect\n label={label}\n value={value == null || value === '' ? '' : String(value)}\n options={[{ value: '', label: 'Any' }, { value: 'true', label: 'Yes' }, { value: 'false', label: 'No' }]}\n onChange={(next) => collection.setFilter(column.id, next === '' || Array.isArray(next) ? undefined : next === 'true')}\n />\n );\n }\n if (column.filter?.kind === 'multi-select') {\n const selected = Array.isArray(collection.filters[column.id]) ? (collection.filters[column.id] as string[]) : [];\n return (\n <FilterSelect\n label={label}\n multiple\n value={selected}\n options={options}\n onChange={(next) => {\n const values = Array.isArray(next) ? next : [];\n collection.setFilter(column.id, values.length ? values : undefined);\n }}\n />\n );\n }\n if (options.length > COMBOBOX_AT) {\n return (\n <ComboboxField\n label={label}\n value={String(collection.filters[column.id] ?? '')}\n options={options}\n onChange={(next) => collection.setFilter(column.id, next || undefined)}\n />\n );\n }\n return (\n <FilterSelect\n label={label}\n value={String(collection.filters[column.id] ?? '')}\n options={[{ value: '', label: 'Any' }, ...options]}\n onChange={(next) => collection.setFilter(column.id, next || undefined)}\n />\n );\n}\n\nfunction FilterSelect({ label, value, options, onChange, multiple }: {\n label: string;\n value: string | string[];\n options: Array<{ value: string; label: string }>;\n onChange: (value: string | string[]) => void;\n multiple?: boolean;\n}) {\n const labelId = React.useId();\n const valueId = React.useId();\n const items = options.map((option) => ({ value: option.value, label: option.label }));\n const chosen = Array.isArray(value) ? (value.length ? `${value.length} selected` : 'Any') : (options.find((option) => option.value === value)?.label ?? 'Any');\n return (\n <Select.Root items={items} multiple={multiple} value={multiple ? (value as string[]) : (value as string)} onValueChange={(next) => onChange(multiple ? (Array.isArray(next) ? next.map(String) : []) : (next == null ? '' : String(next)))}>\n <Select.Trigger aria-labelledby={`${labelId} ${valueId}`}>\n <span id={labelId} className=\"visually-hidden\">{label}</span>\n <span id={valueId}>{label}: {chosen}</span>\n <Select.Icon><span className=\"material-symbols-outlined\">expand_more</span></Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Positioner>\n <Select.Popup>\n <Select.List>\n {items.map((item) => (\n <Select.Item key={item.value || 'any'} value={item.value}>{item.label}</Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nfunction ComboboxField({ label, value, options, onChange }: { label: string; value: string; options: Array<{ value: string; label: string }>; onChange: (value: string) => void }) {\n const id = React.useId();\n return (\n <Combobox.Root items={options.map((option) => option.label)} value={options.find((option) => option.value === value)?.label ?? null} onValueChange={(next) => {\n const match = options.find((option) => option.label === next);\n onChange(match?.value ?? '');\n }}>\n <label htmlFor={id} className=\"visually-hidden\">{label}</label>\n <div className=\"ComboboxInputWrapper\">\n <Combobox.Input id={id} placeholder={label} aria-label={label} />\n </div>\n <Combobox.Portal>\n <Combobox.Positioner>\n <Combobox.Popup>\n <Combobox.Empty>No matches</Combobox.Empty>\n <Combobox.List>\n {(item: string) => <Combobox.Item key={item} value={item}>{item}</Combobox.Item>}\n </Combobox.List>\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n );\n}\n\nfunction SortControl<T>({ collection }: { collection: CollectionApi<T> }) {\n const columns = collection.columns.filter((column) => column.sortable);\n return (\n <div className=\"CollectionSort\">\n <FilterSelect\n label=\"Sort\"\n value={collection.sort?.id ?? ''}\n options={columns.map((column) => ({ value: column.id, label: headerLabel(column) }))}\n onChange={(id) => {\n const next = typeof id === 'string' ? id : '';\n collection.setSort(next ? { id: next, desc: collection.sort?.id === next ? collection.sort.desc : false } : null);\n }}\n />\n <Button\n emphasis=\"quiet\"\n aria-pressed={Boolean(collection.sort?.desc)}\n aria-label={collection.sort?.desc ? 'Sort direction, descending' : 'Sort direction, ascending'}\n disabled={!collection.sort}\n onClick={() => collection.sort && collection.setSort({ ...collection.sort, desc: !collection.sort.desc })}\n >\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{collection.sort?.desc ? 'arrow_downward' : 'arrow_upward'}</span>\n </Button>\n </div>\n );\n}\n\nfunction ToolbarClear<T>({ collection }: { collection: CollectionApi<T> }) {\n if (!collection.isFiltered) return null;\n return <Button emphasis=\"quiet\" onClick={collection.clearFilters}>{collection.messages.clearFilters}</Button>;\n}\n\nfunction ToolbarActions({ children }: { children?: React.ReactNode }) {\n return <div className=\"CollectionToolbarActions\">{children}</div>;\n}\n\nfunction ToolbarSelection<T>({ collection, children }: { collection: CollectionApi<T>; children?: React.ReactNode }) {\n if (!collection.selection.length) return null;\n return (\n <div className=\"CollectionSelectionBar\" role=\"region\" aria-label=\"Selection\">\n <p className=\"CollectionCount\">{collection.messages.selected(collection.selection.length)}</p>\n {children}\n <Button emphasis=\"quiet\" onClick={collection.clearSelection}>Clear selection</Button>\n </div>\n );\n}\n\nfunction ToolbarRoot({ className, children }: { className?: string; children?: React.ReactNode }) {\n return <div className={cn('CollectionToolbar', className)}>{children}</div>;\n}\n\nexport const CollectionToolbar = Object.assign(CollectionToolbarImpl, {\n Root: ToolbarRoot,\n Tabs: ToolbarTabs,\n Search: SearchField,\n Filter: FilterControl,\n Sort: SortControl,\n Clear: ToolbarClear,\n Actions: ToolbarActions,\n SelectionBar: ToolbarSelection,\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any -- TanStack types a row as Record<string, any>. A collection's row is the app's own type, so the table boundary stays loose. */\nimport {\n columnFacetingFeature,\n columnFilteringFeature,\n columnGroupingFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n createExpandedRowModel,\n createFacetedRowModel,\n createFacetedUniqueValues,\n createFilteredRowModel,\n createGroupedRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n globalFilteringFeature,\n rowExpandingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n tableFeatures,\n type ColumnDef,\n type FilterFn,\n type Row,\n type SortFn,\n type Table,\n} from '@tanstack/react-table';\n\nimport {\n collatorFor,\n comparePresent,\n isEmptyValue,\n searchMatches,\n treeVisibleIds,\n} from './collection-utils';\nimport { headerLabel, type CollectionColumn } from './columns';\nimport { rowSearchText } from './format';\n\nexport const collectionFeatures = tableFeatures({\n rowSortingFeature,\n columnFilteringFeature,\n globalFilteringFeature,\n columnFacetingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n columnGroupingFeature,\n rowExpandingFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n sortedRowModel: createSortedRowModel(),\n filteredRowModel: createFilteredRowModel(),\n groupedRowModel: createGroupedRowModel(),\n expandedRowModel: createExpandedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n facetedRowModel: createFacetedRowModel(),\n facetedUniqueValues: createFacetedUniqueValues(),\n});\n\nexport type CollectionTable = Table<typeof collectionFeatures, any>;\nexport type CollectionRow = Row<typeof collectionFeatures, any>;\n\nexport interface CollectionModelInput<T> {\n rows: readonly T[];\n columns: CollectionColumn<T>[];\n getRowId: (row: T) => string;\n getSubRows?: (row: T) => readonly T[] | undefined;\n locale: string;\n state?: Record<string, unknown>;\n initialState?: Record<string, unknown>;\n onStateChange?: Record<string, (updater: unknown) => void>;\n canSelect?: (row: T) => boolean;\n}\n\nexport function toColumnDefs<T>(columns: CollectionColumn<T>[]): ColumnDef<typeof collectionFeatures, any>[] {\n return columns.map((column) => ({\n id: column.id,\n accessorFn: (row: T) => {\n const value = column.value(row);\n return isEmptyValue(value) ? undefined : value;\n },\n header: headerLabel(column),\n enableSorting: Boolean(column.sortable),\n sortUndefined: 'last' as const,\n // A tie returns 0. TanStack multiplies the result by -1 when descending, so an index tie would reverse, and it already falls back to the row index.\n sortFn: ((rowA, rowB, columnId) => {\n const locale = (rowA.table.options.meta as { locale?: string } | undefined)?.locale ?? 'en';\n return comparePresent(rowA.getValue(columnId), rowB.getValue(columnId), column.kind ?? 'text', collatorFor(locale));\n }) as SortFn<typeof collectionFeatures, any>,\n enableGlobalFilter: column.searchable != null && column.searchable !== false,\n enableColumnFilter: Boolean(column.filter),\n enableGrouping: true,\n enableHiding: true,\n filterFn: column.filter ? filterFor(column) : undefined,\n meta: column,\n ...column.tanstack,\n } as ColumnDef<typeof collectionFeatures, any>));\n}\n\nfunction filterFor<T>(column: CollectionColumn<T>): FilterFn<typeof collectionFeatures, any> {\n void column;\n const fn: FilterFn<typeof collectionFeatures, any> = (row, columnId, filterValue) => {\n if (filterValue == null || filterValue === '' || (Array.isArray(filterValue) && filterValue.length === 0)) return true;\n const value = String(row.getValue(columnId) ?? '');\n if (Array.isArray(filterValue)) return filterValue.map(String).includes(value);\n if (typeof filterValue === 'boolean') return String(Boolean(row.getValue(columnId))) === String(filterValue) || value === String(filterValue);\n return value === String(filterValue);\n };\n fn.autoRemove = (filterValue) => filterValue == null || filterValue === '' || (Array.isArray(filterValue) && filterValue.length === 0);\n return fn;\n}\n\nexport function collectionTableOptions<T>(input: CollectionModelInput<T>) {\n const columns = input.columns;\n const locale = input.locale;\n const searchKey = `${locale}\\u0000${columns.map((column) => column.id).join('\\u0000')}`;\n const searchCache = new WeakMap<object, { key: string; text: string }>();\n const textOf = (row: T) => {\n const cached = searchCache.get(row as object);\n if (cached?.key === searchKey) return cached.text;\n const text = rowSearchText(row, columns, locale);\n searchCache.set(row as object, { key: searchKey, text });\n return text;\n };\n let treeCacheQuery = '\\u0000';\n let treeCache = new Set<string>();\n const globalFilterFn: FilterFn<typeof collectionFeatures, any> = (row, _columnId, query) => {\n const text = String(query ?? '');\n if (!input.getSubRows) return searchMatches(text, textOf(row.original));\n if (treeCacheQuery !== text) {\n treeCacheQuery = text;\n treeCache = treeVisibleIds(input.rows, input.getRowId, (item) => input.getSubRows?.(item), (item) =>\n searchMatches(text, textOf(item)),\n );\n }\n return treeCache.has(input.getRowId(row.original));\n };\n\n return {\n features: collectionFeatures,\n data: input.rows as T[],\n columns: toColumnDefs(columns),\n getRowId: (row: T) => input.getRowId(row),\n getSubRows: input.getSubRows as ((row: T) => T[] | undefined) | undefined,\n // A column filter on a tree keeps the parents of a matching child, the same way search does.\n filterFromLeafRows: Boolean(input.getSubRows),\n getColumnCanGlobalFilter: (column: { columnDef: { meta?: CollectionColumn<T> } }) => {\n const meta = column.columnDef.meta;\n return meta?.searchable != null && meta.searchable !== false;\n },\n enableRowSelection: input.canSelect ? (row: { original: T }) => input.canSelect!(row.original) : false,\n enableMultiRowSelection: true,\n enableSubRowSelection: true,\n globalFilterFn,\n meta: { locale, columns },\n state: input.state,\n initialState: input.initialState,\n onGlobalFilterChange: input.onStateChange?.globalFilter,\n onSortingChange: input.onStateChange?.sorting,\n onColumnFiltersChange: input.onStateChange?.columnFilters,\n onPaginationChange: input.onStateChange?.pagination,\n onRowSelectionChange: input.onStateChange?.rowSelection,\n onGroupingChange: input.onStateChange?.grouping,\n onExpandedChange: input.onStateChange?.expanded,\n onColumnOrderChange: input.onStateChange?.columnOrder,\n onColumnVisibilityChange: input.onStateChange?.columnVisibility,\n autoResetPageIndex: false,\n // Resetting expanded would close every group on the first data change. Groups start open.\n autoResetExpanded: false,\n };\n}\n","import { useDeferredValue, useEffect, useMemo, useRef, useState, type MutableRefObject } from 'react';\nimport { useTable } from '@tanstack/react-table';\n\nimport type { CollectionColumn } from './columns';\nimport { collectionTableOptions, type CollectionRow, type CollectionTable } from './collection-model';\nimport { hiddenSelectedCount, nextSort, pageBounds, pageFlat, selectableIds, type FlatEntry } from './collection-utils';\nimport { totalText } from './format';\n\nexport interface CollectionSort {\n id: string;\n desc: boolean;\n}\n\nexport interface CollectionMessages {\n selectAll: (count: number) => string;\n actionsFor: (name: string) => string;\n total: string;\n pageSubtotal: string;\n selected: (count: number) => string;\n hiddenByFilters: (count: number) => string;\n noResults: string;\n noResultsDescription: string;\n clearFilters: string;\n clearSearch: string;\n nothingHere: string;\n previous: string;\n next: string;\n rowsPerPage: string;\n selectionCleared: string;\n loading: string;\n}\n\nexport const defaultMessages: CollectionMessages = {\n selectAll: (count) => `Select all ${count} filtered rows`,\n actionsFor: (name) => `Actions for ${name}`,\n total: 'Total',\n pageSubtotal: 'Page subtotal',\n selected: (count) => `${count} selected`,\n hiddenByFilters: (count) => `${count} hidden by filters`,\n noResults: 'No results',\n noResultsDescription: 'Nothing matches the current search or filters.',\n clearFilters: 'Clear filters',\n clearSearch: 'Clear search',\n nothingHere: 'Nothing here yet',\n previous: 'Previous',\n next: 'Next',\n rowsPerPage: 'Rows per page',\n selectionCleared: 'Selection cleared',\n loading: 'Loading',\n};\n\nexport interface UseCollectionOptions<T> {\n rows: readonly T[];\n columns: CollectionColumn<T>[];\n getRowId: (row: T) => string;\n initialSort?: CollectionSort;\n initialFilters?: Record<string, unknown>;\n /** Omit it and the table has no selection column. */\n canSelect?: (row: T) => boolean;\n /** Omit it and every filtered row is on one page. */\n pageSize?: number;\n groupBy?: string;\n getSubRows?: (row: T) => readonly T[] | undefined;\n /**\n * What a page counts. 'row' (the default) pages by rows, so a page can end partway through a\n * parent's children. 'top-level' pages a tree by its top-level rows: each page holds whole\n * parents with all their visible children, and the page size, page count and\n * `pageTotal` all count parents.\n */\n pageBy?: 'row' | 'top-level';\n /** Groups and tree parents start open. Pass false to start them closed. */\n defaultExpanded?: boolean;\n /** Page sizes the control offers. A stored size outside this list is dropped. */\n pageSizeOptions?: number[];\n /** Remember search, sort, filters, page size and grouping for this screen. Not the selection or the page. */\n stateKey?: string;\n messages?: Partial<CollectionMessages>;\n storage?: Pick<Storage, 'getItem' | 'setItem'>;\n locale?: string;\n /** Dryden clears the selection when a refresh replaces the rows. Default keeps it. */\n clearSelectionOnRowsChange?: boolean;\n search?: string;\n onSearchChange?: (value: string) => void;\n sort?: CollectionSort | null;\n onSortChange?: (sort: CollectionSort | null) => void;\n filters?: Record<string, unknown>;\n onFiltersChange?: (filters: Record<string, unknown>) => void;\n selection?: string[];\n onSelectionChange?: (ids: string[]) => void;\n /** 1-based. */\n page?: number;\n onPageChange?: (page: number) => void;\n grouping?: string | null;\n onGroupingChange?: (grouping: string | null) => void;\n columnOrder?: string[];\n onColumnOrderChange?: (order: string[]) => void;\n columnVisibility?: Record<string, boolean>;\n onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void;\n}\n\nexport interface CollectionApi<T> {\n table: CollectionTable;\n columns: CollectionColumn<T>[];\n getRowId: (row: T) => string;\n locale: string;\n search: string;\n setSearch: (value: string) => void;\n sort: CollectionSort | null;\n setSort: (sort: CollectionSort | null) => void;\n cycleSort: (columnId: string) => void;\n filters: Record<string, unknown>;\n setFilter: (columnId: string, value: unknown) => void;\n clearFilters: () => void;\n facetCounts: (columnId: string) => Map<string, number>;\n selection: string[];\n selectedRows: T[];\n selectAllFiltered: () => void;\n clearSelection: () => void;\n /** Drops the selection of rows the current filters still show. Hidden rows stay selected. */\n clearFilteredSelection: () => void;\n selectionSet: ReadonlySet<string>;\n messages: CollectionMessages;\n hiddenSelectedCount: number;\n filteredRows: T[];\n filteredCount: number;\n /** What the pager counts: filtered rows, or the filtered top-level rows when `pageBy` is 'top-level'. */\n pageTotal: number;\n /** The leaf rows of this page. With `pageBy: 'top-level'` that includes children of collapsed parents. */\n pageRows: T[];\n totalCount: number;\n totals: Record<string, string>;\n page: number;\n pageCount: number;\n setPage: (page: number) => void;\n pageSize?: number;\n setPageSize: (size: number) => void;\n isFiltered: boolean;\n reset: () => void;\n grouping: string | null;\n setGrouping: (columnId: string | null) => void;\n columnOrder: string[];\n setColumnOrder: (order: string[]) => void;\n columnVisibility: Record<string, boolean>;\n setColumnVisibility: (visibility: Record<string, boolean>) => void;\n canSelect?: (row: T) => boolean;\n /** The rows of this page, with group headers repeated when a group continues. */\n pageEntries: Array<FlatEntry<CollectionRow> & { continued?: boolean }>;\n rowHeaderId?: string;\n registerRowFocus: (focus: (() => void) | null) => void;\n focusFirstRow: () => void;\n /** Set when the page changes. The view focuses the first row after that page has rendered. */\n focusAfterPage: MutableRefObject<boolean>;\n}\n\ninterface StoredView {\n search?: string;\n sort?: CollectionSort | null;\n filters?: Record<string, unknown>;\n pageSize?: number;\n grouping?: string | null;\n}\n\nfunction readStored(storage: Pick<Storage, 'getItem'> | undefined, key: string | undefined, columnIds: ReadonlySet<string>, pageSizeOptions?: number[]): StoredView {\n if (!storage || !key) return {};\n try {\n const raw = storage.getItem(`loomiere:collection:${key}`);\n const stored = raw ? (JSON.parse(raw) as StoredView) : {};\n if (stored.sort && !columnIds.has(stored.sort.id)) stored.sort = null;\n if (stored.filters) {\n stored.filters = Object.fromEntries(Object.entries(stored.filters).filter(([id]) => columnIds.has(id)));\n }\n if (stored.grouping && !columnIds.has(stored.grouping)) stored.grouping = null;\n if (stored.pageSize != null && pageSizeOptions?.length && !pageSizeOptions.includes(stored.pageSize)) stored.pageSize = undefined;\n return stored;\n } catch {\n return {};\n }\n}\n\n/** A tabs filter with no All option starts on the first tab, so the rows and the selected tab agree. */\nfunction withTabDefaults<T>(columns: CollectionColumn<T>[], filters: Record<string, unknown>): Record<string, unknown> {\n const next = { ...filters };\n for (const column of columns) {\n if (column.filter?.kind !== 'tabs') continue;\n const current = next[column.id];\n if (current != null && current !== '') continue;\n const options = column.filter.options ?? [];\n if (options.some((option) => option.value === '' || option.all)) continue;\n if (options[0]) next[column.id] = options[0].value;\n }\n return next;\n}\n\nfunction filtersToList(filters: Record<string, unknown>) {\n return Object.entries(filters)\n .filter(([, value]) => value != null && value !== '' && !(Array.isArray(value) && value.length === 0))\n .map(([id, value]) => ({ id, value }));\n}\n\nfunction selectionRecord(ids: readonly string[]): Record<string, true> {\n const record: Record<string, true> = {};\n for (const id of ids) record[id] = true;\n return record;\n}\n\nexport function useCollection<T>(options: UseCollectionOptions<T>): CollectionApi<T> {\n const storage = options.storage ?? (typeof sessionStorage === 'undefined' ? undefined : sessionStorage);\n const columnIds = useMemo(() => new Set(options.columns.map((column) => column.id)), [options.columns]);\n const stored = useRef(readStored(storage, options.stateKey, columnIds, options.pageSizeOptions)).current;\n const locale = options.locale || (typeof document === 'undefined' ? 'en' : document.documentElement.lang) || 'en';\n const messages = { ...defaultMessages, ...options.messages };\n const initialSort = options.initialSort ?? null;\n const initialFilters = withTabDefaults(options.columns, options.initialFilters ?? {});\n const initialGrouping = options.groupBy ?? null;\n const initialVisibility = Object.fromEntries(options.columns.map((column) => [column.id, !column.hidden]));\n const initialOrder = options.columns.map((column) => column.id);\n\n const [searchState, setSearchState] = useState(stored.search ?? '');\n const [sortState, setSortState] = useState<CollectionSort | null>(stored.sort ?? initialSort);\n const [filterState, setFilterState] = useState<Record<string, unknown>>(stored.filters ?? initialFilters);\n const [selectionState, setSelectionState] = useState<string[]>([]);\n const [pageState, setPageState] = useState(1);\n const [pageSizeState, setPageSizeState] = useState(stored.pageSize ?? options.pageSize);\n const [groupingState, setGroupingState] = useState<string | null>(stored.grouping ?? initialGrouping);\n const [orderState, setOrderState] = useState(initialOrder);\n const [visibilityState, setVisibilityState] = useState(initialVisibility);\n const [expanded, setExpanded] = useState<true | Record<string, boolean>>(options.defaultExpanded === false ? {} : true);\n const expandedBeforeSearch = useRef<true | Record<string, boolean> | null>(null);\n const focusAfterPage = useRef(false);\n\n const search = options.search ?? searchState;\n const sort = options.sort === undefined ? sortState : options.sort;\n const filters = options.filters ?? filterState;\n const selection = options.selection ?? selectionState;\n const page = options.page ?? pageState;\n const grouping = options.grouping === undefined ? groupingState : options.grouping;\n const columnOrder = options.columnOrder ?? orderState;\n const columnVisibility = options.columnVisibility ?? visibilityState;\n const pageSize = pageSizeState;\n\n const deferredSearch = useDeferredValue(search);\n const focusRef = useRef<(() => void) | null>(null);\n const rowsRef = useRef(options.rows);\n const idOf = options.getRowId;\n\n const updatePage = (value: number) => {\n options.onPageChange?.(value);\n if (options.page === undefined) setPageState(value);\n };\n const setSearch = (value: string) => {\n options.onSearchChange?.(value);\n if (options.search === undefined) setSearchState(value);\n updatePage(1);\n };\n const setSort = (value: CollectionSort | null) => {\n options.onSortChange?.(value);\n if (options.sort === undefined) setSortState(value);\n };\n const setFilters = (value: Record<string, unknown>) => {\n options.onFiltersChange?.(value);\n if (options.filters === undefined) setFilterState(value);\n updatePage(1);\n };\n const setSelection = (ids: string[]) => {\n options.onSelectionChange?.(ids);\n if (options.selection === undefined) setSelectionState(ids);\n };\n const setGrouping = (value: string | null) => {\n options.onGroupingChange?.(value);\n if (options.grouping === undefined) setGroupingState(value);\n };\n\n const tableOptions = collectionTableOptions({\n rows: options.rows,\n columns: options.columns,\n getRowId: idOf,\n getSubRows: options.getSubRows,\n locale,\n canSelect: options.canSelect,\n state: {\n globalFilter: deferredSearch,\n sorting: sort ? [{ id: sort.id, desc: sort.desc }] : [],\n columnFilters: filtersToList(filters),\n pagination: { pageIndex: 0, pageSize: Number.POSITIVE_INFINITY },\n rowSelection: selectionRecord(selection),\n grouping: grouping ? [grouping] : [],\n expanded,\n columnOrder,\n columnVisibility,\n },\n initialState: {\n sorting: initialSort ? [{ id: initialSort.id, desc: initialSort.desc }] : [],\n columnFilters: filtersToList(initialFilters),\n grouping: initialGrouping ? [initialGrouping] : [],\n columnVisibility: initialVisibility,\n columnOrder: initialOrder,\n },\n onStateChange: {\n rowSelection: (updater: unknown) => {\n const current = selectionRecord(selection);\n const next = typeof updater === 'function' ? (updater as (value: Record<string, true>) => Record<string, true>)(current) : (updater as Record<string, true>);\n setSelection(Object.keys(next).filter((id) => next[id]));\n },\n expanded: (updater: unknown) => {\n setExpanded((current) => (typeof updater === 'function' ? (updater as (value: typeof current) => typeof current)(current) : (updater as typeof current)));\n },\n },\n });\n\n const table = useTable(tableOptions as never) as CollectionTable;\n\n useEffect(() => {\n if (!options.getSubRows) return;\n if (deferredSearch) {\n if (expandedBeforeSearch.current == null) expandedBeforeSearch.current = expanded;\n setExpanded(true);\n return;\n }\n if (expandedBeforeSearch.current != null) {\n setExpanded(expandedBeforeSearch.current);\n expandedBeforeSearch.current = null;\n }\n }, [deferredSearch, options.getSubRows]);\n\n useEffect(() => {\n if (options.clearSelectionOnRowsChange && rowsRef.current !== options.rows) {\n rowsRef.current = options.rows;\n setSelection([]);\n return;\n }\n rowsRef.current = options.rows;\n const kept = selectableIds(selection, options.rows, idOf, options.canSelect, options.getSubRows);\n if (kept.length !== selection.length) setSelection(kept);\n }, [options.rows, options.clearSelectionOnRowsChange, options.canSelect, options.getSubRows]);\n\n useEffect(() => {\n if (!options.stateKey || !storage) return;\n try {\n storage.setItem(\n `loomiere:collection:${options.stateKey}`,\n JSON.stringify({ search, sort, filters, pageSize, grouping } satisfies StoredView),\n );\n } catch {\n /* A blocked storage must not break the screen. */\n }\n }, [options.stateKey, storage, search, sort, filters, pageSize, grouping]);\n\n const filteredModel = table.getFilteredRowModel();\n // A tree total counts leaves. A parent's amount is already the children.\n const filteredLeaves = filteredModel.flatRows.filter((row) => !row.getIsGrouped?.() && !(options.getSubRows && row.subRows?.length));\n const filteredRows = filteredLeaves.map((row) => row.original as T);\n const filteredIds = new Set(filteredLeaves.map((row) => row.id));\n const topRows = table.getRowModel().rows;\n const flat = flattenVisible(topRows as CollectionRow[]);\n const byTopLevel = options.pageBy === 'top-level' && Boolean(options.getSubRows);\n // The row model lists expanded children after their parents. A top-level page counts only the parents.\n const parents = byTopLevel ? (topRows as CollectionRow[]).filter((row) => row.depth === 0) : [];\n const paged = byTopLevel\n ? pageTopLevel(parents, page - 1, pageSize && pageSize > 0 ? pageSize : parents.length || 1)\n : pageFlat(flat, page - 1, pageSize && pageSize > 0 ? pageSize : flat.filter((entry) => entry.kind === 'leaf').length || 1);\n const pageTotal = byTopLevel ? parents.length : filteredRows.length;\n const pageRows = byTopLevel\n ? parents.slice(paged.bounds.start, paged.bounds.end).flatMap((row) => leafRows(row as CollectionRow)).map((row) => row.original as T)\n : paged.entries.filter((entry) => entry.kind === 'leaf').map((entry) => entry.row.original as T);\n\n const totals = useMemo(() => {\n const rows = filteredModel.flatRows\n .filter((row) => !row.getIsGrouped?.() && !(options.getSubRows && row.subRows?.length))\n .map((row) => row.original as T);\n const result: Record<string, string> = {};\n for (const column of options.columns) {\n if (!column.total) continue;\n result[column.id] = totalText(column, rows, locale);\n }\n return result;\n }, [options.columns, options.getSubRows, filteredModel, locale]);\n\n const byId = useMemo(() => {\n const map = new Map<string, T>();\n const walk = (rows: readonly T[]) => {\n for (const row of rows) {\n map.set(idOf(row), row);\n const children = options.getSubRows?.(row);\n if (children) walk(children);\n }\n };\n walk(options.rows);\n return map;\n }, [options.rows, options.getSubRows, idOf]);\n\n const isFiltered = Boolean(search) || !sameFilters(filters, initialFilters);\n\n return {\n table,\n columns: options.columns,\n getRowId: idOf,\n locale,\n search,\n setSearch,\n sort,\n setSort,\n cycleSort: (columnId) => setSort(nextSort(sort, columnId, initialSort)),\n filters,\n setFilter: (columnId, value) => setFilters({ ...filters, [columnId]: value }),\n clearFilters: () => {\n setSearch('');\n setFilters({ ...initialFilters });\n },\n facetCounts: (columnId) => {\n const column = table.getColumn(columnId);\n const counts = column?.getFacetedUniqueValues?.() ?? new Map();\n const mapped = new Map<string, number>();\n for (const [key, count] of counts) mapped.set(key == null ? '' : String(key), count);\n return mapped;\n },\n selection,\n selectedRows: selection.map((id) => byId.get(id)).filter((row): row is T => row != null),\n selectAllFiltered: () => table.toggleAllRowsSelected(true),\n clearSelection: () => setSelection([]),\n clearFilteredSelection: () => setSelection(selection.filter((id) => !filteredIds.has(id))),\n selectionSet: new Set(selection),\n messages,\n hiddenSelectedCount: hiddenSelectedCount(selection, filteredIds),\n filteredRows,\n filteredCount: filteredRows.length,\n pageTotal,\n pageRows,\n totalCount: options.rows.length,\n totals,\n page: paged.bounds.pageIndex + 1,\n pageCount: pageSize ? paged.bounds.pageCount : 1,\n setPage: (value) => {\n focusAfterPage.current = true;\n updatePage(value);\n },\n pageSize,\n setPageSize: (size) => {\n setPageSizeState(size);\n updatePage(1);\n },\n isFiltered,\n reset: () => {\n setSearch('');\n setSort(initialSort);\n setFilters({ ...initialFilters });\n setGrouping(initialGrouping);\n setPageSizeState(options.pageSize);\n setExpanded(options.defaultExpanded === false ? {} : true);\n expandedBeforeSearch.current = null;\n updatePage(1);\n setOrderState(initialOrder);\n setVisibilityState(initialVisibility);\n options.onColumnOrderChange?.(initialOrder);\n options.onColumnVisibilityChange?.(initialVisibility);\n },\n grouping,\n setGrouping,\n columnOrder,\n setColumnOrder: (order) => {\n options.onColumnOrderChange?.(order);\n if (options.columnOrder === undefined) setOrderState(order);\n },\n columnVisibility,\n setColumnVisibility: (visibility) => {\n options.onColumnVisibilityChange?.(visibility);\n if (options.columnVisibility === undefined) setVisibilityState(visibility);\n },\n canSelect: options.canSelect,\n pageEntries: paged.entries,\n rowHeaderId: options.columns.find((column) => column.rowHeader)?.id,\n registerRowFocus: (focus) => {\n focusRef.current = focus;\n },\n focusFirstRow: () => focusRef.current?.(),\n focusAfterPage,\n };\n}\n\nfunction sameFilters(a: Record<string, unknown>, b: Record<string, unknown>): boolean {\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const key of keys) if (String(a[key] ?? '') !== String(b[key] ?? '')) return false;\n return true;\n}\n\nfunction flattenVisible(rows: CollectionRow[], groupId?: string, nested = false): FlatEntry<CollectionRow>[] {\n const out: FlatEntry<CollectionRow>[] = [];\n for (const row of rows) {\n // An expanded group also lists its leaves beside itself. They are already in subRows.\n if (!nested && !row.getIsGrouped?.() && row.getParentRow?.()) continue;\n if (row.getIsGrouped?.()) {\n out.push({ kind: 'group', row, groupId: row.id });\n if (row.getIsExpanded()) out.push(...flattenVisible(row.subRows as CollectionRow[], row.id, true));\n } else {\n out.push({ kind: 'leaf', row, groupId });\n if (row.subRows?.length && row.getIsExpanded?.()) out.push(...flattenVisible(row.subRows as CollectionRow[], groupId, true));\n }\n }\n return out;\n}\n\n\n/** Page a tree by its top-level rows: each page holds whole parents with their visible children. */\nfunction pageTopLevel(rows: CollectionRow[], pageIndex: number, pageSize: number) {\n const bounds = pageBounds(pageIndex, pageSize, rows.length);\n const entries: Array<FlatEntry<CollectionRow> & { continued?: boolean }> = [];\n for (const row of rows.slice(bounds.start, bounds.end)) entries.push(...flattenVisible([row]));\n return { entries, leafCount: entries.filter((entry) => entry.kind === 'leaf').length, bounds };\n}\n\n/** A row's leaves: itself when it has no children, else every descendant without children, expanded or not. */\nfunction leafRows(row: CollectionRow): CollectionRow[] {\n const children = row.subRows as CollectionRow[] | undefined;\n if (!children?.length) return [row];\n return children.flatMap(leafRows);\n}\n"]}
1
+ {"version":3,"sources":["../../../src/custom/collection/columns.ts","../../../src/custom/collection/format.ts","../../../src/custom/collection/view.tsx","../../../src/custom/collection/data-list.tsx","../../../src/custom/collection/data-table.tsx","../../../src/custom/collection/cards.tsx","../../../src/custom/collection/pagination.tsx","../../../src/custom/collection/toolbar.tsx","../../../src/custom/collection/collection-model.ts","../../../src/custom/collection/use-collection.ts"],"names":["sum","React","React2","jsxs","jsx","selectableIds","React3","label","Fragment","value","useRef","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- The escape hatch is TanStack's ColumnDef, whose first arguments are its feature and row types. */\nimport type { ReactNode } from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\n\nexport type CollectionKind = 'text' | 'number' | 'money' | 'percent' | 'date' | 'boolean';\nexport type CollectionAlign = 'start' | 'end' | 'center';\nexport type ListSlot = 'primary' | 'secondary' | 'meta' | 'amount' | 'status' | 'hidden';\nexport type FilterKind = 'tabs' | 'select' | 'multi-select' | 'boolean';\n\nexport interface FilterOption {\n value: string;\n label: string;\n /** A tab with an empty value, or this flag, means no filter. Its count is the whole facet. */\n all?: boolean;\n}\n\nexport interface CollectionFilter {\n kind: FilterKind;\n label?: string;\n options?: FilterOption[];\n}\n\nexport interface CellContext {\n view: 'table' | 'list';\n selected: boolean;\n active: boolean;\n}\n\nexport interface CollectionColumn<T> {\n id: string;\n header: string | { label: string; content: ReactNode };\n value: (row: T) => unknown;\n cell?: (row: T, ctx: CellContext) => ReactNode;\n kind?: CollectionKind;\n currency?: string | ((row: T) => string);\n fractionDigits?: number;\n negative?: 'minus' | 'parens';\n /** True searches the formatted value. A function also searches text that is not shown. */\n searchable?: boolean | ((row: T) => string | string[]);\n sortable?: boolean;\n filter?: CollectionFilter;\n total?: 'sum' | 'count' | ((rows: T[]) => ReactNode);\n /** The row's name. One column should set this. Its cell is the row header and the primary action. */\n rowHeader?: boolean;\n hidden?: boolean;\n /** 'auto', 'min' (as wide as the content), or a size token path such as space.16. No pixel values. */\n width?: 'auto' | 'min' | string;\n align?: CollectionAlign;\n list?: ListSlot;\n dateFormat?: Intl.DateTimeFormatOptions;\n /** When every row shares one currency, the header can say \"Amount (USD)\" and the cells drop the symbol. */\n showCurrencyInHeader?: boolean;\n /** Rare needs that the column shape does not cover. Merged into the TanStack column. */\n tanstack?: Partial<ColumnDef<any, any>>;\n}\n\nexport function headerLabel<T>(column: CollectionColumn<T>): string {\n return typeof column.header === 'string' ? column.header : column.header.label;\n}\n\nexport function headerContent<T>(column: CollectionColumn<T>): ReactNode {\n return typeof column.header === 'string' ? column.header : column.header.content;\n}\n\nexport function defineColumns<T>(columns: CollectionColumn<T>[]): CollectionColumn<T>[] {\n if (process.env.NODE_ENV !== 'production') {\n const headers = columns.filter((column) => column.rowHeader);\n if (headers.length !== 1) {\n console.warn(`A collection should have exactly one rowHeader column so each row has a name. This one has ${headers.length}.`);\n }\n const tabs = columns.filter((column) => column.filter?.kind === 'tabs');\n if (tabs.length > 1) console.warn('Only one column can use a tabs filter. The toolbar shows the first.');\n }\n return columns;\n}\n\nexport function defaultAlign<T>(column: CollectionColumn<T>): CollectionAlign {\n if (column.align) return column.align;\n const kind = column.kind ?? 'text';\n if (kind === 'number' || kind === 'money' || kind === 'percent') return 'end';\n return 'start';\n}\n\n/** Where a column sits in the list when the column does not say. */\nexport function listSlot<T>(column: CollectionColumn<T>, columns: readonly CollectionColumn<T>[]): ListSlot {\n if (column.list) return column.list;\n if (column.rowHeader) return 'primary';\n if (column.kind === 'money') return 'amount';\n if (column.filter?.kind === 'tabs') return 'status';\n if (column.cell && column.kind == null && column.id.toLowerCase().includes('status')) return 'status';\n const primary = columns.find((item) => item.rowHeader) ?? columns[0];\n const secondary = columns.find((item) => item !== primary && item.searchable && (item.kind ?? 'text') === 'text' && !item.rowHeader);\n if (column === secondary) return 'secondary';\n const meta = columns.filter((item) => item !== primary && item !== secondary && item.kind !== 'money' && item.filter?.kind !== 'tabs');\n if (meta.slice(0, 3).includes(column)) return 'meta';\n return 'hidden';\n}\n\nexport function currencyOf<T>(column: CollectionColumn<T>, row: T): string {\n if (typeof column.currency === 'function') return column.currency(row);\n return column.currency ?? 'USD';\n}\n","import { currencyOf, defaultAlign, headerLabel, type CollectionColumn } from './columns';\nimport {\n formatDate,\n formatMoney,\n formatNumber,\n formatPercent,\n fractionDigitsOf,\n isoDate,\n isEmptyValue,\n minorToDecimal,\n moneySearchForms,\n searchHaystack,\n sumMoney,\n} from './collection-utils';\n\nexport { isoDate };\n\nexport function rowSearchText<T>(row: T, columns: readonly CollectionColumn<T>[], locale: string): string {\n const parts: string[] = [];\n for (const column of columns) {\n if (column.searchable == null || column.searchable === false) continue;\n const value = column.value(row);\n if (typeof column.searchable === 'function') {\n const extra = column.searchable(row);\n parts.push(...(Array.isArray(extra) ? extra : [extra]));\n }\n if (isEmptyValue(value)) continue;\n if (column.kind === 'money') {\n parts.push(...moneySearchForms(value as number | string, currencyOf(column, row), locale, column.fractionDigits));\n } else if (column.kind === 'number' || column.kind === 'percent') {\n parts.push(String(value), formatNumber(value as number | string, locale, column.fractionDigits));\n } else if (column.kind === 'date') {\n parts.push(String(value), formatDate(value, locale, column.dateFormat), isoDate(value));\n } else {\n parts.push(String(value));\n }\n }\n return searchHaystack(parts);\n}\n\nexport function formattedValue<T>(column: CollectionColumn<T>, row: T, locale: string, hideCurrency = false): string {\n const value = column.value(row);\n if (isEmptyValue(value)) return '';\n if (column.kind === 'money') {\n const currency = currencyOf(column, row);\n if (hideCurrency) {\n const digits = column.fractionDigits ?? fractionDigitsOf(currency);\n return formatNumber(value as number | string, locale, digits);\n }\n return formatMoney(value as number | string, {\n locale,\n currency,\n fractionDigits: column.fractionDigits,\n negative: column.negative,\n });\n }\n if (column.kind === 'number') return formatNumber(value as number | string, locale, column.fractionDigits);\n if (column.kind === 'percent') return formatPercent(value as number | string, locale);\n if (column.kind === 'date') return formatDate(value, locale, column.dateFormat);\n if (column.kind === 'boolean') return value ? 'Yes' : 'No';\n return String(value);\n}\n\nexport function columnSharesCurrency<T>(column: CollectionColumn<T>, rows: readonly T[]): string | null {\n if (column.kind !== 'money') return null;\n const currencies = new Set(rows.map((row) => currencyOf(column, row)));\n return currencies.size === 1 ? [...currencies][0] : null;\n}\n\nexport function displayHeader<T>(column: CollectionColumn<T>, rows: readonly T[]): string {\n const label = headerLabel(column);\n if (!column.showCurrencyInHeader) return label;\n const currency = columnSharesCurrency(column, rows);\n return currency ? `${label} (${currency})` : label;\n}\n\nexport function hideCurrencyInCells<T>(column: CollectionColumn<T>, rows: readonly T[]): boolean {\n return Boolean(column.showCurrencyInHeader && columnSharesCurrency(column, rows));\n}\n\n/**\n * Totals add leaf rows. A tree parent's amount is the children already, so counting both would double it.\n * Zero money rows use the column's currency. \"Mixed currencies\" is only when more than one currency is present.\n * A number or percent sum is not money.\n */\nexport function totalText<T>(column: CollectionColumn<T>, rows: readonly T[], locale: string): string {\n if (!column.total) return '';\n if (column.total === 'count') return String(rows.length);\n if (typeof column.total === 'function') return '';\n if (column.kind === 'number' || column.kind === 'percent') {\n let sum = 0;\n for (const row of rows) {\n const value = column.value(row);\n if (isEmptyValue(value)) continue;\n const numeric = typeof value === 'number' ? value : Number(String(value).replace(/,/g, ''));\n if (Number.isFinite(numeric)) sum += numeric;\n }\n return column.kind === 'percent' ? formatPercent(sum, locale) : formatNumber(sum, locale, column.fractionDigits);\n }\n const values = rows.map((row) => ({ amount: column.value(row) as number | string | null, currency: currencyOf(column, row) }));\n const sum = sumMoney(values, column.fractionDigits);\n if (sum.mixed) {\n if (process.env.NODE_ENV !== 'production') console.warn(`Column \"${column.id}\" has more than one currency, so it has no single total.`);\n return 'Mixed currencies';\n }\n const currency = sum.currency ?? (typeof column.currency === 'string' ? column.currency : 'USD');\n const digits = column.fractionDigits ?? fractionDigitsOf(currency);\n return formatMoney(minorToDecimal(sum.minor ?? 0n, digits), {\n locale,\n currency,\n fractionDigits: digits,\n negative: column.negative,\n });\n}\n\nexport { defaultAlign };\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { Checkbox } from '../../components/checkbox';\nimport { EmptyState } from '../empty-state';\nimport { Menu } from '../../components/menu';\nimport { defaultAlign, headerLabel, type CellContext, type CollectionColumn } from './columns';\nimport type { CollectionRow } from './collection-model';\nimport { toMinor } from './collection-utils';\nimport { formattedValue, hideCurrencyInCells, isoDate } from './format';\nimport type { CollectionApi } from './use-collection';\n\nexport interface CollectionViewProps<T> {\n collection: CollectionApi<T>;\n label: string;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n activeRowId?: string;\n rowActions?: (row: T) => RowAction[];\n /** Shown when the data itself is empty. A search with no matches uses the built-in no-results state. */\n empty?: React.ReactNode;\n loading?: boolean;\n /**\n * One tab stop for the rows. Defaults to on when a row can be activated.\n * `data-no-activate` on a control inside a row keeps a click there from opening the row.\n */\n rowNavigation?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport interface RowAction {\n label: string;\n onSelect: () => void;\n disabled?: boolean;\n tone?: 'danger';\n}\n\nexport function rowHeaderText<T>(collection: CollectionApi<T>, row: T): string {\n const column = collection.columns.find((item) => item.id === collection.rowHeaderId);\n if (!column) return collection.getRowId(row);\n const value = column.value(row);\n return value == null || value === '' ? 'None' : String(value);\n}\n\nexport function levelName<T>(collection: CollectionApi<T>, tableRow: CollectionRow, text: string): string {\n if (!tableRow.depth) return text;\n const parent = tableRow.getParentRow?.();\n const parentText = parent ? rowHeaderText(collection, parent.original as T) : '';\n return parentText ? `${text}, level ${tableRow.depth + 1}, in ${parentText}` : `${text}, level ${tableRow.depth + 1}`;\n}\n\nexport function CellValue<T>({ column, row, locale, rows, view, selected, active }: {\n column: CollectionColumn<T>;\n row: T;\n locale: string;\n rows: readonly T[];\n view: 'table' | 'list';\n selected: boolean;\n active: boolean;\n}) {\n const ctx: CellContext = { view, selected, active };\n if (column.cell) return <>{column.cell(row, ctx)}</>;\n const value = column.value(row);\n if (value == null || value === '') {\n return <span data-subtle=\"\">—<span className=\"visually-hidden\"> None</span></span>;\n }\n if (column.kind === 'boolean') {\n return (\n <span>\n {value ? <span className=\"material-symbols-outlined\" aria-hidden=\"true\">check</span> : null}\n <span className=\"visually-hidden\">{value ? 'Yes' : 'No'}</span>\n </span>\n );\n }\n if (column.kind === 'date') {\n const text = formattedValue(column, row, locale);\n return <time dateTime={isoDate(value)}>{text}</time>;\n }\n const negative = column.kind === 'money' && (toMinor(value as number | string, column.fractionDigits ?? 2) ?? 0n) < 0n;\n return <span data-negative={negative ? '' : undefined}>{formattedValue(column, row, locale, hideCurrencyInCells(column, rows))}</span>;\n}\n\nexport function SelectBox({ checked, indeterminate, label, onChange }: {\n checked: boolean;\n indeterminate?: boolean;\n label: string;\n onChange: (checked: boolean) => void;\n}) {\n return (\n <Checkbox.Root\n checked={checked}\n indeterminate={indeterminate}\n onCheckedChange={(value) => onChange(value === true)}\n aria-label={label}\n >\n <Checkbox.Indicator>\n <span className=\"material-symbols-outlined CheckboxIcon\" aria-hidden=\"true\">{indeterminate ? 'remove' : 'check'}</span>\n </Checkbox.Indicator>\n </Checkbox.Root>\n );\n}\n\nexport function RowMenu({ label, actions }: { label: string; actions: RowAction[] }) {\n return (\n <Menu.Root>\n <Menu.Trigger className=\"Button\" data-emphasis=\"quiet\" data-icon-only=\"\" aria-label={label}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">more_horiz</span>\n </Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner>\n <Menu.Popup>\n {actions.map((action) => (\n <Menu.Item key={action.label} disabled={action.disabled} data-color={action.tone === 'danger' ? 'error' : undefined} onClick={action.onSelect}>\n {action.label}\n </Menu.Item>\n ))}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n}\n\nexport function useRovingRows(count: number, enabled: boolean) {\n const [cursor, setCursor] = React.useState(0);\n const refs = React.useRef<Array<HTMLButtonElement | HTMLAnchorElement | null>>([]);\n React.useEffect(() => {\n if (cursor > count - 1) setCursor(Math.max(0, count - 1));\n }, [count, cursor]);\n const focusAt = (index: number) => {\n const next = Math.min(Math.max(0, index), Math.max(0, count - 1));\n setCursor(next);\n refs.current[next]?.focus();\n };\n const onKeyDown = (event: React.KeyboardEvent, index: number, toggle?: () => void, activate?: () => void, tree?: { expanded: boolean; toggle: () => void }) => {\n const target = event.target as HTMLElement;\n if (target.closest('input, textarea, select, [role=\"menu\"], [role=\"listbox\"]')) return;\n // ArrowRight opens a closed parent and ArrowLeft closes an open one. RTL swaps them, because right is \"inward\" in the reading direction.\n // Opening a parent is not activating the row, so it works even when the row has no action.\n const rtl = Boolean(target.closest('[dir=\"rtl\"]'));\n const openKey = rtl ? 'ArrowLeft' : 'ArrowRight';\n const closeKey = rtl ? 'ArrowRight' : 'ArrowLeft';\n if (tree && event.key === openKey && !tree.expanded) {\n event.preventDefault();\n tree.toggle();\n return;\n }\n if (tree && event.key === closeKey && tree.expanded) {\n event.preventDefault();\n tree.toggle();\n return;\n }\n if (!enabled) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n focusAt(index + 1);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n focusAt(index - 1);\n } else if (event.key === 'Home') {\n event.preventDefault();\n focusAt(0);\n } else if (event.key === 'End') {\n event.preventDefault();\n focusAt(count - 1);\n } else if (event.key === ' ' && toggle) {\n event.preventDefault();\n toggle();\n } else if (event.key === 'Enter' && !(event.target instanceof HTMLAnchorElement) && activate) {\n event.preventDefault();\n activate();\n }\n };\n return { cursor, refs, focusAt, onKeyDown };\n}\n\nexport function interactiveTarget(target: EventTarget | null): boolean {\n return target instanceof Element && Boolean(target.closest('a, button, input, textarea, select, label, [role=\"menu\"], [role=\"menuitem\"], [role=\"listbox\"], [role=\"checkbox\"], [role=\"option\"], [data-no-activate]'));\n}\n\nexport function selectingText(): boolean {\n const selection = typeof window === 'undefined' ? null : window.getSelection();\n return Boolean(selection && !selection.isCollapsed);\n}\n\nexport function EmptyRow({ colSpan, filtered, onClear, empty, title = 'No results', description = 'Nothing matches the current search or filters.', clearLabel = 'Clear filters', emptyTitle = 'Nothing here yet' }: {\n colSpan: number;\n filtered: boolean;\n onClear: () => void;\n empty?: React.ReactNode;\n title?: string;\n description?: string;\n clearLabel?: string;\n emptyTitle?: string;\n}) {\n return (\n <tr>\n <td data-empty=\"\" colSpan={colSpan}>\n {filtered ? (\n <EmptyState\n size=\"compact\"\n kind=\"no-results\"\n title={title}\n description={description}\n actions={<Button emphasis=\"standard\" onClick={onClear}>{clearLabel}</Button>}\n />\n ) : (\n empty ?? <EmptyState size=\"compact\" kind=\"start\" title={emptyTitle} />\n )}\n </td>\n </tr>\n );\n}\n\n/** Mounts empty, then says \"Loading\" one frame later, so a screen reader hears the change. */\nexport function LoadingNote({ text }: { text: string }) {\n const [live, setLive] = React.useState('');\n React.useEffect(() => {\n const frame = requestAnimationFrame(() => setLive(text));\n return () => cancelAnimationFrame(frame);\n }, [text]);\n return <span className=\"CollectionStatus visually-hidden\" role=\"status\">{live}</span>;\n}\n\nexport function alignOf<T>(column: CollectionColumn<T>): 'start' | 'end' | 'center' | undefined {\n const align = defaultAlign(column);\n return align === 'start' ? undefined : align;\n}\n\nexport function columnHeader<T>(column: CollectionColumn<T>): string {\n return headerLabel(column);\n}\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { EmptyState } from '../empty-state';\nimport { cn } from '../../utils/cn';\nimport { listSlot } from './columns';\nimport { totalText } from './format';\nimport type { CollectionRow } from './collection-model';\nimport { CellValue, LoadingNote, RowMenu, SelectBox, interactiveTarget, levelName, rowHeaderText, selectingText, useRovingRows, type CollectionViewProps } from './view';\nimport type { CollectionApi } from './use-collection';\n\nexport interface DataListProps<T> extends CollectionViewProps<T> {\n /** 'rows' share one container, like the table body. 'cards' separates them when a queue should read as items. */\n variant?: 'rows' | 'cards';\n totals?: 'summary' | 'none';\n renderItemExtra?: (row: T) => React.ReactNode;\n}\n\n/**\n * The same rows as DataTable, read as a list. Sorting lives in the toolbar because a list has no headers.\n */\nexport function DataList<T>({\n collection,\n label,\n onRowActivate,\n getRowHref,\n activeRowId,\n rowActions,\n empty,\n loading,\n rowNavigation,\n size = 'sm',\n className,\n variant = 'rows',\n totals = 'summary',\n renderItemExtra,\n}: DataListProps<T>) {\n const leaves = collection.pageEntries.filter((entry) => entry.kind === 'leaf');\n const navigate = rowNavigation ?? Boolean(onRowActivate || getRowHref);\n const roving = useRovingRows(leaves.length, navigate);\n React.useEffect(() => {\n collection.registerRowFocus(() => roving.focusAt(0));\n return () => collection.registerRowFocus(null);\n }, [collection, roving]);\n React.useLayoutEffect(() => {\n if (!collection.focusAfterPage.current) return;\n collection.focusAfterPage.current = false;\n roving.focusAt(0);\n }, [collection, collection.page, roving]);\n\n const slots = slotMap(collection);\n const filteredEmpty = collection.totalCount > 0 && collection.filteredCount === 0;\n\n return (\n <div\n className={cn('DataList', className)}\n data-view=\"list\"\n data-size={size}\n data-variant={variant}\n data-filtered={collection.isFiltered ? '' : undefined}\n data-selecting={collection.selection.length ? '' : undefined}\n data-loading={loading ? '' : undefined}\n data-grouped={collection.grouping ? '' : undefined}\n aria-busy={loading || undefined}\n >\n {/* role=list: list-style:none drops the list role in Safari. */}\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles */}\n <ul role=\"list\" aria-label={label}>\n {loading && collection.totalCount === 0 ? <li><LoadingNote text={collection.messages.loading} /></li> : null}\n {!loading || collection.totalCount > 0 ? (\n leaves.length === 0 ? (\n <li>\n {filteredEmpty || collection.isFiltered ? (\n <EmptyState size=\"compact\" kind=\"no-results\" title={collection.messages.noResults} description={collection.messages.noResultsDescription} actions={<Button emphasis=\"standard\" onClick={collection.clearFilters}>{collection.messages.clearFilters}</Button>} />\n ) : (\n empty ?? <EmptyState size=\"compact\" kind=\"start\" title={collection.messages.nothingHere} />\n )}\n </li>\n ) : (\n listItems({ collection, slots, roving, navigate, onRowActivate, getRowHref, activeRowId, rowActions, renderItemExtra })\n )\n ) : null}\n </ul>\n {totals === 'summary' && Object.keys(collection.totals).length ? (\n <p className=\"DataListSummary\">\n {collection.filteredCount} rows\n {Object.entries(collection.totals).map(([id, text]) => <span key={id}> · Total {text}</span>)}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction listItems<T>(args: {\n collection: CollectionApi<T>;\n slots: ReturnType<typeof slotMap<T>>;\n roving: ReturnType<typeof useRovingRows>;\n navigate: boolean;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n activeRowId?: string;\n rowActions?: CollectionViewProps<T>['rowActions'];\n renderItemExtra?: (row: T) => React.ReactNode;\n}) {\n const nodes: React.ReactNode[] = [];\n let leafIndex = 0;\n for (const entry of args.collection.pageEntries) {\n if (entry.kind === 'group') {\n const row = entry.row;\n const children: React.ReactNode[] = [];\n const rest = args.collection.pageEntries.slice(args.collection.pageEntries.indexOf(entry) + 1);\n for (const child of rest) {\n if (child.kind === 'group') break;\n children.push(<ListRow key={child.row.id} entry={child} index={leafIndex} {...args} />);\n leafIndex += 1;\n }\n const selectable = (row.subRows ?? []).filter((child) => args.collection.canSelect?.(child.original as T));\n const subtotal = args.slots.amount ? totalText(args.slots.amount, (row.subRows ?? []).map((child) => child.original as T), args.collection.locale) : '';\n nodes.push(\n <li key={`g-${row.id}`} className=\"DataListGroup\">\n <div className=\"DataListGroupHeader\">\n <button type=\"button\" className=\"CollectionGroupButton\" aria-expanded={row.getIsExpanded()} onClick={() => row.toggleExpanded()}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{row.getIsExpanded() ? 'expand_more' : 'chevron_right'}</span>\n {String(row.groupingValue ?? '')}{entry.continued ? ' (continued)' : ''} · {selectable.length || (row.subRows?.length ?? 0)}\n </button>\n {selectable.length && args.collection.canSelect ? (\n <SelectBox checked={row.getIsAllSubRowsSelected?.() ?? false} indeterminate={Boolean(row.getIsSomeSelected?.() && !row.getIsAllSubRowsSelected?.())} label={`Select ${selectable.length} rows in ${row.groupingValue ?? 'group'}`} onChange={() => row.toggleSelected?.()} />\n ) : null}\n {subtotal ? <span>{subtotal}</span> : null}\n </div>\n {/* list-style: none drops the implicit list role in Safari, so the role stays. */}\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles */}\n {row.getIsExpanded() ? <ul role=\"list\">{children}</ul> : null}\n </li>,\n );\n continue;\n }\n if (entry.row.getParentRow?.()?.getIsGrouped?.()) continue;\n nodes.push(\n <ListRow key={entry.row.id} entry={entry} index={leafIndex} {...args} />,\n );\n leafIndex += 1;\n }\n return nodes;\n}\n\nfunction ListRow<T>({ entry, index, collection, slots, roving, navigate, onRowActivate, getRowHref, activeRowId, rowActions, renderItemExtra }: {\n entry: { row: CollectionRow };\n index: number;\n collection: CollectionApi<T>;\n slots: ReturnType<typeof slotMap<T>>;\n roving: ReturnType<typeof useRovingRows>;\n navigate: boolean;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n activeRowId?: string;\n rowActions?: CollectionViewProps<T>['rowActions'];\n renderItemExtra?: (row: T) => React.ReactNode;\n}) {\n const original = entry.row.original as T;\n const selected = collection.selectionSet.has(entry.row.id);\n const active = activeRowId === entry.row.id;\n const name = rowHeaderText(collection, original);\n const named = levelName(collection, entry.row, name);\n const canSelect = collection.canSelect?.(original) ?? false;\n const href = getRowHref?.(original);\n const activate = () => onRowActivate?.(original);\n const tabIndex = navigate ? (roving.cursor === index ? 0 : -1) : undefined;\n const onKeyDown = (event: React.KeyboardEvent) => roving.onKeyDown(event, index, canSelect ? () => entry.row.toggleSelected?.(!selected) : undefined, href ? undefined : activate);\n const primary = href ? (\n <a ref={(node) => { roving.refs.current[index] = node; }} href={href} tabIndex={tabIndex} aria-label={named === name ? undefined : named} onKeyDown={onKeyDown}>{name}</a>\n ) : (\n <button type=\"button\" className=\"CollectionRowButton\" ref={(node) => { roving.refs.current[index] = node; }} tabIndex={tabIndex} aria-label={named === name ? undefined : named} onKeyDown={onKeyDown} onClick={() => { roving.focusAt(index); activate(); }}>{name}</button>\n );\n return (\n // The row is not a control. The primary button is. The checkbox carries selection.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events\n <li\n data-selected={selected ? '' : undefined}\n aria-current={active ? 'true' : undefined}\n onClick={(event) => {\n if (interactiveTarget(event.target) || selectingText()) return;\n if (event.target instanceof Element && event.target.closest('.DataListExtra, [data-actions]')) return;\n if (href && !onRowActivate) {\n (event.currentTarget.querySelector('a') as HTMLAnchorElement | null)?.click();\n return;\n }\n activate();\n }}\n >\n {collection.canSelect ? (canSelect ? <SelectBox checked={selected} label={`Select ${named}`} onChange={(checked) => entry.row.toggleSelected?.(checked)} /> : <span />) : null}\n <div className=\"DataListBody\">\n <div className=\"DataListPrimary\">{slots.primary ? primary : name}</div>\n {slots.secondary ? <div className=\"DataListSecondary\" data-subtle=\"\"><CellValue column={slots.secondary} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></div> : null}\n {slots.meta.length ? (\n <div className=\"DataListMeta\" data-subtle=\"\">\n {slots.meta.map((column) => <span key={column.id}><CellValue column={column} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></span>)}\n </div>\n ) : null}\n {renderItemExtra ? <div className=\"DataListExtra\">{renderItemExtra(original)}</div> : null}\n </div>\n {slots.amount ? <div className=\"DataListAmount\" data-align=\"end\"><CellValue column={slots.amount} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></div> : null}\n {slots.status ? <div className=\"DataListStatus\"><CellValue column={slots.status} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"list\" selected={selected} active={active} /></div> : null}\n {rowActions ? <span data-actions=\"\"><RowMenu label={collection.messages.actionsFor(name)} actions={rowActions(original)} /></span> : null}\n </li>\n );\n}\n\nfunction slotMap<T>(collection: CollectionApi<T>) {\n const placed = collection.columns.map((column) => ({ column, slot: listSlot(column, collection.columns) }));\n return {\n primary: placed.find((item) => item.slot === 'primary')?.column,\n secondary: placed.find((item) => item.slot === 'secondary')?.column,\n amount: placed.find((item) => item.slot === 'amount')?.column,\n status: placed.find((item) => item.slot === 'status')?.column,\n meta: placed.filter((item) => item.slot === 'meta').map((item) => item.column).slice(0, 3),\n };\n}\n","import * as React from 'react';\n\nimport { cn } from '../../utils/cn';\nimport { useUnderWidth } from '../use-under-width';\nimport { displayHeader, totalText } from './format';\nimport type { CollectionColumn } from './columns';\nimport type { CollectionRow } from './collection-model';\nimport { DataList } from './data-list';\nimport {\n CellValue,\n EmptyRow,\n LoadingNote,\n RowMenu,\n SelectBox,\n alignOf,\n interactiveTarget,\n levelName,\n rowHeaderText,\n selectingText,\n useRovingRows,\n type CollectionViewProps,\n type RowAction,\n} from './view';\nimport type { CollectionApi } from './use-collection';\n\nexport interface DataTableProps<T> extends CollectionViewProps<T> {\n /** Accessible name when there is no caption. */\n label: string;\n caption?: React.ReactNode;\n stickyHeader?: boolean;\n stickyRowHeader?: boolean;\n /** 'scroll' keeps the table. 'list' swaps in DataList when the table is narrower than collection.narrow-width. */\n narrow?: 'scroll' | 'list';\n size?: 'sm' | 'md';\n /**\n * How the footer's totals row looks. 'band' (the default) is the header tray. 'subtotal' rules\n * a single line above it; 'grand' adds a double rule under it, as on a working paper.\n */\n totalStyle?: 'band' | 'subtotal' | 'grand';\n /**\n * Several footer rows, top to bottom, each totalling a scope: 'page' is the rows on this page,\n * 'all' every filtered row. A 'page' row is ruled as a subtotal and an 'all' row as the grand\n * total, so totalStyle is ignored. The label defaults to the messages for page subtotal and total.\n */\n totalRows?: DataTableTotalRow<T>[];\n /** 'caps' sets the column names, and the labels in total rows, in caps-condense, as on a working paper. */\n headerStyle?: 'default' | 'caps';\n /** Sets right-aligned cells (numbers) in the figures text family: mono, tabular. Total rows included. */\n figures?: boolean;\n /** Draws an elbow connector from each child row's name back up to its parent. Use it with getSubRows. */\n treeLines?: boolean;\n /** 'small' shrinks the expand/collapse button so a parent row stays the height of its siblings. */\n disclosure?: 'default' | 'small';\n /** Names a row's kind, set as `data-kind` on the row. 'link' draws the row's name as a link, for a row that opens more rows or a page. */\n getRowKind?: (row: T) => 'link' | (string & {}) | undefined;\n}\n\nexport interface DataTableTotalRow<T = unknown> {\n scope: 'page' | 'all';\n /** Text, or a function of the collection for a label such as \"Page 2 of 5 subtotal\". */\n label?: React.ReactNode | ((collection: CollectionApi<T>) => React.ReactNode);\n}\n\n/**\n * A data table, the APG pattern: one tab stop for the rows, headers announce sort, and it is\n * not a grid. A grid would say this is a spreadsheet, and it is not. AG Grid is that tool.\n */\nexport function DataTable<T>({\n collection,\n label,\n caption,\n onRowActivate,\n getRowHref,\n activeRowId,\n rowActions,\n empty,\n loading,\n stickyHeader = true,\n stickyRowHeader = false,\n narrow = 'scroll',\n size = 'sm',\n totalStyle = 'band',\n totalRows,\n treeLines,\n headerStyle = 'default',\n figures,\n disclosure = 'default',\n getRowKind,\n rowNavigation,\n className,\n}: DataTableProps<T>) {\n const narrowWidth = useUnderWidth('--sl-collection-narrow-width');\n const asList = narrow === 'list' && narrowWidth.under;\n const columns = visibleColumns(collection);\n const leaves = collection.pageEntries.filter((entry) => entry.kind === 'leaf');\n const navigate = rowNavigation ?? Boolean(onRowActivate || getRowHref);\n const colSpan = columns.length + (collection.canSelect ? 1 : 0) + (rowActions ? 1 : 0);\n const selectableIds = collection.filteredRows.filter((row) => collection.canSelect?.(row)).map((row) => collection.getRowId(row));\n const selectedFiltered = selectableIds.filter((id) => collection.selection.includes(id));\n const allSelected = selectableIds.length > 0 && selectedFiltered.length === selectableIds.length;\n const someSelected = selectedFiltered.length > 0 && !allSelected;\n\n const view = asList ? (\n <DataList\n collection={collection}\n label={label}\n onRowActivate={onRowActivate}\n getRowHref={getRowHref}\n activeRowId={activeRowId}\n rowActions={rowActions}\n empty={empty}\n loading={loading}\n size={size}\n rowNavigation={rowNavigation}\n />\n ) : (\n <TableView\n collection={collection}\n columns={columns}\n label={label}\n caption={caption}\n colSpan={colSpan}\n leaves={leaves}\n navigate={navigate}\n allSelected={allSelected}\n someSelected={someSelected}\n loading={loading}\n empty={empty}\n stickyHeader={stickyHeader}\n stickyRowHeader={stickyRowHeader}\n size={size}\n totalStyle={totalStyle}\n totalRows={totalRows}\n treeLines={treeLines}\n headerStyle={headerStyle}\n figures={figures}\n disclosure={disclosure}\n getRowKind={getRowKind}\n className={className}\n onRowActivate={onRowActivate}\n getRowHref={getRowHref}\n activeRowId={activeRowId}\n rowActions={rowActions}\n />\n );\n return (\n <div ref={narrowWidth.ref} className={cn('CollectionView', asList ? className : undefined)} data-narrow={narrowWidth.under ? '' : undefined}>\n {view}\n </div>\n );\n}\n\nfunction TableView<T>({ collection, columns, label, caption, colSpan, leaves, navigate, allSelected, someSelected, loading, empty, stickyHeader, stickyRowHeader, size, totalStyle, totalRows, treeLines, headerStyle, figures, disclosure, getRowKind, className, onRowActivate, getRowHref, activeRowId, rowActions }: {\n collection: CollectionApi<T>;\n columns: CollectionColumn<T>[];\n label: string;\n caption?: React.ReactNode;\n colSpan: number;\n leaves: Array<{ row: CollectionRow }>;\n navigate: boolean;\n allSelected: boolean;\n someSelected: boolean;\n loading?: boolean;\n empty?: React.ReactNode;\n stickyHeader: boolean;\n stickyRowHeader: boolean;\n size: 'sm' | 'md';\n totalStyle: NonNullable<DataTableProps<T>['totalStyle']>;\n totalRows?: DataTableTotalRow<T>[];\n treeLines?: boolean;\n headerStyle: 'default' | 'caps';\n figures?: boolean;\n disclosure: 'default' | 'small';\n getRowKind?: DataTableProps<T>['getRowKind'];\n className?: string;\n onRowActivate?: CollectionViewProps<T>['onRowActivate'];\n getRowHref?: CollectionViewProps<T>['getRowHref'];\n activeRowId?: string;\n rowActions?: CollectionViewProps<T>['rowActions'];\n}) {\n const roving = useRovingRows(leaves.length, navigate);\n const scrollerRef = React.useRef<HTMLDivElement>(null);\n const [overflows, setOverflows] = React.useState(false);\n React.useEffect(() => {\n collection.registerRowFocus(() => roving.focusAt(0));\n return () => collection.registerRowFocus(null);\n }, [collection, roving]);\n React.useLayoutEffect(() => {\n if (!collection.focusAfterPage.current) return;\n collection.focusAfterPage.current = false;\n roving.focusAt(0);\n }, [collection, collection.page, roving]);\n React.useEffect(() => {\n const node = scrollerRef.current;\n if (!node) return;\n const watch = () => {\n const wide = node.scrollWidth > node.clientWidth + 1;\n const tall = stickyHeader && node.scrollHeight > node.clientHeight + 1;\n setOverflows(wide || tall);\n };\n const observer = new ResizeObserver(watch);\n observer.observe(node);\n watch();\n return () => observer.disconnect();\n }, [stickyHeader, leaves.length, columns.length]);\n\n const filteredEmpty = collection.totalCount > 0 && collection.filteredCount === 0;\n const text = collection.messages;\n const ruled = totalStyle !== 'band';\n\n return (\n <div\n ref={scrollerRef}\n className={cn('CollectionScroll', className)}\n // A region only when the table actually scrolls, so a short table is not a second name.\n tabIndex={overflows ? 0 : undefined}\n role={overflows ? 'region' : undefined}\n aria-label={overflows ? `${label}, scrollable` : undefined}\n >\n <table\n className=\"Table DataTable\"\n aria-label={caption ? undefined : label}\n aria-busy={loading || undefined}\n data-size={size}\n data-view=\"table\"\n data-sorted={collection.sort ? '' : undefined}\n data-filtered={collection.isFiltered ? '' : undefined}\n data-selecting={collection.selection.length ? '' : undefined}\n data-loading={loading ? '' : undefined}\n data-grouped={collection.grouping ? '' : undefined}\n data-sticky-header={stickyHeader ? '' : undefined}\n data-sticky-row-header={stickyRowHeader ? '' : undefined}\n data-tree-lines={treeLines ? '' : undefined}\n data-header-style={headerStyle === 'caps' ? 'caps' : undefined}\n data-figures={figures ? '' : undefined}\n data-disclosure={disclosure === 'small' ? 'small' : undefined}\n >\n {caption ? <caption>{caption}</caption> : null}\n <thead>\n <tr>\n {collection.canSelect ? (\n <th scope=\"col\" data-width=\"min\" className=\"CollectionSelectColumn\">\n <SelectBox\n checked={allSelected}\n indeterminate={someSelected}\n label={text.selectAll(collection.filteredRows.filter((row) => collection.canSelect?.(row)).length)}\n onChange={(checked) => (checked ? collection.selectAllFiltered() : collection.clearFilteredSelection())}\n />\n </th>\n ) : null}\n {columns.map((column) => {\n const sorted = collection.sort?.id === column.id ? (collection.sort.desc ? 'descending' : 'ascending') : 'none';\n return (\n <th key={column.id} scope=\"col\" aria-sort={column.sortable ? sorted : undefined} data-align={alignOf(column)} data-width={column.width === 'min' ? 'min' : undefined} style={widthStyle(column.width)}>\n {column.sortable ? (\n <button type=\"button\" className=\"TableSortButton\" onClick={() => collection.cycleSort(column.id)}>\n {displayHeader(column, collection.filteredRows)}\n <span className=\"material-symbols-outlined TableSortIcon\" data-state={sorted} aria-hidden=\"true\">\n {sorted === 'ascending' ? 'arrow_upward' : sorted === 'descending' ? 'arrow_downward' : 'swap_vert'}\n </span>\n </button>\n ) : (\n displayHeader(column, collection.filteredRows)\n )}\n </th>\n );\n })}\n {rowActions ? <th scope=\"col\" data-width=\"min\"><span className=\"visually-hidden\">Actions</span></th> : null}\n </tr>\n </thead>\n {collection.pageEntries.some((entry) => entry.kind === 'group') ? (\n groupedBodies({ collection, columns, leaves, roving, navigate, onRowActivate, getRowHref, getRowKind, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })\n ) : (\n <tbody>\n {bodyRows({ collection, columns, leaves, roving, navigate, onRowActivate, getRowHref, getRowKind, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })}\n </tbody>\n )}\n {Object.keys(collection.totals).length ? (\n <tfoot>\n {(totalRows ?? [{ scope: 'all' as const }]).map((total, rowIndex) => {\n const custom = Boolean(totalRows);\n const ruledRow = custom ? (total.scope === 'page' ? 'subtotal' : 'grand') : ruled ? totalStyle : undefined;\n const rowsInScope = total.scope === 'page' ? collection.pageRows : collection.filteredRows;\n const label = total.label == null ? (total.scope === 'page' ? text.pageSubtotal : text.total) : typeof total.label === 'function' ? total.label(collection) : total.label;\n return (\n <tr key={rowIndex} data-total={ruledRow}>\n {collection.canSelect ? <td data-rule={ruledRow ? 'none' : undefined} /> : null}\n {columns.map((column, index) => (\n // Ruled totals draw their lines under the figures only, not the label or blank cells.\n <td key={column.id} data-align={alignOf(column)} data-rule={ruledRow && (index === 0 || !column.total) ? 'none' : undefined}>\n {index === 0 ? label : column.total ? (\n // With figures, a grand total's double rule sits under the number itself, so it is wrapped to draw it.\n figures && ruledRow === 'grand' ? (\n <span className=\"TableFigure\">{typeof column.total === 'function' ? column.total(rowsInScope) : totalText(column, rowsInScope, collection.locale)}</span>\n ) : typeof column.total === 'function' ? column.total(rowsInScope) : totalText(column, rowsInScope, collection.locale)\n ) : ''}\n {index === 0 && total.scope === 'all' && collection.isFiltered ? <span className=\"visually-hidden\"> of {collection.filteredCount} filtered rows</span> : null}\n </td>\n ))}\n {rowActions ? <td data-rule={ruledRow ? 'none' : undefined} /> : null}\n </tr>\n );\n })}\n </tfoot>\n ) : null}\n </table>\n {loading && collection.totalCount === 0 ? <LoadingNote text={text.loading} /> : null}\n </div>\n );\n}\n\nfunction bodyRows<T>(args: RowArgs<T>) {\n if (args.loading && args.collection.totalCount === 0) return null;\n if (args.leaves.length === 0) {\n return <EmptyRow colSpan={args.colSpan} filtered={args.filteredEmpty || args.collection.isFiltered} onClear={args.collection.clearFilters} empty={args.empty} />;\n }\n return args.leaves.map((entry, index) => (\n <DataRow key={entry.row.id} entry={entry} index={index} {...args} />\n ));\n}\n\nfunction groupedBodies<T>(args: RowArgs<T>) {\n const groups: React.ReactNode[] = [];\n let buffer: Array<{ row: CollectionRow; index: number }> = [];\n let header: React.ReactNode = null;\n let bodyKey = 'rows';\n const flush = () => {\n if (!header && buffer.length === 0) return;\n groups.push(\n <tbody key={bodyKey}>\n {header}\n {buffer.map((item) => <DataRow key={item.row.id} entry={item} index={item.index} {...args} />)}\n </tbody>,\n );\n header = null;\n buffer = [];\n };\n let leafIndex = 0;\n for (const entry of args.collection.pageEntries) {\n if (entry.kind === 'group') {\n flush();\n const row = entry.row;\n bodyKey = row.id;\n const selectable = (row.subRows ?? []).filter((child) => args.collection.canSelect?.(child.original as T));\n const count = selectable.length;\n const name = `${String(row.groupingValue ?? 'group')}${entry.continued ? ' (continued)' : ''}`;\n const leaves = (row.subRows ?? []).map((child) => child.original as T);\n header = (\n <tr data-group=\"\">\n {args.collection.canSelect ? (\n <td data-width=\"min\">\n {count > 0 ? (\n <SelectBox\n checked={row.getIsAllSubRowsSelected?.() ?? false}\n indeterminate={Boolean(row.getIsSomeSelected?.() && !row.getIsAllSubRowsSelected?.())}\n label={`Select ${count} rows in ${row.groupingValue ?? 'group'}`}\n onChange={() => row.toggleSelected?.()}\n />\n ) : null}\n </td>\n ) : null}\n {args.columns.map((column, index) => {\n const subtotal = column.total ? (typeof column.total === 'function' ? column.total(leaves) : totalText(column, leaves, args.collection.locale)) : '';\n const label = `${name} · ${count}`;\n if (index === 0) {\n return (\n <th key={column.id} scope=\"rowgroup\" data-align={alignOf(column)}>\n <button type=\"button\" className=\"CollectionGroupButton\" aria-expanded={row.getIsExpanded()} onClick={() => row.toggleExpanded()}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{row.getIsExpanded() ? 'expand_more' : 'chevron_right'}</span>\n {label}\n </button>\n {subtotal ? <span>{subtotal}</span> : null}\n </th>\n );\n }\n return <td key={column.id} data-align={alignOf(column)}>{subtotal}</td>;\n })}\n {args.rowActions ? <td /> : null}\n </tr>\n );\n continue;\n }\n buffer.push({ row: entry.row, index: leafIndex });\n leafIndex += 1;\n }\n flush();\n if (!groups.length) return <tbody>{bodyRows(args)}</tbody>;\n return groups;\n}\n\ninterface RowArgs<T> {\n collection: CollectionApi<T>;\n columns: CollectionColumn<T>[];\n leaves: Array<{ row: CollectionRow }>;\n roving: ReturnType<typeof useRovingRows>;\n navigate: boolean;\n onRowActivate?: (row: T) => void;\n getRowHref?: (row: T) => string;\n getRowKind?: (row: T) => string | undefined;\n activeRowId?: string;\n rowActions?: (row: T) => RowAction[];\n colSpan: number;\n filteredEmpty: boolean;\n empty?: React.ReactNode;\n loading?: boolean;\n}\n\nfunction DataRow<T>({ entry, index, collection, columns, roving, navigate, onRowActivate, getRowHref, getRowKind, activeRowId, rowActions }: { entry: { row: CollectionRow }; index: number } & RowArgs<T>) {\n const original = entry.row.original as T;\n const id = entry.row.id;\n const selected = collection.selectionSet.has(id);\n const active = activeRowId === id;\n const name = rowHeaderText(collection, original);\n const named = levelName(collection, entry.row, name);\n const canSelect = collection.canSelect?.(original) ?? false;\n const href = getRowHref?.(original);\n const rowKind = getRowKind?.(original);\n const headerColumn = columns.find((column) => column.rowHeader);\n const headerContent = headerColumn?.cell ? headerColumn.cell(original, { view: 'table', selected, active }) : name;\n const customHeader = Boolean(headerColumn?.cell);\n const activate = () => onRowActivate?.(original);\n const toggle = canSelect ? () => entry.row.toggleSelected?.(!selected) : undefined;\n const tabIndex = navigate ? (roving.cursor === index ? 0 : -1) : undefined;\n const parent = Boolean(entry.row.subRows?.length);\n const onKeyDown = (event: React.KeyboardEvent) => roving.onKeyDown(event, index, toggle, href ? undefined : activate, parent ? { expanded: Boolean(entry.row.getIsExpanded?.()), toggle: () => entry.row.toggleExpanded?.() } : undefined);\n const disclosure = parent ? (\n <button type=\"button\" className=\"CollectionGroupButton\" aria-expanded={entry.row.getIsExpanded()} aria-label={`${entry.row.getIsExpanded() ? 'Collapse' : 'Expand'} ${name}`} onClick={(event) => { event.stopPropagation(); entry.row.toggleExpanded?.(); }}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{entry.row.getIsExpanded() ? 'expand_more' : 'chevron_right'}</span>\n </button>\n ) : null;\n const header = href ? (\n <a ref={(node) => { roving.refs.current[index] = node; }} href={href} tabIndex={tabIndex} aria-label={customHeader ? named : undefined} onKeyDown={onKeyDown} onClick={() => roving.focusAt(index)}>\n {headerContent}\n </a>\n ) : (\n <button\n type=\"button\"\n className=\"CollectionRowButton\"\n ref={(node) => { roving.refs.current[index] = node; }}\n tabIndex={tabIndex}\n aria-label={named === name && !customHeader ? undefined : named}\n onKeyDown={onKeyDown}\n onClick={() => { roving.focusAt(index); activate(); }}\n >\n {headerContent}\n </button>\n );\n return (\n <tr\n aria-selected={selected || undefined}\n aria-current={active ? 'true' : undefined}\n data-depth={entry.row.depth || undefined}\n data-kind={rowKind}\n data-activates={href || onRowActivate ? '' : undefined}\n onClick={(event) => {\n const target = event.target;\n if (interactiveTarget(target) || selectingText()) return;\n if (target instanceof Element && target.closest('.CollectionSelectColumn, [data-actions]')) return;\n if (href && !onRowActivate) {\n (event.currentTarget.querySelector('a') as HTMLAnchorElement | null)?.click();\n return;\n }\n activate();\n }}\n >\n {collection.canSelect ? <td data-width=\"min\">{canSelect ? <SelectBox checked={selected} label={`Select ${named}`} onChange={(checked) => entry.row.toggleSelected?.(checked)} /> : null}</td> : null}\n {columns.map((column) => {\n const Tag = column.rowHeader ? 'th' : 'td';\n return (\n <Tag key={column.id} scope={column.rowHeader ? 'row' : undefined} data-align={alignOf(column)} style={column.rowHeader ? ({ paddingInlineStart: `calc(var(--sl-table-cell-padding-inline) + var(--sl-collection-tree-indent) * ${entry.row.depth})`, '--row-depth': entry.row.depth } as React.CSSProperties) : undefined}>\n {column.rowHeader ? <>{disclosure}{header}</> : <CellValue column={column} row={original} locale={collection.locale} rows={collection.filteredRows} view=\"table\" selected={selected} active={active} />}\n </Tag>\n );\n })}\n {rowActions ? <td data-width=\"min\" data-actions=\"\"><RowMenu label={collection.messages.actionsFor(name)} actions={rowActions(original)} /></td> : null}\n </tr>\n );\n}\n\nfunction visibleColumns<T>(collection: CollectionApi<T>): CollectionColumn<T>[] {\n const order = collection.columnOrder.length ? collection.columnOrder : collection.columns.map((column) => column.id);\n return order\n .map((id) => collection.columns.find((column) => column.id === id))\n .filter((column): column is CollectionColumn<T> => Boolean(column && collection.columnVisibility[column.id] !== false));\n}\n\nfunction widthStyle(width: CollectionColumn<unknown>['width']): React.CSSProperties | undefined {\n if (!width || width === 'auto' || width === 'min') return undefined;\n return { width: `var(--sl-${width.replace(/\\./g, '-')})` };\n}\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { EmptyState } from '../empty-state';\nimport { cn } from '../../utils/cn';\nimport { LoadingNote } from './view';\nimport type { CollectionApi } from './use-collection';\n\nexport interface CollectionCardsProps<T> {\n collection: CollectionApi<T>;\n /** Names the list for screen readers: \"Entities\". */\n label: string;\n /** One card for a row, such as a StatCard. */\n renderCard: (row: T) => React.ReactNode;\n /** Shown when the data itself is empty. A search with no matches uses the built-in no-results state. */\n empty?: React.ReactNode;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * The rows of a collection as a grid of cards, for a page that lists things such as Entities or\n * accounts. Search, filter, sort and paging come from the same collection the table and list use,\n * so CollectionToolbar and CollectionPagination work with it unchanged. It shows the current page.\n */\nexport function CollectionCards<T>({ collection, label, renderCard, empty, loading, className }: CollectionCardsProps<T>) {\n const rows = collection.pageRows;\n if (loading && collection.totalCount === 0) {\n return <LoadingNote text={collection.messages.loading} />;\n }\n if (!rows.length) {\n return collection.totalCount > 0 || collection.isFiltered ? (\n <EmptyState\n size=\"compact\"\n kind=\"no-results\"\n title={collection.messages.noResults}\n description={collection.messages.noResultsDescription}\n actions={<Button emphasis=\"standard\" onClick={collection.clearFilters}>{collection.messages.clearFilters}</Button>}\n />\n ) : (\n <>{empty ?? <EmptyState size=\"compact\" kind=\"start\" title={collection.messages.nothingHere} />}</>\n );\n }\n return (\n <ul className={cn('CollectionCards', className)} aria-label={label}>\n {rows.map((row) => (\n <li key={collection.getRowId(row)}>{renderCard(row)}</li>\n ))}\n </ul>\n );\n}\n","import { Button } from '../../components/button';\nimport { Select } from '../../components/select';\nimport { cn } from '../../utils/cn';\n\nexport interface CollectionPaginationProps {\n /** 1-based. */\n page: number;\n pageCount: number;\n pageSize?: number;\n total: number;\n filtered?: boolean;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n pageSizeOptions?: number[];\n /** Used in the nav label: \"Pagination for Transactions\". */\n label: string;\n previousLabel?: string;\n nextLabel?: string;\n rowsPerPageLabel?: string;\n className?: string;\n}\n\n/**\n * Generic on purpose: page, pageCount, pageSize, total and onPageChange are enough\n * to use it without a collection. A collection passes those through.\n */\nexport function CollectionPagination({\n page,\n pageCount,\n pageSize,\n total,\n filtered,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions,\n label,\n previousLabel = 'Previous',\n nextLabel = 'Next',\n rowsPerPageLabel = 'Rows per page',\n className,\n}: CollectionPaginationProps) {\n const size = pageSize && pageSize > 0 ? pageSize : total;\n const start = total === 0 ? 0 : (page - 1) * size + 1;\n const end = Math.min(total, page * size);\n return (\n <nav className={cn('CollectionPagination', className)} aria-label={`Pagination for ${label}`}>\n <p>\n {total === 0 ? '0' : `${start}–${end}`} of {total}{filtered ? ' filtered' : ''}\n </p>\n <Button emphasis=\"quiet\" disabled={page <= 1} onClick={() => onPageChange(page - 1)}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">chevron_left</span>\n {previousLabel}\n </Button>\n <Button emphasis=\"quiet\" disabled={page >= pageCount} onClick={() => onPageChange(page + 1)}>\n {nextLabel}\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">chevron_right</span>\n </Button>\n {pageSizeOptions?.length && onPageSizeChange ? (\n <Select.Root\n items={pageSizeOptions.map((option) => ({ value: String(option), label: `${option} per page` }))}\n value={String(pageSize ?? '')}\n onValueChange={(value) => onPageSizeChange(Number(value))}\n >\n <Select.Trigger aria-label={rowsPerPageLabel}>\n <Select.Value />\n <Select.Icon><span className=\"material-symbols-outlined\">expand_more</span></Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Positioner>\n <Select.Popup>\n <Select.List>\n {pageSizeOptions.map((option) => (\n <Select.Item key={option} value={String(option)}>{option} per page</Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n ) : null}\n </nav>\n );\n}\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { Combobox } from '../../components/combobox';\nimport { Input } from '../../components/input';\nimport { Select } from '../../components/select';\nimport { Tabs } from '../../components/tabs';\nimport { Toggle } from '../../components/toggle';\nimport { ToggleGroup } from '../../components/toggle-group';\nimport { cn } from '../../utils/cn';\nimport { useUnderWidth } from '../use-under-width';\nimport { headerLabel, type CollectionColumn, type FilterOption } from './columns';\nimport type { CollectionApi } from './use-collection';\n\n/** A select longer than this becomes a combobox, the same cutoff MoneyField uses. */\nconst COMBOBOX_AT = 12;\n\n/** One segmented group in the toolbar: a quick filter, a sort or a grouping, as a row of toggles. */\nexport interface ToolbarSegment {\n /** Names the group for screen readers and, with `showLabel`, sits before it. */\n label: string;\n showLabel?: boolean;\n value: string;\n onChange: (value: string) => void;\n /** `count` reads \"All (12)\" in the toggle. */\n options: Array<{ value: string; label: string; count?: number }>;\n /** Pushes this group, and the ones after it, to the far end of the row. */\n end?: boolean;\n}\n\nexport interface CollectionToolbarProps<T> {\n collection: CollectionApi<T>;\n /** Required when any column is searchable. */\n searchLabel?: string;\n searchLabelVisible?: boolean;\n /** The table sorts from its headers. The list, and a table that asks, sorts from here. */\n showSort?: boolean;\n /** Adds a Group by select. The hook already holds the grouping. */\n groupOptions?: Array<{ value: string; label: string }>;\n actions?: React.ReactNode;\n bulkActions?: React.ReactNode;\n /** Placeholder text in the search box, such as \"Find a client\". The label still names it for screen readers. */\n searchPlaceholder?: string;\n /** 'fill' (the default) lets the search grow. 'fixed' gives it collection.search-fixed-width, so the meta beside it has room. */\n searchWidth?: 'fill' | 'fixed';\n /** Quiet text beside the search, such as \"12 clients\". */\n meta?: React.ReactNode;\n /** Quiet text at the far end of the row, such as \"Sorted by most open\". */\n metaEnd?: React.ReactNode;\n /** Pads the toolbar and rules it from the table below, for a toolbar inside a Sheet above an edge-to-edge table. */\n framed?: boolean;\n /**\n * Segmented toggle groups for quick filters, sort and grouping. When set, the toolbar is one row:\n * search, then the groups, then `meta`. Tabs, trailing selects and the sort select are not drawn.\n * Build the groups with `segmentFilter` and `segmentSort`.\n */\n segments?: ToolbarSegment[];\n /** Rules the toolbar from the content above it with the sheet rule. For directory pages. */\n ruled?: boolean;\n className?: string;\n}\n\n/**\n * Tabs and search stay put while rows are selected. The trailing controls swap for the\n * selection bar, so the bar takes their place and the row does not grow.\n */\nfunction CollectionToolbarImpl<T>({ collection, searchLabel, searchLabelVisible, searchPlaceholder, showSort, groupOptions, actions, bulkActions, searchWidth = 'fill', meta, metaEnd, framed, segments, ruled, className }: CollectionToolbarProps<T>) {\n const tabs = collection.columns.find((column) => column.filter?.kind === 'tabs');\n const selects = collection.columns.filter((column) => column.filter && column.filter.kind !== 'tabs');\n const searchable = collection.columns.some((column) => column.searchable);\n if (process.env.NODE_ENV !== 'production' && searchable && !searchLabel) {\n console.warn('CollectionToolbar needs searchLabel when a column is searchable.');\n }\n const [announced, setAnnounced] = React.useState('');\n const seenSelection = React.useRef(false);\n React.useEffect(() => {\n const first = !seenSelection.current;\n seenSelection.current = true;\n if (first && collection.selection.length === 0) return;\n setAnnounced('');\n const timer = window.setTimeout(() => {\n if (!collection.selection.length) {\n setAnnounced(collection.messages.selectionCleared);\n return;\n }\n const hidden = collection.hiddenSelectedCount ? `, ${collection.messages.hiddenByFilters(collection.hiddenSelectedCount)}` : '';\n setAnnounced(`${collection.messages.selected(collection.selection.length)}${hidden}`);\n }, 200);\n return () => window.clearTimeout(timer);\n }, [collection.selection, collection.hiddenSelectedCount, collection.messages]);\n\n const selecting = collection.selection.length > 0;\n const narrow = useUnderWidth('--sl-collection-narrow-width');\n if (segments) {\n return (\n <div className={cn('CollectionToolbar', className)} data-segmented=\"\" data-ruled={ruled ? '' : undefined}>\n {searchable ? (\n <SearchField\n label={searchLabel ?? 'Search'}\n visible={searchLabelVisible}\n placeholder={searchPlaceholder}\n value={collection.search}\n onChange={collection.setSearch}\n clearLabel={collection.messages.clearSearch}\n />\n ) : null}\n {segments.map((segment, index) => (\n <ToolbarSegments key={segment.label} segment={segment} first={Boolean(segment.end) && !segments.slice(0, index).some((other) => other.end)} />\n ))}\n {meta ? <p className=\"CollectionToolbarMeta\" aria-live=\"polite\">{meta}</p> : null}\n <div className=\"visually-hidden\" aria-live=\"polite\">{announced}</div>\n </div>\n );\n }\n\n return (\n <div ref={narrow.ref} className={cn('CollectionToolbar', className)} data-selecting={selecting ? '' : undefined} data-narrow={narrow.under ? '' : undefined} data-search={searchWidth === 'fixed' ? 'fixed' : undefined} data-framed={framed ? '' : undefined}>\n {tabs ? <ToolbarTabs collection={collection} column={tabs} /> : null}\n <div className=\"CollectionToolbarMain\">\n {searchable ? (\n <SearchField\n label={searchLabel ?? 'Search'}\n visible={searchLabelVisible}\n placeholder={searchPlaceholder}\n value={collection.search}\n onChange={collection.setSearch}\n clearLabel={collection.messages.clearSearch}\n />\n ) : null}\n {meta ? <p className=\"CollectionToolbarMeta\" aria-live=\"polite\">{meta}</p> : null}\n {metaEnd ? <p className=\"CollectionToolbarMeta CollectionToolbarMetaEnd\">{metaEnd}</p> : null}\n {selecting ? (\n <div className=\"CollectionSelectionBar\" role=\"region\" aria-label=\"Selection\">\n <p className=\"CollectionCount\">\n {collection.messages.selected(collection.selection.length)}\n {collection.hiddenSelectedCount > 0 ? <span> · {collection.messages.hiddenByFilters(collection.hiddenSelectedCount)}</span> : null}\n </p>\n <div className=\"CollectionToolbarActions\">{bulkActions}</div>\n <Button emphasis=\"quiet\" onClick={collection.clearSelection}>Clear selection</Button>\n </div>\n ) : (\n <div className=\"CollectionToolbarTrailing\">\n {selects.map((column) => <FilterControl key={column.id} collection={collection} column={column} />)}\n {groupOptions?.length ? (\n <FilterSelect\n label=\"Group by\"\n value={collection.grouping ?? ''}\n options={[{ value: '', label: 'No grouping' }, ...groupOptions]}\n onChange={(value) => collection.setGrouping(typeof value === 'string' && value ? value : null)}\n />\n ) : null}\n {showSort ? <SortControl collection={collection} /> : null}\n {actions ? <div className=\"CollectionToolbarActions\">{actions}</div> : null}\n </div>\n )}\n </div>\n <div className=\"visually-hidden\" aria-live=\"polite\">{announced}</div>\n </div>\n );\n}\n\nfunction ToolbarTabs<T>({ collection, column }: { collection: CollectionApi<T>; column: CollectionColumn<T> }) {\n const counts = collection.facetCounts(column.id);\n const options: FilterOption[] = column.filter?.options ?? [...counts.keys()].filter((value) => value !== '').sort().map((value) => ({ value, label: value }));\n const allCount = [...counts.values()].reduce((sum, count) => sum + count, 0);\n const current = collection.filters[column.id];\n const value = current == null || current === '' ? '' : String(current);\n return (\n <Tabs.Root value={value} onValueChange={(next) => collection.setFilter(column.id, next === '' ? undefined : next)}>\n <Tabs.List>\n {options.map((option) => {\n const count = option.value === '' || option.all ? allCount : counts.get(option.value) ?? 0;\n const tabValue = option.all ? '' : option.value;\n return (\n <Tabs.Tab key={tabValue || 'all'} value={tabValue}>\n {option.label} {count}\n </Tabs.Tab>\n );\n })}\n </Tabs.List>\n </Tabs.Root>\n );\n}\n\n/**\n * The icon and the clear button sit inside the field. The clear button is the only clear\n * control and shows only when there is text. Escape clears too.\n */\nfunction SearchField({ label, visible, placeholder, value, onChange, clearLabel = 'Clear search' }: {\n label: string;\n placeholder?: string;\n visible?: boolean;\n value: string;\n onChange: (value: string) => void;\n clearLabel?: string;\n}) {\n const id = React.useId();\n const input = React.useRef<HTMLInputElement>(null);\n return (\n <div className=\"CollectionSearch\">\n <label htmlFor={id} className={visible ? undefined : 'visually-hidden'}>{label}</label>\n <div className=\"CollectionSearchField\" data-filled={value ? '' : undefined}>\n <span className=\"CollectionSearchIcon material-symbols-outlined\" aria-hidden=\"true\">search</span>\n <Input\n ref={input}\n id={id}\n type=\"search\"\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && value) {\n event.preventDefault();\n onChange('');\n }\n }}\n />\n {value ? (\n <button\n type=\"button\"\n className=\"CollectionSearchClear\"\n aria-label={clearLabel}\n onClick={() => {\n onChange('');\n input.current?.focus();\n }}\n >\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">close</span>\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction FilterControl<T>({ collection, column }: { collection: CollectionApi<T>; column: CollectionColumn<T> }) {\n const counts = collection.facetCounts(column.id);\n const options = column.filter?.options ?? [...counts.keys()].filter((value) => value !== '').sort().map((value) => ({ value, label: value }));\n const label = column.filter?.label ?? headerLabel(column);\n if (column.filter?.kind === 'boolean') {\n const value = collection.filters[column.id];\n return (\n <FilterSelect\n label={label}\n value={value == null || value === '' ? '' : String(value)}\n options={[{ value: '', label: 'Any' }, { value: 'true', label: 'Yes' }, { value: 'false', label: 'No' }]}\n onChange={(next) => collection.setFilter(column.id, next === '' || Array.isArray(next) ? undefined : next === 'true')}\n />\n );\n }\n if (column.filter?.kind === 'multi-select') {\n const selected = Array.isArray(collection.filters[column.id]) ? (collection.filters[column.id] as string[]) : [];\n return (\n <FilterSelect\n label={label}\n multiple\n value={selected}\n options={options}\n onChange={(next) => {\n const values = Array.isArray(next) ? next : [];\n collection.setFilter(column.id, values.length ? values : undefined);\n }}\n />\n );\n }\n if (options.length > COMBOBOX_AT) {\n return (\n <ComboboxField\n label={label}\n value={String(collection.filters[column.id] ?? '')}\n options={options}\n onChange={(next) => collection.setFilter(column.id, next || undefined)}\n />\n );\n }\n return (\n <FilterSelect\n label={label}\n value={String(collection.filters[column.id] ?? '')}\n options={[{ value: '', label: 'Any' }, ...options]}\n onChange={(next) => collection.setFilter(column.id, next || undefined)}\n />\n );\n}\n\nfunction FilterSelect({ label, value, options, onChange, multiple }: {\n label: string;\n value: string | string[];\n options: Array<{ value: string; label: string }>;\n onChange: (value: string | string[]) => void;\n multiple?: boolean;\n}) {\n const labelId = React.useId();\n const valueId = React.useId();\n const items = options.map((option) => ({ value: option.value, label: option.label }));\n const chosen = Array.isArray(value) ? (value.length ? `${value.length} selected` : 'Any') : (options.find((option) => option.value === value)?.label ?? 'Any');\n return (\n <Select.Root items={items} multiple={multiple} value={multiple ? (value as string[]) : (value as string)} onValueChange={(next) => onChange(multiple ? (Array.isArray(next) ? next.map(String) : []) : (next == null ? '' : String(next)))}>\n <Select.Trigger aria-labelledby={`${labelId} ${valueId}`}>\n <span id={labelId} className=\"visually-hidden\">{label}</span>\n <span id={valueId}>{label}: {chosen}</span>\n <Select.Icon><span className=\"material-symbols-outlined\">expand_more</span></Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Positioner>\n <Select.Popup>\n <Select.List>\n {items.map((item) => (\n <Select.Item key={item.value || 'any'} value={item.value}>{item.label}</Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nfunction ComboboxField({ label, value, options, onChange }: { label: string; value: string; options: Array<{ value: string; label: string }>; onChange: (value: string) => void }) {\n const id = React.useId();\n return (\n <Combobox.Root items={options.map((option) => option.label)} value={options.find((option) => option.value === value)?.label ?? null} onValueChange={(next) => {\n const match = options.find((option) => option.label === next);\n onChange(match?.value ?? '');\n }}>\n <label htmlFor={id} className=\"visually-hidden\">{label}</label>\n <div className=\"ComboboxInputWrapper\">\n <Combobox.Input id={id} placeholder={label} aria-label={label} />\n </div>\n <Combobox.Portal>\n <Combobox.Positioner>\n <Combobox.Popup>\n <Combobox.Empty>No matches</Combobox.Empty>\n <Combobox.List>\n {(item: string) => <Combobox.Item key={item} value={item}>{item}</Combobox.Item>}\n </Combobox.List>\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n );\n}\n\nfunction SortControl<T>({ collection }: { collection: CollectionApi<T> }) {\n const columns = collection.columns.filter((column) => column.sortable);\n return (\n <div className=\"CollectionSort\">\n <FilterSelect\n label=\"Sort\"\n value={collection.sort?.id ?? ''}\n options={columns.map((column) => ({ value: column.id, label: headerLabel(column) }))}\n onChange={(id) => {\n const next = typeof id === 'string' ? id : '';\n collection.setSort(next ? { id: next, desc: collection.sort?.id === next ? collection.sort.desc : false } : null);\n }}\n />\n <Button\n emphasis=\"quiet\"\n aria-pressed={Boolean(collection.sort?.desc)}\n aria-label={collection.sort?.desc ? 'Sort direction, descending' : 'Sort direction, ascending'}\n disabled={!collection.sort}\n onClick={() => collection.sort && collection.setSort({ ...collection.sort, desc: !collection.sort.desc })}\n >\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">{collection.sort?.desc ? 'arrow_downward' : 'arrow_upward'}</span>\n </Button>\n </div>\n );\n}\n\nfunction ToolbarSegments({ segment, first }: { segment: ToolbarSegment; first: boolean }) {\n return (\n <div className=\"CollectionSegment\" data-end={first ? '' : undefined}>\n {segment.showLabel ? <span className=\"CollectionSegmentLabel\">{segment.label}</span> : null}\n <ToggleGroup\n data-variant=\"segmented\"\n aria-label={segment.label}\n value={segment.value ? [segment.value] : []}\n onValueChange={(next) => {\n if (next[0] && next[0] !== segment.value) segment.onChange(String(next[0]));\n }}\n >\n {segment.options.map((option) => (\n <Toggle key={option.value} value={option.value}>\n {option.label}\n {option.count !== undefined ? <> ({option.count})</> : null}\n </Toggle>\n ))}\n </ToggleGroup>\n </div>\n );\n}\n\n/** A segmented quick filter on a column: \"All (12)\", \"Open items (4)\". Include an `all` option to clear it. */\nexport function segmentFilter<T>(\n collection: CollectionApi<T>,\n columnId: string,\n label: string,\n options: Array<{ value: string; label: string }>,\n): ToolbarSegment {\n const counts = collection.facetCounts(columnId);\n const total = [...counts.values()].reduce((sum, count) => sum + count, 0);\n const current = collection.filters[columnId];\n return {\n label,\n value: current == null || current === '' ? 'all' : String(current),\n onChange: (value) => collection.setFilter(columnId, value === 'all' ? undefined : value),\n options: options.map((option) => ({ ...option, count: option.value === 'all' ? total : counts.get(option.value) ?? 0 })),\n };\n}\n\n/** A segmented sort: each option names a column and a direction. */\nexport function segmentSort<T>(\n collection: CollectionApi<T>,\n label: string,\n options: Array<{ value: string; label: string; desc?: boolean }>,\n): ToolbarSegment {\n const active = options.find((option) => option.value === collection.sort?.id);\n return {\n label,\n value: active?.value ?? '',\n onChange: (value) => {\n const option = options.find((o) => o.value === value);\n if (option) collection.setSort({ id: option.value, desc: option.desc ?? false });\n },\n options,\n };\n}\n\nfunction ToolbarClear<T>({ collection }: { collection: CollectionApi<T> }) {\n if (!collection.isFiltered) return null;\n return <Button emphasis=\"quiet\" onClick={collection.clearFilters}>{collection.messages.clearFilters}</Button>;\n}\n\nfunction ToolbarActions({ children }: { children?: React.ReactNode }) {\n return <div className=\"CollectionToolbarActions\">{children}</div>;\n}\n\nfunction ToolbarSelection<T>({ collection, children }: { collection: CollectionApi<T>; children?: React.ReactNode }) {\n if (!collection.selection.length) return null;\n return (\n <div className=\"CollectionSelectionBar\" role=\"region\" aria-label=\"Selection\">\n <p className=\"CollectionCount\">{collection.messages.selected(collection.selection.length)}</p>\n {children}\n <Button emphasis=\"quiet\" onClick={collection.clearSelection}>Clear selection</Button>\n </div>\n );\n}\n\nfunction ToolbarRoot({ className, children }: { className?: string; children?: React.ReactNode }) {\n return <div className={cn('CollectionToolbar', className)}>{children}</div>;\n}\n\nexport const CollectionToolbar = Object.assign(CollectionToolbarImpl, {\n Root: ToolbarRoot,\n Tabs: ToolbarTabs,\n Search: SearchField,\n Filter: FilterControl,\n Sort: SortControl,\n Clear: ToolbarClear,\n Actions: ToolbarActions,\n SelectionBar: ToolbarSelection,\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any -- TanStack types a row as Record<string, any>. A collection's row is the app's own type, so the table boundary stays loose. */\nimport {\n columnFacetingFeature,\n columnFilteringFeature,\n columnGroupingFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n createExpandedRowModel,\n createFacetedRowModel,\n createFacetedUniqueValues,\n createFilteredRowModel,\n createGroupedRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n globalFilteringFeature,\n rowExpandingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n tableFeatures,\n type ColumnDef,\n type FilterFn,\n type Row,\n type SortFn,\n type Table,\n} from '@tanstack/react-table';\n\nimport {\n collatorFor,\n comparePresent,\n isEmptyValue,\n searchMatches,\n treeVisibleIds,\n} from './collection-utils';\nimport { headerLabel, type CollectionColumn } from './columns';\nimport { rowSearchText } from './format';\n\nexport const collectionFeatures = tableFeatures({\n rowSortingFeature,\n columnFilteringFeature,\n globalFilteringFeature,\n columnFacetingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n columnGroupingFeature,\n rowExpandingFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n sortedRowModel: createSortedRowModel(),\n filteredRowModel: createFilteredRowModel(),\n groupedRowModel: createGroupedRowModel(),\n expandedRowModel: createExpandedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n facetedRowModel: createFacetedRowModel(),\n facetedUniqueValues: createFacetedUniqueValues(),\n});\n\nexport type CollectionTable = Table<typeof collectionFeatures, any>;\nexport type CollectionRow = Row<typeof collectionFeatures, any>;\n\nexport interface CollectionModelInput<T> {\n rows: readonly T[];\n columns: CollectionColumn<T>[];\n getRowId: (row: T) => string;\n getSubRows?: (row: T) => readonly T[] | undefined;\n locale: string;\n state?: Record<string, unknown>;\n initialState?: Record<string, unknown>;\n onStateChange?: Record<string, (updater: unknown) => void>;\n canSelect?: (row: T) => boolean;\n}\n\nexport function toColumnDefs<T>(columns: CollectionColumn<T>[]): ColumnDef<typeof collectionFeatures, any>[] {\n return columns.map((column) => ({\n id: column.id,\n accessorFn: (row: T) => {\n const value = column.value(row);\n return isEmptyValue(value) ? undefined : value;\n },\n header: headerLabel(column),\n enableSorting: Boolean(column.sortable),\n sortUndefined: 'last' as const,\n // A tie returns 0. TanStack multiplies the result by -1 when descending, so an index tie would reverse, and it already falls back to the row index.\n sortFn: ((rowA, rowB, columnId) => {\n const locale = (rowA.table.options.meta as { locale?: string } | undefined)?.locale ?? 'en';\n return comparePresent(rowA.getValue(columnId), rowB.getValue(columnId), column.kind ?? 'text', collatorFor(locale));\n }) as SortFn<typeof collectionFeatures, any>,\n enableGlobalFilter: column.searchable != null && column.searchable !== false,\n enableColumnFilter: Boolean(column.filter),\n enableGrouping: true,\n enableHiding: true,\n filterFn: column.filter ? filterFor(column) : undefined,\n meta: column,\n ...column.tanstack,\n } as ColumnDef<typeof collectionFeatures, any>));\n}\n\nfunction filterFor<T>(column: CollectionColumn<T>): FilterFn<typeof collectionFeatures, any> {\n void column;\n const fn: FilterFn<typeof collectionFeatures, any> = (row, columnId, filterValue) => {\n if (filterValue == null || filterValue === '' || (Array.isArray(filterValue) && filterValue.length === 0)) return true;\n const value = String(row.getValue(columnId) ?? '');\n if (Array.isArray(filterValue)) return filterValue.map(String).includes(value);\n if (typeof filterValue === 'boolean') return String(Boolean(row.getValue(columnId))) === String(filterValue) || value === String(filterValue);\n return value === String(filterValue);\n };\n fn.autoRemove = (filterValue) => filterValue == null || filterValue === '' || (Array.isArray(filterValue) && filterValue.length === 0);\n return fn;\n}\n\nexport function collectionTableOptions<T>(input: CollectionModelInput<T>) {\n const columns = input.columns;\n const locale = input.locale;\n const searchKey = `${locale}\\u0000${columns.map((column) => column.id).join('\\u0000')}`;\n const searchCache = new WeakMap<object, { key: string; text: string }>();\n const textOf = (row: T) => {\n const cached = searchCache.get(row as object);\n if (cached?.key === searchKey) return cached.text;\n const text = rowSearchText(row, columns, locale);\n searchCache.set(row as object, { key: searchKey, text });\n return text;\n };\n let treeCacheQuery = '\\u0000';\n let treeCache = new Set<string>();\n const globalFilterFn: FilterFn<typeof collectionFeatures, any> = (row, _columnId, query) => {\n const text = String(query ?? '');\n if (!input.getSubRows) return searchMatches(text, textOf(row.original));\n if (treeCacheQuery !== text) {\n treeCacheQuery = text;\n treeCache = treeVisibleIds(input.rows, input.getRowId, (item) => input.getSubRows?.(item), (item) =>\n searchMatches(text, textOf(item)),\n );\n }\n return treeCache.has(input.getRowId(row.original));\n };\n\n return {\n features: collectionFeatures,\n data: input.rows as T[],\n columns: toColumnDefs(columns),\n getRowId: (row: T) => input.getRowId(row),\n getSubRows: input.getSubRows as ((row: T) => T[] | undefined) | undefined,\n // A column filter on a tree keeps the parents of a matching child, the same way search does.\n filterFromLeafRows: Boolean(input.getSubRows),\n getColumnCanGlobalFilter: (column: { columnDef: { meta?: CollectionColumn<T> } }) => {\n const meta = column.columnDef.meta;\n return meta?.searchable != null && meta.searchable !== false;\n },\n enableRowSelection: input.canSelect ? (row: { original: T }) => input.canSelect!(row.original) : false,\n enableMultiRowSelection: true,\n enableSubRowSelection: true,\n globalFilterFn,\n meta: { locale, columns },\n state: input.state,\n initialState: input.initialState,\n onGlobalFilterChange: input.onStateChange?.globalFilter,\n onSortingChange: input.onStateChange?.sorting,\n onColumnFiltersChange: input.onStateChange?.columnFilters,\n onPaginationChange: input.onStateChange?.pagination,\n onRowSelectionChange: input.onStateChange?.rowSelection,\n onGroupingChange: input.onStateChange?.grouping,\n onExpandedChange: input.onStateChange?.expanded,\n onColumnOrderChange: input.onStateChange?.columnOrder,\n onColumnVisibilityChange: input.onStateChange?.columnVisibility,\n autoResetPageIndex: false,\n // Resetting expanded would close every group on the first data change. Groups start open.\n autoResetExpanded: false,\n };\n}\n","import { useDeferredValue, useEffect, useMemo, useRef, useState, type MutableRefObject } from 'react';\nimport { useTable } from '@tanstack/react-table';\n\nimport type { CollectionColumn } from './columns';\nimport { collectionTableOptions, type CollectionRow, type CollectionTable } from './collection-model';\nimport { hiddenSelectedCount, nextSort, pageBounds, pageFlat, selectableIds, type FlatEntry } from './collection-utils';\nimport { totalText } from './format';\n\nexport interface CollectionSort {\n id: string;\n desc: boolean;\n}\n\nexport interface CollectionMessages {\n selectAll: (count: number) => string;\n actionsFor: (name: string) => string;\n total: string;\n pageSubtotal: string;\n selected: (count: number) => string;\n hiddenByFilters: (count: number) => string;\n noResults: string;\n noResultsDescription: string;\n clearFilters: string;\n clearSearch: string;\n nothingHere: string;\n previous: string;\n next: string;\n rowsPerPage: string;\n selectionCleared: string;\n loading: string;\n}\n\nexport const defaultMessages: CollectionMessages = {\n selectAll: (count) => `Select all ${count} filtered rows`,\n actionsFor: (name) => `Actions for ${name}`,\n total: 'Total',\n pageSubtotal: 'Page subtotal',\n selected: (count) => `${count} selected`,\n hiddenByFilters: (count) => `${count} hidden by filters`,\n noResults: 'No results',\n noResultsDescription: 'Nothing matches the current search or filters.',\n clearFilters: 'Clear filters',\n clearSearch: 'Clear search',\n nothingHere: 'Nothing here yet',\n previous: 'Previous',\n next: 'Next',\n rowsPerPage: 'Rows per page',\n selectionCleared: 'Selection cleared',\n loading: 'Loading',\n};\n\nexport interface UseCollectionOptions<T> {\n rows: readonly T[];\n columns: CollectionColumn<T>[];\n getRowId: (row: T) => string;\n initialSort?: CollectionSort;\n initialFilters?: Record<string, unknown>;\n /** Omit it and the table has no selection column. */\n canSelect?: (row: T) => boolean;\n /** Omit it and every filtered row is on one page. */\n pageSize?: number;\n groupBy?: string;\n getSubRows?: (row: T) => readonly T[] | undefined;\n /**\n * What a page counts. 'row' (the default) pages by rows, so a page can end partway through a\n * parent's children. 'top-level' pages a tree by its top-level rows: each page holds whole\n * parents with all their visible children, and the page size, page count and\n * `pageTotal` all count parents.\n */\n pageBy?: 'row' | 'top-level';\n /** Groups and tree parents start open. Pass false to start them closed. */\n defaultExpanded?: boolean;\n /** Page sizes the control offers. A stored size outside this list is dropped. */\n pageSizeOptions?: number[];\n /** Remember search, sort, filters, page size and grouping for this screen. Not the selection or the page. */\n stateKey?: string;\n messages?: Partial<CollectionMessages>;\n storage?: Pick<Storage, 'getItem' | 'setItem'>;\n locale?: string;\n /** Dryden clears the selection when a refresh replaces the rows. Default keeps it. */\n clearSelectionOnRowsChange?: boolean;\n search?: string;\n onSearchChange?: (value: string) => void;\n sort?: CollectionSort | null;\n onSortChange?: (sort: CollectionSort | null) => void;\n filters?: Record<string, unknown>;\n onFiltersChange?: (filters: Record<string, unknown>) => void;\n selection?: string[];\n onSelectionChange?: (ids: string[]) => void;\n /** 1-based. */\n page?: number;\n onPageChange?: (page: number) => void;\n grouping?: string | null;\n onGroupingChange?: (grouping: string | null) => void;\n columnOrder?: string[];\n onColumnOrderChange?: (order: string[]) => void;\n columnVisibility?: Record<string, boolean>;\n onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void;\n}\n\nexport interface CollectionApi<T> {\n table: CollectionTable;\n columns: CollectionColumn<T>[];\n getRowId: (row: T) => string;\n locale: string;\n search: string;\n setSearch: (value: string) => void;\n sort: CollectionSort | null;\n setSort: (sort: CollectionSort | null) => void;\n cycleSort: (columnId: string) => void;\n filters: Record<string, unknown>;\n setFilter: (columnId: string, value: unknown) => void;\n clearFilters: () => void;\n facetCounts: (columnId: string) => Map<string, number>;\n selection: string[];\n selectedRows: T[];\n selectAllFiltered: () => void;\n clearSelection: () => void;\n /** Drops the selection of rows the current filters still show. Hidden rows stay selected. */\n clearFilteredSelection: () => void;\n selectionSet: ReadonlySet<string>;\n messages: CollectionMessages;\n hiddenSelectedCount: number;\n filteredRows: T[];\n filteredCount: number;\n /** What the pager counts: filtered rows, or the filtered top-level rows when `pageBy` is 'top-level'. */\n pageTotal: number;\n /** The leaf rows of this page. With `pageBy: 'top-level'` that includes children of collapsed parents. */\n pageRows: T[];\n totalCount: number;\n totals: Record<string, string>;\n page: number;\n pageCount: number;\n setPage: (page: number) => void;\n pageSize?: number;\n setPageSize: (size: number) => void;\n isFiltered: boolean;\n reset: () => void;\n grouping: string | null;\n setGrouping: (columnId: string | null) => void;\n columnOrder: string[];\n setColumnOrder: (order: string[]) => void;\n columnVisibility: Record<string, boolean>;\n setColumnVisibility: (visibility: Record<string, boolean>) => void;\n canSelect?: (row: T) => boolean;\n /** The rows of this page, with group headers repeated when a group continues. */\n pageEntries: Array<FlatEntry<CollectionRow> & { continued?: boolean }>;\n rowHeaderId?: string;\n registerRowFocus: (focus: (() => void) | null) => void;\n focusFirstRow: () => void;\n /** Set when the page changes. The view focuses the first row after that page has rendered. */\n focusAfterPage: MutableRefObject<boolean>;\n}\n\ninterface StoredView {\n search?: string;\n sort?: CollectionSort | null;\n filters?: Record<string, unknown>;\n pageSize?: number;\n grouping?: string | null;\n}\n\nfunction readStored(storage: Pick<Storage, 'getItem'> | undefined, key: string | undefined, columnIds: ReadonlySet<string>, pageSizeOptions?: number[]): StoredView {\n if (!storage || !key) return {};\n try {\n const raw = storage.getItem(`loomiere:collection:${key}`);\n const stored = raw ? (JSON.parse(raw) as StoredView) : {};\n if (stored.sort && !columnIds.has(stored.sort.id)) stored.sort = null;\n if (stored.filters) {\n stored.filters = Object.fromEntries(Object.entries(stored.filters).filter(([id]) => columnIds.has(id)));\n }\n if (stored.grouping && !columnIds.has(stored.grouping)) stored.grouping = null;\n if (stored.pageSize != null && pageSizeOptions?.length && !pageSizeOptions.includes(stored.pageSize)) stored.pageSize = undefined;\n return stored;\n } catch {\n return {};\n }\n}\n\n/** A tabs filter with no All option starts on the first tab, so the rows and the selected tab agree. */\nfunction withTabDefaults<T>(columns: CollectionColumn<T>[], filters: Record<string, unknown>): Record<string, unknown> {\n const next = { ...filters };\n for (const column of columns) {\n if (column.filter?.kind !== 'tabs') continue;\n const current = next[column.id];\n if (current != null && current !== '') continue;\n const options = column.filter.options ?? [];\n if (options.some((option) => option.value === '' || option.all)) continue;\n if (options[0]) next[column.id] = options[0].value;\n }\n return next;\n}\n\nfunction filtersToList(filters: Record<string, unknown>) {\n return Object.entries(filters)\n .filter(([, value]) => value != null && value !== '' && !(Array.isArray(value) && value.length === 0))\n .map(([id, value]) => ({ id, value }));\n}\n\nfunction selectionRecord(ids: readonly string[]): Record<string, true> {\n const record: Record<string, true> = {};\n for (const id of ids) record[id] = true;\n return record;\n}\n\nexport function useCollection<T>(options: UseCollectionOptions<T>): CollectionApi<T> {\n const storage = options.storage ?? (typeof sessionStorage === 'undefined' ? undefined : sessionStorage);\n const columnIds = useMemo(() => new Set(options.columns.map((column) => column.id)), [options.columns]);\n const stored = useRef(readStored(storage, options.stateKey, columnIds, options.pageSizeOptions)).current;\n const locale = options.locale || (typeof document === 'undefined' ? 'en' : document.documentElement.lang) || 'en';\n const messages = { ...defaultMessages, ...options.messages };\n const initialSort = options.initialSort ?? null;\n const initialFilters = withTabDefaults(options.columns, options.initialFilters ?? {});\n const initialGrouping = options.groupBy ?? null;\n const initialVisibility = Object.fromEntries(options.columns.map((column) => [column.id, !column.hidden]));\n const initialOrder = options.columns.map((column) => column.id);\n\n const [searchState, setSearchState] = useState(stored.search ?? '');\n const [sortState, setSortState] = useState<CollectionSort | null>(stored.sort ?? initialSort);\n const [filterState, setFilterState] = useState<Record<string, unknown>>(stored.filters ?? initialFilters);\n const [selectionState, setSelectionState] = useState<string[]>([]);\n const [pageState, setPageState] = useState(1);\n const [pageSizeState, setPageSizeState] = useState(stored.pageSize ?? options.pageSize);\n const [groupingState, setGroupingState] = useState<string | null>(stored.grouping ?? initialGrouping);\n const [orderState, setOrderState] = useState(initialOrder);\n const [visibilityState, setVisibilityState] = useState(initialVisibility);\n const [expanded, setExpanded] = useState<true | Record<string, boolean>>(options.defaultExpanded === false ? {} : true);\n const expandedBeforeSearch = useRef<true | Record<string, boolean> | null>(null);\n const focusAfterPage = useRef(false);\n\n const search = options.search ?? searchState;\n const sort = options.sort === undefined ? sortState : options.sort;\n const filters = options.filters ?? filterState;\n const selection = options.selection ?? selectionState;\n const page = options.page ?? pageState;\n const grouping = options.grouping === undefined ? groupingState : options.grouping;\n const columnOrder = options.columnOrder ?? orderState;\n const columnVisibility = options.columnVisibility ?? visibilityState;\n const pageSize = pageSizeState;\n\n const deferredSearch = useDeferredValue(search);\n const focusRef = useRef<(() => void) | null>(null);\n const rowsRef = useRef(options.rows);\n const idOf = options.getRowId;\n\n const updatePage = (value: number) => {\n options.onPageChange?.(value);\n if (options.page === undefined) setPageState(value);\n };\n const setSearch = (value: string) => {\n options.onSearchChange?.(value);\n if (options.search === undefined) setSearchState(value);\n updatePage(1);\n };\n const setSort = (value: CollectionSort | null) => {\n options.onSortChange?.(value);\n if (options.sort === undefined) setSortState(value);\n };\n const setFilters = (value: Record<string, unknown>) => {\n options.onFiltersChange?.(value);\n if (options.filters === undefined) setFilterState(value);\n updatePage(1);\n };\n const setSelection = (ids: string[]) => {\n options.onSelectionChange?.(ids);\n if (options.selection === undefined) setSelectionState(ids);\n };\n const setGrouping = (value: string | null) => {\n options.onGroupingChange?.(value);\n if (options.grouping === undefined) setGroupingState(value);\n };\n\n const tableOptions = collectionTableOptions({\n rows: options.rows,\n columns: options.columns,\n getRowId: idOf,\n getSubRows: options.getSubRows,\n locale,\n canSelect: options.canSelect,\n state: {\n globalFilter: deferredSearch,\n sorting: sort ? [{ id: sort.id, desc: sort.desc }] : [],\n columnFilters: filtersToList(filters),\n pagination: { pageIndex: 0, pageSize: Number.POSITIVE_INFINITY },\n rowSelection: selectionRecord(selection),\n grouping: grouping ? [grouping] : [],\n expanded,\n columnOrder,\n columnVisibility,\n },\n initialState: {\n sorting: initialSort ? [{ id: initialSort.id, desc: initialSort.desc }] : [],\n columnFilters: filtersToList(initialFilters),\n grouping: initialGrouping ? [initialGrouping] : [],\n columnVisibility: initialVisibility,\n columnOrder: initialOrder,\n },\n onStateChange: {\n rowSelection: (updater: unknown) => {\n const current = selectionRecord(selection);\n const next = typeof updater === 'function' ? (updater as (value: Record<string, true>) => Record<string, true>)(current) : (updater as Record<string, true>);\n setSelection(Object.keys(next).filter((id) => next[id]));\n },\n expanded: (updater: unknown) => {\n setExpanded((current) => (typeof updater === 'function' ? (updater as (value: typeof current) => typeof current)(current) : (updater as typeof current)));\n },\n },\n });\n\n const table = useTable(tableOptions as never) as CollectionTable;\n\n useEffect(() => {\n if (!options.getSubRows) return;\n if (deferredSearch) {\n if (expandedBeforeSearch.current == null) expandedBeforeSearch.current = expanded;\n setExpanded(true);\n return;\n }\n if (expandedBeforeSearch.current != null) {\n setExpanded(expandedBeforeSearch.current);\n expandedBeforeSearch.current = null;\n }\n }, [deferredSearch, options.getSubRows]);\n\n useEffect(() => {\n if (options.clearSelectionOnRowsChange && rowsRef.current !== options.rows) {\n rowsRef.current = options.rows;\n setSelection([]);\n return;\n }\n rowsRef.current = options.rows;\n const kept = selectableIds(selection, options.rows, idOf, options.canSelect, options.getSubRows);\n if (kept.length !== selection.length) setSelection(kept);\n }, [options.rows, options.clearSelectionOnRowsChange, options.canSelect, options.getSubRows]);\n\n useEffect(() => {\n if (!options.stateKey || !storage) return;\n try {\n storage.setItem(\n `loomiere:collection:${options.stateKey}`,\n JSON.stringify({ search, sort, filters, pageSize, grouping } satisfies StoredView),\n );\n } catch {\n /* A blocked storage must not break the screen. */\n }\n }, [options.stateKey, storage, search, sort, filters, pageSize, grouping]);\n\n const filteredModel = table.getFilteredRowModel();\n // A tree total counts leaves. A parent's amount is already the children.\n const filteredLeaves = filteredModel.flatRows.filter((row) => !row.getIsGrouped?.() && !(options.getSubRows && row.subRows?.length));\n const filteredRows = filteredLeaves.map((row) => row.original as T);\n const filteredIds = new Set(filteredLeaves.map((row) => row.id));\n const topRows = table.getRowModel().rows;\n const flat = flattenVisible(topRows as CollectionRow[]);\n const byTopLevel = options.pageBy === 'top-level' && Boolean(options.getSubRows);\n // The row model lists expanded children after their parents. A top-level page counts only the parents.\n const parents = byTopLevel ? (topRows as CollectionRow[]).filter((row) => row.depth === 0) : [];\n const paged = byTopLevel\n ? pageTopLevel(parents, page - 1, pageSize && pageSize > 0 ? pageSize : parents.length || 1)\n : pageFlat(flat, page - 1, pageSize && pageSize > 0 ? pageSize : flat.filter((entry) => entry.kind === 'leaf').length || 1);\n const pageTotal = byTopLevel ? parents.length : filteredRows.length;\n const pageRows = byTopLevel\n ? parents.slice(paged.bounds.start, paged.bounds.end).flatMap((row) => leafRows(row as CollectionRow)).map((row) => row.original as T)\n : paged.entries.filter((entry) => entry.kind === 'leaf').map((entry) => entry.row.original as T);\n\n const totals = useMemo(() => {\n const rows = filteredModel.flatRows\n .filter((row) => !row.getIsGrouped?.() && !(options.getSubRows && row.subRows?.length))\n .map((row) => row.original as T);\n const result: Record<string, string> = {};\n for (const column of options.columns) {\n if (!column.total) continue;\n result[column.id] = totalText(column, rows, locale);\n }\n return result;\n }, [options.columns, options.getSubRows, filteredModel, locale]);\n\n const byId = useMemo(() => {\n const map = new Map<string, T>();\n const walk = (rows: readonly T[]) => {\n for (const row of rows) {\n map.set(idOf(row), row);\n const children = options.getSubRows?.(row);\n if (children) walk(children);\n }\n };\n walk(options.rows);\n return map;\n }, [options.rows, options.getSubRows, idOf]);\n\n const isFiltered = Boolean(search) || !sameFilters(filters, initialFilters);\n\n return {\n table,\n columns: options.columns,\n getRowId: idOf,\n locale,\n search,\n setSearch,\n sort,\n setSort,\n cycleSort: (columnId) => setSort(nextSort(sort, columnId, initialSort)),\n filters,\n setFilter: (columnId, value) => setFilters({ ...filters, [columnId]: value }),\n clearFilters: () => {\n setSearch('');\n setFilters({ ...initialFilters });\n },\n facetCounts: (columnId) => {\n const column = table.getColumn(columnId);\n const counts = column?.getFacetedUniqueValues?.() ?? new Map();\n const mapped = new Map<string, number>();\n for (const [key, count] of counts) mapped.set(key == null ? '' : String(key), count);\n return mapped;\n },\n selection,\n selectedRows: selection.map((id) => byId.get(id)).filter((row): row is T => row != null),\n selectAllFiltered: () => table.toggleAllRowsSelected(true),\n clearSelection: () => setSelection([]),\n clearFilteredSelection: () => setSelection(selection.filter((id) => !filteredIds.has(id))),\n selectionSet: new Set(selection),\n messages,\n hiddenSelectedCount: hiddenSelectedCount(selection, filteredIds),\n filteredRows,\n filteredCount: filteredRows.length,\n pageTotal,\n pageRows,\n totalCount: options.rows.length,\n totals,\n page: paged.bounds.pageIndex + 1,\n pageCount: pageSize ? paged.bounds.pageCount : 1,\n setPage: (value) => {\n focusAfterPage.current = true;\n updatePage(value);\n },\n pageSize,\n setPageSize: (size) => {\n setPageSizeState(size);\n updatePage(1);\n },\n isFiltered,\n reset: () => {\n setSearch('');\n setSort(initialSort);\n setFilters({ ...initialFilters });\n setGrouping(initialGrouping);\n setPageSizeState(options.pageSize);\n setExpanded(options.defaultExpanded === false ? {} : true);\n expandedBeforeSearch.current = null;\n updatePage(1);\n setOrderState(initialOrder);\n setVisibilityState(initialVisibility);\n options.onColumnOrderChange?.(initialOrder);\n options.onColumnVisibilityChange?.(initialVisibility);\n },\n grouping,\n setGrouping,\n columnOrder,\n setColumnOrder: (order) => {\n options.onColumnOrderChange?.(order);\n if (options.columnOrder === undefined) setOrderState(order);\n },\n columnVisibility,\n setColumnVisibility: (visibility) => {\n options.onColumnVisibilityChange?.(visibility);\n if (options.columnVisibility === undefined) setVisibilityState(visibility);\n },\n canSelect: options.canSelect,\n pageEntries: paged.entries,\n rowHeaderId: options.columns.find((column) => column.rowHeader)?.id,\n registerRowFocus: (focus) => {\n focusRef.current = focus;\n },\n focusFirstRow: () => focusRef.current?.(),\n focusAfterPage,\n };\n}\n\nfunction sameFilters(a: Record<string, unknown>, b: Record<string, unknown>): boolean {\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const key of keys) if (String(a[key] ?? '') !== String(b[key] ?? '')) return false;\n return true;\n}\n\nfunction flattenVisible(rows: CollectionRow[], groupId?: string, nested = false): FlatEntry<CollectionRow>[] {\n const out: FlatEntry<CollectionRow>[] = [];\n for (const row of rows) {\n // An expanded group also lists its leaves beside itself. They are already in subRows.\n if (!nested && !row.getIsGrouped?.() && row.getParentRow?.()) continue;\n if (row.getIsGrouped?.()) {\n out.push({ kind: 'group', row, groupId: row.id });\n if (row.getIsExpanded()) out.push(...flattenVisible(row.subRows as CollectionRow[], row.id, true));\n } else {\n out.push({ kind: 'leaf', row, groupId });\n if (row.subRows?.length && row.getIsExpanded?.()) out.push(...flattenVisible(row.subRows as CollectionRow[], groupId, true));\n }\n }\n return out;\n}\n\n\n/** Page a tree by its top-level rows: each page holds whole parents with their visible children. */\nfunction pageTopLevel(rows: CollectionRow[], pageIndex: number, pageSize: number) {\n const bounds = pageBounds(pageIndex, pageSize, rows.length);\n const entries: Array<FlatEntry<CollectionRow> & { continued?: boolean }> = [];\n for (const row of rows.slice(bounds.start, bounds.end)) entries.push(...flattenVisible([row]));\n return { entries, leafCount: entries.filter((entry) => entry.kind === 'leaf').length, bounds };\n}\n\n/** A row's leaves: itself when it has no children, else every descendant without children, expanded or not. */\nfunction leafRows(row: CollectionRow): CollectionRow[] {\n const children = row.subRows as CollectionRow[] | undefined;\n if (!children?.length) return [row];\n return children.flatMap(leafRows);\n}\n"]}