@bolio-ui/core 3.0.0-alpha.1 → 3.0.0-alpha.2

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 (130) hide show
  1. package/dist/ContextMenu/index.js +3 -3
  2. package/dist/CssBaseline/index.js +2 -2
  3. package/dist/DateRangePicker/index.js +2 -2
  4. package/dist/ImageZoom/ImageZoom.d.ts +14 -0
  5. package/dist/ImageZoom/index.d.ts +3 -0
  6. package/dist/ImageZoom/index.js +17 -0
  7. package/dist/Menu/index.js +2 -2
  8. package/dist/Splitter/Splitter.d.ts +14 -0
  9. package/dist/Splitter/SplitterContext.d.ts +6 -0
  10. package/dist/Splitter/SplitterPanel.d.ts +13 -0
  11. package/dist/Splitter/index.d.ts +9 -0
  12. package/dist/Splitter/index.js +14 -0
  13. package/dist/Table/Table.d.ts +11 -1
  14. package/dist/Table/TableBody.d.ts +8 -2
  15. package/dist/Table/TableColumn.d.ts +2 -0
  16. package/dist/Table/TableHead.d.ts +9 -1
  17. package/dist/Table/TableSelectBox.d.ts +9 -0
  18. package/dist/Table/TableTypes.d.ts +8 -0
  19. package/dist/Table/index.d.ts +1 -1
  20. package/dist/Table/index.js +2 -2
  21. package/dist/Tour/Tour.d.ts +26 -0
  22. package/dist/Tour/index.d.ts +3 -0
  23. package/dist/Tour/index.js +23 -0
  24. package/dist/{chunk-AVO2SK2I.js → chunk-3S6G7WGK.js} +2 -2
  25. package/dist/{chunk-GYFW5NLU.js → chunk-BHQRX76X.js} +22 -4
  26. package/dist/chunk-FFEAKF3A.js +220 -0
  27. package/dist/{chunk-XLPOECCE.js → chunk-FL6J36B7.js} +3 -2
  28. package/dist/chunk-REWKR7S3.js +109 -0
  29. package/dist/chunk-STYC6O24.js +232 -0
  30. package/dist/{chunk-TDJGMSGT.js → chunk-WIIDIZYK.js} +3 -1
  31. package/dist/{chunk-TKICX5R6.js → chunk-ZNDN2VPZ.js} +225 -33
  32. package/dist/css/ButtonDropdown-ButtonDropdownItem.css +0 -1
  33. package/dist/css/ButtonGroup.css +0 -1
  34. package/dist/css/Calendar.css +0 -1
  35. package/dist/css/Carousel.css +0 -1
  36. package/dist/css/ColorInput.css +0 -2
  37. package/dist/css/ColorPicker.css +0 -3
  38. package/dist/css/Combobox.css +0 -2
  39. package/dist/css/DatePicker.css +0 -3
  40. package/dist/css/DateRangePicker.css +6 -3
  41. package/dist/css/Dropzone.css +0 -3
  42. package/dist/css/Fieldset-FieldsetGroup.css +0 -1
  43. package/dist/css/ImageZoom.css +93 -0
  44. package/dist/css/Input.css +0 -1
  45. package/dist/css/Menu-MenuList.css +0 -1
  46. package/dist/css/NumberInput.css +0 -1
  47. package/dist/css/PinInput.css +0 -1
  48. package/dist/css/Radio.css +0 -1
  49. package/dist/css/SegmentedControl.css +0 -1
  50. package/dist/css/Select-SelectDropdown.css +0 -1
  51. package/dist/css/Select-SelectOption.css +0 -1
  52. package/dist/css/Select.css +0 -1
  53. package/dist/css/Splitter.css +77 -0
  54. package/dist/css/Table-TableBody.css +10 -0
  55. package/dist/css/Table-TableHead.css +41 -0
  56. package/dist/css/Table-TableSelectBox.css +11 -0
  57. package/dist/css/TagsInput.css +0 -2
  58. package/dist/css/Textarea.css +0 -1
  59. package/dist/css/Toggle.css +0 -1
  60. package/dist/css/Tour.css +81 -0
  61. package/dist/css/use-toasts-toast-item.css +0 -1
  62. package/dist/index.d.ts +7 -1
  63. package/dist/index.js +31 -19
  64. package/dist/styles.css +3227 -2939
  65. package/esm/ContextMenu/index.js +2 -2
  66. package/esm/CssBaseline/index.js +1 -1
  67. package/esm/DateRangePicker/index.js +1 -1
  68. package/esm/ImageZoom/ImageZoom.d.ts +14 -0
  69. package/esm/ImageZoom/index.d.ts +3 -0
  70. package/esm/ImageZoom/index.js +17 -0
  71. package/esm/Menu/index.js +1 -1
  72. package/esm/Splitter/Splitter.d.ts +14 -0
  73. package/esm/Splitter/SplitterContext.d.ts +6 -0
  74. package/esm/Splitter/SplitterPanel.d.ts +13 -0
  75. package/esm/Splitter/index.d.ts +9 -0
  76. package/esm/Splitter/index.js +14 -0
  77. package/esm/Table/Table.d.ts +11 -1
  78. package/esm/Table/TableBody.d.ts +8 -2
  79. package/esm/Table/TableColumn.d.ts +2 -0
  80. package/esm/Table/TableHead.d.ts +9 -1
  81. package/esm/Table/TableSelectBox.d.ts +9 -0
  82. package/esm/Table/TableTypes.d.ts +8 -0
  83. package/esm/Table/index.d.ts +1 -1
  84. package/esm/Table/index.js +1 -1
  85. package/esm/Tour/Tour.d.ts +26 -0
  86. package/esm/Tour/index.d.ts +3 -0
  87. package/esm/Tour/index.js +23 -0
  88. package/esm/{chunk-AVO2SK2I.js → chunk-3S6G7WGK.js} +1 -1
  89. package/esm/{chunk-GYFW5NLU.js → chunk-BHQRX76X.js} +22 -4
  90. package/esm/chunk-FFEAKF3A.js +220 -0
  91. package/esm/{chunk-XLPOECCE.js → chunk-FL6J36B7.js} +3 -2
  92. package/esm/chunk-REWKR7S3.js +109 -0
  93. package/esm/chunk-STYC6O24.js +232 -0
  94. package/esm/{chunk-TDJGMSGT.js → chunk-WIIDIZYK.js} +3 -1
  95. package/esm/chunk-ZNDN2VPZ.js +543 -0
  96. package/esm/css/ButtonDropdown-ButtonDropdownItem.css +0 -1
  97. package/esm/css/ButtonGroup.css +0 -1
  98. package/esm/css/Calendar.css +0 -1
  99. package/esm/css/Carousel.css +0 -1
  100. package/esm/css/ColorInput.css +0 -2
  101. package/esm/css/ColorPicker.css +0 -3
  102. package/esm/css/Combobox.css +0 -2
  103. package/esm/css/DatePicker.css +0 -3
  104. package/esm/css/DateRangePicker.css +6 -3
  105. package/esm/css/Dropzone.css +0 -3
  106. package/esm/css/Fieldset-FieldsetGroup.css +0 -1
  107. package/esm/css/ImageZoom.css +93 -0
  108. package/esm/css/Input.css +0 -1
  109. package/esm/css/Menu-MenuList.css +0 -1
  110. package/esm/css/NumberInput.css +0 -1
  111. package/esm/css/PinInput.css +0 -1
  112. package/esm/css/Radio.css +0 -1
  113. package/esm/css/SegmentedControl.css +0 -1
  114. package/esm/css/Select-SelectDropdown.css +0 -1
  115. package/esm/css/Select-SelectOption.css +0 -1
  116. package/esm/css/Select.css +0 -1
  117. package/esm/css/Splitter.css +77 -0
  118. package/esm/css/Table-TableBody.css +10 -0
  119. package/esm/css/Table-TableHead.css +41 -0
  120. package/esm/css/Table-TableSelectBox.css +11 -0
  121. package/esm/css/TagsInput.css +0 -2
  122. package/esm/css/Textarea.css +0 -1
  123. package/esm/css/Toggle.css +0 -1
  124. package/esm/css/Tour.css +81 -0
  125. package/esm/css/use-toasts-toast-item.css +0 -1
  126. package/esm/index.d.ts +7 -1
  127. package/esm/index.js +36 -24
  128. package/esm/styles.css +2987 -2699
  129. package/package.json +1 -1
  130. package/esm/chunk-TKICX5R6.js +0 -351
