@optimum-intelligence/opti-ui 0.0.0-stage → 0.2.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/LICENSE +23 -0
- package/README.md +161 -2
- package/dist/components/accordion/Accordion.d.ts +17 -0
- package/dist/components/accordion/Accordion.js +204 -0
- package/dist/components/accordion/Accordion.js.map +1 -0
- package/dist/components/alert/Alert.d.ts +18 -0
- package/dist/components/alert/Alert.js +164 -0
- package/dist/components/alert/Alert.js.map +1 -0
- package/dist/components/app-shell/AppShell.d.ts +97 -0
- package/dist/components/app-shell/AppShell.js +689 -0
- package/dist/components/app-shell/AppShell.js.map +1 -0
- package/dist/components/avatar/Avatar.d.ts +21 -0
- package/dist/components/avatar/Avatar.js +190 -0
- package/dist/components/avatar/Avatar.js.map +1 -0
- package/dist/components/badge/Badge.d.ts +16 -0
- package/dist/components/badge/Badge.js +94 -0
- package/dist/components/badge/Badge.js.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/components/button/Button.d.ts +23 -0
- package/dist/components/button/Button.js +159 -0
- package/dist/components/button/Button.js.map +1 -0
- package/dist/components/calendar/Calendar.d.ts +59 -0
- package/dist/components/calendar/Calendar.js +709 -0
- package/dist/components/calendar/Calendar.js.map +1 -0
- package/dist/components/calendar/date-utils.d.ts +32 -0
- package/dist/components/calendar/date-utils.js +112 -0
- package/dist/components/calendar/date-utils.js.map +1 -0
- package/dist/components/card/Card.d.ts +42 -0
- package/dist/components/card/Card.js +82 -0
- package/dist/components/card/Card.js.map +1 -0
- package/dist/components/choice/Choice.d.ts +32 -0
- package/dist/components/choice/Choice.js +371 -0
- package/dist/components/choice/Choice.js.map +1 -0
- package/dist/components/collapsible/Collapsible.d.ts +15 -0
- package/dist/components/collapsible/Collapsible.js +155 -0
- package/dist/components/collapsible/Collapsible.js.map +1 -0
- package/dist/components/combobox/Combobox.d.ts +68 -0
- package/dist/components/combobox/Combobox.js +752 -0
- package/dist/components/combobox/Combobox.js.map +1 -0
- package/dist/components/command-palette/CommandPalette.d.ts +52 -0
- package/dist/components/command-palette/CommandPalette.js +328 -0
- package/dist/components/command-palette/CommandPalette.js.map +1 -0
- package/dist/components/data-table/DataTable.d.ts +111 -0
- package/dist/components/data-table/DataTable.js +444 -0
- package/dist/components/data-table/DataTable.js.map +1 -0
- package/dist/components/date-picker/DatePicker.d.ts +50 -0
- package/dist/components/date-picker/DatePicker.js +485 -0
- package/dist/components/date-picker/DatePicker.js.map +1 -0
- package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
- package/dist/components/date-picker/DateRangePicker.js +339 -0
- package/dist/components/date-picker/DateRangePicker.js.map +1 -0
- package/dist/components/date-picker/PickerField.d.ts +38 -0
- package/dist/components/date-picker/PickerField.js +238 -0
- package/dist/components/date-picker/PickerField.js.map +1 -0
- package/dist/components/dialog/Dialog.d.ts +70 -0
- package/dist/components/dialog/Dialog.js +354 -0
- package/dist/components/dialog/Dialog.js.map +1 -0
- package/dist/components/drawer/Drawer.d.ts +39 -0
- package/dist/components/drawer/Drawer.js +225 -0
- package/dist/components/drawer/Drawer.js.map +1 -0
- package/dist/components/empty-state/EmptyState.d.ts +12 -0
- package/dist/components/empty-state/EmptyState.js +116 -0
- package/dist/components/empty-state/EmptyState.js.map +1 -0
- package/dist/components/field/Field.d.ts +36 -0
- package/dist/components/field/Field.js +337 -0
- package/dist/components/field/Field.js.map +1 -0
- package/dist/components/file-upload/FileUpload.d.ts +91 -0
- package/dist/components/file-upload/FileUpload.js +714 -0
- package/dist/components/file-upload/FileUpload.js.map +1 -0
- package/dist/components/input/Input.d.ts +49 -0
- package/dist/components/input/Input.js +538 -0
- package/dist/components/input/Input.js.map +1 -0
- package/dist/components/link/Link.d.ts +17 -0
- package/dist/components/link/Link.js +91 -0
- package/dist/components/link/Link.js.map +1 -0
- package/dist/components/menu/Menu.d.ts +79 -0
- package/dist/components/menu/Menu.js +615 -0
- package/dist/components/menu/Menu.js.map +1 -0
- package/dist/components/number-field/NumberField.d.ts +16 -0
- package/dist/components/number-field/NumberField.js +188 -0
- package/dist/components/number-field/NumberField.js.map +1 -0
- package/dist/components/pagination/Pagination.d.ts +34 -0
- package/dist/components/pagination/Pagination.js +244 -0
- package/dist/components/pagination/Pagination.js.map +1 -0
- package/dist/components/popover/Popover.d.ts +22 -0
- package/dist/components/popover/Popover.js +186 -0
- package/dist/components/popover/Popover.js.map +1 -0
- package/dist/components/preview-card/PreviewCard.d.ts +20 -0
- package/dist/components/preview-card/PreviewCard.js +114 -0
- package/dist/components/preview-card/PreviewCard.js.map +1 -0
- package/dist/components/progress/Progress.d.ts +20 -0
- package/dist/components/progress/Progress.js +169 -0
- package/dist/components/progress/Progress.js.map +1 -0
- package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
- package/dist/components/scroll-area/ScrollArea.js +112 -0
- package/dist/components/scroll-area/ScrollArea.js.map +1 -0
- package/dist/components/search-input/SearchInput.d.ts +14 -0
- package/dist/components/search-input/SearchInput.js +114 -0
- package/dist/components/search-input/SearchInput.js.map +1 -0
- package/dist/components/select/Select.d.ts +66 -0
- package/dist/components/select/Select.js +601 -0
- package/dist/components/select/Select.js.map +1 -0
- package/dist/components/separator/Separator.d.ts +4 -0
- package/dist/components/separator/Separator.js +46 -0
- package/dist/components/separator/Separator.js.map +1 -0
- package/dist/components/skeleton/Skeleton.d.ts +16 -0
- package/dist/components/skeleton/Skeleton.js +135 -0
- package/dist/components/skeleton/Skeleton.js.map +1 -0
- package/dist/components/slider/Slider.d.ts +11 -0
- package/dist/components/slider/Slider.js +107 -0
- package/dist/components/slider/Slider.js.map +1 -0
- package/dist/components/spinner/Spinner.d.ts +9 -0
- package/dist/components/spinner/Spinner.js +78 -0
- package/dist/components/spinner/Spinner.js.map +1 -0
- package/dist/components/stack/Stack.d.ts +23 -0
- package/dist/components/stack/Stack.js +79 -0
- package/dist/components/stack/Stack.js.map +1 -0
- package/dist/components/stat-card/StatCard.d.ts +22 -0
- package/dist/components/stat-card/StatCard.js +153 -0
- package/dist/components/stat-card/StatCard.js.map +1 -0
- package/dist/components/stepper/Stepper.d.ts +30 -0
- package/dist/components/stepper/Stepper.js +131 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/table/Table.d.ts +53 -0
- package/dist/components/table/Table.js +221 -0
- package/dist/components/table/Table.js.map +1 -0
- package/dist/components/tabs/Tabs.d.ts +19 -0
- package/dist/components/tabs/Tabs.js +183 -0
- package/dist/components/tabs/Tabs.js.map +1 -0
- package/dist/components/tag/Tag.d.ts +22 -0
- package/dist/components/tag/Tag.js +121 -0
- package/dist/components/tag/Tag.js.map +1 -0
- package/dist/components/toast/Toast.d.ts +34 -0
- package/dist/components/toast/Toast.js +187 -0
- package/dist/components/toast/Toast.js.map +1 -0
- package/dist/components/toggle/Toggle.d.ts +31 -0
- package/dist/components/toggle/Toggle.js +197 -0
- package/dist/components/toggle/Toggle.js.map +1 -0
- package/dist/components/toolbar/Toolbar.d.ts +21 -0
- package/dist/components/toolbar/Toolbar.js +239 -0
- package/dist/components/toolbar/Toolbar.js.map +1 -0
- package/dist/components/tooltip/Tooltip.d.ts +33 -0
- package/dist/components/tooltip/Tooltip.js +182 -0
- package/dist/components/tooltip/Tooltip.js.map +1 -0
- package/dist/components/typography/Typography.d.ts +32 -0
- package/dist/components/typography/Typography.js +183 -0
- package/dist/components/typography/Typography.js.map +1 -0
- package/dist/fonts.css +3 -0
- package/dist/icons/index.d.ts +125 -0
- package/dist/icons/index.js +174 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.js +56 -0
- package/dist/opti-ui.css +5365 -0
- package/dist/theme/ThemeProvider.d.ts +22 -0
- package/dist/theme/ThemeProvider.js +115 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/utils/cx.d.ts +10 -0
- package/dist/utils/cx.js +18 -0
- package/dist/utils/cx.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/portal.d.ts +8 -0
- package/dist/utils/portal.js +16 -0
- package/dist/utils/portal.js.map +1 -0
- package/dist/utils/primitive.d.ts +13 -0
- package/dist/utils/primitive.js +61 -0
- package/dist/utils/primitive.js.map +1 -0
- package/dist/utils/search.d.ts +4 -0
- package/dist/utils/search.js +15 -0
- package/dist/utils/search.js.map +1 -0
- package/package.json +71 -4
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx } from "../../utils/cx.js";
|
|
3
|
+
import { Skeleton } from "../skeleton/Skeleton.js";
|
|
4
|
+
import { Spinner } from "../spinner/Spinner.js";
|
|
5
|
+
import { Button } from "../button/Button.js";
|
|
6
|
+
import { Checkbox } from "../choice/Choice.js";
|
|
7
|
+
import { SearchInput } from "../search-input/SearchInput.js";
|
|
8
|
+
import { matchesQuery } from "../../utils/search.js";
|
|
9
|
+
import { Pagination } from "../pagination/Pagination.js";
|
|
10
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../table/Table.js";
|
|
11
|
+
import { EmptyState } from "../empty-state/EmptyState.js";
|
|
12
|
+
import { c } from "react/compiler-runtime";
|
|
13
|
+
import * as React from "react";
|
|
14
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
//#region src/components/data-table/DataTable.tsx
|
|
16
|
+
var defaultLabels = {
|
|
17
|
+
search: "Search…",
|
|
18
|
+
clearSearch: "Clear search",
|
|
19
|
+
selectAll: "Select all",
|
|
20
|
+
selectRow: (label) => `Select ${label}`,
|
|
21
|
+
count: (count) => `${count} ${count === 1 ? "record" : "records"}`,
|
|
22
|
+
selected: (count) => `${count} selected`,
|
|
23
|
+
emptyTitle: "No records yet",
|
|
24
|
+
emptyDescription: "Records will appear here once added.",
|
|
25
|
+
noMatchTitle: "No matching records",
|
|
26
|
+
noMatchDescription: "Try a different search.",
|
|
27
|
+
loading: "Loading",
|
|
28
|
+
errorTitle: "Could not load records",
|
|
29
|
+
retry: "Try again"
|
|
30
|
+
};
|
|
31
|
+
function useControlled(value, initial, onChange) {
|
|
32
|
+
const $ = c(5);
|
|
33
|
+
const [inner, setInner] = React.useState(initial);
|
|
34
|
+
let t0;
|
|
35
|
+
if ($[0] !== onChange) {
|
|
36
|
+
t0 = (next) => {
|
|
37
|
+
setInner(next);
|
|
38
|
+
onChange?.(next);
|
|
39
|
+
};
|
|
40
|
+
$[0] = onChange;
|
|
41
|
+
$[1] = t0;
|
|
42
|
+
} else t0 = $[1];
|
|
43
|
+
const set = t0;
|
|
44
|
+
const t1 = value === void 0 ? inner : value;
|
|
45
|
+
let t2;
|
|
46
|
+
if ($[2] !== set || $[3] !== t1) {
|
|
47
|
+
t2 = [t1, set];
|
|
48
|
+
$[2] = set;
|
|
49
|
+
$[3] = t1;
|
|
50
|
+
$[4] = t2;
|
|
51
|
+
} else t2 = $[4];
|
|
52
|
+
return t2;
|
|
53
|
+
}
|
|
54
|
+
function valueOf(column, row) {
|
|
55
|
+
return column.accessor ? column.accessor(row) : row[column.id];
|
|
56
|
+
}
|
|
57
|
+
function isEmpty(value) {
|
|
58
|
+
return value === null || value === void 0 || value === "";
|
|
59
|
+
}
|
|
60
|
+
function compareValues(a, b) {
|
|
61
|
+
if (typeof a === "number" && typeof b === "number") return a - b;
|
|
62
|
+
if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();
|
|
63
|
+
if (typeof a === "boolean" && typeof b === "boolean") return Number(a) - Number(b);
|
|
64
|
+
return String(a).localeCompare(String(b), void 0, {
|
|
65
|
+
numeric: true,
|
|
66
|
+
sensitivity: "base"
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
var INTERACTIVE = "a, button, input, select, textarea, label, [role=\"checkbox\"], [role=\"button\"]";
|
|
70
|
+
/**
|
|
71
|
+
* Table with built-in search, sorting, pagination and row selection. Every
|
|
72
|
+
* piece of state works uncontrolled or controlled (`search` / `sort` / `page` /
|
|
73
|
+
* `selection`), e.g. to persist it in the URL. With `mode="server"` the same
|
|
74
|
+
* state drives an API instead: pass the fetched page as `data`, plus `total`
|
|
75
|
+
* and `loading`. For custom layouts compose `Table` and `Pagination`.
|
|
76
|
+
*/
|
|
77
|
+
function DataTable(t0) {
|
|
78
|
+
const $ = c(66);
|
|
79
|
+
const { data, columns, mode: t1, total, loading, error, onRetry, getRowId, searchable: t2, search: searchProp, defaultSearch: t3, onSearchChange, filter, sort: sortProp, defaultSort: t4, onSortChange, paginated: t5, page: pageProp, onPageChange, pageSize: pageSizeProp, defaultPageSize: t6, onPageSizeChange, pageSizeOptions, selection, onSelectionChange, onRowClick, rowLabel, toolbar, empty, labels, density, striped, stickyHeader, className, tableProps } = t0;
|
|
80
|
+
const mode = t1 === void 0 ? "client" : t1;
|
|
81
|
+
const searchable = t2 === void 0 ? true : t2;
|
|
82
|
+
const defaultSearch = t3 === void 0 ? "" : t3;
|
|
83
|
+
const defaultSort = t4 === void 0 ? null : t4;
|
|
84
|
+
const paginated = t5 === void 0 ? true : t5;
|
|
85
|
+
const defaultPageSize = t6 === void 0 ? 10 : t6;
|
|
86
|
+
const text = {
|
|
87
|
+
...defaultLabels,
|
|
88
|
+
...labels
|
|
89
|
+
};
|
|
90
|
+
const [search, setSearch] = useControlled(searchProp, defaultSearch, onSearchChange);
|
|
91
|
+
const [sort, setSort] = useControlled(sortProp, defaultSort, onSortChange);
|
|
92
|
+
const [page, setPage] = useControlled(pageProp, 1, onPageChange);
|
|
93
|
+
const [pageSize, setPageSize] = useControlled(pageSizeProp, defaultPageSize, onPageSizeChange);
|
|
94
|
+
const server = mode === "server";
|
|
95
|
+
const selectable = Boolean(onSelectionChange);
|
|
96
|
+
let t7;
|
|
97
|
+
if ($[0] !== selection) {
|
|
98
|
+
t7 = new Set(selection);
|
|
99
|
+
$[0] = selection;
|
|
100
|
+
$[1] = t7;
|
|
101
|
+
} else t7 = $[1];
|
|
102
|
+
const selected = t7;
|
|
103
|
+
const sortable = _temp;
|
|
104
|
+
let t8;
|
|
105
|
+
if ($[2] !== getRowId) {
|
|
106
|
+
t8 = (row, index) => getRowId?.(row, index) ?? String(row.id ?? index);
|
|
107
|
+
$[2] = getRowId;
|
|
108
|
+
$[3] = t8;
|
|
109
|
+
} else t8 = $[3];
|
|
110
|
+
const idOf = t8;
|
|
111
|
+
let t9;
|
|
112
|
+
if ($[4] !== idOf) {
|
|
113
|
+
t9 = (row_0, index_0) => ({
|
|
114
|
+
row: row_0,
|
|
115
|
+
id: idOf(row_0, index_0)
|
|
116
|
+
});
|
|
117
|
+
$[4] = idOf;
|
|
118
|
+
$[5] = t9;
|
|
119
|
+
} else t9 = $[5];
|
|
120
|
+
let rows = data.map(t9);
|
|
121
|
+
if (!server && search.trim()) {
|
|
122
|
+
const searchColumns = columns.filter(_temp2);
|
|
123
|
+
rows = rows.filter((t10) => {
|
|
124
|
+
const { row: row_1 } = t10;
|
|
125
|
+
return filter ? filter(row_1, search) : matchesQuery(searchColumns.map((column_1) => valueOf(column_1, row_1) ?? "").join(" "), search);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
let t10;
|
|
129
|
+
if ($[6] !== columns || $[7] !== sort) {
|
|
130
|
+
t10 = sort && columns.find((candidate) => candidate.id === sort.id);
|
|
131
|
+
$[6] = columns;
|
|
132
|
+
$[7] = sort;
|
|
133
|
+
$[8] = t10;
|
|
134
|
+
} else t10 = $[8];
|
|
135
|
+
const sortColumn = t10;
|
|
136
|
+
if (!server && sort && sortColumn) {
|
|
137
|
+
const direction = sort.direction === "asc" ? 1 : -1;
|
|
138
|
+
let t11;
|
|
139
|
+
if ($[9] !== direction || $[10] !== sortColumn) {
|
|
140
|
+
t11 = (a, b) => {
|
|
141
|
+
if (sortColumn.compare) return direction * sortColumn.compare(a.row, b.row);
|
|
142
|
+
const [av, bv] = [valueOf(sortColumn, a.row), valueOf(sortColumn, b.row)];
|
|
143
|
+
if (isEmpty(av) || isEmpty(bv)) return Number(isEmpty(av)) - Number(isEmpty(bv));
|
|
144
|
+
return direction * compareValues(av, bv);
|
|
145
|
+
};
|
|
146
|
+
$[9] = direction;
|
|
147
|
+
$[10] = sortColumn;
|
|
148
|
+
$[11] = t11;
|
|
149
|
+
} else t11 = $[11];
|
|
150
|
+
rows = [...rows].sort(t11);
|
|
151
|
+
}
|
|
152
|
+
const count = server ? total ?? rows.length : rows.length;
|
|
153
|
+
const pageCount = Math.max(1, Math.ceil(count / pageSize));
|
|
154
|
+
const currentPage = Math.min(Math.max(1, page), pageCount);
|
|
155
|
+
const visible = paginated && !server ? rows.slice((currentPage - 1) * pageSize, currentPage * pageSize) : rows;
|
|
156
|
+
let t11;
|
|
157
|
+
if ($[12] !== data.length || $[13] !== search || $[14] !== server) {
|
|
158
|
+
t11 = server ? Boolean(search.trim()) : data.length > 0;
|
|
159
|
+
$[12] = data.length;
|
|
160
|
+
$[13] = search;
|
|
161
|
+
$[14] = server;
|
|
162
|
+
$[15] = t11;
|
|
163
|
+
} else t11 = $[15];
|
|
164
|
+
const filtered = t11;
|
|
165
|
+
const placeholders = loading && !rows.length && !error ? Math.min(paginated ? pageSize : 5, 10) : 0;
|
|
166
|
+
let t12;
|
|
167
|
+
if ($[16] !== selected) {
|
|
168
|
+
t12 = (t13) => {
|
|
169
|
+
const { id } = t13;
|
|
170
|
+
return selected.has(id);
|
|
171
|
+
};
|
|
172
|
+
$[16] = selected;
|
|
173
|
+
$[17] = t12;
|
|
174
|
+
} else t12 = $[17];
|
|
175
|
+
const selectedInView = rows.filter(t12).length;
|
|
176
|
+
const allSelected = rows.length > 0 && selectedInView === rows.length;
|
|
177
|
+
const toggleAll = (checked) => {
|
|
178
|
+
const ids = new Set(rows.map(_temp3));
|
|
179
|
+
const kept = (selection ?? []).filter((id_1) => !ids.has(id_1));
|
|
180
|
+
onSelectionChange?.(checked ? [...kept, ...ids] : kept);
|
|
181
|
+
};
|
|
182
|
+
let t13;
|
|
183
|
+
if ($[18] !== setSort || $[19] !== sort) {
|
|
184
|
+
t13 = (id_2) => setSort(sort?.id !== id_2 ? {
|
|
185
|
+
id: id_2,
|
|
186
|
+
direction: "asc"
|
|
187
|
+
} : sort.direction === "asc" ? {
|
|
188
|
+
id: id_2,
|
|
189
|
+
direction: "desc"
|
|
190
|
+
} : null);
|
|
191
|
+
$[18] = setSort;
|
|
192
|
+
$[19] = sort;
|
|
193
|
+
$[20] = t13;
|
|
194
|
+
} else t13 = $[20];
|
|
195
|
+
const toggleSort = t13;
|
|
196
|
+
let t14;
|
|
197
|
+
if ($[21] !== setPage || $[22] !== setSearch) {
|
|
198
|
+
t14 = (next) => {
|
|
199
|
+
setSearch(next);
|
|
200
|
+
setPage(1);
|
|
201
|
+
};
|
|
202
|
+
$[21] = setPage;
|
|
203
|
+
$[22] = setSearch;
|
|
204
|
+
$[23] = t14;
|
|
205
|
+
} else t14 = $[23];
|
|
206
|
+
const changeSearch = t14;
|
|
207
|
+
const extra = typeof toolbar === "function" ? toolbar({
|
|
208
|
+
rows: rows.map(_temp4),
|
|
209
|
+
selection: selection ?? []
|
|
210
|
+
}) : toolbar;
|
|
211
|
+
let t15;
|
|
212
|
+
if ($[24] !== className) {
|
|
213
|
+
t15 = cx("oui-data-table", className);
|
|
214
|
+
$[24] = className;
|
|
215
|
+
$[25] = t15;
|
|
216
|
+
} else t15 = $[25];
|
|
217
|
+
const T0 = Table;
|
|
218
|
+
const t16 = loading || void 0;
|
|
219
|
+
const t17 = selectable && /* @__PURE__ */ jsx(TableHead, {
|
|
220
|
+
className: "oui-data-table__check",
|
|
221
|
+
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
222
|
+
size: "sm",
|
|
223
|
+
"aria-label": text.selectAll,
|
|
224
|
+
checked: allSelected,
|
|
225
|
+
indeterminate: selectedInView > 0 && !allSelected,
|
|
226
|
+
disabled: !rows.length,
|
|
227
|
+
onCheckedChange: (checked_0) => toggleAll(checked_0)
|
|
228
|
+
})
|
|
229
|
+
});
|
|
230
|
+
let t18;
|
|
231
|
+
if ($[26] !== columns || $[27] !== sort || $[28] !== toggleSort) {
|
|
232
|
+
let t19;
|
|
233
|
+
if ($[30] !== sort || $[31] !== toggleSort) {
|
|
234
|
+
t19 = (column_2) => /* @__PURE__ */ jsx(TableHead, {
|
|
235
|
+
align: column_2.align ?? (column_2.numeric ? "end" : "start"),
|
|
236
|
+
style: column_2.width !== void 0 ? { width: column_2.width } : void 0,
|
|
237
|
+
sort: sortable(column_2) ? sort?.id === column_2.id ? sort.direction : false : void 0,
|
|
238
|
+
onSort: () => toggleSort(column_2.id),
|
|
239
|
+
children: column_2.header
|
|
240
|
+
}, column_2.id);
|
|
241
|
+
$[30] = sort;
|
|
242
|
+
$[31] = toggleSort;
|
|
243
|
+
$[32] = t19;
|
|
244
|
+
} else t19 = $[32];
|
|
245
|
+
t18 = columns.map(t19);
|
|
246
|
+
$[26] = columns;
|
|
247
|
+
$[27] = sort;
|
|
248
|
+
$[28] = toggleSort;
|
|
249
|
+
$[29] = t18;
|
|
250
|
+
} else t18 = $[29];
|
|
251
|
+
let t19;
|
|
252
|
+
if ($[33] !== t17 || $[34] !== t18) {
|
|
253
|
+
t19 = /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [t17, t18] }) });
|
|
254
|
+
$[33] = t17;
|
|
255
|
+
$[34] = t18;
|
|
256
|
+
$[35] = t19;
|
|
257
|
+
} else t19 = $[35];
|
|
258
|
+
const T1 = TableBody;
|
|
259
|
+
let t20;
|
|
260
|
+
if ($[36] !== columns || $[37] !== placeholders || $[38] !== selectable) {
|
|
261
|
+
let t21;
|
|
262
|
+
if ($[40] !== columns || $[41] !== selectable) {
|
|
263
|
+
t21 = (_, index_1) => /* @__PURE__ */ jsxs(TableRow, {
|
|
264
|
+
"aria-hidden": true,
|
|
265
|
+
children: [selectable && /* @__PURE__ */ jsx(TableCell, { className: "oui-data-table__check" }), columns.map((column_3, position) => /* @__PURE__ */ jsx(TableCell, {
|
|
266
|
+
align: column_3.align,
|
|
267
|
+
numeric: column_3.numeric,
|
|
268
|
+
children: /* @__PURE__ */ jsx(Skeleton, {
|
|
269
|
+
className: "oui-data-table__skeleton",
|
|
270
|
+
width: `${45 + (index_1 * 3 + position * 5) % 7 * 8}%`
|
|
271
|
+
})
|
|
272
|
+
}, column_3.id))]
|
|
273
|
+
}, index_1);
|
|
274
|
+
$[40] = columns;
|
|
275
|
+
$[41] = selectable;
|
|
276
|
+
$[42] = t21;
|
|
277
|
+
} else t21 = $[42];
|
|
278
|
+
t20 = Array.from({ length: placeholders }, t21);
|
|
279
|
+
$[36] = columns;
|
|
280
|
+
$[37] = placeholders;
|
|
281
|
+
$[38] = selectable;
|
|
282
|
+
$[39] = t20;
|
|
283
|
+
} else t20 = $[39];
|
|
284
|
+
const t21 = !error && visible.map((t22) => {
|
|
285
|
+
const { row: row_3, id: id_3 } = t22;
|
|
286
|
+
const isSelected = selected.has(id_3);
|
|
287
|
+
return /* @__PURE__ */ jsxs(TableRow, {
|
|
288
|
+
"data-selected": isSelected || void 0,
|
|
289
|
+
"data-clickable": onRowClick ? "" : void 0,
|
|
290
|
+
tabIndex: onRowClick ? 0 : void 0,
|
|
291
|
+
"aria-label": onRowClick ? rowLabel?.(row_3) : void 0,
|
|
292
|
+
onClick: (event) => {
|
|
293
|
+
if (!onRowClick || event.ctrlKey || event.metaKey) return;
|
|
294
|
+
if (event.target.closest(INTERACTIVE)) return;
|
|
295
|
+
onRowClick(row_3);
|
|
296
|
+
},
|
|
297
|
+
onKeyDown: (event_0) => {
|
|
298
|
+
if (onRowClick && event_0.target === event_0.currentTarget && event_0.key === "Enter") onRowClick(row_3);
|
|
299
|
+
},
|
|
300
|
+
children: [selectable && /* @__PURE__ */ jsx(TableCell, {
|
|
301
|
+
className: "oui-data-table__check",
|
|
302
|
+
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
303
|
+
size: "sm",
|
|
304
|
+
"aria-label": text.selectRow(rowLabel?.(row_3) ?? id_3),
|
|
305
|
+
checked: isSelected,
|
|
306
|
+
onCheckedChange: (checked_1) => onSelectionChange?.(checked_1 ? [...selection ?? [], id_3] : (selection ?? []).filter((item) => item !== id_3))
|
|
307
|
+
})
|
|
308
|
+
}), columns.map((column_4) => {
|
|
309
|
+
const value = column_4.cell ? column_4.cell(row_3) : valueOf(column_4, row_3);
|
|
310
|
+
return /* @__PURE__ */ jsx(TableCell, {
|
|
311
|
+
align: column_4.align,
|
|
312
|
+
numeric: column_4.numeric,
|
|
313
|
+
children: column_4.cell || React.isValidElement(value) ? value : isEmpty(value) ? "—" : String(value)
|
|
314
|
+
}, column_4.id);
|
|
315
|
+
})]
|
|
316
|
+
}, id_3);
|
|
317
|
+
});
|
|
318
|
+
let t23;
|
|
319
|
+
if ($[43] !== T1 || $[44] !== t20 || $[45] !== t21) {
|
|
320
|
+
t23 = /* @__PURE__ */ jsxs(T1, { children: [t20, t21] });
|
|
321
|
+
$[43] = T1;
|
|
322
|
+
$[44] = t20;
|
|
323
|
+
$[45] = t21;
|
|
324
|
+
$[46] = t23;
|
|
325
|
+
} else t23 = $[46];
|
|
326
|
+
let t24;
|
|
327
|
+
if ($[47] !== T0 || $[48] !== density || $[49] !== stickyHeader || $[50] !== striped || $[51] !== t16 || $[52] !== t19 || $[53] !== t23 || $[54] !== tableProps) {
|
|
328
|
+
t24 = /* @__PURE__ */ jsxs(T0, {
|
|
329
|
+
density,
|
|
330
|
+
striped,
|
|
331
|
+
stickyHeader,
|
|
332
|
+
"aria-busy": t16,
|
|
333
|
+
...tableProps,
|
|
334
|
+
children: [t19, t23]
|
|
335
|
+
});
|
|
336
|
+
$[47] = T0;
|
|
337
|
+
$[48] = density;
|
|
338
|
+
$[49] = stickyHeader;
|
|
339
|
+
$[50] = striped;
|
|
340
|
+
$[51] = t16;
|
|
341
|
+
$[52] = t19;
|
|
342
|
+
$[53] = t23;
|
|
343
|
+
$[54] = tableProps;
|
|
344
|
+
$[55] = t24;
|
|
345
|
+
} else t24 = $[55];
|
|
346
|
+
let t25;
|
|
347
|
+
if ($[56] !== count || $[57] !== currentPage || $[58] !== error || $[59] !== labels || $[60] !== pageSize || $[61] !== pageSizeOptions || $[62] !== paginated || $[63] !== setPage || $[64] !== setPageSize) {
|
|
348
|
+
t25 = paginated && count > 0 && !error && /* @__PURE__ */ jsx(Pagination, {
|
|
349
|
+
className: "oui-data-table__pagination",
|
|
350
|
+
variant: "simple",
|
|
351
|
+
page: currentPage,
|
|
352
|
+
pageSize,
|
|
353
|
+
total: count,
|
|
354
|
+
onPageChange: setPage,
|
|
355
|
+
onPageSizeChange: (size) => {
|
|
356
|
+
setPageSize(size);
|
|
357
|
+
setPage(1);
|
|
358
|
+
},
|
|
359
|
+
pageSizeOptions,
|
|
360
|
+
labels
|
|
361
|
+
});
|
|
362
|
+
$[56] = count;
|
|
363
|
+
$[57] = currentPage;
|
|
364
|
+
$[58] = error;
|
|
365
|
+
$[59] = labels;
|
|
366
|
+
$[60] = pageSize;
|
|
367
|
+
$[61] = pageSizeOptions;
|
|
368
|
+
$[62] = paginated;
|
|
369
|
+
$[63] = setPage;
|
|
370
|
+
$[64] = setPageSize;
|
|
371
|
+
$[65] = t25;
|
|
372
|
+
} else t25 = $[65];
|
|
373
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
374
|
+
className: t15,
|
|
375
|
+
"data-loading": loading ? rows.length ? "refresh" : "initial" : void 0,
|
|
376
|
+
children: [
|
|
377
|
+
/* @__PURE__ */ jsxs("div", {
|
|
378
|
+
className: "oui-data-table__toolbar",
|
|
379
|
+
children: [searchable && /* @__PURE__ */ jsx(SearchInput, {
|
|
380
|
+
className: "oui-data-table__search",
|
|
381
|
+
"aria-label": text.search,
|
|
382
|
+
placeholder: text.search,
|
|
383
|
+
clearLabel: text.clearSearch,
|
|
384
|
+
value: search,
|
|
385
|
+
onValueChange: changeSearch
|
|
386
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
387
|
+
className: "oui-data-table__actions",
|
|
388
|
+
children: [
|
|
389
|
+
loading && /* @__PURE__ */ jsx(Spinner, {
|
|
390
|
+
className: "oui-data-table__spinner",
|
|
391
|
+
label: text.loading
|
|
392
|
+
}),
|
|
393
|
+
/* @__PURE__ */ jsx("span", {
|
|
394
|
+
className: "oui-data-table__summary",
|
|
395
|
+
"aria-live": "polite",
|
|
396
|
+
children: selectable && selected.size ? text.selected(selected.size) : placeholders ? null : text.count(count)
|
|
397
|
+
}),
|
|
398
|
+
extra
|
|
399
|
+
]
|
|
400
|
+
})]
|
|
401
|
+
}),
|
|
402
|
+
t24,
|
|
403
|
+
error ? /* @__PURE__ */ jsx(EmptyState, {
|
|
404
|
+
role: "alert",
|
|
405
|
+
title: text.errorTitle,
|
|
406
|
+
description: error,
|
|
407
|
+
actions: onRetry ? /* @__PURE__ */ jsx(Button, {
|
|
408
|
+
size: "sm",
|
|
409
|
+
variant: "secondary",
|
|
410
|
+
onClick: onRetry,
|
|
411
|
+
children: text.retry
|
|
412
|
+
}) : void 0
|
|
413
|
+
}) : !rows.length && !loading && (empty ?? /* @__PURE__ */ jsx(EmptyState, {
|
|
414
|
+
title: filtered ? text.noMatchTitle : text.emptyTitle,
|
|
415
|
+
description: filtered ? text.noMatchDescription : text.emptyDescription,
|
|
416
|
+
actions: search ? /* @__PURE__ */ jsx(Button, {
|
|
417
|
+
size: "sm",
|
|
418
|
+
variant: "secondary",
|
|
419
|
+
onClick: () => changeSearch(""),
|
|
420
|
+
children: text.clearSearch
|
|
421
|
+
}) : void 0
|
|
422
|
+
})),
|
|
423
|
+
t25
|
|
424
|
+
]
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
function _temp4(t0) {
|
|
428
|
+
const { row: row_2 } = t0;
|
|
429
|
+
return row_2;
|
|
430
|
+
}
|
|
431
|
+
function _temp3(t0) {
|
|
432
|
+
const { id: id_0 } = t0;
|
|
433
|
+
return id_0;
|
|
434
|
+
}
|
|
435
|
+
function _temp2(column_0) {
|
|
436
|
+
return column_0.searchable ?? (column_0.accessor !== void 0 || column_0.cell === void 0);
|
|
437
|
+
}
|
|
438
|
+
function _temp(column) {
|
|
439
|
+
return column.sortable ?? (column.accessor !== void 0 || column.cell === void 0);
|
|
440
|
+
}
|
|
441
|
+
//#endregion
|
|
442
|
+
export { DataTable };
|
|
443
|
+
|
|
444
|
+
//# sourceMappingURL=DataTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.js","names":["React","cx","matchesQuery","Button","Checkbox","EmptyState","Pagination","PaginationLabels","SearchInput","Skeleton","Spinner","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","TableProps","DataTableColumn","id","header","ReactNode","accessor","row","T","cell","sortable","searchable","compare","a","b","align","numeric","width","DataTableSort","direction","DataTableLabels","search","clearSearch","selectAll","selectRow","label","count","selected","emptyTitle","emptyDescription","noMatchTitle","noMatchDescription","loading","errorTitle","retry","defaultLabels","Omit","DataTableToolbarContext","rows","selection","DataTableProps","Pick","data","columns","mode","total","error","onRetry","getRowId","index","defaultSearch","onSearchChange","filter","sort","defaultSort","onSortChange","paginated","page","onPageChange","pageSize","defaultPageSize","onPageSizeChange","pageSizeOptions","onSelectionChange","onRowClick","rowLabel","toolbar","context","empty","labels","Partial","className","tableProps","useControlled","value","initial","onChange","$","_c","inner","setInner","useState","t0","next","set","t1","undefined","t2","const","valueOf","column","Record","isEmpty","compareValues","Date","getTime","Number","String","localeCompare","sensitivity","INTERACTIVE","DataTable","searchProp","t3","sortProp","t4","t5","pageProp","pageSizeProp","t6","density","striped","stickyHeader","text","setSearch","setSort","setPage","setPageSize","server","selectable","Boolean","t7","Set","_temp","t8","idOf","t9","row_0","index_0","map","trim","searchColumns","_temp2","t10","row_1","column_1","join","find","candidate","sortColumn","t11","av","bv","length","pageCount","Math","max","ceil","currentPage","min","visible","slice","filtered","placeholders","t12","t13","has","selectedInView","allSelected","toggleAll","checked","ids","_temp3","kept","id_1","id_2","toggleSort","t14","changeSearch","extra","_temp4","t15","T0","t16","t17","checked_0","t18","t19","column_2","T1","t20","t21","_","index_1","column_3","position","Array","from","t22","row_3","id_3","isSelected","event","ctrlKey","metaKey","target","HTMLElement","closest","event_0","currentTarget","key","checked_1","item","column_4","isValidElement","t23","t24","t25","size","row_2","id_0","column_0","_c"],"sources":["../../../src/components/data-table/DataTable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\nimport { matchesQuery } from '../../utils/search';\nimport { Button } from '../button/Button';\nimport { Checkbox } from '../choice/Choice';\nimport { EmptyState } from '../empty-state/EmptyState';\nimport { Pagination, type PaginationLabels } from '../pagination/Pagination';\nimport { SearchInput } from '../search-input/SearchInput';\nimport { Skeleton } from '../skeleton/Skeleton';\nimport { Spinner } from '../spinner/Spinner';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, type TableProps } from '../table/Table';\n\nexport interface DataTableColumn<T> {\n /** Unique key. Also the property read from the row when there is no `accessor`. */\n id: string;\n header: React.ReactNode;\n /** Value used for sorting, searching and the default cell. Defaults to `row[id]`. */\n accessor?: (row: T) => unknown;\n /** Custom cell content. */\n cell?: (row: T) => React.ReactNode;\n /** Defaults to `true`, or `false` for columns that only define `cell` (actions, icons). */\n sortable?: boolean;\n /** Include this column in the built-in search. Same default as `sortable`. */\n searchable?: boolean;\n /** Custom ascending comparison. */\n compare?: (a: T, b: T) => number;\n align?: 'start' | 'center' | 'end';\n /** Right-align with tabular figures. */\n numeric?: boolean;\n width?: number | string;\n}\n\nexport interface DataTableSort {\n id: string;\n direction: 'asc' | 'desc';\n}\n\nexport interface DataTableLabels extends PaginationLabels {\n search: string;\n clearSearch: string;\n selectAll: string;\n selectRow: (label: string) => string;\n count: (count: number) => React.ReactNode;\n selected: (count: number) => React.ReactNode;\n emptyTitle: React.ReactNode;\n emptyDescription: React.ReactNode;\n noMatchTitle: React.ReactNode;\n noMatchDescription: React.ReactNode;\n loading: string;\n errorTitle: React.ReactNode;\n retry: string;\n}\n\nconst defaultLabels: Omit<DataTableLabels, keyof PaginationLabels> = {\n search: 'Search…',\n clearSearch: 'Clear search',\n selectAll: 'Select all',\n selectRow: (label) => `Select ${label}`,\n count: (count) => `${count} ${count === 1 ? 'record' : 'records'}`,\n selected: (count) => `${count} selected`,\n emptyTitle: 'No records yet',\n emptyDescription: 'Records will appear here once added.',\n noMatchTitle: 'No matching records',\n noMatchDescription: 'Try a different search.',\n loading: 'Loading',\n errorTitle: 'Could not load records',\n retry: 'Try again',\n};\n\nexport interface DataTableToolbarContext<T> {\n /** Rows after 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}\n\nexport interface DataTableProps<T> extends Pick<TableProps, 'density' | 'striped' | 'stickyHeader'> {\n /** All rows, or in server mode the rows of the current page. */\n data: T[];\n columns: DataTableColumn<T>[];\n /**\n * `server` renders `data` as it is: search, sorting and pagination are left to\n * the API, driven by the `search` / `sort` / `page` / `pageSize` callbacks.\n */\n mode?: 'client' | 'server';\n /** Server mode: number of rows across all pages. */\n total?: number;\n /** Shows placeholder rows when there is no data yet, and dims the rows during a refetch. */\n loading?: boolean;\n /** Error message shown in place of the rows. */\n error?: React.ReactNode;\n /** Adds a retry button to the error message. */\n onRetry?: () => void;\n /** Stable id per row, needed for selection. Defaults to `row.id`, then the index. */\n getRowId?: (row: T, index: number) => string;\n\n /** Show the search box (default `true`). */\n searchable?: boolean;\n search?: string;\n defaultSearch?: string;\n onSearchChange?: (search: string) => void;\n /** Replaces the built-in search, which matches every term against the searchable columns. */\n filter?: (row: T, search: string) => boolean;\n\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n\n /** Paginate rows (default `true`). */\n paginated?: boolean;\n page?: number;\n onPageChange?: (page: number) => void;\n pageSize?: number;\n defaultPageSize?: number;\n onPageSizeChange?: (pageSize: number) => void;\n pageSizeOptions?: number[];\n\n /**\n * Selected row ids. Passing `onSelectionChange` adds the checkbox column.\n * Select-all covers every filtered row, or in server mode the current page.\n */\n selection?: string[];\n onSelectionChange?: (selection: string[]) => void;\n\n /** Makes rows clickable and keyboard-activatable (Enter). */\n onRowClick?: (row: T) => void;\n /** Accessible name of a row, used by row selection and clickable rows. */\n rowLabel?: (row: T) => string;\n\n /** Extra toolbar content (filters, export…). A function receives the processed rows. */\n toolbar?: React.ReactNode | ((context: DataTableToolbarContext<T>) => React.ReactNode);\n /** Replaces the default empty state. */\n empty?: React.ReactNode;\n /** Override texts for localisation. */\n labels?: Partial<DataTableLabels>;\n className?: string;\n tableProps?: Omit<TableProps, 'children'>;\n}\n\nfunction useControlled<V>(value: V | undefined, initial: V, onChange?: (value: V) => void) {\n const [inner, setInner] = React.useState(initial);\n const set = (next: V) => {\n setInner(next);\n onChange?.(next);\n };\n return [value === undefined ? inner : value, set] as const;\n}\n\nfunction valueOf<T>(column: DataTableColumn<T>, row: T): unknown {\n return column.accessor ? column.accessor(row) : (row as Record<string, unknown>)[column.id];\n}\n\n// Empty values sort last in both directions.\nfunction isEmpty(value: unknown) {\n return value === null || value === undefined || value === '';\n}\n\nfunction compareValues(a: unknown, b: unknown): number {\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n if (typeof a === 'boolean' && typeof b === 'boolean') return Number(a) - Number(b);\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' });\n}\n\nconst INTERACTIVE = 'a, button, input, select, textarea, label, [role=\"checkbox\"], [role=\"button\"]';\n\n/**\n * Table with built-in search, sorting, pagination and row selection. Every\n * piece of state works uncontrolled or controlled (`search` / `sort` / `page` /\n * `selection`), e.g. to persist it in the URL. With `mode=\"server\"` the same\n * state drives an API instead: pass the fetched page as `data`, plus `total`\n * and `loading`. For custom layouts compose `Table` and `Pagination`.\n */\nexport function DataTable<T>({\n data,\n columns,\n mode = 'client',\n total,\n loading,\n error,\n onRetry,\n getRowId,\n searchable = true,\n search: searchProp,\n defaultSearch = '',\n onSearchChange,\n filter,\n sort: sortProp,\n defaultSort = null,\n onSortChange,\n paginated = true,\n page: pageProp,\n onPageChange,\n pageSize: pageSizeProp,\n defaultPageSize = 10,\n onPageSizeChange,\n pageSizeOptions,\n selection,\n onSelectionChange,\n onRowClick,\n rowLabel,\n toolbar,\n empty,\n labels,\n density,\n striped,\n stickyHeader,\n className,\n tableProps,\n}: DataTableProps<T>) {\n const text = { ...defaultLabels, ...labels };\n const [search, setSearch] = useControlled(searchProp, defaultSearch, onSearchChange);\n const [sort, setSort] = useControlled(sortProp, defaultSort, onSortChange);\n const [page, setPage] = useControlled(pageProp, 1, onPageChange);\n const [pageSize, setPageSize] = useControlled(pageSizeProp, defaultPageSize, onPageSizeChange);\n const server = mode === 'server';\n const selectable = Boolean(onSelectionChange);\n const selected = new Set(selection);\n\n const sortable = (column: DataTableColumn<T>) => column.sortable ?? (column.accessor !== undefined || column.cell === undefined);\n\n const idOf = (row: T, index: number) => getRowId?.(row, index) ?? String((row as { id?: unknown }).id ?? index);\n let rows = data.map((row, index) => ({ row, id: idOf(row, index) }));\n\n if (!server && search.trim()) {\n const searchColumns = columns.filter(\n (column) => column.searchable ?? (column.accessor !== undefined || column.cell === undefined),\n );\n rows = rows.filter(({ row }) =>\n filter\n ? filter(row, search)\n : matchesQuery(searchColumns.map((column) => valueOf(column, row) ?? '').join(' '), search),\n );\n }\n\n const sortColumn = sort && columns.find((candidate) => candidate.id === sort.id);\n if (!server && sort && sortColumn) {\n const direction = sort.direction === 'asc' ? 1 : -1;\n rows = [...rows].sort((a, b) => {\n if (sortColumn.compare) return direction * sortColumn.compare(a.row, b.row);\n const [av, bv] = [valueOf(sortColumn, a.row), valueOf(sortColumn, b.row)];\n if (isEmpty(av) || isEmpty(bv)) return Number(isEmpty(av)) - Number(isEmpty(bv));\n return direction * compareValues(av, bv);\n });\n }\n\n const count = server ? (total ?? rows.length) : rows.length;\n const pageCount = Math.max(1, Math.ceil(count / pageSize));\n const currentPage = Math.min(Math.max(1, page), pageCount);\n const visible = paginated && !server ? rows.slice((currentPage - 1) * pageSize, currentPage * pageSize) : rows;\n const filtered = server ? Boolean(search.trim()) : data.length > 0;\n const placeholders = loading && !rows.length && !error ? Math.min(paginated ? pageSize : 5, 10) : 0;\n\n const selectedInView = rows.filter(({ id }) => selected.has(id)).length;\n const allSelected = rows.length > 0 && selectedInView === rows.length;\n\n const toggleAll = (checked: boolean) => {\n const ids = new Set(rows.map(({ id }) => id));\n const kept = (selection ?? []).filter((id) => !ids.has(id));\n onSelectionChange?.(checked ? [...kept, ...ids] : kept);\n };\n\n const toggleSort = (id: string) =>\n setSort(sort?.id !== id ? { id, direction: 'asc' } : sort.direction === 'asc' ? { id, direction: 'desc' } : null);\n\n const changeSearch = (next: string) => {\n setSearch(next);\n setPage(1);\n };\n\n const extra =\n typeof toolbar === 'function'\n ? toolbar({ rows: rows.map(({ row }) => row), selection: selection ?? [] })\n : toolbar;\n\n return (\n <div\n className={cx('oui-data-table', className)}\n data-loading={loading ? (rows.length ? 'refresh' : 'initial') : undefined}\n >\n <div className=\"oui-data-table__toolbar\">\n {searchable && (\n <SearchInput\n className=\"oui-data-table__search\"\n aria-label={text.search}\n placeholder={text.search}\n clearLabel={text.clearSearch}\n value={search}\n onValueChange={changeSearch}\n />\n )}\n <div className=\"oui-data-table__actions\">\n {loading && <Spinner className=\"oui-data-table__spinner\" label={text.loading} />}\n <span className=\"oui-data-table__summary\" aria-live=\"polite\">\n {/* No count before the first rows arrive: \"0 records\" would be wrong. */}\n {selectable && selected.size ? text.selected(selected.size) : placeholders ? null : text.count(count)}\n </span>\n {extra}\n </div>\n </div>\n\n <Table density={density} striped={striped} stickyHeader={stickyHeader} aria-busy={loading || undefined} {...tableProps}>\n <TableHeader>\n <TableRow>\n {selectable && (\n <TableHead className=\"oui-data-table__check\">\n <Checkbox\n size=\"sm\"\n aria-label={text.selectAll}\n checked={allSelected}\n indeterminate={selectedInView > 0 && !allSelected}\n disabled={!rows.length}\n onCheckedChange={(checked) => toggleAll(checked)}\n />\n </TableHead>\n )}\n {columns.map((column) => (\n <TableHead\n key={column.id}\n align={column.align ?? (column.numeric ? 'end' : 'start')}\n style={column.width !== undefined ? { width: column.width } : undefined}\n sort={sortable(column) ? (sort?.id === column.id ? sort.direction : false) : undefined}\n onSort={() => toggleSort(column.id)}\n >\n {column.header}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {Array.from({ length: placeholders }, (_, index) => (\n <TableRow key={index} aria-hidden>\n {selectable && <TableCell className=\"oui-data-table__check\" />}\n {columns.map((column, position) => (\n <TableCell key={column.id} align={column.align} numeric={column.numeric}>\n <Skeleton className=\"oui-data-table__skeleton\" width={`${45 + ((index * 3 + position * 5) % 7) * 8}%`} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n {!error && visible.map(({ row, id }) => {\n const isSelected = selected.has(id);\n return (\n <TableRow\n key={id}\n data-selected={isSelected || undefined}\n data-clickable={onRowClick ? '' : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n aria-label={onRowClick ? rowLabel?.(row) : undefined}\n onClick={(event) => {\n if (!onRowClick || event.ctrlKey || event.metaKey) return;\n if ((event.target as HTMLElement).closest(INTERACTIVE)) return;\n onRowClick(row);\n }}\n onKeyDown={(event) => {\n if (onRowClick && event.target === event.currentTarget && event.key === 'Enter') onRowClick(row);\n }}\n >\n {selectable && (\n <TableCell className=\"oui-data-table__check\">\n <Checkbox\n size=\"sm\"\n aria-label={text.selectRow(rowLabel?.(row) ?? id)}\n checked={isSelected}\n onCheckedChange={(checked) =>\n onSelectionChange?.(\n checked ? [...(selection ?? []), id] : (selection ?? []).filter((item) => item !== id),\n )\n }\n />\n </TableCell>\n )}\n {columns.map((column) => {\n const value = column.cell ? column.cell(row) : valueOf(column, row);\n return (\n <TableCell key={column.id} align={column.align} numeric={column.numeric}>\n {column.cell || React.isValidElement(value) ? (value as React.ReactNode) : isEmpty(value) ? '—' : String(value)}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n\n {error ? (\n <EmptyState\n role=\"alert\"\n title={text.errorTitle}\n description={error}\n actions={\n onRetry ? (\n <Button size=\"sm\" variant=\"secondary\" onClick={onRetry}>\n {text.retry}\n </Button>\n ) : undefined\n }\n />\n ) : (\n !rows.length &&\n !loading &&\n (empty ?? (\n <EmptyState\n title={filtered ? text.noMatchTitle : text.emptyTitle}\n description={filtered ? text.noMatchDescription : text.emptyDescription}\n actions={\n search ? (\n <Button size=\"sm\" variant=\"secondary\" onClick={() => changeSearch('')}>\n {text.clearSearch}\n </Button>\n ) : undefined\n }\n />\n ))\n )}\n\n {paginated && count > 0 && !error && (\n <Pagination\n className=\"oui-data-table__pagination\"\n variant=\"simple\"\n page={currentPage}\n pageSize={pageSize}\n total={count}\n onPageChange={setPage}\n onPageSizeChange={(size) => {\n setPageSize(size);\n setPage(1);\n }}\n pageSizeOptions={pageSizeOptions}\n labels={labels}\n />\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAqDA,IAAMmD,gBAA+D;CACnEd,QAAQ;CACRC,aAAa;CACbC,WAAW;CACXC,YAAYC,UAAU,UAAUA;CAChCC,QAAQA,UAAU,GAAGA,MAAK,GAAIA,UAAU,IAAI,WAAW;CACvDC,WAAWD,UAAU,GAAGA,MAAK;CAC7BE,YAAY;CACZC,kBAAkB;CAClBC,cAAc;CACdC,oBAAoB;CACpBC,SAAS;CACTC,YAAY;CACZC,OAAO;AACT;AAwEA,SAAAuC,cAAAC,OAAAC,SAAAC,UAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACE,MAAA,CAAAC,OAAAC,YAA0BhG,MAAKiG,SAAUN,OAAO;CAAE,IAAAO;CAAA,IAAAL,EAAA,OAAAD,UAAA;EACtCM,MAAAC,SAAA;GACVH,SAASG,IAAI;GACbP,WAAWO,IAAI;EAAC;EACjBN,EAAA,KAAAD;EAAAC,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAHD,MAAAO,MAAYF;CAIJ,MAAAG,KAAAX,UAAUY,KAAAA,IAAVP,QAAAL;CAAmC,IAAAa;CAAA,IAAAV,EAAA,OAAAO,OAAAP,EAAA,OAAAQ,IAAA;EAApCE,KAAA,CAACF,IAAqCD,GAAG;EAACP,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,OAA1CU;AAAmD;AAG5D,SAASE,QAAWC,QAA4BnF,KAAiB;CAC/D,OAAOmF,OAAOpF,WAAWoF,OAAOpF,SAASC,GAAG,IAAKA,IAAgCmF,OAAOvF;AAC1F;AAGA,SAASyF,QAAQlB,OAAgB;CAC/B,OAAOA,UAAU,QAAQA,UAAUY,KAAAA,KAAaZ,UAAU;AAC5D;AAEA,SAASmB,cAAchF,GAAYC,GAAoB;CACrD,IAAI,OAAOD,MAAM,YAAY,OAAOC,MAAM,UAAU,OAAOD,IAAIC;CAC/D,IAAID,aAAaiF,QAAQhF,aAAagF,MAAM,OAAOjF,EAAEkF,QAAQ,IAAIjF,EAAEiF,QAAQ;CAC3E,IAAI,OAAOlF,MAAM,aAAa,OAAOC,MAAM,WAAW,OAAOkF,OAAOnF,CAAC,IAAImF,OAAOlF,CAAC;CACjF,OAAOmF,OAAOpF,CAAC,CAAC,CAACqF,cAAcD,OAAOnF,CAAC,GAAGwE,KAAAA,GAAW;EAAEtE,SAAS;EAAMmF,aAAa;CAAO,CAAC;AAC7F;AAEA,IAAMC,cAAc;;;;;;;;AASpB,SAAOC,UAAAnB,IAAA;CAAA,MAAAL,IAAAC,EAAA,EAAA;CAAsB,MAAA,EAAApC,MAAAC,SAAAC,MAAAyC,IAAAxC,OAAAb,SAAAc,OAAAC,SAAAC,UAAArC,YAAA4E,IAAAlE,QAAAiF,YAAApD,eAAAqD,IAAApD,gBAAAC,QAAAC,MAAAmD,UAAAlD,aAAAmD,IAAAlD,cAAAC,WAAAkD,IAAAjD,MAAAkD,UAAAjD,cAAAC,UAAAiD,cAAAhD,iBAAAiD,IAAAhD,kBAAAC,iBAAAvB,WAAAwB,mBAAAC,YAAAC,UAAAC,SAAAE,OAAAC,QAAAyC,SAAAC,SAAAC,cAAAzC,WAAAC,eAAAU;CAG3B,MAAAtC,OAAAyC,OAAAC,KAAAA,IAAA,WAAAD;CAMA,MAAA1E,aAAA4E,OAAAD,KAAAA,IAAA,OAAAC;CAEA,MAAArC,gBAAAqD,OAAAjB,KAAAA,IAAA,KAAAiB;CAIA,MAAAjD,cAAAmD,OAAAnB,KAAAA,IAAA,OAAAmB;CAEA,MAAAjD,YAAAkD,OAAApB,KAAAA,IAAA,OAAAoB;CAIA,MAAA9C,kBAAAiD,OAAAvB,KAAAA,IAAA,KAAAuB;CAgBA,MAAAI,OAAa;EAAA,GAAK9E;EAAa,GAAKkC;CAAO;CAC3C,MAAA,CAAAhD,QAAA6F,aAA4BzC,cAAc6B,YAAYpD,eAAeC,cAAc;CACnF,MAAA,CAAAE,MAAA8D,WAAwB1C,cAAc+B,UAAUlD,aAAaC,YAAY;CACzE,MAAA,CAAAE,MAAA2D,WAAwB3C,cAAckC,UAAU,GAAGjD,YAAY;CAC/D,MAAA,CAAAC,UAAA0D,eAAgC5C,cAAcmC,cAAchD,iBAAiBC,gBAAgB;CAC7F,MAAAyD,SAAe1E,SAAS;CACxB,MAAA2E,aAAmBC,QAAQzD,iBAAiB;CAAE,IAAA0D;CAAA,IAAA5C,EAAA,OAAAtC,WAAA;EAC7BkF,KAAA,IAAIC,IAAInF,SAAS;EAACsC,EAAA,KAAAtC;EAAAsC,EAAA,KAAA4C;CAAA,OAAAA,KAAA5C,EAAA;CAAnC,MAAAlD,WAAiB8F;CAEjB,MAAA/G,WAAiBiH;CAAgH,IAAAC;CAAA,IAAA/C,EAAA,OAAA7B,UAAA;EAEpH4E,MAAArH,KAAA0C,UAA2BD,WAAWzC,KAAK0C,KAAsD,KAA5CgD,OAAQ1F,IAAuBJ,MAAxB8C,KAAqC;EAAC4B,EAAA,KAAA7B;EAAA6B,EAAA,KAAA+C;CAAA,OAAAA,KAAA/C,EAAA;CAA/G,MAAAgD,OAAaD;CAAmG,IAAAE;CAAA,IAAAjD,EAAA,OAAAgD,MAAA;EAC5FC,MAAAC,OAAAC,aAAiB;GAAAzH,KAAEA;GAAGJ,IAAM0H,KAAKtH,OAAK0C,OAAK;EAAE;EAAE4B,EAAA,KAAAgD;EAAAhD,EAAA,KAAAiD;CAAA,OAAAA,KAAAjD,EAAA;CAAnE,IAAAvC,OAAWI,KAAIuF,IAAKH,EAA+C;CAEnE,IAAI,CAACR,UAAUjG,OAAM6G,KAAM,GAAC;EAC1B,MAAAC,gBAAsBxF,QAAOS,OAC3BgF,MACF;EACA9F,OAAOA,KAAIc,QAAQiF,QAAA;GAAC,MAAA,EAAA9H,KAAA+H,UAAAD;GAAO,OACzBjF,SACIA,OAAO7C,OAAKc,MAC4E,IAAxFnC,aAAaiJ,cAAaF,KAAKM,aAAY9C,QAAQC,UAAQnF,KAAS,KAAzB,EAA0B,CAAC,CAAAiI,KAAM,GAAG,GAAGnH,MAAM;EAAC,CAC/F;CAJI;CAKL,IAAAgH;CAAA,IAAAxD,EAAA,OAAAlC,WAAAkC,EAAA,OAAAxB,MAAA;EAEkBgF,MAAAhF,QAAQV,QAAO8F,MAAMC,cAAeA,UAASvI,OAAQkD,KAAIlD,EAAG;EAAC0E,EAAA,KAAAlC;EAAAkC,EAAA,KAAAxB;EAAAwB,EAAA,KAAAwD;CAAA,OAAAA,MAAAxD,EAAA;CAAhF,MAAA8D,aAAmBN;CACnB,IAAI,CAACf,UAADjE,QAAAsF,YAA6B;EAC/B,MAAAxH,YAAkBkC,KAAIlC,cAAe,QAAnB,IAAA;EAAkC,IAAAyH;EAAA,IAAA/D,EAAA,OAAA1D,aAAA0D,EAAA,QAAA8D,YAAA;GAC9BC,OAAA/H,GAAAC,MAAA;IACpB,IAAI6H,WAAU/H,SAAQ,OAASO,YAAYwH,WAAU/H,QAASC,EAACN,KAAMO,EAACP,GAAI;IAC1E,MAAA,CAAAsI,IAAAC,MAAiB,CAACrD,QAAQkD,YAAY9H,EAACN,GAAI,GAAGkF,QAAQkD,YAAY7H,EAACP,GAAI,CAAC;IACxE,IAAIqF,QAAQiD,EAAiB,KAAVjD,QAAQkD,EAAE,GAAC,OAAS9C,OAAOJ,QAAQiD,EAAE,CAAC,IAAI7C,OAAOJ,QAAQkD,EAAE,CAAC;IAAE,OAC1E3H,YAAY0E,cAAcgD,IAAIC,EAAE;GAAC;GACzCjE,EAAA,KAAA1D;GAAA0D,EAAA,MAAA8D;GAAA9D,EAAA,MAAA+D;EAAA,OAAAA,MAAA/D,EAAA;EALDvC,OAAOA,CAAAA,GAAIA,IAAI,CAAC,CAAAe,KAAMuF,GAKrB;CALG;CAQN,MAAAlH,QAAc4F,SAAUzE,SAASP,KAAIyG,SAAWzG,KAAIyG;CACpD,MAAAC,YAAkBC,KAAIC,IAAK,GAAGD,KAAIE,KAAMzH,QAAQiC,QAAQ,CAAC;CACzD,MAAAyF,cAAoBH,KAAII,IAAKJ,KAAIC,IAAK,GAAGzF,IAAI,GAAGuF,SAAS;CACzD,MAAAM,UAAgB9F,aAAA,CAAc8D,SAAShF,KAAIiH,OAAQH,cAAc,KAAKzF,UAAUyF,cAAczF,QAAe,IAA7FrB;CAA+F,IAAAsG;CAAA,IAAA/D,EAAA,QAAAnC,KAAAqG,UAAAlE,EAAA,QAAAxD,UAAAwD,EAAA,QAAAyC,QAAA;EAC9FsB,MAAAtB,SAASE,QAAQnG,OAAM6G,KAAM,CAAmB,IAAdxF,KAAIqG,SAAU;EAAClE,EAAA,MAAAnC,KAAAqG;EAAAlE,EAAA,MAAAxD;EAAAwD,EAAA,MAAAyC;EAAAzC,EAAA,MAAA+D;CAAA,OAAAA,MAAA/D,EAAA;CAAlE,MAAA2E,WAAiBZ;CACjB,MAAAa,eAAqBzH,WAAA,CAAYM,KAAIyG,UAAhB,CAA4BjG,QAAQmG,KAAII,IAAK7F,YAAAG,WAAA,GAA0B,EAAM,IAA7E;CAA+E,IAAA+F;CAAA,IAAA7E,EAAA,QAAAlD,UAAA;EAEjE+H,OAAAC,QAAA;GAAC,MAAA,EAAAxJ,OAAAwJ;GAAM,OAAKhI,SAAQiI,IAAKzJ,EAAE;EAAC;EAAA0E,EAAA,MAAAlD;EAAAkD,EAAA,MAAA6E;CAAA,OAAAA,MAAA7E,EAAA;CAA/D,MAAAgF,iBAAuBvH,KAAIc,OAAQsG,GAA4B,CAAC,CAAAX;CAChE,MAAAe,cAAoBxH,KAAIyG,SAAU,KAAKc,mBAAmBvH,KAAIyG;CAE9D,MAAAgB,aAAkBC,YAAA;EAChB,MAAAC,MAAY,IAAIvC,IAAIpF,KAAI2F,IAAKiC,MAAc,CAAC;EAC5C,MAAAC,QAAc5H,aAAA,CAAA,EAAA,CAAea,QAASgH,SAAQ,CAACH,IAAGL,IAAKzJ,IAAE,CAAC;EAC1D4D,oBAAoBiG,UAAA,CAAA,GAAcG,MAAI,GAAKF,GAAG,IAA1BE,IAAkC;CAAC;CACvD,IAAAR;CAAA,IAAA9E,EAAA,QAAAsC,WAAAtC,EAAA,QAAAxB,MAAA;EAEiBsG,OAAAU,SACjBlD,QAAQ9D,MAAIlD,OAASA,OAAb;GAAAA,IAAoBA;GAAEgB,WAAa;EAAoE,IAA1DkC,KAAIlC,cAAe,QAAnB;GAAAhB,IAA6BA;GAAEgB,WAAa;EAAc,IAA1D,IAA2D;EAAC0D,EAAA,MAAAsC;EAAAtC,EAAA,MAAAxB;EAAAwB,EAAA,MAAA8E;CAAA,OAAAA,MAAA9E,EAAA;CADnH,MAAAyF,aAAmBX;CACiG,IAAAY;CAAA,IAAA1F,EAAA,QAAAuC,WAAAvC,EAAA,QAAAqC,WAAA;EAE/FqD,OAAApF,SAAA;GACnB+B,UAAU/B,IAAI;GACdiC,QAAQ,CAAC;EAAC;EACXvC,EAAA,MAAAuC;EAAAvC,EAAA,MAAAqC;EAAArC,EAAA,MAAA0F;CAAA,OAAAA,MAAA1F,EAAA;CAHD,MAAA2F,eAAqBD;CAKrB,MAAAE,QACE,OAAOvG,YAAY,aACfA,QAAQ;EAAA5B,MAAQA,KAAI2F,IAAKyC,MAAgB;EAACnI,WAAaA,aAAA,CAAA;CAAgB,CACjE,IAFV2B;CAEY,IAAAyG;CAAA,IAAA9F,EAAA,QAAAN,WAAA;EAICoG,MAAA1L,GAAG,kBAAkBsF,SAAS;EAACM,EAAA,MAAAN;EAAAM,EAAA,MAAA8F;CAAA,OAAAA,MAAA9F,EAAA;CAwBzC,MAAA+F,KAAAjL;CAAiF,MAAAkL,MAAA7I,WAAAsD,KAAAA;CAG3E,MAAAwF,MAAAvD,cACC,oBAAC,WAAD;EAAqB,WAAA;EACnB,UAAA,oBAAC,UAAD;GACO,MAAA;GACO,cAAAN,KAAI1F;GACPuI,SAAAA;GACM,eAAAD,iBAAiB,KAAjB,CAAuBC;GAC5B,UAAA,CAACxH,KAAIyG;GACE,kBAAAgC,cAAahB,UAAUC,SAAO;EAAC,CAAA;CAP1C,CAAA;CAUX,IAAAgB;CAAA,IAAAnG,EAAA,QAAAlC,WAAAkC,EAAA,QAAAxB,QAAAwB,EAAA,QAAAyF,YAAA;EAAA,IAAAW;EAAA,IAAApG,EAAA,QAAAxB,QAAAwB,EAAA,QAAAyF,YAAA;GACYW,OAAAC,aACX,oBAAC,WAAD;IAES,OAAAxF,SAAM3E,UAAW2E,SAAM1E,UAAN,QAAA;IACjB,OAAA0E,SAAMzE,UAAWqE,KAAAA,IAAjB,EAAArE,OAAsCyE,SAAMzE,MAAmB,IAA/DqE,KAAAA;IACD,MAAA5E,SAASgF,QAAsE,IAA3DrC,MAAIlD,OAASuF,SAAMvF,KAAMkD,KAAIlC,YAA7B,QAApBmE,KAAAA;IACE,cAAMgF,WAAW5E,SAAMvF,EAAG;IAEjCuF,UAAAA,SAAMtF;GAPC,GACHsF,SAAMvF,EADH;GASX0E,EAAA,MAAAxB;GAAAwB,EAAA,MAAAyF;GAAAzF,EAAA,MAAAoG;EAAA,OAAAA,MAAApG,EAAA;EAVAmG,MAAArI,QAAOsF,IAAKgD,GAUZ;EAACpG,EAAA,MAAAlC;EAAAkC,EAAA,MAAAxB;EAAAwB,EAAA,MAAAyF;EAAAzF,EAAA,MAAAmG;CAAA,OAAAA,MAAAnG,EAAA;CAAA,IAAAoG;CAAA,IAAApG,EAAA,QAAAiG,OAAAjG,EAAA,QAAAmG,KAAA;EAxBNC,MAAA,oBAAC,aAAD,EAAA,UACE,qBAAC,UAAD,EAAA,UAAA,CACGH,KAYAE,GAbM,EAAA,CAAA,EADC,CAAA;EA0BEnG,EAAA,MAAAiG;EAAAjG,EAAA,MAAAmG;EAAAnG,EAAA,MAAAoG;CAAA,OAAAA,MAAApG,EAAA;CACb,MAAAsG,KAAAvL;CAAS,IAAAwL;CAAA,IAAAvG,EAAA,QAAAlC,WAAAkC,EAAA,QAAA4E,gBAAA5E,EAAA,QAAA0C,YAAA;EAAA,IAAA8D;EAAA,IAAAxG,EAAA,QAAAlC,WAAAkC,EAAA,QAAA0C,YAAA;GAC8B8D,OAAAC,GAAAC,YACpC,qBAAC,UAAD;IAAsB,eAAA;IAAtB,UAAA,CACGhE,cAAc,oBAAC,WAAD,EAAqB,WAAA,wBAAuB,CAAA,GAC1D5E,QAAOsF,KAAKuD,UAAAC,aACX,oBAAC,WAAD;KAAkC,OAAA/F,SAAM3E;KAAiB,SAAA2E,SAAM1E;KAC7D,UAAA,oBAAC,UAAD;MAAoB,WAAA;MAAkC,OAAA,GAAG,MAAOiC,UAAQ,IAAIwI,WAAW,KAAK,IAAK,EAAC;KAAG,CAAA;IAD7F,GAAM/F,SAAMvF,EAAZ,CAGX,CANM;GAAM8C,GAAAA,OAAN;GAQV4B,EAAA,MAAAlC;GAAAkC,EAAA,MAAA0C;GAAA1C,EAAA,MAAAwG;EAAA,OAAAA,MAAAxG,EAAA;EATAuG,MAAAM,MAAKC,KAAM,EAAA5C,QAAUU,aAAa,GAAG4B,GASrC;EAACxG,EAAA,MAAAlC;EAAAkC,EAAA,MAAA4E;EAAA5E,EAAA,MAAA0C;EAAA1C,EAAA,MAAAuG;CAAA,OAAAA,MAAAvG,EAAA;CACD,MAAAwG,MAAA,CAACvI,SAASwG,QAAOrB,KAAK2D,QAAA;EAAC,MAAA,EAAArL,KAAAsL,OAAA1L,IAAA2L,SAAAF;EACtB,MAAAG,aAAmBpK,SAAQiI,IAAKzJ,IAAE;EAAE,OAElC,qBAAC,UAAD;GAEiB,iBAAA4L,cAAAzG,KAAAA;GACC,kBAAAtB,aAAA,KAAAsB,KAAAA;GACN,UAAAtB,aAAA,IAAAsB,KAAAA;GACE,cAAAtB,aAAaC,WAAW1D,KAAe,IAAvC+E,KAAAA;GACH,UAAA0G,UAAA;IACP,IAAI,CAAChI,cAAcgI,MAAKC,WAAYD,MAAKE,SAAQ;IACjD,IAAKF,MAAKG,OAAsBE,QAAUjG,WAAW,GAAC;IACtDpC,WAAWzD,KAAG;GAAC;GAEN,YAAA+L,YAAA;IACT,IAAItI,cAAcgI,QAAKG,WAAYH,QAAKO,iBAAkBP,QAAKQ,QAAS,SAASxI,WAAWzD,KAAG;GAAE;GAZrG,UAAA,CAeGgH,cACC,oBAAC,WAAD;IAAqB,WAAA;IACnB,UAAA,oBAAC,UAAD;KACO,MAAA;KACO,cAAAN,KAAIzF,UAAWyC,WAAW1D,KAAS,KAApBuL,IAAqB;KACvCC,SAAAA;KACQ,kBAAAU,cACf1I,oBACEiG,YAAA,CAAA,GAAezH,aAAA,CAAA,GAAkBpC,IAAE,KAAKoC,aAAA,CAAA,EAAA,CAAea,QAASsJ,SAAUA,SAASvM,IAAE,CACvF;IAAC,CAAA;GARG,CAAA,GAaXwC,QAAOsF,KAAK0E,aAAA;IACX,MAAAjI,QAAcgB,SAAMjF,OAAQiF,SAAMjF,KAAMF,KAA0B,IAAnBkF,QAAQC,UAAQnF,KAAG;IAAE,OAElE,oBAAC,WAAD;KAAkC,OAAAmF,SAAM3E;KAAiB,SAAA2E,SAAM1E;KAC5D0E,UAAAA,SAAMjF,QAASzB,MAAK4N,eAAgBlI,KAAK,IAAKA,QAA4BkB,QAAQlB,KAA2B,IAAnC,MAAuBuB,OAAOvB,KAAK;IADtG,GAAMgB,SAAMvF,EAAZ;GAEE,CAEf,CApCM;EACFA,GAAAA,IADE;CAqCE,CAEd;CAAC,IAAA0M;CAAA,IAAAhI,EAAA,QAAAsG,MAAAtG,EAAA,QAAAuG,OAAAvG,EAAA,QAAAwG,KAAA;EArDJwB,MAAA,qBAAC,IAAD,EAAA,UAAA,CACGzB,KAUAC,GAXO,EAAA,CAAA;EAsDExG,EAAA,MAAAsG;EAAAtG,EAAA,MAAAuG;EAAAvG,EAAA,MAAAwG;EAAAxG,EAAA,MAAAgI;CAAA,OAAAA,MAAAhI,EAAA;CAAA,IAAAiI;CAAA,IAAAjI,EAAA,QAAA+F,MAAA/F,EAAA,QAAAiC,WAAAjC,EAAA,QAAAmC,gBAAAnC,EAAA,QAAAkC,WAAAlC,EAAA,QAAAgG,OAAAhG,EAAA,QAAAoG,OAAApG,EAAA,QAAAgI,OAAAhI,EAAA,QAAAL,YAAA;EAlFdsI,MAAA,qBAAC,IAAD;GAAgBhG;GAAkBC;GAAuBC;GAAyB,aAAA6D;GAAoB,GAAMrG;GAA5G,UAAA,CACEyG,KA2BA4B,GA5BI;;EAmFEhI,EAAA,MAAA+F;EAAA/F,EAAA,MAAAiC;EAAAjC,EAAA,MAAAmC;EAAAnC,EAAA,MAAAkC;EAAAlC,EAAA,MAAAgG;EAAAhG,EAAA,MAAAoG;EAAApG,EAAA,MAAAgI;EAAAhI,EAAA,MAAAL;EAAAK,EAAA,MAAAiI;CAAA,OAAAA,MAAAjI,EAAA;CAAA,IAAAkI;CAAA,IAAAlI,EAAA,QAAAnD,SAAAmD,EAAA,QAAAuE,eAAAvE,EAAA,QAAA/B,SAAA+B,EAAA,QAAAR,UAAAQ,EAAA,QAAAlB,YAAAkB,EAAA,QAAAf,mBAAAe,EAAA,QAAArB,aAAAqB,EAAA,QAAAuC,WAAAvC,EAAA,QAAAwC,aAAA;EAiCP0F,MAAAvJ,aAAa9B,QAAQ,KAArB,CAA2BoB,SAC1B,oBAAC,YAAD;GACY,WAAA;GACF,SAAA;GACFsG,MAAAA;GACIzF;GACHjC,OAAAA;GACO0F,cAAAA;GACI,mBAAA4F,SAAA;IAChB3F,YAAY2F,IAAI;IAChB5F,QAAQ,CAAC;GAAC;GAEKtD;GACTO;EAAM,CAAA;EAEjBQ,EAAA,MAAAnD;EAAAmD,EAAA,MAAAuE;EAAAvE,EAAA,MAAA/B;EAAA+B,EAAA,MAAAR;EAAAQ,EAAA,MAAAlB;EAAAkB,EAAA,MAAAf;EAAAe,EAAA,MAAArB;EAAAqB,EAAA,MAAAuC;EAAAvC,EAAA,MAAAwC;EAAAxC,EAAA,MAAAkI;CAAA,OAAAA,MAAAlI,EAAA;CAAA,OA5JH,qBAAA,OAAA;EACa,WAAA8F;EACG,gBAAA3I,UAAWM,KAAIyG,SAAJ,YAAA,YAAXzD,KAAAA;EAFhB,UAAA;GAIE,qBAAA,OAAA;IAAe,WAAA;IAAf,UAAA,CACG3E,cACC,oBAAC,aAAD;KACY,WAAA;KACE,cAAAsG,KAAI5F;KACH,aAAA4F,KAAI5F;KACL,YAAA4F,KAAI3F;KACTD,OAAAA;KACQmJ,eAAAA;IAAY,CAAA,GAG/B,qBAAA,OAAA;KAAe,WAAA;KAAf,UAAA;MACGxI,WAAW,oBAAC,SAAD;OAAmB,WAAA;OAAiC,OAAAiF,KAAIjF;MAAQ,CAAA;MAC5E,oBAAA,QAAA;OAAgB,WAAA;OAAoC,aAAA;OAEjDuF,UAAAA,cAAc5F,SAAQqL,OAAQ/F,KAAItF,SAAUA,SAAQqL,IAA+C,IAAtCvD,eAAA,OAAsBxC,KAAIvF,MAAOA,KAAK;MAC/F,CAAA;MACN+I;KACG;IACF,CAAA,CAAA;;GAENqC;GAqFChK,QACC,oBAAC,YAAD;IACO,MAAA;IACE,OAAAmE,KAAIhF;IACEa,aAAAA;IAEX,SAAAC,UACE,oBAAC,QAAD;KAAa,MAAA;KAAa,SAAA;KAAqBA,SAAAA;KAC5CkE,UAAAA,KAAI/E;IADA,CAAA,IADToD,KAAAA;GAIa,CAAA,IAIjB,CAAChD,KAAIyG,UAAL,CACC/G,YACAoC,SACC,oBAAC,YAAD;IACS,OAAAoF,WAAWvC,KAAInF,eAAgBmF,KAAIrF;IAC7B,aAAA4H,WAAWvC,KAAIlF,qBAAsBkF,KAAIpF;IAEpD,SAAAR,SACE,oBAAC,QAAD;KAAa,MAAA;KAAa,SAAA;KAAqB,eAAMmJ,aAAa,EAAE;KACjEvD,UAAAA,KAAI3F;IADA,CAAA,IADTgE,KAAAA;GAIa,CAAA;GAMpByH;EAgBG;;AAAA;AApQH,SAAArC,OAAAxF,IAAA;CAmG2B,MAAA,EAAA3E,KAAA0M,UAAA/H;CAAO,OAAK3E;AAAG;AAnG1C,SAAA2J,OAAAhF,IAAA;CAoF2B,MAAA,EAAA/E,IAAA+M,SAAAhI;CAAM,OAAK/E;AAAE;AApFxC,SAAAiI,OAAA+E,UAAA;CAAA,OAqDWzH,SAAM/E,eAAgB+E,SAAMpF,aAAcgF,KAAAA,KAAaI,SAAMjF,SAAU6E,KAAAA;AAAU;AArD5F,SAAAqC,MAAAjC,QAAA;CAAA,OA8C4CA,OAAMhF,aAAcgF,OAAMpF,aAAcgF,KAAAA,KAAaI,OAAMjF,SAAU6E,KAAAA;AAAU"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type CalendarLabels, type CalendarProps } from '../calendar/Calendar';
|
|
3
|
+
import { type PickerFieldProps } from './PickerField';
|
|
4
|
+
export interface DatePickerLabels extends CalendarLabels {
|
|
5
|
+
today: string;
|
|
6
|
+
clear: string;
|
|
7
|
+
done: string;
|
|
8
|
+
time: string;
|
|
9
|
+
hours: string;
|
|
10
|
+
minutes: string;
|
|
11
|
+
seconds: string;
|
|
12
|
+
}
|
|
13
|
+
interface PickerProps extends PickerFieldProps, Pick<CalendarProps, 'isDateDisabled' | 'defaultMonth' | 'locale' | 'weekStartsOn'> {
|
|
14
|
+
value?: string | null;
|
|
15
|
+
defaultValue?: string | null;
|
|
16
|
+
/** Called with the new value, or `null` when cleared. */
|
|
17
|
+
onValueChange?: (value: string | null) => void;
|
|
18
|
+
/** Earliest allowed value. */
|
|
19
|
+
min?: string;
|
|
20
|
+
/** Latest allowed value. */
|
|
21
|
+
max?: string;
|
|
22
|
+
/** Submits the value with a form under this name. */
|
|
23
|
+
name?: string;
|
|
24
|
+
/** Show the Clear action. Defaults to `true` unless `required`. */
|
|
25
|
+
clearable?: boolean;
|
|
26
|
+
/** Custom display text for the selected value. */
|
|
27
|
+
formatValue?: (value: string) => React.ReactNode;
|
|
28
|
+
/** Override texts for localisation. */
|
|
29
|
+
labels?: Partial<DatePickerLabels>;
|
|
30
|
+
}
|
|
31
|
+
export interface DatePickerProps extends PickerProps {
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Date field with a calendar popover. Values are ISO dates (`"2026-03-09"`),
|
|
35
|
+
* the same format as `<input type="date">`, and are shown the same way.
|
|
36
|
+
*/
|
|
37
|
+
export declare function DatePicker(props: DatePickerProps): React.JSX.Element;
|
|
38
|
+
export interface DateTimePickerProps extends PickerProps {
|
|
39
|
+
/** Granularity of the time input in seconds (60 = minutes, 1 = seconds). */
|
|
40
|
+
step?: number;
|
|
41
|
+
/** Time used when a day is picked before any time is set. */
|
|
42
|
+
defaultTime?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Date and time field. Values are local ISO date-times (`"2026-03-09T14:30"`),
|
|
46
|
+
* the same format as `<input type="datetime-local">`, shown as `2026-03-09 14:30:00`
|
|
47
|
+
* on a 24-hour clock whatever the locale.
|
|
48
|
+
*/
|
|
49
|
+
export declare function DateTimePicker(props: DateTimePickerProps): React.JSX.Element;
|
|
50
|
+
export {};
|