@optimum-intelligence/opti-ui 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/components/badge/Badge.d.ts +4 -2
  2. package/dist/components/badge/Badge.js.map +1 -1
  3. package/dist/components/button/Button.d.ts +6 -1
  4. package/dist/components/button/Button.js +31 -26
  5. package/dist/components/button/Button.js.map +1 -1
  6. package/dist/components/data-table/DataTable.d.ts +14 -2
  7. package/dist/components/data-table/DataTable.js +113 -98
  8. package/dist/components/data-table/DataTable.js.map +1 -1
  9. package/dist/components/data-table/DataTableFilters.d.ts +1 -1
  10. package/dist/components/data-table/DataTableFilters.js +85 -44
  11. package/dist/components/data-table/DataTableFilters.js.map +1 -1
  12. package/dist/components/data-table/export.d.ts +3 -0
  13. package/dist/components/data-table/export.js +31 -0
  14. package/dist/components/data-table/export.js.map +1 -0
  15. package/dist/components/data-table/types.d.ts +32 -5
  16. package/dist/components/data-table/useDataTable.js +18 -4
  17. package/dist/components/data-table/useDataTable.js.map +1 -1
  18. package/dist/components/description-list/DescriptionList.d.ts +29 -0
  19. package/dist/components/description-list/DescriptionList.js +125 -0
  20. package/dist/components/description-list/DescriptionList.js.map +1 -0
  21. package/dist/components/dialog/ConfirmDialog.d.ts +59 -0
  22. package/dist/components/dialog/ConfirmDialog.js +165 -0
  23. package/dist/components/dialog/ConfirmDialog.js.map +1 -0
  24. package/dist/components/dialog/Dialog.d.ts +9 -2
  25. package/dist/components/dialog/Dialog.js +103 -89
  26. package/dist/components/dialog/Dialog.js.map +1 -1
  27. package/dist/components/drawer/Drawer.d.ts +3 -1
  28. package/dist/components/drawer/Drawer.js +11 -9
  29. package/dist/components/drawer/Drawer.js.map +1 -1
  30. package/dist/components/select/Select.d.ts +6 -1
  31. package/dist/components/select/Select.js +110 -92
  32. package/dist/components/select/Select.js.map +1 -1
  33. package/dist/components.json +259 -20
  34. package/dist/icons/index.d.ts +4 -0
  35. package/dist/icons/index.js +6 -1
  36. package/dist/icons/index.js.map +1 -1
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.js +5 -3
  39. package/dist/llms-full.txt +103 -5
  40. package/dist/llms.txt +3 -0
  41. package/dist/opti-ui.css +434 -19
  42. package/package.json +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","names":["React","cx","createPrimitive","Pagination","PaginationProps","SearchInput","SearchInputProps","Spinner","DataTableContext","useDataTableContext","DataTableContent","DataTableContentProps","DataTableFilter","DataTableFilters","DataTableControlSize","useDataTable","DataTableInstance","UseDataTableOptions","DataTableVirtualOptions","DataTableFilterProps","DataTableFiltersProps","DataTableRootProps","HTMLAttributes","HTMLDivElement","ref","Ref","table","T","DataTableRoot","t0","$","_c","className","props","t1","t2","loading","rows","length","undefined","t3","t4","DataTableToolbar","DataTableActions","DataTableSearchProps","Omit","DataTableSearch","search","searchDebounce","labels","text","draft","setDraft","useState","seen","setSeen","sent","setSent","next","setSearch","commit","timer","window","setTimeout","clearTimeout","useEffect","next_0","change","t5","t6","clearSearch","DataTableSummary","selection","Set","selected","size","count","pending","selectable","totalCount","filteredCount","DataTablePaginationProps","DataTablePagination","paginated","error","page","pageSize","setPage","setPageSize","DataTableToolbarContext","DataTableProps","pageSizeOptions","controlSize","toolbar","ReactNode","context","DataTableComponent","density","empty","layout","maxHeight","onEndReached","options","stickyHeader","striped","tableProps","virtualized","map","_temp","extra","searchable","Symbol","for","t7","t8","t9","t10","t11","row","DataTable","Object","assign","Root","Toolbar","Search","Filters","Filter","Actions","Summary","Content","_c","_Fragment"],"sources":["../../../src/components/data-table/DataTable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\nimport { createPrimitive } from '../../utils/primitive';\nimport { Pagination, type PaginationProps } from '../pagination/Pagination';\nimport { SearchInput, type SearchInputProps } from '../search-input/SearchInput';\nimport { Spinner } from '../spinner/Spinner';\nimport { DataTableContext, useDataTableContext } from './context';\nimport { DataTableContent, type DataTableContentProps } from './DataTableContent';\nimport { DataTableFilter, DataTableFilters, type DataTableControlSize } from './DataTableFilters';\nimport { useDataTable } from './useDataTable';\nimport type { DataTableInstance, UseDataTableOptions } from './types';\n\nexport { useDataTableContext } from './context';\nexport type { DataTableContentProps, DataTableVirtualOptions } from './DataTableContent';\nexport type { DataTableControlSize, DataTableFilterProps, DataTableFiltersProps } from './DataTableFilters';\n\n// ─── Parts ───────────────────────────────────────────────────────────────────\n\nexport interface DataTableRootProps<T> extends React.HTMLAttributes<HTMLDivElement> {\n /** Ref to the table's root element. */\n ref?: React.Ref<HTMLDivElement>;\n /** The table from `useDataTable`. */\n table: DataTableInstance<T>;\n}\n\n/** Provides a table to the parts inside it. */\nfunction DataTableRoot<T>({ table, className, ref, ...props }: DataTableRootProps<T>) {\n return (\n <DataTableContext.Provider value={table}>\n <div\n ref={ref}\n className={cx('oui-data-table', className)}\n data-loading={table.loading ? (table.rows.length ? 'refresh' : 'initial') : undefined}\n {...props}\n />\n </DataTableContext.Provider>\n );\n}\n\nconst DataTableToolbar = createPrimitive('div', 'oui-data-table__toolbar', 'DataTableToolbar');\nconst DataTableActions = createPrimitive('div', 'oui-data-table__actions', 'DataTableActions');\n\nexport interface DataTableSearchProps extends Omit<SearchInputProps, 'value' | 'defaultValue' | 'onValueChange' | 'className'> {\n /** Class name for the search box. */\n className?: string;\n}\n\n/** Search box of the table. Typing applies after the table's `searchDebounce`; clearing applies at once. */\nfunction DataTableSearch({ className, ...props }: DataTableSearchProps) {\n const table = useDataTableContext();\n const { search, searchDebounce, labels: text } = table;\n const [draft, setDraft] = React.useState(search);\n const [seen, setSeen] = React.useState(search);\n const [sent, setSent] = React.useState(search);\n\n // Follow a search set from outside (reset, controlled state), but not the echo\n // of our own change: it can arrive after the user has typed further.\n if (seen !== search) {\n setSeen(search);\n if (search !== sent) {\n setSent(search);\n setDraft(search);\n }\n }\n\n const commit = (next: string) => {\n setSent(next);\n table.setSearch(next);\n };\n\n // Typed text that has not been applied yet goes out once the typing pauses.\n React.useEffect(() => {\n if (draft === sent) return;\n const timer = window.setTimeout(() => commit(draft), searchDebounce);\n return () => window.clearTimeout(timer);\n // `commit` is new on every render; only a change of the text restarts the wait.\n }, [draft, sent, searchDebounce]);\n\n const change = (next: string) => {\n setDraft(next);\n if (!searchDebounce || !next) commit(next);\n };\n\n return (\n <SearchInput\n className={cx('oui-data-table__search', className)}\n aria-label={text.search}\n placeholder={text.search}\n clearLabel={text.clearSearch}\n {...props}\n value={draft}\n onValueChange={change}\n />\n );\n}\n\n/** Row count, or the number of selected rows, with a spinner while loading. */\nfunction DataTableSummary({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n const table = useDataTableContext();\n const text = table.labels;\n const selected = new Set(table.selection).size;\n return (\n <>\n {table.loading && <Spinner className=\"oui-data-table__spinner\" label={text.loading} />}\n <span className={cx('oui-data-table__summary', className)} aria-live=\"polite\" {...props}>\n {/* No count before the first rows arrive: \"0 records\" would be wrong. */}\n {table.selectable && selected\n ? text.selected(selected)\n : table.pending\n ? null\n : table.count !== table.totalCount\n ? text.filteredCount(table.count, table.totalCount)\n : text.count(table.count)}\n </span>\n </>\n );\n}\n\nexport interface DataTablePaginationProps\n extends Omit<PaginationProps, 'page' | 'pageSize' | 'total' | 'onPageChange' | 'onPageSizeChange'> {}\n\n/** Page navigation of the table. Renders nothing when there are no rows, or the table is not paginated. */\nfunction DataTablePagination({ className, ...props }: DataTablePaginationProps) {\n const table = useDataTableContext();\n if (!table.paginated || table.count <= 0 || table.error) return null;\n return (\n <Pagination\n className={cx('oui-data-table__pagination', className)}\n variant=\"simple\"\n labels={table.labels}\n {...props}\n page={table.page}\n pageSize={table.pageSize}\n total={table.count}\n onPageChange={table.setPage}\n onPageSizeChange={table.setPageSize}\n />\n );\n}\n\n// ─── Convenience component ───────────────────────────────────────────────────\n\nexport interface DataTableToolbarContext<T> {\n /** Rows after filters, search and sorting, across all pages. In server mode: the current page. */\n rows: T[];\n /** Ids of the selected rows. */\n selection: string[];\n /** The whole table: filter values, sort, setters. */\n table: DataTableInstance<T>;\n}\n\nexport interface DataTableProps<T> extends UseDataTableOptions<T>, DataTableContentProps {\n /** Choices in the rows-per-page select. */\n pageSizeOptions?: number[];\n /** Size of the search box and the filters. */\n controlSize?: DataTableControlSize;\n /** Extra toolbar content (export, add…). A function receives the processed rows. */\n toolbar?: React.ReactNode | ((context: DataTableToolbarContext<T>) => React.ReactNode);\n /** Class name for the table's root element. */\n className?: string;\n}\n\nfunction DataTableComponent<T>({\n density,\n striped,\n stickyHeader,\n layout,\n maxHeight,\n virtualized,\n onEndReached,\n empty,\n tableProps,\n pageSizeOptions,\n controlSize,\n toolbar,\n className,\n ...options\n}: DataTableProps<T>) {\n // A virtualized table shows all its rows in one scrolling list, unless pages are asked for.\n const table = useDataTable({ ...options, paginated: options.paginated ?? !virtualized });\n const extra =\n typeof toolbar === 'function'\n ? toolbar({ rows: table.rows.map(({ row }) => row), selection: table.selection, table })\n : toolbar;\n\n return (\n <DataTableRoot table={table} className={className}>\n <DataTableToolbar>\n {table.searchable && <DataTableSearch size={controlSize} />}\n <DataTableFilters size={controlSize} />\n <DataTableActions>\n <DataTableSummary />\n {extra}\n </DataTableActions>\n </DataTableToolbar>\n <DataTableContent\n density={density}\n striped={striped}\n stickyHeader={stickyHeader}\n layout={layout}\n maxHeight={maxHeight}\n virtualized={virtualized}\n onEndReached={onEndReached}\n empty={empty}\n tableProps={tableProps}\n />\n <DataTablePagination pageSizeOptions={pageSizeOptions} />\n </DataTableRoot>\n );\n}\n\n/**\n * `<DataTable data={…} columns={…} />` renders a complete table with search,\n * filters, sorting, pagination, row selection, row actions and inline editing;\n * columns declare what they take part in. Every piece of state works\n * uncontrolled or controlled (`search` / `filterValues` / `sort` / `page` /\n * `selection`), and with `mode=\"server\"` the same state drives an API.\n *\n * For another layout, create the table with `useDataTable` and compose the\n * parts: `DataTable.Root`, `DataTable.Toolbar`, `DataTable.Search`,\n * `DataTable.Filters`, `DataTable.Filter`, `DataTable.Actions`,\n * `DataTable.Summary`, `DataTable.Content`, `DataTable.Pagination`.\n */\nexport const DataTable = Object.assign(DataTableComponent, {\n Root: DataTableRoot,\n Toolbar: DataTableToolbar,\n Search: DataTableSearch,\n Filters: DataTableFilters,\n Filter: DataTableFilter,\n Actions: DataTableActions,\n Summary: DataTableSummary,\n Content: DataTableContent,\n Pagination: DataTablePagination,\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","names":["React","cx","DownloadIcon","Button","createPrimitive","Pagination","PaginationProps","SearchInput","SearchInputProps","Spinner","DataTableContext","useDataTableContext","DataTableContent","DataTableContentProps","DataTableFilter","DataTableFilters","DataTableControlSize","downloadCsv","useDataTable","DataTableInstance","UseDataTableOptions","DataTableVirtualOptions","DataTableFilterProps","DataTableFiltersProps","DataTableRootProps","HTMLAttributes","HTMLDivElement","ref","Ref","table","T","DataTableRoot","t0","$","_c","className","props","t1","t2","loading","rows","length","undefined","t3","t4","DataTableToolbar","DataTableActions","DataTableSearchProps","Omit","DataTableSearch","search","searchDebounce","labels","text","draft","setDraft","useState","seen","setSeen","sent","setSent","next","setSearch","commit","timer","window","setTimeout","clearTimeout","useEffect","next_0","change","t5","t6","clearSearch","DataTableSummary","selection","Set","selected","size","count","pending","selectable","totalCount","filteredCount","DataTablePaginationProps","DataTablePagination","paginated","error","page","pageSize","setPage","setPageSize","DataTableToolbarContext","DataTableProps","pageSizeOptions","controlSize","toolbar","ReactNode","context","showToolbar","exportName","fill","DataTableComponent","density","empty","layout","maxHeight","onEndReached","options","stickyHeader","striped","tableProps","virtualized","map","_temp","extra","t7","columns","searchable","export","t8","t9","t10","t11","row","DataTable","Object","assign","Root","Toolbar","Search","Filters","Filter","Actions","Summary","Content","_c","_Fragment"],"sources":["../../../src/components/data-table/DataTable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\nimport { DownloadIcon } from '../../icons';\nimport { Button } from '../button/Button';\nimport { createPrimitive } from '../../utils/primitive';\nimport { Pagination, type PaginationProps } from '../pagination/Pagination';\nimport { SearchInput, type SearchInputProps } from '../search-input/SearchInput';\nimport { Spinner } from '../spinner/Spinner';\nimport { DataTableContext, useDataTableContext } from './context';\nimport { DataTableContent, type DataTableContentProps } from './DataTableContent';\nimport { DataTableFilter, DataTableFilters, type DataTableControlSize } from './DataTableFilters';\nimport { downloadCsv } from './export';\nimport { useDataTable } from './useDataTable';\nimport type { DataTableInstance, UseDataTableOptions } from './types';\n\nexport { useDataTableContext } from './context';\nexport type { DataTableContentProps, DataTableVirtualOptions } from './DataTableContent';\nexport type { DataTableControlSize, DataTableFilterProps, DataTableFiltersProps } from './DataTableFilters';\n\n// ─── Parts ───────────────────────────────────────────────────────────────────\n\nexport interface DataTableRootProps<T> extends React.HTMLAttributes<HTMLDivElement> {\n /** Ref to the table's root element. */\n ref?: React.Ref<HTMLDivElement>;\n /** The table from `useDataTable`. */\n table: DataTableInstance<T>;\n}\n\n/** Provides a table to the parts inside it. */\nfunction DataTableRoot<T>({ table, className, ref, ...props }: DataTableRootProps<T>) {\n return (\n <DataTableContext.Provider value={table}>\n <div\n ref={ref}\n className={cx('oui-data-table', className)}\n data-loading={table.loading ? (table.rows.length ? 'refresh' : 'initial') : undefined}\n {...props}\n />\n </DataTableContext.Provider>\n );\n}\n\nconst DataTableToolbar = createPrimitive('div', 'oui-data-table__toolbar', 'DataTableToolbar');\nconst DataTableActions = createPrimitive('div', 'oui-data-table__actions', 'DataTableActions');\n\nexport interface DataTableSearchProps extends Omit<SearchInputProps, 'value' | 'defaultValue' | 'onValueChange' | 'className'> {\n /** Class name for the search box. */\n className?: string;\n}\n\n/** Search box of the table. Typing applies after the table's `searchDebounce`; clearing applies at once. */\nfunction DataTableSearch({ className, ...props }: DataTableSearchProps) {\n const table = useDataTableContext();\n const { search, searchDebounce, labels: text } = table;\n const [draft, setDraft] = React.useState(search);\n const [seen, setSeen] = React.useState(search);\n const [sent, setSent] = React.useState(search);\n\n // Follow a search set from outside (reset, controlled state), but not the echo\n // of our own change: it can arrive after the user has typed further.\n if (seen !== search) {\n setSeen(search);\n if (search !== sent) {\n setSent(search);\n setDraft(search);\n }\n }\n\n const commit = (next: string) => {\n setSent(next);\n table.setSearch(next);\n };\n\n // Typed text that has not been applied yet goes out once the typing pauses.\n React.useEffect(() => {\n if (draft === sent) return;\n const timer = window.setTimeout(() => commit(draft), searchDebounce);\n return () => window.clearTimeout(timer);\n // `commit` is new on every render; only a change of the text restarts the wait.\n }, [draft, sent, searchDebounce]);\n\n const change = (next: string) => {\n setDraft(next);\n if (!searchDebounce || !next) commit(next);\n };\n\n return (\n <SearchInput\n className={cx('oui-data-table__search', className)}\n aria-label={text.search}\n placeholder={text.search}\n clearLabel={text.clearSearch}\n {...props}\n value={draft}\n onValueChange={change}\n />\n );\n}\n\n/** Row count, or the number of selected rows, with a spinner while loading. */\nfunction DataTableSummary({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n const table = useDataTableContext();\n const text = table.labels;\n const selected = new Set(table.selection).size;\n return (\n <>\n {table.loading && <Spinner className=\"oui-data-table__spinner\" label={text.loading} />}\n <span className={cx('oui-data-table__summary', className)} aria-live=\"polite\" {...props}>\n {/* No count before the first rows arrive: \"0 records\" would be wrong. */}\n {table.selectable && selected\n ? text.selected(selected)\n : table.pending\n ? null\n : table.count !== table.totalCount\n ? text.filteredCount(table.count, table.totalCount)\n : text.count(table.count)}\n </span>\n </>\n );\n}\n\nexport interface DataTablePaginationProps\n extends Omit<PaginationProps, 'page' | 'pageSize' | 'total' | 'onPageChange' | 'onPageSizeChange'> {}\n\n/** Page navigation of the table. Renders nothing when there are no rows, or the table is not paginated. */\nfunction DataTablePagination({ className, ...props }: DataTablePaginationProps) {\n const table = useDataTableContext();\n if (!table.paginated || table.count <= 0 || table.error) return null;\n return (\n <Pagination\n className={cx('oui-data-table__pagination', className)}\n variant=\"simple\"\n labels={table.labels}\n {...props}\n page={table.page}\n pageSize={table.pageSize}\n total={table.count}\n onPageChange={table.setPage}\n onPageSizeChange={table.setPageSize}\n />\n );\n}\n\n// ─── Convenience component ───────────────────────────────────────────────────\n\nexport interface DataTableToolbarContext<T> {\n /** Rows after filters, search and sorting, across all pages. In server mode: the current page. */\n rows: T[];\n /** Ids of the selected rows. */\n selection: string[];\n /** The whole table: filter values, sort, setters. */\n table: DataTableInstance<T>;\n}\n\nexport interface DataTableProps<T> extends UseDataTableOptions<T>, DataTableContentProps {\n /** Choices in the rows-per-page select. */\n pageSizeOptions?: number[];\n /** Size of the search box and the filters. */\n controlSize?: DataTableControlSize;\n /** Extra toolbar content (add, bulk actions…). A function receives the processed rows. */\n toolbar?: React.ReactNode | ((context: DataTableToolbarContext<T>) => React.ReactNode);\n /** `false` drops the search, filters, summary and toolbar content: rows only, for short tables under their own heading. */\n showToolbar?: boolean;\n /**\n * Adds an export button that saves the filtered, sorted rows as `<exportName>.csv`.\n * Columns choose their text with `exportValue`.\n */\n exportName?: string;\n /**\n * Grow to fill the height of a flex column container (a page, or a `Card`\n * whose content holds the table); only the rows scroll. `maxHeight` still caps it.\n */\n fill?: boolean;\n /** Class name for the table's root element. */\n className?: string;\n}\n\nfunction DataTableComponent<T>({\n density,\n striped,\n stickyHeader,\n layout,\n maxHeight,\n virtualized,\n onEndReached,\n empty,\n tableProps,\n pageSizeOptions,\n controlSize,\n toolbar,\n showToolbar = true,\n exportName,\n fill = false,\n className,\n ...options\n}: DataTableProps<T>) {\n // A virtualized table shows all its rows in one scrolling list, unless pages are asked for.\n const table = useDataTable({ ...options, paginated: options.paginated ?? !virtualized });\n const rows = table.rows.map(({ row }) => row);\n const extra = typeof toolbar === 'function' ? toolbar({ rows, selection: table.selection, table }) : toolbar;\n\n return (\n <DataTableRoot table={table} className={className} data-fill={fill || undefined}>\n {showToolbar && (\n <DataTableToolbar>\n {table.searchable && <DataTableSearch size={controlSize} />}\n <DataTableFilters size={controlSize} />\n <DataTableActions>\n <DataTableSummary />\n {extra}\n {exportName && (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={!rows.length}\n onClick={() => downloadCsv(table.columns, rows, exportName)}\n >\n <DownloadIcon />\n {table.labels.export}\n </Button>\n )}\n </DataTableActions>\n </DataTableToolbar>\n )}\n <DataTableContent\n density={density}\n striped={striped}\n stickyHeader={stickyHeader}\n layout={layout}\n // Filling, the rows scroll inside whatever height the table is given.\n maxHeight={fill ? (maxHeight ?? 'none') : maxHeight}\n virtualized={virtualized}\n onEndReached={onEndReached}\n empty={empty}\n tableProps={tableProps}\n />\n <DataTablePagination pageSizeOptions={pageSizeOptions} />\n </DataTableRoot>\n );\n}\n\n/**\n * `<DataTable data={…} columns={…} />` renders a complete table with search,\n * filters, sorting, pagination, row selection, row actions and inline editing;\n * columns declare what they take part in. Every piece of state works\n * uncontrolled or controlled (`search` / `filterValues` / `sort` / `page` /\n * `selection`), and with `mode=\"server\"` the same state drives an API.\n *\n * For another layout, create the table with `useDataTable` and compose the\n * parts: `DataTable.Root`, `DataTable.Toolbar`, `DataTable.Search`,\n * `DataTable.Filters`, `DataTable.Filter`, `DataTable.Actions`,\n * `DataTable.Summary`, `DataTable.Content`, `DataTable.Pagination`.\n */\nexport const DataTable = Object.assign(DataTableComponent, {\n Root: DataTableRoot,\n Toolbar: DataTableToolbar,\n Search: DataTableSearch,\n Filters: DataTableFilters,\n Filter: DataTableFilter,\n Actions: DataTableActions,\n Summary: DataTableSummary,\n Content: DataTableContent,\n Pagination: DataTablePagination,\n});\n"],"mappings":"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"}