@@ -35,47 +35,136 @@ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
35
35
  // core/Table/TableHead.tsx
36
36
 
37
37
 
38
+ // core/Table/TableSelectBox.tsx
39
+
40
+
41
+ // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/Table/TableSelectBox.module.css.bolio-css-module-source
42
+ var TableSelectBox_module_css_default = { "box": "TableSelectBox-module_box__UXj-E" };
43
+
44
+ // core/Table/TableSelectBox.tsx
45
+ var _jsxruntime = require('react/jsx-runtime');
46
+ function TableSelectBox({
47
+ checked,
48
+ indeterminate = false,
49
+ label,
50
+ onChange
51
+ }) {
52
+ const ref = _react.useRef.call(void 0, null);
53
+ _react.useEffect.call(void 0, () => {
54
+ if (ref.current) ref.current.indeterminate = indeterminate;
55
+ }, [indeterminate]);
56
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
57
+ "input",
58
+ {
59
+ ref,
60
+ type: "checkbox",
61
+ className: TableSelectBox_module_css_default.box,
62
+ checked,
63
+ "aria-label": label,
64
+ onChange,
65
+ onClick: (event) => event.stopPropagation()
66
+ }
67
+ );
68
+ }
69
+ var TableSelectBox_default = TableSelectBox;
70
+
38
71
  // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/Table/TableHead.module.css.bolio-css-module-source
