@scattered-light/loomiere-base-ui 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -2
- package/dist/{chunk-JUUPOOQQ.js → chunk-LJQ3RZDJ.js} +51 -3
- package/dist/chunk-LJQ3RZDJ.js.map +1 -0
- package/dist/custom/collection/index.d.ts +6 -1
- package/dist/custom/collection/index.js +18 -12
- package/dist/custom/collection/index.js.map +1 -1
- package/dist/custom/index.d.ts +1 -1
- package/dist/custom/index.js +1 -1
- package/dist/design-system/components/ContextMenu/README.md +1 -1
- package/dist/design-system/components/ContextMenu/preview.html +1 -1
- package/dist/design-system/components/DataList/README.md +1 -1
- package/dist/design-system/components/DataList/preview.html +1 -1
- package/dist/design-system/components/DataTable/README.md +1 -1
- package/dist/design-system/components/DataTable/preview.html +38 -38
- package/dist/design-system/components/DescriptionList/README.md +41 -0
- package/dist/design-system/components/DescriptionList/preview.html +19 -0
- package/dist/design-system/components/Drawer/README.md +1 -1
- package/dist/design-system/components/ScrollArea/preview.html +2 -2
- package/dist/design-system/components/Sheet/README.md +46 -0
- package/dist/design-system/components/Sheet/preview.html +19 -0
- package/dist/design-system/components/StatFigure/README.md +38 -0
- package/dist/design-system/components/StatFigure/preview.html +19 -0
- package/dist/design-system/components/Table/README.md +2 -2
- package/dist/design-system/components/Table/preview.html +2 -2
- package/dist/design-system/components/bundle.js +7 -7
- package/dist/design-system/components/index.d.ts +1 -1
- package/dist/design-system/components/styles.css +370 -56
- package/dist/{index-ChJXlxzq.d.ts → index-CBAo353T.d.ts} +55 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/styles/components/Accordion.css +1 -1
- package/dist/styles/components/AlertDialog.css +1 -1
- package/dist/styles/components/Autocomplete.css +1 -1
- package/dist/styles/components/Avatar.css +1 -1
- package/dist/styles/components/Button.css +1 -1
- package/dist/styles/components/Checkbox.css +1 -1
- package/dist/styles/components/CheckboxGroup.css +1 -1
- package/dist/styles/components/Collapsible.css +1 -1
- package/dist/styles/components/Combobox.css +1 -1
- package/dist/styles/components/ContextMenu.css +1 -1
- package/dist/styles/components/Dialog.css +1 -1
- package/dist/styles/components/Drawer.css +8 -2
- package/dist/styles/components/Field.css +1 -1
- package/dist/styles/components/Fieldset.css +1 -1
- package/dist/styles/components/Form.css +1 -1
- package/dist/styles/components/Input.css +1 -1
- package/dist/styles/components/Menu.css +1 -1
- package/dist/styles/components/Menubar.css +1 -1
- package/dist/styles/components/Meter.css +1 -1
- package/dist/styles/components/NavigationMenu.css +1 -1
- package/dist/styles/components/NumberField.css +1 -1
- package/dist/styles/components/OTPField.css +1 -1
- package/dist/styles/components/Popover.css +1 -1
- package/dist/styles/components/PreviewCard.css +1 -1
- package/dist/styles/components/Progress.css +1 -1
- package/dist/styles/components/Radio.css +1 -1
- package/dist/styles/components/ScrollArea.css +1 -1
- package/dist/styles/components/Select.css +1 -1
- package/dist/styles/components/Separator.css +1 -1
- package/dist/styles/components/Slider.css +1 -1
- package/dist/styles/components/Switch.css +1 -1
- package/dist/styles/components/Tabs.css +1 -1
- package/dist/styles/components/Toast.css +1 -1
- package/dist/styles/components/Toggle.css +1 -1
- package/dist/styles/components/ToggleGroup.css +1 -1
- package/dist/styles/components/Toolbar.css +1 -1
- package/dist/styles/components/Tooltip.css +1 -1
- package/dist/styles/custom/Badge.css +1 -1
- package/dist/styles/custom/Collection.css +1 -1
- package/dist/styles/custom/CollectionPagination.css +1 -1
- package/dist/styles/custom/CollectionToolbar.css +1 -1
- package/dist/styles/custom/DataList.css +19 -1
- package/dist/styles/custom/DataTable.css +1 -1
- package/dist/styles/custom/DatePicker.css +1 -1
- package/dist/styles/custom/DescriptionList.css +75 -0
- package/dist/styles/custom/EditableList.css +1 -1
- package/dist/styles/custom/EmptyState.css +1 -1
- package/dist/styles/custom/ListDetail.css +1 -1
- package/dist/styles/custom/MoneyField.css +1 -1
- package/dist/styles/custom/Sheet.css +90 -0
- package/dist/styles/custom/Splitter.css +1 -1
- package/dist/styles/custom/StatFigure.css +60 -0
- package/dist/styles/custom/Table.css +63 -1
- package/dist/styles/index.css +4 -1
- package/dist/styles/reset/accessibility.css +1 -1
- package/dist/styles/reset/reset-accessibility.css +1 -1
- package/dist/styles/reset/reset-tailwind.css +2 -2
- package/dist/styles/reset/reset.css +2 -2
- package/dist/styles/tailwind.css +4 -1
- package/package.json +2 -2
- package/dist/chunk-JUUPOOQQ.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/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","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\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 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 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, 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 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\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 >\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, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })\n ) : (\n <tbody>\n {bodyRows({ collection, columns, leaves, roving, navigate, onRowActivate, getRowHref, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })}\n </tbody>\n )}\n {Object.keys(collection.totals).length ? (\n <tfoot>\n <tr>\n {collection.canSelect ? <td /> : null}\n {columns.map((column, index) => (\n <td key={column.id} data-align={alignOf(column)}>\n {index === 0 ? text.total : typeof column.total === 'function' ? column.total(collection.filteredRows) : collection.totals[column.id] ?? ''}\n {index === 0 && collection.isFiltered ? <span className=\"visually-hidden\"> of {collection.filteredCount} filtered rows</span> : null}\n </td>\n ))}\n {rowActions ? <td /> : null}\n </tr>\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 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, 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 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} onKeyDown={onKeyDown} onClick={() => roving.focusAt(index)}>\n {name}\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 ? undefined : named}\n onKeyDown={onKeyDown}\n onClick={() => { roving.focusAt(index); activate(); }}\n >\n {name}\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 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})` } : 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 { 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 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, showSort, groupOptions, actions, bulkActions, 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}>\n {tabs ? <ToolbarTabs collection={collection} column={tabs} /> : null}\n <div className=\"CollectionToolbarMain\">\n {searchable ? (\n <SearchField\n label={searchLabel ?? 'Search'}\n visible={searchLabelVisible}\n value={collection.search}\n onChange={collection.setSearch}\n clearLabel={collection.messages.clearSearch}\n />\n ) : 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, value, onChange, clearLabel = 'Clear search' }: {\n label: 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 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, 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 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 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 /** 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 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 paged = pageFlat(flat, page - 1, pageSize && pageSize > 0 ? pageSize : flat.filter((entry) => entry.kind === 'leaf').length || 1);\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 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"]}
|
|
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/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","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\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 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 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, 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 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 >\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, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })\n ) : (\n <tbody>\n {bodyRows({ collection, columns, leaves, roving, navigate, onRowActivate, getRowHref, activeRowId, rowActions, colSpan, filteredEmpty, empty, loading })}\n </tbody>\n )}\n {Object.keys(collection.totals).length ? (\n <tfoot>\n <tr data-total={ruled ? totalStyle : undefined}>\n {collection.canSelect ? <td data-rule={ruled ? '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={ruled && (index === 0 || !column.total) ? 'none' : undefined}>\n {index === 0 ? text.total : typeof column.total === 'function' ? column.total(collection.filteredRows) : collection.totals[column.id] ?? ''}\n {index === 0 && collection.isFiltered ? <span className=\"visually-hidden\"> of {collection.filteredCount} filtered rows</span> : null}\n </td>\n ))}\n {rowActions ? <td data-rule={ruled ? 'none' : undefined} /> : null}\n </tr>\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 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, 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 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} onKeyDown={onKeyDown} onClick={() => roving.focusAt(index)}>\n {name}\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 ? undefined : named}\n onKeyDown={onKeyDown}\n onClick={() => { roving.focusAt(index); activate(); }}\n >\n {name}\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 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})` } : 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 { 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 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, showSort, groupOptions, actions, bulkActions, 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}>\n {tabs ? <ToolbarTabs collection={collection} column={tabs} /> : null}\n <div className=\"CollectionToolbarMain\">\n {searchable ? (\n <SearchField\n label={searchLabel ?? 'Search'}\n visible={searchLabelVisible}\n value={collection.search}\n onChange={collection.setSearch}\n clearLabel={collection.messages.clearSearch}\n />\n ) : 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, value, onChange, clearLabel = 'Clear search' }: {\n label: 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 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, 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 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 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 /** 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 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 paged = pageFlat(flat, page - 1, pageSize && pageSize > 0 ? pageSize : flat.filter((entry) => entry.kind === 'leaf').length || 1);\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 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"]}
|