@@ -8,7 +8,7 @@ export interface DataTableFilterProps {
8
8
  /** Class name for the filter control. */
9
9
  className?: string;
10
10
  }
11
- /** The control of one filter: a dropdown, a toggle chip or a date range picker. */
11
+ /** The control of one filter: a dropdown, a toggle chip, a row of chips or a date range picker. */
12
12
  export declare function DataTableFilter({ id, size, className }: DataTableFilterProps): React.JSX.Element | null;
13
13
  export interface DataTableFiltersProps extends React.HTMLAttributes<HTMLDivElement> {
14
14
  /** Control height of every filter. */
@@ -2,7 +2,7 @@
2
2
  import { cx } from "../../utils/cx.js";
3
3
  import { ChevronDownIcon, XIcon } from "../../icons/index.js";
4
4
  import { Button } from "../button/Button.js";
5
- import { Toggle } from "../toggle/Toggle.js";
5
+ import { Toggle, ToggleGroup } from "../toggle/Toggle.js";
6
6
  import { Select } from "../select/Select.js";
7
7
  import { formatDate } from "../calendar/date-utils.js";
8
8
  import { DateRangePicker } from "../date-picker/DateRangePicker.js";
@@ -11,9 +11,9 @@ import { c } from "react/compiler-runtime";
11
11
  import "react";
12
12
  import { jsx, jsxs } from "react/jsx-runtime";
13
13
  //#region src/components/data-table/DataTableFilters.tsx
14
- /** The control of one filter: a dropdown, a toggle chip or a date range picker. */
14
+ /** The control of one filter: a dropdown, a toggle chip, a row of chips or a date range picker. */
15
15
  function DataTableFilter(t0) {
16
- const $ = c(41);
16
+ const $ = c(48);
17
17
  const { id, size: t1, className } = t0;
18
18
  const size = t1 === void 0 ? "md" : t1;
19
19
  const table = useDataTableContext();
@@ -66,15 +66,56 @@ function DataTableFilter(t0) {
66
66
  });
67
67
  break bb0;
68
68
  }