39
- var TableHead_module_css_default = { "thead": "TableHead-module_thead__zMtMt", "th": "TableHead-module_th__GzIce", "theadBox": "TableHead-module_theadBox__6QaBJ" };
72
+ var TableHead_module_css_default = { "thead": "TableHead-module_thead__zMtMt", "th": "TableHead-module_th__GzIce", "theadBox": "TableHead-module_theadBox__6QaBJ", "selectCell": "TableHead-module_selectCell__JRdGg", "sortButton": "TableHead-module_sortButton__whwp3", "sortIcon": "TableHead-module_sortIcon__VsHqp", "sorted": "TableHead-module_sorted__-6XtK" };
40
73
 
41
74
  // core/Table/TableHead.tsx
42
- var _jsxruntime = require('react/jsx-runtime');
43
- var makeColgroup = (width, columns) => {
75
+
76
+ var SELECT_WIDTH = 40;
77
+ var makeColgroup = (fullWidth, columns, leading) => {
78
+ const width = fullWidth - leading;
44
79
  const unsetWidthCount = columns.filter((c) => !c.width).length;
45
80
  const customWidthTotal = columns.reduce((pre, current) => {
46
81
  return current.width ? pre + current.width : pre;
47
82
  }, 0);
48
83
  const averageWidth = (width - customWidthTotal) / unsetWidthCount;
49
84
  if (averageWidth <= 0) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "colgroup", {});
50
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "colgroup", { children: columns.map((column, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "col", { width: column.width || averageWidth }, `colgroup-${index}`)) });
85
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "colgroup", { children: [
86
+ leading > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "col", { width: leading }),
87
+ columns.map((column, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "col", { width: column.width || averageWidth }, `colgroup-${index}`))
88
+ ] });
51
89
  };
52
90
  var TableHead = (props) => {
53
91
  const theme = _chunkV5I4ORQQjs.use_theme_default.call(void 0, );
54
- const { columns, width } = props;
92
+ const { columns, width, sort, onSort, selection } = props;
55
93
  const isScalableWidth = _react.useMemo.call(void 0,
56
94
  () => columns.find((item) => !!item.width),
57
95
  [columns]
58
96
  );
59
97
  const colgroup = _react.useMemo.call(void 0, () => {
60
98
  if (!isScalableWidth) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "colgroup", {});
61
- return makeColgroup(width, columns);
62
- }, [isScalableWidth, width, columns]);
99
+ return makeColgroup(width, columns, selection ? SELECT_WIDTH : 0);
100
+ }, [isScalableWidth, width, columns, selection]);
63
101
  const theadStyle = {
64
102
  "--table-head-text-color": theme.palette.accents_5,
65
103
  "--table-head-bg": theme.palette.accents_1,
66
104
  "--table-head-border-color": theme.palette.border,
67
- "--table-head-radius": theme.layout.radius
105
+ "--table-head-radius": theme.layout.radius,
106
+ "--table-head-sorted-color": theme.palette.foreground,
107
+ "--table-head-focus-color": theme.palette.primary
68
108
  };
69
109
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
70
110
  colgroup,
