@scattered-light/loomiere-base-ui 0.6.1 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +135 -5
  2. package/dist/chunk-JUUPOOQQ.js +3723 -0
  3. package/dist/chunk-JUUPOOQQ.js.map +1 -0
  4. package/dist/chunk-M7KJASGK.js +802 -0
  5. package/dist/chunk-M7KJASGK.js.map +1 -0
  6. package/dist/chunk-Y2CPBMFJ.js +147 -0
  7. package/dist/chunk-Y2CPBMFJ.js.map +1 -0
  8. package/dist/custom/collection/index.d.ts +540 -0
  9. package/dist/custom/collection/index.js +1489 -0
  10. package/dist/custom/collection/index.js.map +1 -0
  11. package/dist/custom/index.d.ts +5 -0
  12. package/dist/custom/index.js +4 -0
  13. package/dist/custom/index.js.map +1 -0
  14. package/dist/design-system/components/Badge/README.md +35 -0
  15. package/dist/design-system/components/Badge/preview.html +19 -0
  16. package/dist/design-system/components/Collection/README.md +14 -0
  17. package/dist/design-system/components/CollectionPagination/README.md +15 -0
  18. package/dist/design-system/components/CollectionToolbar/README.md +29 -0
  19. package/dist/design-system/components/DataList/README.md +39 -0
  20. package/dist/design-system/components/DataList/preview.html +475 -0
  21. package/dist/design-system/components/DataTable/README.md +41 -0
  22. package/dist/design-system/components/DataTable/preview.html +475 -0
  23. package/dist/design-system/components/DatePicker/README.md +55 -0
  24. package/dist/design-system/components/DatePicker/preview.html +475 -0
  25. package/dist/design-system/components/EditableList/README.md +33 -0
  26. package/dist/design-system/components/EditableList/preview.html +475 -0
  27. package/dist/design-system/components/EmptyState/README.md +60 -0
  28. package/dist/design-system/components/EmptyState/preview.html +475 -0
  29. package/dist/design-system/components/ListDetail/README.md +43 -0
  30. package/dist/design-system/components/ListDetail/preview.html +475 -0
  31. package/dist/design-system/components/MoneyField/README.md +52 -0
  32. package/dist/design-system/components/MoneyField/preview.html +475 -0
  33. package/dist/design-system/components/Splitter/README.md +42 -0
  34. package/dist/design-system/components/Splitter/preview.html +475 -0
  35. package/dist/design-system/components/Table/README.md +2 -1
  36. package/dist/design-system/components/Table/preview.html +1 -1
  37. package/dist/design-system/components/bundle.js +7 -5
  38. package/dist/design-system/components/index.d.ts +3 -21
  39. package/dist/design-system/components/styles.css +2349 -186
  40. package/dist/index-ChJXlxzq.d.ts +809 -0
  41. package/dist/index.d.ts +3 -21
  42. package/dist/index.js +176 -891
  43. package/dist/index.js.map +1 -1
  44. package/dist/styles/components/Accordion.css +1 -1
  45. package/dist/styles/components/AlertDialog.css +1 -1
  46. package/dist/styles/components/Autocomplete.css +1 -1
  47. package/dist/styles/components/Avatar.css +1 -1
  48. package/dist/styles/components/Button.css +1 -1
  49. package/dist/styles/components/Checkbox.css +1 -1
  50. package/dist/styles/components/CheckboxGroup.css +1 -1
  51. package/dist/styles/components/Collapsible.css +1 -1
  52. package/dist/styles/components/Combobox.css +1 -1
  53. package/dist/styles/components/ContextMenu.css +1 -1
  54. package/dist/styles/components/Dialog.css +1 -1
  55. package/dist/styles/components/Drawer.css +1 -1
  56. package/dist/styles/components/Field.css +1 -1
  57. package/dist/styles/components/Fieldset.css +1 -1
  58. package/dist/styles/components/Form.css +1 -1
  59. package/dist/styles/components/Input.css +1 -1
  60. package/dist/styles/components/Menu.css +1 -1
  61. package/dist/styles/components/Menubar.css +1 -1
  62. package/dist/styles/components/Meter.css +1 -1
  63. package/dist/styles/components/NavigationMenu.css +1 -1
  64. package/dist/styles/components/NumberField.css +1 -1
  65. package/dist/styles/components/OTPField.css +1 -1
  66. package/dist/styles/components/Popover.css +1 -1
  67. package/dist/styles/components/PreviewCard.css +1 -1
  68. package/dist/styles/components/Progress.css +1 -1
  69. package/dist/styles/components/Radio.css +1 -1
  70. package/dist/styles/components/ScrollArea.css +1 -1
  71. package/dist/styles/components/Select.css +1 -1
  72. package/dist/styles/components/Separator.css +1 -1
  73. package/dist/styles/components/Slider.css +1 -1
  74. package/dist/styles/components/Switch.css +1 -1
  75. package/dist/styles/components/Tabs.css +1 -1
  76. package/dist/styles/components/Toast.css +1 -1
  77. package/dist/styles/components/Toggle.css +1 -1
  78. package/dist/styles/components/ToggleGroup.css +1 -1
  79. package/dist/styles/components/Toolbar.css +1 -1
  80. package/dist/styles/components/Tooltip.css +1 -1
  81. package/dist/styles/custom/Badge.css +104 -0
  82. package/dist/styles/custom/Collection.css +15 -0
  83. package/dist/styles/custom/CollectionPagination.css +24 -0
  84. package/dist/styles/custom/CollectionToolbar.css +140 -0
  85. package/dist/styles/custom/DataList.css +123 -0
  86. package/dist/styles/custom/DataTable.css +120 -0
  87. package/dist/styles/custom/DatePicker.css +572 -0
  88. package/dist/styles/custom/EditableList.css +98 -0
  89. package/dist/styles/custom/EmptyState.css +255 -0
  90. package/dist/styles/custom/ListDetail.css +126 -0
  91. package/dist/styles/custom/MoneyField.css +344 -0
  92. package/dist/styles/custom/Splitter.css +207 -0
  93. package/dist/styles/{components → custom}/Table.css +31 -4
  94. package/dist/styles/index.css +12 -2
  95. package/dist/styles/reset/accessibility.css +1 -1
  96. package/dist/styles/reset/reset-accessibility.css +1 -1
  97. package/dist/styles/reset/reset-tailwind.css +1 -1
  98. package/dist/styles/reset/reset.css +1 -1
  99. package/dist/styles/tailwind.css +12 -2
  100. package/package.json +35 -7