69
+ if (filter.type === "chips") {
70
+ const t12 = filter.label;
71
+ let t13;
72
+ if ($[20] !== className) {
73
+ t13 = cx("oui-data-table__chips", className);
74
+ $[20] = className;
75
+ $[21] = t13;
76
+ } else t13 = $[21];
77
+ let t14;
78
+ if ($[22] !== value) {
79
+ t14 = value ?? [];
80
+ $[22] = value;
81
+ $[23] = t14;
82
+ } else t14 = $[23];
83
+ let t15;
84
+ if ($[24] !== id || $[25] !== table) {
85
+ t15 = (next) => table.setFilterValue(id, next.length ? next : void 0);
86
+ $[24] = id;
87
+ $[25] = table;
88
+ $[26] = t15;
89
+ } else t15 = $[26];
90
+ t9 = /* @__PURE__ */ jsx(ToggleGroup, {
91
+ multiple: true,
92
+ size,
93
+ variant: "outline",
94
+ "aria-label": t12,
95
+ className: t13,
96
+ value: t14,
97
+ onValueChange: t15,
98
+ children: filter.options.map((option) => /* @__PURE__ */ jsxs(Toggle, {
99
+ value: option.value,
100
+ size,
101
+ className: "oui-data-table__filter",
102
+ children: [option.label, filter.counts && /* @__PURE__ */ jsx("span", {
103
+ className: "oui-data-table__filter-count",
104
+ children: filter.counts[option.value] ?? 0
105
+ })]
106
+ }, option.value))
107
+ });
108
+ break bb0;
109
+ }
69
110
  if (filter.type === "dateRange") {
70
111
  const range = value ?? null;
71
112
  let t12;
72
- if ($[20] !== id || $[21] !== table) {
73
- t12 = (next) => table.setFilterValue(id, next ?? void 0);
74
- $[20] = id;
75
- $[21] = table;
76
- $[22] = t12;
77
- } else t12 = $[22];
113
+ if ($[27] !== id || $[28] !== table) {
114
+ t12 = (next_0) => table.setFilterValue(id, next_0 ?? void 0);
115
+ $[27] = id;
116
+ $[28] = table;
117
+ $[29] = t12;
118
+ } else t12 = $[29];
78
119
  t9 = /* @__PURE__ */ jsx(DateRangePicker, {
79
120
  size,
80
121
  className: classes,
@@ -95,25 +136,25 @@ function DataTableFilter(t0) {
95
136
  label: table.labels.filterAll
96
137
  }, ...filter.options];
97
138
  t6 = value ?? null;
98
- if ($[23] !== id || $[24] !== table) {
99
- t7 = (next_0) => table.setFilterValue(id, next_0 ?? void 0);
100
- $[23] = id;
101
- $[24] = table;
102
- $[25] = t7;
103
- } else t7 = $[25];
139
+ if ($[30] !== id || $[31] !== table) {
140
+ t7 = (next_1) => table.setFilterValue(id, next_1 ?? void 0);
141
+ $[30] = id;
142
+ $[31] = table;
143
+ $[32] = t7;
144
+ } else t7 = $[32];
104
145
  let t12;
105
- if ($[26] === Symbol.for("react.memo_cache_sentinel")) {
146
+ if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
106
147
  t12 = /* @__PURE__ */ jsx(Select.Value, {});
107
- $[26] = t12;
108
- } else t12 = $[26];
148
+ $[33] = t12;
149
+ } else t12 = $[33];
109
150
  let t13;
110
- if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
151
+ if ($[34] === Symbol.for("react.memo_cache_sentinel")) {
111
152
  t13 = /* @__PURE__ */ jsx("span", {
112
153
  className: "oui-select__icon",
113
154
  children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
114
155
  });
115
- $[27] = t13;
116
- } else t13 = $[27];
156
+ $[34] = t13;
157
+ } else t13 = $[34];
117
158
  t8 = /* @__PURE__ */ jsxs(Select.Trigger, {
118
159
  size,
119
160
  className: classes,
@@ -128,14 +169,14 @@ function DataTableFilter(t0) {
128
169
  ]
129
170
  });