71
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "thead", { className: TableHead_module_css_default.thead, style: theadStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "tr", { children: columns.map((column, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
72
- "th",
73
- {
74
- className: _chunk5KUROAEPjs.joinClasses.call(void 0, TableHead_module_css_default.th, column.className),
75
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: TableHead_module_css_default.theadBox, children: column.label })
76
- },
77
- `table-th-${String(column.prop)}-${index}`
78
- )) }) })
111
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "thead", { className: TableHead_module_css_default.thead, style: theadStyle, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "tr", { children: [
112
+ selection && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "th", { className: _chunk5KUROAEPjs.joinClasses.call(void 0, TableHead_module_css_default.th, TableHead_module_css_default.selectCell), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: TableHead_module_css_default.theadBox, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
113
+ TableSelectBox_default,
114
+ {
115
+ checked: selection.checked,
116
+ indeterminate: selection.indeterminate,
117
+ label: selection.label,
118
+ onChange: selection.onToggle
119
+ }
120
+ ) }) }),
121
+ columns.map((column, index) => {
122
+ const prop = String(column.prop);
123
+ const direction = sort && sort.prop === prop ? sort.direction : null;
124
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
125
+ "th",
126
+ {
127
+ className: _chunk5KUROAEPjs.joinClasses.call(void 0, TableHead_module_css_default.th, column.className),
128
+ "aria-sort": column.sortable ? direction === "asc" ? "ascending" : direction === "desc" ? "descending" : "none" : void 0,
129
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: TableHead_module_css_default.theadBox, children: column.sortable ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
130
+ "button",
131
+ {
132
+ type: "button",
133
+ className: TableHead_module_css_default.sortButton,
134
+ onClick: () => onSort && onSort(prop),
135
+ children: [
136
+ column.label,
137
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
138
+ "svg",
139
+ {
140
+ viewBox: "0 0 24 24",
141
+ width: "1em",
142
+ height: "1em",
143
+ fill: "none",
144
+ stroke: "currentColor",
145
+ strokeWidth: "2",
146
+ strokeLinecap: "round",
147
+ strokeLinejoin: "round",
148
+ className: _chunk5KUROAEPjs.joinClasses.call(void 0, TableHead_module_css_default.sortIcon, {
149
+ [TableHead_module_css_default.sorted]: direction !== null
150
+ }),
151
+ "aria-hidden": "true",
152
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
153
+ "path",
154
+ {
155
+ d: direction === "asc" ? "M12 19V5M5 12l7-7 7 7" : direction === "desc" ? "M12 5v14M19 12l-7 7-7-7" : "M8 9l4-4 4 4M8 15l4 4 4-4"
156
+ }
157
+ )
158
+ }
159
+ )
160
+ ]
161
+ }
162
+ ) : column.label })
163
+ },
164
+ `table-th-${prop}-${index}`
165
+ );
166
+ })
167
+ ] }) })
79
168
  ] });
80
169
  };
81
170
  TableHead.displayName = "BolioUITableHead";
@@ -122,12 +211,14 @@ var TableContext = _react2.default.createContext(defaultContext);
122
211
  var useTableContext = () => _react2.default.useContext(TableContext);
123
212
 
124
213
  // css-module-source:/Users/brunnoandrade/Desktop/BolioUI/bolio-ui/core/Table/TableBody.module.css.bolio-css-module-source
125
- var TableBody_module_css_default = { "tr": "TableBody-module_tr__lTn-M", "hover": "TableBody-module_hover__AjVlq" };
214
+ var TableBody_module_css_default = { "tr": "TableBody-module_tr__lTn-M", "hover": "TableBody-module_hover__AjVlq", "selected": "TableBody-module_selected__7adtQ", "selectCell": "TableBody-module_selectCell__S8ZZn" };
126
215
 
127
216
  // core/Table/TableBody.tsx
128
217
 
129
218
  var TableBody = ({
130
219
  data,
220
+ keys,
221
+ selection,
131
222
  hover,
132
223
  emptyText,
133
224
  onRow,
@@ -142,30 +233,42 @@ var TableBody = ({
142
233
  const trStyle = {
143
234
  "--table-body-hover-bg": theme.palette.accents_1,
144
235
  "--table-body-border-color": theme.palette.border,
145
- "--table-body-text-color": theme.palette.accents_6
236
+ "--table-body-text-color": theme.palette.accents_6,
237
+ "--table-body-selected-bg": `color-mix(in srgb, ${theme.palette.primary} 10%, transparent)`
146
238
  };
147
239
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "tbody", { children: data.map((row, index) => {
148
240
  const className = rowClassName(row, index);
149
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
241
+ const selected = Boolean(selection == null ? void 0 : selection.keys.includes(keys[index]));
242
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
150
243
  "tr",
151
244
  {
152
245
  className: _chunk5KUROAEPjs.joinClasses.call(void 0,
153
246
  TableBody_module_css_default.tr,
154
- { [TableBody_module_css_default.hover]: hover },
247
+ { [TableBody_module_css_default.hover]: hover, [TableBody_module_css_default.selected]: selected },
155
248
  className
156
249
  ),
157
250
  onClick: () => rowClickHandler(row, index),
158
251
  style: trStyle,
159
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
160
- TableCell_default,
161
- {
162
- columns,
163
- row,
164
- rowIndex: index,
165
- emptyText,
166
- onCellClick: onCell
167
- }
168
- )
252
+ children: [
253
+ selection && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "td", { className: TableBody_module_css_default.selectCell, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "cell", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
254
+ TableSelectBox_default,
255
+ {
256
+ checked: selected,
257
+ label: selection.label,
258
+ onChange: () => selection.onToggle(keys[index])
259
+ }
260
+ ) }) }),
261
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
262
+ TableCell_default,
263
+ {
264
+ columns,
265
+ row,
266
+ rowIndex: index,
267
+ emptyText,
268
+ onCellClick: onCell
269
+ }
270
+ )
271
+ ]
169
272
  },
170
273
  `tbody-row-${index}`
171
274
  );
