@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.
- package/dist/components/badge/Badge.d.ts +4 -2
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/button/Button.d.ts +6 -1
- package/dist/components/button/Button.js +31 -26
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/data-table/DataTable.d.ts +14 -2
- package/dist/components/data-table/DataTable.js +113 -98
- package/dist/components/data-table/DataTable.js.map +1 -1
- package/dist/components/data-table/DataTableFilters.d.ts +1 -1
- package/dist/components/data-table/DataTableFilters.js +85 -44
- package/dist/components/data-table/DataTableFilters.js.map +1 -1
- package/dist/components/data-table/export.d.ts +3 -0
- package/dist/components/data-table/export.js +31 -0
- package/dist/components/data-table/export.js.map +1 -0
- package/dist/components/data-table/types.d.ts +32 -5
- package/dist/components/data-table/useDataTable.js +18 -4
- package/dist/components/data-table/useDataTable.js.map +1 -1
- package/dist/components/description-list/DescriptionList.d.ts +29 -0
- package/dist/components/description-list/DescriptionList.js +125 -0
- package/dist/components/description-list/DescriptionList.js.map +1 -0
- package/dist/components/dialog/ConfirmDialog.d.ts +59 -0
- package/dist/components/dialog/ConfirmDialog.js +165 -0
- package/dist/components/dialog/ConfirmDialog.js.map +1 -0
- package/dist/components/dialog/Dialog.d.ts +9 -2
- package/dist/components/dialog/Dialog.js +103 -89
- package/dist/components/dialog/Dialog.js.map +1 -1
- package/dist/components/drawer/Drawer.d.ts +3 -1
- package/dist/components/drawer/Drawer.js +11 -9
- package/dist/components/drawer/Drawer.js.map +1 -1
- package/dist/components/select/Select.d.ts +6 -1
- package/dist/components/select/Select.js +110 -92
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components.json +259 -20
- package/dist/icons/index.d.ts +4 -0
- package/dist/icons/index.js +6 -1
- package/dist/icons/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -3
- package/dist/llms-full.txt +103 -5
- package/dist/llms.txt +3 -0
- package/dist/opti-ui.css +434 -19
- 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(
|
|
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 ($[
|
|
73
|
-
t12 = (
|
|
74
|
-
$[
|
|
75
|
-
$[
|
|
76
|
-
$[
|
|
77
|
-
} else t12 = $[
|
|
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 ($[
|
|
99
|
-
t7 = (
|
|
100
|
-
$[
|
|
101
|
-
$[
|
|
102
|
-
$[
|
|
103
|
-
} else t7 = $[
|
|
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 ($[
|
|
146
|
+
if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
|
|
106
147
|
t12 = /* @__PURE__ */ jsx(Select.Value, {});
|
|
107
|
-
$[
|
|
108
|
-
} else t12 = $[
|
|
148
|
+
$[33] = t12;
|
|
149
|
+
} else t12 = $[33];
|
|
109
150
|
let t13;
|
|
110
|
-
if ($[
|
|
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
|
-
$[
|
|
116
|
-
} else t13 = $[
|
|
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 ($[
|
|
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
|
-
$[
|
|
137
|
-
$[
|
|
138
|
-
} else t3 = $[
|
|
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 ($[
|
|
208
|
+
if ($[37] !== T0 || $[38] !== t3 || $[39] !== t4) {
|
|
168
209
|
t10 = /* @__PURE__ */ jsxs(T0, { children: [t3, t4] });
|
|
169
|
-
$[
|
|
170
|
-
$[
|
|
171
|
-
$[
|
|
172
|
-
$[
|
|
173
|
-
} else t10 = $[
|
|
210
|
+
$[37] = T0;
|
|
211
|
+
$[38] = t3;
|
|
212
|
+
$[39] = t4;
|
|
213
|
+
$[40] = t10;
|
|
214
|
+
} else t10 = $[40];
|
|
174
215
|
let t11;
|
|
175
|
-
if ($[
|
|
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
|
-
$[
|
|
183
|
-
$[
|
|
184
|
-
$[
|
|
185
|
-
$[
|
|
186
|
-
$[
|
|
187
|
-
$[
|
|
188
|
-
$[
|
|
189
|
-
} else t11 = $[
|
|
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(
|
|
233
|
+
function _temp(option_0) {
|
|
193
234
|
return /* @__PURE__ */ jsx(Select.Item, {
|
|
194
|
-
value:
|
|
195
|
-
children:
|
|
196
|
-
},
|
|
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,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
|
-
|
|
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
|
|
138
|
-
value,
|
|
139
|
-
label: value
|
|
140
|
-
})),
|
|
154
|
+
options,
|
|
141
155
|
test: (row, value) => items(row).includes(value)
|
|
142
156
|
};
|
|
143
157
|
}
|