130
171
  T0 = Select.Content;
131
- if ($[28] !== table.labels.filterAll) {
172
+ if ($[35] !== table.labels.filterAll) {
132
173
  t3 = /* @__PURE__ */ jsx(Select.Item, {
133
174
  value: null,
134
175
  children: table.labels.filterAll
135
176
  });
136
- $[28] = table.labels.filterAll;
137
- $[29] = t3;
138
- } else t3 = $[29];
177
+ $[35] = table.labels.filterAll;
178
+ $[36] = t3;
179
+ } else t3 = $[36];
139
180
  t4 = filter.options.map(_temp);
140
181
  }
141
182
  $[0] = className;
@@ -164,36 +205,36 @@ function DataTableFilter(t0) {
164
205
  }
165
206
  if (t9 !== Symbol.for("react.early_return_sentinel")) return t9;
166
207
  let t10;
167
- if ($[30] !== T0 || $[31] !== t3 || $[32] !== t4) {
208
+ if ($[37] !== T0 || $[38] !== t3 || $[39] !== t4) {
168
209
  t10 = /* @__PURE__ */ jsxs(T0, { children: [t3, t4] });
169
- $[30] = T0;
170
- $[31] = t3;
171
- $[32] = t4;
172
- $[33] = t10;
173
- } else t10 = $[33];
210
+ $[37] = T0;
211
+ $[38] = t3;
212
+ $[39] = t4;
213
+ $[40] = t10;
214
+ } else t10 = $[40];
174
215
  let t11;