@@ -185,6 +288,8 @@ var TableColumn = (columnProps) => {
185
288
  label,
186
289
  width,
187
290
  className = "",
291
+ sortable = false,
292
+ sorter,
188
293
  render: renderHandler = defaultRender
189
294
  } = columnProps;
190
295
  const { updateColumn } = useTableContext();
@@ -198,9 +303,21 @@ var TableColumn = (columnProps) => {
198
303
  prop: safeProp,
199
304
  width,
200
305
  className,
306
+ sortable,
307
+ sorter,
201
308
  renderHandler
202
309
  });
203
- }, [children, label, safeProp, width, className, renderHandler, updateColumn]);
310
+ }, [
311
+ children,
312
+ label,
313
+ safeProp,
314
+ width,
315
+ className,
316
+ sortable,
317
+ sorter,
318
+ renderHandler,
319
+ updateColumn
320
+ ]);
204
321
  return null;
205
322
  };
206
323
  TableColumn.displayName = "BolioUITableColumn";
@@ -211,6 +328,11 @@ var Table_module_css_default = { "table": "Table-module_table__H9ZOx", "footer":
211
328
 
212
329
  // core/Table/Table.tsx
213
330
 
331
+ var noKeys = [];
332
+ var compareValues = (a, b) => typeof a === "number" && typeof b === "number" ? a - b : String(a != null ? a : "").localeCompare(String(b != null ? b : ""), void 0, {
333
+ numeric: true,
334
+ sensitivity: "base"
335
+ });
214
336
  var defaultProps = {
215
337
  hover: true,
216
338
  initialData: [],
@@ -232,9 +354,20 @@ function TableComponent(tableProps, forwardedRef) {
232
354
  pagination,
233
355
  className = defaultProps.className,
234
356
  rowClassName = defaultProps.rowClassName,
357
+ sort: customSort,
358
+ initialSort = null,
359
+ onSortChange,
360
+ selectable = false,
361
+ rowKey,
362
+ selectedKeys: customKeys,
363
+ initialSelectedKeys = noKeys,
364
+ onSelectionChange,
365
+ selectRowLabel = "Select row",
366
+ selectAllLabel = "Select all rows",
235
367
  style,
236
368
  ...props
237
369
  } = tableProps;
370
+ const theme = _chunkV5I4ORQQjs.use_theme_default.call(void 0, );
238
371
  const { SCALES } = _chunkMAICNLTYjs.use_scale_default.call(void 0, );
239
372
  const tableRef = _react.useRef.call(void 0, null);
240
373
  _react.useImperativeHandle.call(void 0, forwardedRef, () => tableRef.current);
@@ -266,12 +399,50 @@ function TableComponent(tableProps, forwardedRef) {
266
399
  setData(customData);
267
400
  }, [customData]);
268
401
  _chunkJJFOGZ6Vjs.use_resize_default.call(void 0, () => updateShape());
402
+ const [selfSort, setSelfSort] = _react.useState.call(void 0, initialSort);
403
+ const sort = customSort !== void 0 ? customSort : selfSort;
404
+ const [selfKeys, setSelfKeys] = _react.useState.call(void 0, initialSelectedKeys);
405
+ const selectedKeys = customKeys !== void 0 ? customKeys : selfKeys;
406
+ const keyOf = (row, index) => typeof rowKey === "function" ? rowKey(row) : rowKey !== void 0 ? row[rowKey] : index;
407
+ const sortedEntries = _react.useMemo.call(void 0, () => {
408
+ const entries = data.map((row, index) => ({ row, key: keyOf(row, index) }));
409
+ const column = sort && columns.find((item) => item.prop === sort.prop);
410
+ if (!sort || !column || (pagination == null ? void 0 : pagination.total) !== void 0) return entries;
411
+ const direction = sort.direction === "desc" ? -1 : 1;
412
+ const compare = column.sorter || ((a, b) => compareValues(a[column.prop], b[column.prop]));
413
+ return [...entries].sort((a, b) => direction * compare(a.row, b.row));
414
+ }, [data, sort, columns, pagination == null ? void 0 : pagination.total, rowKey]);
269
415
  const [selfPage, setSelfPage] = _react.useState.call(void 0, 1);
270
416
  const pageSize = pagination ? Math.max(1, pagination.pageSize) : 0;
271
417
  const totalRows = (_a = pagination == null ? void 0 : pagination.total) != null ? _a : data.length;
272
418
  const pageCount = pagination ? Math.ceil(totalRows / pageSize) : 0;
273
419
  const page = Math.min((_b = pagination == null ? void 0 : pagination.page) != null ? _b : selfPage, Math.max(pageCount, 1));
274
- const rows = pagination && pagination.total === void 0 ? data.slice((page - 1) * pageSize, page * pageSize) : data;
420
+ const pageEntries = pagination && pagination.total === void 0 ? sortedEntries.slice((page - 1) * pageSize, page * pageSize) : sortedEntries;
421
+ const rows = pageEntries.map((entry) => entry.row);
422
+ const pageKeys = pageEntries.map((entry) => entry.key);
423
+ const sortHandler = (prop) => {
424
+ const next = !sort || sort.prop !== prop ? { prop, direction: "asc" } : sort.direction === "asc" ? { prop, direction: "desc" } : null;
425
+ setSelfSort(next);
426
+ if (onSortChange) onSortChange(next);
427
+ };
428
+ const selectKeys = (next) => {
429
+ setSelfKeys(next);
430
+ if (onSelectionChange)
431
+ onSelectionChange(
432
+ next,
433
+ sortedEntries.filter((entry) => next.includes(entry.key)).map((entry) => entry.row)
434
+ );
435
+ };
436
+ const toggleKey = (key) => selectKeys(
437
+ selectedKeys.includes(key) ? selectedKeys.filter((item) => item !== key) : [...selectedKeys, key]
438
+ );
439
+ const inView = pageKeys.filter((key) => selectedKeys.includes(key)).length;
440
+ const toggleAll = () => selectKeys(
441
+ inView === pageKeys.length ? selectedKeys.filter((key) => !pageKeys.includes(key)) : [
442
+ ...selectedKeys,
443
+ ...pageKeys.filter((key) => !selectedKeys.includes(key))
444
+ ]
445
+ );
275
446
  const pageChangeHandler = (next) => {
276
447
  if (next === page) return;
277
448
  setSelfPage(next);
@@ -279,6 +450,7 @@ function TableComponent(tableProps, forwardedRef) {
279
450
  };
280
451
  const tableStyle = {
281
452
  "--table-font-size": SCALES.font(1),
453
+ "--table-select-accent": theme.palette.primary,
282
454
  "--table-width": SCALES.width(1, "100%"),
283
455
  "--table-height": SCALES.height(1, "auto"),
284
456
  "--table-padding-top": SCALES.pt(0),
@@ -306,11 +478,31 @@ function TableComponent(tableProps, forwardedRef) {
306
478
  ...props,
307
479
  style: tableStyle,
308
480
  children: [
309
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TableHead_default, { columns, width }),
481
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
482
+ TableHead_default,
483
+ {
484
+ columns,
485
+ width,
486
+ sort,
487
+ onSort: sortHandler,
488
+ selection: selectable ? {
489
+ checked: pageKeys.length > 0 && inView === pageKeys.length,
490
+ indeterminate: inView > 0 && inView < pageKeys.length,
491
+ label: selectAllLabel,
492
+ onToggle: toggleAll
493
+ } : void 0
494
+ }
495
+ ),
310
496
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
311
497
  TableBody_default,
312
498
  {
313
499
  data: rows,
500
+ keys: pageKeys,
501
+ selection: selectable ? {
502
+ keys: selectedKeys,
503
+ label: selectRowLabel,
504
+ onToggle: toggleKey
505
+ } : void 0,
314
506
  hover,
315
507
  emptyText,
316
508
  onRow,
@@ -2,7 +2,6 @@
2
2
  .ButtonDropdownItem-module_button__R-hYv {
3
3
  position: relative;
4
4
  -webkit-appearance: button;
5
- text-rendering: auto;
6
5
  display: inline-flex;
7
6
  flex: 1;
8
7
  justify-content: center;
@@ -5,7 +5,6 @@
5
5
  overflow: hidden;
6
6
  border: 1px solid var(--btn-group-border);
7
7
  border-radius: var(--btn-group-radius);
8
- background-clip: padding-box;
9
8
  }
10
9
 
11
10
  .ButtonGroup-module_vertical__ueNfm {
@@ -62,7 +62,6 @@
62
62
  border-radius: var(--calendar-radius);
63
63
  appearance: none;
64
64
  -webkit-appearance: none;
65
- background-clip: padding-box;
66
65
  }
67
66
 
68
67
  .Calendar-module_navButton__jmnwu {
@@ -64,7 +64,6 @@
64
64
  border-radius: 50%;
65
65
  appearance: none;
66
66
  -webkit-appearance: none;
67
- background-clip: padding-box;
68
67
  }
69
68
 
70
69
  .Carousel-module_control__SdAV-:hover:not(:disabled) {
@@ -22,7 +22,6 @@
22
22
  transition:
23
23
  border-color 0.15s ease,
24
24
  background-color 0.15s ease;
25
- background-clip: padding-box;
26
25
  }
27
26
 
28
27
  .ColorInput-module_field__JQwJJ:hover {
@@ -91,7 +90,6 @@
91
90
  border: 1px solid var(--colorinput-popup-border);
92
91
  border-radius: var(--colorinput-popup-radius);
93
92
  box-shadow: var(--colorinput-shadow);
94
- background-clip: padding-box;
95
93
  }
96
94
 
97
95
  }
@@ -82,7 +82,6 @@
82
82
  box-shadow: 0 0 0 1px rgb(0 0 0 / 40%);
83
83
  appearance: none;
84
84
  -webkit-appearance: none;
85
- background-clip: padding-box;
86
85
  }
87
86
 
88
87
  .ColorPicker-module_hue__VKHj-::-moz-range-thumb {
@@ -93,7 +92,6 @@
93
92
  border: 2px solid #fff;
94
93
  border-radius: 50%;
95
94
  box-shadow: 0 0 0 1px rgb(0 0 0 / 40%);
96
- background-clip: padding-box;
97
95
  }
98
96
 
99
97
  .ColorPicker-module_hue__VKHj-:focus-visible {
@@ -112,7 +110,6 @@
112
110
  border-radius: var(--picker-radius);
113
111
  background-color: var(--picker-bg);
114
112
  transition: border-color 0.15s ease;
115
- background-clip: padding-box;
116
113
  }
117
114
 
118
115
  .ColorPicker-module_field__v7-7F:hover {
@@ -26,7 +26,6 @@
26
26
  transition:
27
27
  border-color 0.15s ease,
28
28
  background-color 0.15s ease;
29
- background-clip: padding-box;
30
29
  }
31
30
 
32
31
  .Combobox-module_input__ti3bv::placeholder {
@@ -58,7 +57,6 @@
58
57
  border: 1px solid var(--combobox-border-color);
59
58
  border-radius: var(--combobox-popup-radius);
60
59
  box-shadow: var(--combobox-shadow);
61
- background-clip: padding-box;
62
60
  }
63
61
 
64
62
  .Combobox-module_list__2otmP {
@@ -26,7 +26,6 @@
26
26
  transition:
27
27
  border-color 0.15s ease,
28
28
  background-color 0.15s ease;
29
- background-clip: padding-box;
30
29
  }
31
30
 
32
31
  .DatePicker-module_input__e7dhN::placeholder {
@@ -62,7 +61,6 @@
62
61
  border-radius: var(--datepicker-radius);
63
62
  appearance: none;
64
63
  -webkit-appearance: none;
65
- background-clip: padding-box;
66
64
  }
67
65
 
68
66
  .DatePicker-module_toggle__I8ARg:hover:not(:disabled) {
@@ -89,7 +87,6 @@
89
87
  border: 1px solid var(--datepicker-border-color);
90
88
  border-radius: var(--datepicker-popup-radius);
91
89
  box-shadow: var(--datepicker-shadow);
92
- background-clip: padding-box;
93
90
  }
94
91
 
95
92
  }
@@ -24,7 +24,6 @@
24
24
  transition:
25
25
  border-color 0.15s ease,
26
26
  background-color 0.15s ease;
27
- background-clip: padding-box;
28
27
  }