@@ -0,0 +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"]}
@@ -0,0 +1,5 @@
1
+ export { B as Badge, a as BadgeProps, ag as CURRENCY_SEARCH_THRESHOLD, C as Calendar, b as CalendarProps, c as CurrencyCode, ah as CurrencySelect, D as DatePicker, d as DatePickerProps, e as DatePresets, f as DatePresetsProps, g as DateRange, h as DateValue, E as EditableList, i as EditableListApi, j as EditableListRootProps, k as EmptyState, l as EmptyStateKind, m as EmptyStateProps, ai as KeyOptions, L as ListDetail, n as ListDetailCloseReason, aj as ListDetailDetail, o as ListDetailDetailProps, p as ListDetailLayout, ak as ListDetailList, al as ListDetailRoot, q as ListDetailRootProps, r as ListDetailValue, am as MAX_MINOR_UNITS, an as MoneyChangeDetails, ao as MoneyDisplay, M as MoneyField, ap as MoneyFieldAffix, aq as MoneyFieldGroup, ar as MoneyFieldInput, s as MoneyFieldProps, as as MoneyFieldRoot, t as MoneyFieldRootProps, at as MoneyFieldSteps, au as NormalizedPaste, av as PanelSpec, P as Preset, v as PresetValue, aw as RuntimePanel, ax as Size, ay as SizeInput, S as Splitter, az as SplitterHandle, w as SplitterHandleProps, aA as SplitterKey, aB as SplitterPanel, x as SplitterPanelProps, aC as SplitterRoot, y as SplitterRootProps, aD as StoredLayout, aE as StoredPanel, z as addDays, A as addMonths, aF as affixSide, aG as applyKey, aH as applyStored, aI as ariaPercents, F as builtinPresets, G as clampDate, aJ as createPanels, aK as cssSize, aL as currencyName, aM as currencySymbol, H as daysInMonth, I as defaultPresets, J as defaultWeekStartsOn, K as endOfWeek, aN as formatDay, aO as formatFull, O as formatMoney, Q as fromMinorUnits, R as getCurrencyDigits, aP as handleTarget, T as inclusiveDays, U as isValidCurrency, V as isoWeek, W as last30Days, X as last7Days, Y as lastMonth, Z as lastWeek, aQ as layoutOf, _ as lengthBlockReason, aR as measure, aS as monthCells, aT as moveFocusDate, $ as nextMonth, a0 as nextWeek, aU as normalizePaste, a1 as orderRange, aV as parseDate, a2 as parseDecimalString, aW as parseSize, aX as presetInBounds, aY as resetToDefault, aZ as resizeByDelta, a3 as resolvePreset, a_ as roundHalfExpand, a$ as roundingChangesValue, b0 as sameSelection, b1 as serializeSize, b2 as settle, b3 as sizeText, a4 as startOfWeek, b4 as syncPanels, a5 as thisMonth, a6 as thisQuarter, a7 as thisWeek, a8 as toDecimalString, a9 as toMinorUnits, aa as today, ab as todayDate, b5 as toggleCollapsed, ac as tomorrow, ad as useListDetail, b6 as valueText, ae as yearToDate, af as yesterday } from '../index-ChJXlxzq.js';
2
+ import 'react';
3
+ import 'react/jsx-runtime';
4
+ import '@base-ui/react';
5
+ import '@base-ui/react/number-field';
@@ -0,0 +1,4 @@
1
+ export { Badge, CURRENCY_SEARCH_THRESHOLD, Calendar, CurrencySelect, DatePicker, DatePresets, EditableList, ListDetail, ListDetailDetail, ListDetailList, ListDetailRoot, MAX_MINOR_UNITS, MoneyField, MoneyFieldAffix, MoneyFieldGroup, MoneyFieldInput, MoneyFieldRoot, Splitter, SplitterHandle, SplitterPanel, SplitterRoot, addDays, addMonths, affixSide, applyKey, applyStored, ariaPercents, builtinPresets, clampDate, createPanels, cssSize, currencyName, currencySymbol, daysInMonth, defaultPresets, defaultWeekStartsOn, endOfWeek, formatDay, formatFull, formatMoney, fromMinorUnits, getCurrencyDigits, handleTarget, inclusiveDays, isValidCurrency, isoWeek, last30Days, last7Days, lastMonth, lastWeek, layoutOf, lengthBlockReason, measure, monthCells, moveFocusDate, nextMonth, nextWeek, normalizePaste, orderRange, parseDate, parseDecimalString, parseSize, presetInBounds, resetToDefault, resizeByDelta, resolvePreset, roundHalfExpand, roundingChangesValue, sameSelection, serializeSize, settle, sizeText, startOfWeek, syncPanels, thisMonth, thisQuarter, thisWeek, toDecimalString, toMinorUnits, today, todayDate, toggleCollapsed, tomorrow, useListDetail, valueText, yearToDate, yesterday } from '../chunk-JUUPOOQQ.js';
2
+ export { EmptyState } from '../chunk-M7KJASGK.js';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,35 @@
1
+ # Badge
2
+
3
+ Loomiere component, not part of Base UI. A status or count label. Not a Base UI part, and not interactive: no hover or focus. Colors are the emphasis levels (--sl-e-bg, --sl-e-fg, --sl-e-border), so data-emphasis, data-status and data-color all recolor it. The default level is subtle, from DEFAULT_LEVELS. The shape is radius.pill. Sizes are badge.* (tokens/component/badge.json). Text is the trigger style of the same tier (trigger-minimize, trigger-condense, trigger-base): medium weight, and those three tiers already exist. subtitle is bold, which would shout, and label only exists at base. Icons use icon-size of that same tier (a badge icon is a mark beside the label, not a control that fills the line the way a Button icon does). Min width equals the height on every badge, so a single digit is a circle and a wider label is unchanged. Padding stays, so "12" does not touch the pill edges.
4
+
5
+ Use `Loomiere.Badge`, this package's component: it puts the class names on for you (`import { Badge } from '@scattered-light/loomiere-base-ui'`, or from `@scattered-light/loomiere-base-ui/custom`).
6
+
7
+ Not a Base UI part, so there is no base-ui.com page for it.
8
+
9
+ ## Classes
10
+
11
+ | Class | Data attributes it answers to |
12
+ |---|---|
13
+ | `Badge` | `data-size`: `minimize`, `base`; `data-dot` |
14
+
15
+ Base UI sets the state attributes (`data-checked`, `data-open`, `data-disabled`...) itself. Set `data-size`, `data-emphasis`, `data-variant` and `data-color` yourself; `data-color` takes any palette name (`primary`, `secondary`, `error`...) and repaints the part in it.
16
+
17
+ ## Example
18
+
19
+ From the Badge stories (`Default`):
20
+
21
+ ```tsx
22
+ export const Default: Story = {
23
+ render: () => (
24
+ <div style={row}>
25
+ <Badge status="info">Info</Badge>
26
+ <Badge status="success">Success</Badge>
27
+ <Badge status="warning">Warning</Badge>
28
+ <Badge status="error">Error</Badge>
29
+ <Badge>3</Badge>
30
+ </div>
31
+ ),
32
+ };
33
+ ```
34
+
35
+ The preview also shows `Emphasis`, `Statuses`, `Sizes`.
@@ -0,0 +1,19 @@
1
+ <!-- @dsCard group="Display" height=480 subtitle="Default / Emphasis / Statuses / Sizes" -->
2
+ <!doctype html>
3
+ <html>
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <style>
7
+ body { margin: 0; padding: var(--sl-space-4, 16px); background: var(--sl-surface-canvas); color: var(--sl-text-primary); }
8
+ #root { display: grid; gap: var(--sl-space-5, 20px); }
9
+ .ds-story-name { margin: 0 0 var(--sl-space-2, 8px); font: var(--sl-font-label-minimize-font, 500 10px sans-serif); color: var(--sl-text-tertiary); text-transform: uppercase; letter-spacing: 0.06em; }
10
+ </style>
11
+ </head>
12
+ <body>
13
+ <div id="root"></div>
14
+ <script>
15
+ (()=>{var B=Object.create;var l=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var w=(t,s)=>()=>(s||t((s={exports:{}}).exports,s),s.exports),b=(t,s)=>{for(var r in s)l(t,r,{get:s[r],enumerable:!0})},h=(t,s,r,d)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of S(s))!x.call(t,o)&&o!==r&&l(t,o,{get:()=>s[o],enumerable:!(d=v(s,o))||d.enumerable});return t};var E=(t,s,r)=>(r=t!=null?B(f(t)):{},h(s||!t||!t.__esModule?l(r,"default",{value:t,enumerable:!0}):r,t));var p=w((q,u)=>{u.exports=window.Loomiere});var m={};b(m,{Count:()=>j,Default:()=>C,Dot:()=>F,Emphasis:()=>D,Icon:()=>M,InColor:()=>A,InStatus:()=>N,Sizes:()=>k,Statuses:()=>R,default:()=>g});var a=E(p(),1);var c=window.React;function e(t,s,r){let{children:d,...o}=s||{};return r!==void 0&&(o.key=r),d===void 0?c.createElement(t,o):Array.isArray(d)?c.createElement(t,o,...d):c.createElement(t,o,d)}var P=c.Fragment;var z={title:"Components/Lib/Badge",component:a.Badge,parameters:{layout:"centered"},tags:["autodocs","ds:lib"],argTypes:{children:{control:"text",description:"Badge label"}}},g=z,n={display:"flex",gap:"12px",alignItems:"center",flexWrap:"wrap"},I=()=>e("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",width:"20",height:"20",children:e("path",{d:"M10 2a8 8 0 100 16 8 8 0 000-16z"})}),C={render:()=>e("div",{style:n,children:[e(a.Badge,{status:"info",children:"Info"}),e(a.Badge,{status:"success",children:"Success"}),e(a.Badge,{status:"warning",children:"Warning"}),e(a.Badge,{status:"error",children:"Error"}),e(a.Badge,{children:"3"})]})},D={render:()=>e("div",{style:n,children:[e(a.Badge,{emphasis:"bold",children:"Bold"}),e(a.Badge,{emphasis:"standard",children:"Standard"}),e(a.Badge,{emphasis:"subtle",children:"Subtle"}),e(a.Badge,{children:"Default"}),e(a.Badge,{emphasis:"quiet",children:"Quiet"})]})},R={render:()=>e("div",{style:n,children:[e(a.Badge,{status:"info",children:"Info"}),e(a.Badge,{status:"success",children:"Success"}),e(a.Badge,{status:"warning",children:"Warning"}),e(a.Badge,{status:"error",children:"Error"})]})},k={render:()=>e("div",{style:n,children:[e(a.Badge,{size:"minimize",children:"Minimize"}),e(a.Badge,{children:"Condense"}),e(a.Badge,{size:"base",children:"Base"})]})},F={render:()=>e("div",{style:n,children:[e(a.Badge,{dot:!0,status:"info",children:"Live"}),e(a.Badge,{dot:!0,status:"success",children:"Saved"}),e(a.Badge,{dot:!0,status:"warning",children:"Pending"}),e(a.Badge,{dot:!0,status:"error",children:"Failed"})]})},M={render:()=>e("div",{style:n,children:[e(a.Badge,{status:"success",children:[e("span",{className:"material-symbols-outlined",children:"check"}),"Saved"]}),e(a.Badge,{status:"error",children:[e(I,{}),"Failed"]})]})},j={render:()=>e("div",{style:n,children:[e(a.Badge,{size:"minimize","aria-label":"3 unread",children:"3"}),e(a.Badge,{"aria-label":"3 unread",children:"3"}),e(a.Badge,{size:"base","aria-label":"3 unread",children:"3"}),e(a.Badge,{"aria-label":"12 unread",children:"12"})]})},N={render:()=>e("div",{style:n,children:["info","success","warning","error"].map(t=>e("div",{"data-status":t,children:e(a.Badge,{children:["In ",t]})},t))})},A={render:()=>e("div",{style:n,children:["primary","secondary","error"].map(t=>e("div",{"data-color":t,children:e(a.Badge,{emphasis:"bold",children:t})},t))})};var i=window.React,y=g||{},L=["Default","Emphasis","Statuses","Sizes"];function O({id:t}){let s=m[t],r={...y.args||{},...s.args||{}};return(s.render||(o=>i.createElement(y.component,o)))(r,{args:r,id:t,name:t})}var W=L.map(t=>i.createElement("section",{key:t,className:"ds-story"},i.createElement("p",{className:"ds-story-name"},t.replace(/([a-z])([A-Z])/g,"$1 $2")),i.createElement("div",{className:"ds-story-body"},i.createElement(O,{id:t}))));window.ReactDOM.createRoot(document.getElementById("root")).render(i.createElement(i.Fragment,null,W));})();
16
+
17
+ </script>
18
+ </body>
19
+ </html>
@@ -0,0 +1,14 @@
1
+ # Collection
2
+
3
+ The Base UI Collection styled by the theme. DataTable, DataList, the toolbar and the pagination, in one place so the two views share the table concept. Sections: toolbar, table additions, groups, list, pagination, sizes. Each section is its own file so the design system can name the part. This file brings them in. The selection bar replaces the trailing controls (filters, sort, actions) and leaves the tabs and the search where they are, so selecting rows does not grow the toolbar.
4
+
5
+ Use `Loomiere.Collection` (`import { Collection } from '@base-ui/react/collection'` in an app) and give each part the class below; the styles target those classes, not Base UI's own markup.
6
+
7
+ Base UI docs: https://base-ui.com/react/components/collection
8
+
9
+ ## Classes
10
+
11
+ | Class | Data attributes it answers to |
12
+ |---|---|
13
+
14
+ Base UI sets the state attributes (`data-checked`, `data-open`, `data-disabled`...) itself. Set `data-size`, `data-emphasis`, `data-variant` and `data-color` yourself; `data-color` takes any palette name (`primary`, `secondary`, `error`...) and repaints the part in it.
@@ -0,0 +1,15 @@
1
+ # CollectionPagination
2
+
3
+ Loomiere component, not part of Base UI. Not tied to a collection. Anything with a page, a page count and a total can use it. Previous and Next are quiet buttons. The count reads "1–25 of 312".
4
+
5
+ Use `Loomiere.CollectionPagination` from `@scattered-light/loomiere-base-ui/custom/collection`. Install `@tanstack/react-table` (peer, optional). It is not on the main entry, so an app that only imports Badge does not need it.
6
+
7
+ Not a Base UI part, so there is no base-ui.com page for it.
8
+
9
+ ## Classes
10
+
11
+ | Class | Data attributes it answers to |
12
+ |---|---|
13
+ | `CollectionPagination` | |
14
+
15
+ Base UI sets the state attributes (`data-checked`, `data-open`, `data-disabled`...) itself. Set `data-size`, `data-emphasis`, `data-variant` and `data-color` yourself; `data-color` takes any palette name (`primary`, `secondary`, `error`...) and repaints the part in it.
@@ -0,0 +1,29 @@
1
+ # CollectionToolbar
2
+
3
+ Loomiere component, not part of Base UI. The wrap follows the toolbar's own width, not the window: a table in a narrow pane wraps even when the page is wide. Search grows to fill the row beside the trailing controls, and wraps to its own line before it shrinks under collection.search-min-width. Under the narrow width it takes the full row and filters wrap under it. A container query cannot read the width token, so the component also sets data-narrow. The search icon and the clear button sit inside the field. The browser's own search cancel is hidden by the reset, so the clear button is the only one, in every browser.
4
+
5
+ Use `Loomiere.CollectionToolbar` from `@scattered-light/loomiere-base-ui/custom/collection`. Install `@tanstack/react-table` (peer, optional). It is not on the main entry, so an app that only imports Badge does not need it.
6
+
7
+ Not a Base UI part, so there is no base-ui.com page for it.
8
+
9
+ ## Classes
10
+
11
+ | Class | Data attributes it answers to |
12
+ |---|---|
13
+ | `CollectionToolbar` | `data-narrow` |
14
+ | `CollectionToolbarMain` | |
15
+ | `CollectionSelectionBar` | |
16
+ | `CollectionSort` | |
17
+ | `CollectionSearch` | |
18
+ | `CollectionSearchField` | `data-filled` |
19
+ | `Input` | |
20
+ | `CollectionSearchIcon` | |
21
+ | `CollectionSearchClear` | |
22
+ | `CollectionToolbarTrailing` | |
23
+ | `SelectTrigger` | |
24
+ | `ComboboxInputWrapper` | |
25
+ | `CollectionToolbarActions` | |
26
+ | `CollectionView` | `data-narrow` |
27
+ | `CollectionCount` | |
28
+
29
+ Base UI sets the state attributes (`data-checked`, `data-open`, `data-disabled`...) itself. Set `data-size`, `data-emphasis`, `data-variant` and `data-color` yourself; `data-color` takes any palette name (`primary`, `secondary`, `error`...) and repaints the part in it.
@@ -0,0 +1,39 @@
1
+ # DataList
2
+
3
+ Loomiere component, not part of Base UI. The same rows as the table, in one container with the table's borders, hover, selected and current states. Not a stack of floating cards: the two views should read as one family. variant=cards adds the surface radius and a gap when a queue should read as separate items.
4
+
5
+ Use `Loomiere.DataList` from `@scattered-light/loomiere-base-ui/custom/collection`. Install `@tanstack/react-table` (peer, optional). It is not on the main entry, so an app that only imports Badge does not need it.
6
+
7
+ Not a Base UI part, so there is no base-ui.com page for it.
8
+
9
+ ## Classes
10
+
11
+ | Class | Data attributes it answers to |
12
+ |---|---|
13
+ | `DataList` | `data-size`: `md`; `data-variant`: `cards`; `data-loading` |
14
+ | `DataListPrimary` | |
15
+ | `DataListSecondary` | |
16
+ | `DataListMeta` | |
17
+ | `DataListSummary` | |
18
+ | `DataListBody` | |
19
+ | `DataListAmount` | |
20
+ | `DataListGroup` | |
21
+
22
+ Base UI sets the state attributes (`data-checked`, `data-open`, `data-disabled`...) itself. Set `data-size`, `data-emphasis`, `data-variant` and `data-color` yourself; `data-color` takes any palette name (`primary`, `secondary`, `error`...) and repaints the part in it.
23
+
24
+ ## Example
25
+
26
+ From the DataList stories (`BesideTheTable`):
27
+
28
+ ```tsx
29
+ export const BesideTheTable: Story = {
30
+ render: () => (
31
+ <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 24 }}>
32
+ <FeeTable pageSize={5} />
33
+ <FeeList rows={fees.slice(0, 8)} />
34
+ </div>
35
+ ),
36
+ };
37
+ ```
38
+
39
+ The preview also shows `ReviewQueue`, `ExtraDoesNotActivate`, `Sort`.