175
- if ($[34] !== T1 || $[35] !== t10 || $[36] !== t5 || $[37] !== t6 || $[38] !== t7 || $[39] !== t8) {
216
+ if ($[41] !== T1 || $[42] !== t10 || $[43] !== t5 || $[44] !== t6 || $[45] !== t7 || $[46] !== t8) {
176
217
  t11 = /* @__PURE__ */ jsxs(T1, {
177
218
  items: t5,
178
219
  value: t6,
179
220
  onValueChange: t7,
180
221
  children: [t8, t10]
181
222
  });
182
- $[34] = T1;
183
- $[35] = t10;
184
- $[36] = t5;
185
- $[37] = t6;
186
- $[38] = t7;
187
- $[39] = t8;
188
- $[40] = t11;
189
- } else t11 = $[40];
223
+ $[41] = T1;
224
+ $[42] = t10;
225
+ $[43] = t5;
226
+ $[44] = t6;
227
+ $[45] = t7;
228
+ $[46] = t8;
229
+ $[47] = t11;
230
+ } else t11 = $[47];
190
231
  return t11;
191
232
  }
192
- function _temp(option) {
233
+ function _temp(option_0) {
193
234
  return /* @__PURE__ */ jsx(Select.Item, {
194
- value: option.value,
195
- children: option.label
196
- }, option.value);
235
+ value: option_0.value,
236
+ children: option_0.label
237
+ }, option_0.value);
197
238
  }
198
239
  /** Every filter of the table, with a clear button while any is active. Children are added after the filters. */