29
28
 
30
29
  .DateRangePicker-module_field__4UZhH:hover {
@@ -78,7 +77,6 @@
78
77
  border-radius: var(--daterange-radius);
79
78
  appearance: none;
80
79
  -webkit-appearance: none;
81
- background-clip: padding-box;
82
80
  }
83
81
 
84
82
  .DateRangePicker-module_toggle__gNukh:hover:not(:disabled) {
@@ -104,7 +102,12 @@
104
102
  border: 1px solid var(--daterange-border-color);
105
103
  border-radius: var(--daterange-popup-radius);
106
104
  box-shadow: var(--daterange-shadow);
107
- background-clip: padding-box;
105
+ }
106
+
107
+ /* a field near the right edge: the popup grows to the left */
108
+ .DateRangePicker-module_alignEnd__DgOia {
109
+ right: 0;
110
+ left: auto;
108
111
  }
109
112
 
110
113
  }
@@ -33,7 +33,6 @@
33
33
  transition:
34
34
  border-color 0.2s ease,
35
35
  background-color 0.2s ease;
36
- background-clip: padding-box;
37
36
  }
38
37
 
39
38
  .Dropzone-module_dropzone__-6nFN:hover .Dropzone-module_content__Uafwo {
@@ -88,7 +87,6 @@
88
87
  background-color: var(--dropzone-tile-bg);
89
88
  border: 1px solid var(--dropzone-border);
90
89
  border-radius: var(--dropzone-radius);
91
- background-clip: padding-box;
92
90
  }
