@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.
Files changed (174) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +161 -2
  3. package/dist/components/accordion/Accordion.d.ts +17 -0
  4. package/dist/components/accordion/Accordion.js +204 -0
  5. package/dist/components/accordion/Accordion.js.map +1 -0
  6. package/dist/components/alert/Alert.d.ts +18 -0
  7. package/dist/components/alert/Alert.js +164 -0
  8. package/dist/components/alert/Alert.js.map +1 -0
  9. package/dist/components/app-shell/AppShell.d.ts +97 -0
  10. package/dist/components/app-shell/AppShell.js +689 -0
  11. package/dist/components/app-shell/AppShell.js.map +1 -0
  12. package/dist/components/avatar/Avatar.d.ts +21 -0
  13. package/dist/components/avatar/Avatar.js +190 -0
  14. package/dist/components/avatar/Avatar.js.map +1 -0
  15. package/dist/components/badge/Badge.d.ts +16 -0
  16. package/dist/components/badge/Badge.js +94 -0
  17. package/dist/components/badge/Badge.js.map +1 -0
  18. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
  19. package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
  20. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  21. package/dist/components/button/Button.d.ts +23 -0
  22. package/dist/components/button/Button.js +159 -0
  23. package/dist/components/button/Button.js.map +1 -0
  24. package/dist/components/calendar/Calendar.d.ts +59 -0
  25. package/dist/components/calendar/Calendar.js +709 -0
  26. package/dist/components/calendar/Calendar.js.map +1 -0
  27. package/dist/components/calendar/date-utils.d.ts +32 -0
  28. package/dist/components/calendar/date-utils.js +112 -0
  29. package/dist/components/calendar/date-utils.js.map +1 -0
  30. package/dist/components/card/Card.d.ts +42 -0
  31. package/dist/components/card/Card.js +82 -0
  32. package/dist/components/card/Card.js.map +1 -0
  33. package/dist/components/choice/Choice.d.ts +32 -0
  34. package/dist/components/choice/Choice.js +371 -0
  35. package/dist/components/choice/Choice.js.map +1 -0
  36. package/dist/components/collapsible/Collapsible.d.ts +15 -0
  37. package/dist/components/collapsible/Collapsible.js +155 -0
  38. package/dist/components/collapsible/Collapsible.js.map +1 -0
  39. package/dist/components/combobox/Combobox.d.ts +68 -0
  40. package/dist/components/combobox/Combobox.js +752 -0
  41. package/dist/components/combobox/Combobox.js.map +1 -0
  42. package/dist/components/command-palette/CommandPalette.d.ts +52 -0
  43. package/dist/components/command-palette/CommandPalette.js +328 -0
  44. package/dist/components/command-palette/CommandPalette.js.map +1 -0
  45. package/dist/components/data-table/DataTable.d.ts +111 -0
  46. package/dist/components/data-table/DataTable.js +444 -0
  47. package/dist/components/data-table/DataTable.js.map +1 -0
  48. package/dist/components/date-picker/DatePicker.d.ts +50 -0
  49. package/dist/components/date-picker/DatePicker.js +485 -0
  50. package/dist/components/date-picker/DatePicker.js.map +1 -0
  51. package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
  52. package/dist/components/date-picker/DateRangePicker.js +339 -0
  53. package/dist/components/date-picker/DateRangePicker.js.map +1 -0
  54. package/dist/components/date-picker/PickerField.d.ts +38 -0
  55. package/dist/components/date-picker/PickerField.js +238 -0
  56. package/dist/components/date-picker/PickerField.js.map +1 -0
  57. package/dist/components/dialog/Dialog.d.ts +70 -0
  58. package/dist/components/dialog/Dialog.js +354 -0
  59. package/dist/components/dialog/Dialog.js.map +1 -0
  60. package/dist/components/drawer/Drawer.d.ts +39 -0
  61. package/dist/components/drawer/Drawer.js +225 -0
  62. package/dist/components/drawer/Drawer.js.map +1 -0
  63. package/dist/components/empty-state/EmptyState.d.ts +12 -0
  64. package/dist/components/empty-state/EmptyState.js +116 -0
  65. package/dist/components/empty-state/EmptyState.js.map +1 -0
  66. package/dist/components/field/Field.d.ts +36 -0
  67. package/dist/components/field/Field.js +337 -0
  68. package/dist/components/field/Field.js.map +1 -0
  69. package/dist/components/file-upload/FileUpload.d.ts +91 -0
  70. package/dist/components/file-upload/FileUpload.js +714 -0
  71. package/dist/components/file-upload/FileUpload.js.map +1 -0
  72. package/dist/components/input/Input.d.ts +49 -0
  73. package/dist/components/input/Input.js +538 -0
  74. package/dist/components/input/Input.js.map +1 -0
  75. package/dist/components/link/Link.d.ts +17 -0
  76. package/dist/components/link/Link.js +91 -0
  77. package/dist/components/link/Link.js.map +1 -0
  78. package/dist/components/menu/Menu.d.ts +79 -0
  79. package/dist/components/menu/Menu.js +615 -0
  80. package/dist/components/menu/Menu.js.map +1 -0
  81. package/dist/components/number-field/NumberField.d.ts +16 -0
  82. package/dist/components/number-field/NumberField.js +188 -0
  83. package/dist/components/number-field/NumberField.js.map +1 -0
  84. package/dist/components/pagination/Pagination.d.ts +34 -0
  85. package/dist/components/pagination/Pagination.js +244 -0
  86. package/dist/components/pagination/Pagination.js.map +1 -0
  87. package/dist/components/popover/Popover.d.ts +22 -0
  88. package/dist/components/popover/Popover.js +186 -0
  89. package/dist/components/popover/Popover.js.map +1 -0
  90. package/dist/components/preview-card/PreviewCard.d.ts +20 -0
  91. package/dist/components/preview-card/PreviewCard.js +114 -0
  92. package/dist/components/preview-card/PreviewCard.js.map +1 -0
  93. package/dist/components/progress/Progress.d.ts +20 -0
  94. package/dist/components/progress/Progress.js +169 -0
  95. package/dist/components/progress/Progress.js.map +1 -0
  96. package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
  97. package/dist/components/scroll-area/ScrollArea.js +112 -0
  98. package/dist/components/scroll-area/ScrollArea.js.map +1 -0
  99. package/dist/components/search-input/SearchInput.d.ts +14 -0
  100. package/dist/components/search-input/SearchInput.js +114 -0
  101. package/dist/components/search-input/SearchInput.js.map +1 -0
  102. package/dist/components/select/Select.d.ts +66 -0
  103. package/dist/components/select/Select.js +601 -0
  104. package/dist/components/select/Select.js.map +1 -0
  105. package/dist/components/separator/Separator.d.ts +4 -0
  106. package/dist/components/separator/Separator.js +46 -0
  107. package/dist/components/separator/Separator.js.map +1 -0
  108. package/dist/components/skeleton/Skeleton.d.ts +16 -0
  109. package/dist/components/skeleton/Skeleton.js +135 -0
  110. package/dist/components/skeleton/Skeleton.js.map +1 -0
  111. package/dist/components/slider/Slider.d.ts +11 -0
  112. package/dist/components/slider/Slider.js +107 -0
  113. package/dist/components/slider/Slider.js.map +1 -0
  114. package/dist/components/spinner/Spinner.d.ts +9 -0
  115. package/dist/components/spinner/Spinner.js +78 -0
  116. package/dist/components/spinner/Spinner.js.map +1 -0
  117. package/dist/components/stack/Stack.d.ts +23 -0
  118. package/dist/components/stack/Stack.js +79 -0
  119. package/dist/components/stack/Stack.js.map +1 -0
  120. package/dist/components/stat-card/StatCard.d.ts +22 -0
  121. package/dist/components/stat-card/StatCard.js +153 -0
  122. package/dist/components/stat-card/StatCard.js.map +1 -0
  123. package/dist/components/stepper/Stepper.d.ts +30 -0
  124. package/dist/components/stepper/Stepper.js +131 -0
  125. package/dist/components/stepper/Stepper.js.map +1 -0
  126. package/dist/components/table/Table.d.ts +53 -0
  127. package/dist/components/table/Table.js +221 -0
  128. package/dist/components/table/Table.js.map +1 -0
  129. package/dist/components/tabs/Tabs.d.ts +19 -0
  130. package/dist/components/tabs/Tabs.js +183 -0
  131. package/dist/components/tabs/Tabs.js.map +1 -0
  132. package/dist/components/tag/Tag.d.ts +22 -0
  133. package/dist/components/tag/Tag.js +121 -0
  134. package/dist/components/tag/Tag.js.map +1 -0
  135. package/dist/components/toast/Toast.d.ts +34 -0
  136. package/dist/components/toast/Toast.js +187 -0
  137. package/dist/components/toast/Toast.js.map +1 -0
  138. package/dist/components/toggle/Toggle.d.ts +31 -0
  139. package/dist/components/toggle/Toggle.js +197 -0
  140. package/dist/components/toggle/Toggle.js.map +1 -0
  141. package/dist/components/toolbar/Toolbar.d.ts +21 -0
  142. package/dist/components/toolbar/Toolbar.js +239 -0
  143. package/dist/components/toolbar/Toolbar.js.map +1 -0
  144. package/dist/components/tooltip/Tooltip.d.ts +33 -0
  145. package/dist/components/tooltip/Tooltip.js +182 -0
  146. package/dist/components/tooltip/Tooltip.js.map +1 -0
  147. package/dist/components/typography/Typography.d.ts +32 -0
  148. package/dist/components/typography/Typography.js +183 -0
  149. package/dist/components/typography/Typography.js.map +1 -0
  150. package/dist/fonts.css +3 -0
  151. package/dist/icons/index.d.ts +125 -0
  152. package/dist/icons/index.js +174 -0
  153. package/dist/icons/index.js.map +1 -0
  154. package/dist/index.d.ts +53 -0
  155. package/dist/index.js +56 -0
  156. package/dist/opti-ui.css +5365 -0
  157. package/dist/theme/ThemeProvider.d.ts +22 -0
  158. package/dist/theme/ThemeProvider.js +115 -0
  159. package/dist/theme/ThemeProvider.js.map +1 -0
  160. package/dist/theme/index.d.ts +2 -0
  161. package/dist/utils/cx.d.ts +10 -0
  162. package/dist/utils/cx.js +18 -0
  163. package/dist/utils/cx.js.map +1 -0
  164. package/dist/utils/index.d.ts +2 -0
  165. package/dist/utils/portal.d.ts +8 -0
  166. package/dist/utils/portal.js +16 -0
  167. package/dist/utils/portal.js.map +1 -0
  168. package/dist/utils/primitive.d.ts +13 -0
  169. package/dist/utils/primitive.js +61 -0
  170. package/dist/utils/primitive.js.map +1 -0
  171. package/dist/utils/search.d.ts +4 -0
  172. package/dist/utils/search.js +15 -0
  173. package/dist/utils/search.js.map +1 -0
  174. 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":"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"}
@@ -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 {};