199
240
  function DataTableFilters(t0) {
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableFilters.js","names":["React","cx","ChevronDownIcon","XIcon","Button","formatDate","DateRange","DateRangePicker","Select","Toggle","useDataTableContext","DataTableControlSize","DataTableFilterProps","id","size","className","DataTableFilter","t0","$","_c","t1","undefined","table","t2","filters","T0","T1","t3","t4","t5","t6","t7","t8","t9","Symbol","for","bb0","t10","candidate","filter","find","value","filterValues","t11","classes","type","t12","pressed","setFilterValue","label","range","next","presets","min","max","locale","start","end","Root","labels","filterAll","options","next_0","t13","Content","map","_temp","option","DataTableFiltersProps","HTMLAttributes","HTMLDivElement","DataTableFilters","children","props","length","activeFilterCount","clearFilters","_c"],"sources":["../../../src/components/data-table/DataTableFilters.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\nimport { ChevronDownIcon, XIcon } from '../../icons';\nimport { Button } from '../button/Button';\nimport { formatDate, type DateRange } from '../calendar/date-utils';\nimport { DateRangePicker } from '../date-picker/DateRangePicker';\nimport { Select } from '../select/Select';\nimport { Toggle } from '../toggle/Toggle';\nimport { useDataTableContext } from './context';\n\nexport type DataTableControlSize = 'sm' | 'md';\n\nexport interface DataTableFilterProps {\n /** Id of the filter: the column id, or the `id` given in `filters`. */\n id: string;\n /** Control height. */\n size?: DataTableControlSize;\n /** Class name for the filter control. */\n className?: string;\n}\n\n/** The control of one filter: a dropdown, a toggle chip or a date range picker. */\nexport function DataTableFilter({ id, size = 'md', className }: DataTableFilterProps) {\n const table = useDataTableContext();\n const filter = table.filters.find((candidate) => candidate.id === id);\n if (!filter) return null;\n const value = table.filterValues[id];\n const classes = cx('oui-data-table__filter', className);\n\n if (filter.type === 'toggle') {\n return (\n <Toggle\n size={size}\n className={classes}\n pressed={value !== undefined}\n onPressedChange={(pressed) => table.setFilterValue(id, pressed || undefined)}\n >\n {filter.label}\n </Toggle>\n );\n }\n\n if (filter.type === 'dateRange') {\n const range = (value as DateRange | undefined) ?? null;\n return (\n <DateRangePicker\n size={size}\n className={classes}\n placeholder={filter.label}\n value={range}\n onValueChange={(next) => table.setFilterValue(id, next ?? undefined)}\n presets={filter.presets}\n min={filter.min}\n max={filter.max}\n locale={table.locale}\n triggerProps={{\n 'aria-label': range ? `${filter.label}: ${formatDate(range.start)} – ${formatDate(range.end)}` : filter.label,\n }}\n />\n );\n }\n\n return (\n <Select.Root\n items={[{ value: null, label: table.labels.filterAll }, ...filter.options]}\n value={(value as string | undefined) ?? null}\n onValueChange={(next) => table.setFilterValue(id, next ?? undefined)}\n >\n <Select.Trigger size={size} className={classes} data-active={value !== undefined ? '' : undefined}>\n <span className=\"oui-data-table__filter-label\">{filter.label}</span>\n <Select.Value />\n <span className=\"oui-select__icon\">\n <ChevronDownIcon />\n </span>\n </Select.Trigger>\n <Select.Content>\n <Select.Item value={null}>{table.labels.filterAll}</Select.Item>\n {filter.options.map((option) => (\n <Select.Item key={option.value} value={option.value}>\n {option.label}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n}\n\nexport interface DataTableFiltersProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Control height of every filter. */\n size?: DataTableControlSize;\n}\n\n/** Every filter of the table, with a clear button while any is active. Children are added after the filters. */\nexport function DataTableFilters({ size = 'md', className, children, ...props }: DataTableFiltersProps) {\n const table = useDataTableContext();\n if (!table.filters.length && !children) return null;\n return (\n <div role=\"group\" aria-label={table.labels.filters} className={cx('oui-data-table__filters', className)} {...props}>\n {table.filters.map((filter) => (\n <DataTableFilter key={filter.id} id={filter.id} size={size} />\n ))}\n {children}\n {table.activeFilterCount > 0 && (\n <Button size=\"sm\" variant=\"ghost\" shape=\"rounded\" onClick={table.clearFilters}>\n <XIcon />\n {table.labels.clearFilters}\n </Button>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataTableFilters.js","names":["React","cx","ChevronDownIcon","XIcon","Button","formatDate","DateRange","DateRangePicker","Select","Toggle","ToggleGroup","useDataTableContext","DataTableControlSize","DataTableFilterProps","id","size","className","DataTableFilter","t0","$","_c","t1","undefined","table","t2","filters","T0","T1","t3","t4","t5","t6","t7","t8","t9","Symbol","for","bb0","t10","candidate","filter","find","value","filterValues","t11","classes","type","t12","pressed","setFilterValue","label","t13","t14","t15","next","length","options","map","option","counts","range","next_0","presets","min","max","locale","start","end","Root","labels","filterAll","next_1","Content","_temp","option_0","DataTableFiltersProps","HTMLAttributes","HTMLDivElement","DataTableFilters","children","props","activeFilterCount","clearFilters","_c"],"sources":["../../../src/components/data-table/DataTableFilters.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\nimport { ChevronDownIcon, XIcon } from '../../icons';\nimport { Button } from '../button/Button';\nimport { formatDate, type DateRange } from '../calendar/date-utils';\nimport { DateRangePicker } from '../date-picker/DateRangePicker';\nimport { Select } from '../select/Select';\nimport { Toggle, ToggleGroup } from '../toggle/Toggle';\nimport { useDataTableContext } from './context';\n\nexport type DataTableControlSize = 'sm' | 'md';\n\nexport interface DataTableFilterProps {\n /** Id of the filter: the column id, or the `id` given in `filters`. */\n id: string;\n /** Control height. */\n size?: DataTableControlSize;\n /** Class name for the filter control. */\n className?: string;\n}\n\n/** The control of one filter: a dropdown, a toggle chip, a row of chips or a date range picker. */\nexport function DataTableFilter({ id, size = 'md', className }: DataTableFilterProps) {\n const table = useDataTableContext();\n const filter = table.filters.find((candidate) => candidate.id === id);\n if (!filter) return null;\n const value = table.filterValues[id];\n const classes = cx('oui-data-table__filter', className);\n\n if (filter.type === 'toggle') {\n return (\n <Toggle\n size={size}\n className={classes}\n pressed={value !== undefined}\n onPressedChange={(pressed) => table.setFilterValue(id, pressed || undefined)}\n >\n {filter.label}\n </Toggle>\n );\n }\n\n if (filter.type === 'chips') {\n return (\n <ToggleGroup\n multiple\n size={size}\n variant=\"outline\"\n aria-label={filter.label}\n className={cx('oui-data-table__chips', className)}\n value={(value as string[] | undefined) ?? []}\n onValueChange={(next) => table.setFilterValue(id, next.length ? (next as string[]) : undefined)}\n >\n {filter.options.map((option) => (\n <Toggle key={option.value} value={option.value} size={size} className=\"oui-data-table__filter\">\n {option.label}\n {filter.counts && <span className=\"oui-data-table__filter-count\">{filter.counts[option.value] ?? 0}</span>}\n </Toggle>\n ))}\n </ToggleGroup>\n );\n }\n\n if (filter.type === 'dateRange') {\n const range = (value as DateRange | undefined) ?? null;\n return (\n <DateRangePicker\n size={size}\n className={classes}\n placeholder={filter.label}\n value={range}\n onValueChange={(next) => table.setFilterValue(id, next ?? undefined)}\n presets={filter.presets}\n min={filter.min}\n max={filter.max}\n locale={table.locale}\n triggerProps={{\n 'aria-label': range ? `${filter.label}: ${formatDate(range.start)} – ${formatDate(range.end)}` : filter.label,\n }}\n />\n );\n }\n\n return (\n <Select.Root\n items={[{ value: null, label: table.labels.filterAll }, ...filter.options]}\n value={(value as string | undefined) ?? null}\n onValueChange={(next) => table.setFilterValue(id, next ?? undefined)}\n >\n <Select.Trigger size={size} className={classes} data-active={value !== undefined ? '' : undefined}>\n <span className=\"oui-data-table__filter-label\">{filter.label}</span>\n <Select.Value />\n <span className=\"oui-select__icon\">\n <ChevronDownIcon />\n </span>\n </Select.Trigger>\n <Select.Content>\n <Select.Item value={null}>{table.labels.filterAll}</Select.Item>\n {filter.options.map((option) => (\n <Select.Item key={option.value} value={option.value}>\n {option.label}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n}\n\nexport interface DataTableFiltersProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Control height of every filter. */\n size?: DataTableControlSize;\n}\n\n/** Every filter of the table, with a clear button while any is active. Children are added after the filters. */\nexport function DataTableFilters({ size = 'md', className, children, ...props }: DataTableFiltersProps) {\n const table = useDataTableContext();\n if (!table.filters.length && !children) return null;\n return (\n <div role=\"group\" aria-label={table.labels.filters} className={cx('oui-data-table__filters', className)} {...props}>\n {table.filters.map((filter) => (\n <DataTableFilter key={filter.id} id={filter.id} size={size} />\n ))}\n {children}\n {table.activeFilterCount > 0 && (\n <Button size=\"sm\" variant=\"ghost\" shape=\"rounded\" onClick={table.clearFilters}>\n <XIcon />\n {table.labels.clearFilters}\n </Button>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DataTableColumn } from './types';
2
+ /** Saves the rows as `<name>.csv`: visible columns that carry data, headed by their text. */
3
+ export declare function downloadCsv<T>(columns: DataTableColumn<T>[], rows: T[], name: string): void;
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { getColumnValue } from "./useDataTable.js";
3
+ //#region src/components/data-table/export.ts
4
+ var FORMULA_START = /^[=+\-@\t\r]/;
5
+ function csvField(value) {
6
+ if (value === null || value === void 0) return "";
7
+ let text = value instanceof Date ? value.toISOString() : String(value);
8
+ if (FORMULA_START.test(text)) text = `'${text}`;
9
+ return /[",\r\n]/.test(text) ? `"${text.replace(/"/g, "\"\"")}"` : text;
10
+ }
11
+ function exportText(column, row) {
12
+ if (column.exportValue) return column.exportValue(row);
13
+ const shown = column.cell?.(row);
14
+ if (typeof shown === "string" || typeof shown === "number") return shown;
15
+ return getColumnValue(column, row);
16
+ }
17
+ /** Saves the rows as `<name>.csv`: visible columns that carry data, headed by their text. */
18
+ function downloadCsv(columns, rows, name) {
19
+ const exported = columns.filter((column) => !column.hidden && (column.exportValue || column.accessor || !column.cell));
20
+ const lines = [exported.map((column) => csvField(typeof column.header === "string" ? column.header : column.label ?? column.id)), ...rows.map((row) => exported.map((column) => csvField(exportText(column, row))))];
21
+ const url = URL.createObjectURL(new Blob([lines.map((line) => line.join(",")).join("\r\n")], { type: "text/csv;charset=utf-8" }));
22
+ const link = document.createElement("a");
23
+ link.href = url;
24
+ link.download = `${name}.csv`;
25
+ link.click();
26
+ URL.revokeObjectURL(url);
27
+ }
28
+ //#endregion
29
+ export { downloadCsv };
30
+
31
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","names":["getColumnValue","DataTableColumn","FORMULA_START","csvField","value","undefined","text","Date","toISOString","String","test","replace","exportText","column","T","row","exportValue","shown","cell","downloadCsv","columns","rows","name","exported","filter","hidden","accessor","header","map","label","id","lines","url","URL","createObjectURL","Blob","line","join","type","link","document","createElement","href","download","click","revokeObjectURL"],"sources":["../../../src/components/data-table/export.ts"],"sourcesContent":["import { getColumnValue } from './useDataTable';\nimport type { DataTableColumn } from './types';\n\n// Cells starting with these are run as formulas by spreadsheet apps; a leading quote keeps them text.\nconst FORMULA_START = /^[=+\\-@\\t\\r]/;\n\nfunction csvField(value: unknown) {\n if (value === null || value === undefined) return '';\n let text = value instanceof Date ? value.toISOString() : String(value);\n if (FORMULA_START.test(text)) text = `'${text}`;\n return /[\",\\r\\n]/.test(text) ? `\"${text.replace(/\"/g, '\"\"')}\"` : text;\n}\n\nfunction exportText<T>(column: DataTableColumn<T>, row: T) {\n if (column.exportValue) return column.exportValue(row);\n const shown = column.cell?.(row);\n if (typeof shown === 'string' || typeof shown === 'number') return shown;\n return getColumnValue(column, row);\n}\n\n/** Saves the rows as `<name>.csv`: visible columns that carry data, headed by their text. */\nexport function downloadCsv<T>(columns: DataTableColumn<T>[], rows: T[], name: string) {\n const exported = columns.filter((column) => !column.hidden && (column.exportValue || column.accessor || !column.cell));\n const header = exported.map((column) =>\n csvField(typeof column.header === 'string' ? column.header : (column.label ?? column.id)),\n );\n const lines = [header, ...rows.map((row) => exported.map((column) => csvField(exportText(column, row))))];\n const url = URL.createObjectURL(\n new Blob([lines.map((line) => line.join(',')).join('\\r\\n')], { type: 'text/csv;charset=utf-8' }),\n );\n const link = document.createElement('a');\n link.href = url;\n link.download = `${name}.csv`;\n link.click();\n URL.revokeObjectURL(url);\n}\n"],"mappings":";;;AAIA,IAAME,gBAAgB;AAEtB,SAASC,SAASC,OAAgB;CAChC,IAAIA,UAAU,QAAQA,UAAUC,KAAAA,GAAW,OAAO;CAClD,IAAIC,OAAOF,iBAAiBG,OAAOH,MAAMI,YAAY,IAAIC,OAAOL,KAAK;CACrE,IAAIF,cAAcQ,KAAKJ,IAAI,GAAGA,OAAO,IAAIA;CACzC,OAAO,WAAWI,KAAKJ,IAAI,IAAI,IAAIA,KAAKK,QAAQ,MAAM,MAAI,EAAC,KAAML;AACnE;AAEA,SAASM,WAAcC,QAA4BE,KAAQ;CACzD,IAAIF,OAAOG,aAAa,OAAOH,OAAOG,YAAYD,GAAG;CACrD,MAAME,QAAQJ,OAAOK,OAAOH,GAAG;CAC/B,IAAI,OAAOE,UAAU,YAAY,OAAOA,UAAU,UAAU,OAAOA;CACnE,OAAOjB,eAAea,QAAQE,GAAG;AACnC;;AAGA,SAAgBI,YAAeC,SAA+BC,MAAWC,MAAc;CACrF,MAAMC,WAAWH,QAAQI,QAAQX,WAAW,CAACA,OAAOY,WAAWZ,OAAOG,eAAeH,OAAOa,YAAY,CAACb,OAAOK,KAAK;CAIrH,MAAMa,QAAQ,CAHCR,SAASK,KAAKf,WAC3BV,SAAS,OAAOU,OAAOc,WAAW,WAAWd,OAAOc,SAAUd,OAAOgB,SAAShB,OAAOiB,EAAG,CAE3EH,GAAQ,GAAGN,KAAKO,KAAKb,QAAQQ,SAASK,KAAKf,WAAWV,SAASS,WAAWC,QAAQE,GAAG,CAAC,CAAC,CAAC,CAAC;CACxG,MAAMiB,MAAMC,IAAIC,gBACd,IAAIC,KAAK,CAACJ,MAAMH,KAAKQ,SAASA,KAAKC,KAAK,GAAG,CAAC,CAAC,CAACA,KAAK,MAAM,CAAC,GAAG,EAAEC,MAAM,yBAAyB,CAAC,CACjG;CACA,MAAMC,OAAOC,SAASC,cAAc,GAAG;CACvCF,KAAKG,OAAOV;CACZO,KAAKI,WAAW,GAAGrB,KAAI;CACvBiB,KAAKK,MAAM;CACXX,IAAIY,gBAAgBb,GAAG;AACzB"}
@@ -1,4 +1,5 @@
1
1
  import type * as React from 'react';
2
+ import type { ColorTone } from '../badge/Badge';
2
3
  import type { DateRange } from '../calendar/date-utils';
3
4
  import type { DateRangePreset } from '../date-picker/DateRangePicker';
4
5
  import type { InputProps } from '../input/Input';
@@ -36,14 +37,30 @@ export interface DataTableDateRangeFilter<T> extends FilterBase {
36
37
  min?: string;
37
38
  max?: string;
38
39
  }
39
- export type DataTableFilter<T> = DataTableSelectFilter<T> | DataTableToggleFilter<T> | DataTableDateRangeFilter<T>;
40
+ /**
41
+ * Row of chips, one per option, that keeps the rows matching any pressed chip.
42
+ * Each chip shows how many rows have its value, so it doubles as a status summary.
43
+ */
44
+ export interface DataTableChipsFilter<T> extends FilterBase {
45
+ type: 'chips';
46
+ /** Value compared with the pressed options; an array matches on any of its items. Defaults to `row[id]`. */
47
+ value?: (row: T) => unknown;
48
+ /** Options to offer, in order. Left out, they are collected from the rows. */
49
+ options?: DataTableFilterOption[];
50
+ /**
51
+ * Show the number of rows with each value next to its label.
52
+ * @default true
53
+ */
54
+ counts?: boolean;
55
+ }
56
+ export type DataTableFilter<T> = DataTableSelectFilter<T> | DataTableToggleFilter<T> | DataTableDateRangeFilter<T> | DataTableChipsFilter<T>;
40
57
  type ColumnFilterConfig<F> = F extends FilterBase ? Omit<F, 'id' | 'label'> & {
41
58
  label?: string;
42
59
  } : never;
43
60
  /** A filter declared on a column: its type, or its definition without the `id` (the column's). */
44
61
  export type DataTableColumnFilter<T> = DataTableFilter<T>['type'] | ColumnFilterConfig<DataTableFilter<T>>;
45
- /** A select filter holds the option value, a toggle `true`, a date range `{ start, end }`. */
46
- export type DataTableFilterValue = string | true | DateRange;
62
+ /** A select filter holds the option value, chips the pressed values, a toggle `true`, a date range `{ start, end }`. */
63
+ export type DataTableFilterValue = string | string[] | true | DateRange;
47
64
  /** Values of the active filters by filter id. An inactive filter has no key. */
48
65
  export type DataTableFilterValues = Record<string, DataTableFilterValue>;
49
66
  /** A filter as the table uses it: column shorthand expanded, options collected. */
@@ -51,8 +68,10 @@ export interface DataTableResolvedFilter<T> {
51
68
  id: string;
52
69
  type: DataTableFilter<T>['type'];
53
70
  label: string;
54
- /** Select filters only; empty for the other types. */
71
+ /** Select and chips filters only; empty for the other types. */
55
72
  options: DataTableFilterOption[];
73
+ /** Chips filters with `counts`: number of rows per option value. */
74
+ counts?: Record<string, number>;
56
75
  presets?: DateRangePreset[];
57
76
  min?: string;
58
77
  max?: string;
@@ -97,6 +116,12 @@ export interface DataTableColumn<T> {
97
116
  searchMode?: 'contains' | 'exact';
98
117
  /** Custom ascending comparison. */
99
118
  compare?: (a: T, b: T) => number;
119
+ /**
120
+ * Value written to the CSV export. Defaults to the cell when it renders plain
121
+ * text, then the accessor. Columns that only render a `cell` (links, actions)
122
+ * are left out unless they set this.
123
+ */
124
+ exportValue?: (row: T) => unknown;
100
125
  /** Adds a filter on this column to the toolbar. */
101
126
  filter?: DataTableColumnFilter<T>;
102
127
  /** Makes the cell editable once `onRowSave` is set. */
@@ -132,7 +157,7 @@ export interface DataTableRowAction {
132
157
  /** Colours the button red on hover. */
133
158
  danger?: boolean;
134
159
  }
135
- export type DataTableRowTone = 'accent' | 'info' | 'success' | 'warning' | 'danger';
160
+ export type DataTableRowTone = 'accent' | 'info' | 'success' | 'warning' | 'danger' | ColorTone;
136
161
  export interface DataTableEntry<T> {
137
162
  id: string;
138
163
  row: T;
@@ -162,6 +187,8 @@ export interface DataTableLabels extends PaginationLabels {
162
187
  clearFilters: string;
163
188
  /** Accessible name of the row actions column. */
164
189
  actions: string;
190
+ /** The CSV export button. */
191
+ export: string;
165
192
  edit: string;
166
193
  save: string;
167
194
  cancel: string;
@@ -22,6 +22,7 @@ var defaultLabels = {
22
22
  filterAll: "All",
23
23
  clearFilters: "Clear filters",
24
24
  actions: "Actions",
25
+ export: "Export",
25
26
  edit: "Edit",
26
27
  save: "Save",
27
28
  cancel: "Cancel",
@@ -130,14 +131,27 @@ function resolveFilter(filter, read, data, collator) {
130
131
  const value = get(row);
131
132
  return (Array.isArray(value) ? value : [value]).filter((item) => !isEmpty(item)).map(String);
132
133
  };
134
+ const options = filter.options ?? [...new Set(data.flatMap(items))].sort(collator.compare).map((value) => ({
135
+ value,
136
+ label: value
137
+ }));
138
+ if (filter.type === "chips") {
139
+ const counts = {};
140
+ if (filter.counts !== false) for (const row of data) for (const item of items(row)) counts[item] = (counts[item] ?? 0) + 1;
141
+ return {
142
+ id,
143
+ label,
144
+ type: "chips",
145
+ options,
146
+ counts: filter.counts === false ? void 0 : counts,
147
+ test: (row, value) => items(row).some((item) => value.includes(item))
148
+ };
149
+ }
133
150
  return {
134
151
  id,
135
152
  label,
136
153
  type: "select",
137
- options: filter.options ?? [...new Set(data.flatMap(items))].sort(collator.compare).map((value) => ({
138
- value,
139
- label: value
140
- })),
154
+ options,
141
155
  test: (row, value) => items(row).includes(value)
142
156
  };
143
157
  }