93
91
 
94
92
  .Dropzone-module_preview__pQ3gz {
@@ -133,7 +131,6 @@
133
131
  border-radius: 50%;
134
132
  appearance: none;
135
133
  -webkit-appearance: none;
136
- background-clip: padding-box;
137
134
  }
138
135
 
139
136
  .Dropzone-module_remove__pjfHy:hover:not(:disabled) {
@@ -35,7 +35,6 @@
35
35
  border: 1px solid var(--fieldset-group-border);
36
36
  text-decoration: none;
37
37
  outline: none;
38
- background-clip: padding-box;
39
38
  }
40
39
 
41
40
  .FieldsetGroup-module_button__kXAoU.FieldsetGroup-module_active__tJFHM {
@@ -0,0 +1,93 @@
1
+ @layer ImageZoom {
2
+ .ImageZoom-module_trigger__-42Bz {
3
+ display: inline-block;
4
+ max-width: 100%;
5
+ margin: 0;
6
+ padding: 0;
7
+ line-height: 0;
8
+ color: inherit;
9
+ cursor: zoom-in;
10
+ background: none;
11
+ border: 0;
12
+ border-radius: inherit;
13
+ appearance: none;
14
+ -webkit-appearance: none;
15
+ }
16
+
17
+ .ImageZoom-module_trigger__-42Bz:focus-visible {
18
+ outline: 2px solid currentColor;
19
+ outline-offset: 2px;
20
+ }
21
+
22
+ .ImageZoom-module_dialog__TjA9E {
23
+ box-sizing: border-box;
24
+ max-width: 100vw;
25
+ max-height: 100vh;
26
+ padding: 1rem;
27
+ overflow: visible;
28
+ color: #fff;
29
+ background: transparent;
30
+ border: 0;
31
+ }
32
+
33
+ .ImageZoom-module_dialog__TjA9E::backdrop {
34
+ background: rgb(0 0 0 / 85%);
35
+ }
36
+
37
+ /* the page behind does not scroll while it is open */
38
+ body:has(.ImageZoom-module_dialog__TjA9E[open]) {
39
+ overflow: hidden;
40
+ }
41
+
42
+ .ImageZoom-module_figure__YIBq1 {
43
+ display: flex;
44
+ flex-direction: column;
45
+ align-items: center;
46
+ gap: 0.75rem;
47
+ margin: 0;
48
+ }
49
+
50
+ .ImageZoom-module_zoomed__7gfCP {
51
+ display: block;
52
+ max-width: calc(100vw - 2rem);
53
+ max-height: calc(100vh - 6rem);
54
+ object-fit: contain;
55
+ cursor: zoom-out;
56
+ border-radius: 8px;
57
+ }
58
+
59
+ .ImageZoom-module_caption__6SFRA {
60
+ font-size: 0.875rem;
61
+ text-align: center;
62
+ }
63
+
64
+ .ImageZoom-module_close__iEiwJ {
65
+ position: fixed;
66
+ top: 1rem;
67
+ right: 1rem;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ width: 2.5rem;
72
+ height: 2.5rem;
73
+ margin: 0;
74
+ padding: 0;
75
+ color: #fff;
76
+ cursor: pointer;
77
+ background: rgb(255 255 255 / 12%);
78
+ border: 0;
79
+ border-radius: 50%;
80
+ appearance: none;
81
+ -webkit-appearance: none;
82
+ }
83
+
84
+ .ImageZoom-module_close__iEiwJ:hover {
85
+ background: rgb(255 255 255 / 24%);
86
+ }
87
+
88
+ .ImageZoom-module_close__iEiwJ:focus-visible {
89
+ outline: 2px solid #fff;
90
+ outline-offset: 2px;
91
+ }
92
+
93
+ }
@@ -26,7 +26,6 @@
26
26
  transition:
27
27
  border 0.2s ease 0s,
28
28
  color 0.2s ease 0s;
29
- background-clip: padding-box;
30
29
  }
31
30
 
32
31
  .Input-module_inputWrapper__WpYTp:hover {
@@ -10,7 +10,6 @@
10
10
  border-radius: var(--menu-list-radius);
11
11
  box-shadow: var(--menu-list-shadow);
12
12
  outline: none;
13
- background-clip: padding-box;
14
13
  }
15
14
 
16
15
  .MenuList-module_sub__Bjn8e {
@@ -13,7 +13,6 @@
13
13
  border-radius: var(--input-radius);
14
14
  background-color: var(--input-bg);
15
15
  transition: border 0.2s ease;
16
- background-clip: padding-box;
17
16
  }
18
17
 
19
18
  .NumberInput-module_numberInput__hOY3x:hover {