@vuu-ui/vuu-table 0.13.6 → 0.13.8

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 (278) hide show
  1. package/cjs/index.js +5236 -61
  2. package/cjs/index.js.map +1 -1
  3. package/esm/index.js +5205 -26
  4. package/esm/index.js.map +1 -1
  5. package/package.json +10 -10
  6. package/types/Table.d.ts +0 -1
  7. package/types/column-resizing/ColumnResizer.d.ts +6 -1
  8. package/types/column-resizing/useTableColumnResize.d.ts +3 -3
  9. package/types/header-cell/GroupHeaderCell.d.ts +2 -1
  10. package/types/header-cell/HeaderCell.d.ts +1 -1
  11. package/types/table-dom-utils.d.ts +1 -0
  12. package/types/table-header/TableHeader.d.ts +2 -2
  13. package/types/table-header/useTableHeader.d.ts +11 -7
  14. package/types/useTable.d.ts +2 -2
  15. package/cjs/CellFocusState.js +0 -45
  16. package/cjs/CellFocusState.js.map +0 -1
  17. package/cjs/Row.css.js +0 -6
  18. package/cjs/Row.css.js.map +0 -1
  19. package/cjs/Row.js +0 -151
  20. package/cjs/Row.js.map +0 -1
  21. package/cjs/Table.css.js +0 -6
  22. package/cjs/Table.css.js.map +0 -1
  23. package/cjs/Table.js +0 -433
  24. package/cjs/Table.js.map +0 -1
  25. package/cjs/VirtualColSpan.js +0 -19
  26. package/cjs/VirtualColSpan.js.map +0 -1
  27. package/cjs/bulk-edit/BulkEditDialog.js +0 -57
  28. package/cjs/bulk-edit/BulkEditDialog.js.map +0 -1
  29. package/cjs/bulk-edit/BulkEditPanel.css.js +0 -6
  30. package/cjs/bulk-edit/BulkEditPanel.css.js.map +0 -1
  31. package/cjs/bulk-edit/BulkEditPanel.js +0 -72
  32. package/cjs/bulk-edit/BulkEditPanel.js.map +0 -1
  33. package/cjs/bulk-edit/BulkEditRow.css.js +0 -6
  34. package/cjs/bulk-edit/BulkEditRow.css.js.map +0 -1
  35. package/cjs/bulk-edit/BulkEditRow.js +0 -81
  36. package/cjs/bulk-edit/BulkEditRow.js.map +0 -1
  37. package/cjs/bulk-edit/useBulkEditPanel.js +0 -101
  38. package/cjs/bulk-edit/useBulkEditPanel.js.map +0 -1
  39. package/cjs/bulk-edit/useBulkEditRow.js +0 -144
  40. package/cjs/bulk-edit/useBulkEditRow.js.map +0 -1
  41. package/cjs/cell-block/CellBlock.css.js +0 -6
  42. package/cjs/cell-block/CellBlock.css.js.map +0 -1
  43. package/cjs/cell-block/CellBlock.js +0 -45
  44. package/cjs/cell-block/CellBlock.js.map +0 -1
  45. package/cjs/cell-block/cellblock-utils.js +0 -125
  46. package/cjs/cell-block/cellblock-utils.js.map +0 -1
  47. package/cjs/cell-block/useCellBlockSelection.js +0 -254
  48. package/cjs/cell-block/useCellBlockSelection.js.map +0 -1
  49. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -6
  50. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  51. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +0 -68
  52. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  53. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -6
  54. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  55. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -33
  56. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  57. package/cjs/cell-renderers/input-cell/InputCell.css.js +0 -6
  58. package/cjs/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  59. package/cjs/cell-renderers/input-cell/InputCell.js +0 -52
  60. package/cjs/cell-renderers/input-cell/InputCell.js.map +0 -1
  61. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +0 -6
  62. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  63. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +0 -67
  64. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  65. package/cjs/column-header-pill/ColumnHeaderPill.css.js +0 -6
  66. package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  67. package/cjs/column-header-pill/ColumnHeaderPill.js +0 -53
  68. package/cjs/column-header-pill/ColumnHeaderPill.js.map +0 -1
  69. package/cjs/column-header-pill/GroupColumnPill.css.js +0 -6
  70. package/cjs/column-header-pill/GroupColumnPill.css.js.map +0 -1
  71. package/cjs/column-header-pill/GroupColumnPill.js +0 -29
  72. package/cjs/column-header-pill/GroupColumnPill.js.map +0 -1
  73. package/cjs/column-header-pill/SortIndicator.css.js +0 -6
  74. package/cjs/column-header-pill/SortIndicator.css.js.map +0 -1
  75. package/cjs/column-header-pill/SortIndicator.js +0 -27
  76. package/cjs/column-header-pill/SortIndicator.js.map +0 -1
  77. package/cjs/column-resizing/ColumnResizer.css.js +0 -6
  78. package/cjs/column-resizing/ColumnResizer.css.js.map +0 -1
  79. package/cjs/column-resizing/ColumnResizer.js +0 -72
  80. package/cjs/column-resizing/ColumnResizer.js.map +0 -1
  81. package/cjs/column-resizing/useTableColumnResize.js +0 -55
  82. package/cjs/column-resizing/useTableColumnResize.js.map +0 -1
  83. package/cjs/header-cell/GroupHeaderCell.css.js +0 -6
  84. package/cjs/header-cell/GroupHeaderCell.css.js.map +0 -1
  85. package/cjs/header-cell/GroupHeaderCell.js +0 -127
  86. package/cjs/header-cell/GroupHeaderCell.js.map +0 -1
  87. package/cjs/header-cell/HeaderCell.css.js +0 -6
  88. package/cjs/header-cell/HeaderCell.css.js.map +0 -1
  89. package/cjs/header-cell/HeaderCell.js +0 -107
  90. package/cjs/header-cell/HeaderCell.js.map +0 -1
  91. package/cjs/pagination/PaginationControl.css.js +0 -6
  92. package/cjs/pagination/PaginationControl.css.js.map +0 -1
  93. package/cjs/pagination/PaginationControl.js +0 -38
  94. package/cjs/pagination/PaginationControl.js.map +0 -1
  95. package/cjs/pagination/usePagination.js +0 -36
  96. package/cjs/pagination/usePagination.js.map +0 -1
  97. package/cjs/table-cell/TableCell.css.js +0 -6
  98. package/cjs/table-cell/TableCell.css.js.map +0 -1
  99. package/cjs/table-cell/TableCell.js +0 -95
  100. package/cjs/table-cell/TableCell.js.map +0 -1
  101. package/cjs/table-cell/TableGroupCell.css.js +0 -6
  102. package/cjs/table-cell/TableGroupCell.css.js.map +0 -1
  103. package/cjs/table-cell/TableGroupCell.js +0 -66
  104. package/cjs/table-cell/TableGroupCell.js.map +0 -1
  105. package/cjs/table-config.js +0 -35
  106. package/cjs/table-config.js.map +0 -1
  107. package/cjs/table-dom-utils.js +0 -198
  108. package/cjs/table-dom-utils.js.map +0 -1
  109. package/cjs/table-header/HeaderProvider.js +0 -18
  110. package/cjs/table-header/HeaderProvider.js.map +0 -1
  111. package/cjs/table-header/TableHeader.js +0 -154
  112. package/cjs/table-header/TableHeader.js.map +0 -1
  113. package/cjs/table-header/useTableHeader.js +0 -87
  114. package/cjs/table-header/useTableHeader.js.map +0 -1
  115. package/cjs/useCell.js +0 -28
  116. package/cjs/useCell.js.map +0 -1
  117. package/cjs/useCellEditing.js +0 -79
  118. package/cjs/useCellEditing.js.map +0 -1
  119. package/cjs/useCellFocus.js +0 -115
  120. package/cjs/useCellFocus.js.map +0 -1
  121. package/cjs/useControlledTableNavigation.js +0 -46
  122. package/cjs/useControlledTableNavigation.js.map +0 -1
  123. package/cjs/useDataSource.js +0 -146
  124. package/cjs/useDataSource.js.map +0 -1
  125. package/cjs/useEditableCell.js +0 -32
  126. package/cjs/useEditableCell.js.map +0 -1
  127. package/cjs/useHighlighting.js +0 -33
  128. package/cjs/useHighlighting.js.map +0 -1
  129. package/cjs/useKeyboardNavigation.js +0 -318
  130. package/cjs/useKeyboardNavigation.js.map +0 -1
  131. package/cjs/useMeasuredHeight.js +0 -41
  132. package/cjs/useMeasuredHeight.js.map +0 -1
  133. package/cjs/useRowClassNameGenerators.js +0 -34
  134. package/cjs/useRowClassNameGenerators.js.map +0 -1
  135. package/cjs/useSelection.js +0 -74
  136. package/cjs/useSelection.js.map +0 -1
  137. package/cjs/useTable.js +0 -714
  138. package/cjs/useTable.js.map +0 -1
  139. package/cjs/useTableContextMenu.js +0 -59
  140. package/cjs/useTableContextMenu.js.map +0 -1
  141. package/cjs/useTableModel.js +0 -383
  142. package/cjs/useTableModel.js.map +0 -1
  143. package/cjs/useTableScroll.js +0 -446
  144. package/cjs/useTableScroll.js.map +0 -1
  145. package/cjs/useTableViewport.js +0 -137
  146. package/cjs/useTableViewport.js.map +0 -1
  147. package/esm/CellFocusState.js +0 -43
  148. package/esm/CellFocusState.js.map +0 -1
  149. package/esm/Row.css.js +0 -4
  150. package/esm/Row.css.js.map +0 -1
  151. package/esm/Row.js +0 -148
  152. package/esm/Row.js.map +0 -1
  153. package/esm/Table.css.js +0 -4
  154. package/esm/Table.css.js.map +0 -1
  155. package/esm/Table.js +0 -431
  156. package/esm/Table.js.map +0 -1
  157. package/esm/VirtualColSpan.js +0 -17
  158. package/esm/VirtualColSpan.js.map +0 -1
  159. package/esm/bulk-edit/BulkEditDialog.js +0 -55
  160. package/esm/bulk-edit/BulkEditDialog.js.map +0 -1
  161. package/esm/bulk-edit/BulkEditPanel.css.js +0 -4
  162. package/esm/bulk-edit/BulkEditPanel.css.js.map +0 -1
  163. package/esm/bulk-edit/BulkEditPanel.js +0 -70
  164. package/esm/bulk-edit/BulkEditPanel.js.map +0 -1
  165. package/esm/bulk-edit/BulkEditRow.css.js +0 -4
  166. package/esm/bulk-edit/BulkEditRow.css.js.map +0 -1
  167. package/esm/bulk-edit/BulkEditRow.js +0 -79
  168. package/esm/bulk-edit/BulkEditRow.js.map +0 -1
  169. package/esm/bulk-edit/useBulkEditPanel.js +0 -99
  170. package/esm/bulk-edit/useBulkEditPanel.js.map +0 -1
  171. package/esm/bulk-edit/useBulkEditRow.js +0 -142
  172. package/esm/bulk-edit/useBulkEditRow.js.map +0 -1
  173. package/esm/cell-block/CellBlock.css.js +0 -4
  174. package/esm/cell-block/CellBlock.css.js.map +0 -1
  175. package/esm/cell-block/CellBlock.js +0 -43
  176. package/esm/cell-block/CellBlock.js.map +0 -1
  177. package/esm/cell-block/cellblock-utils.js +0 -116
  178. package/esm/cell-block/cellblock-utils.js.map +0 -1
  179. package/esm/cell-block/useCellBlockSelection.js +0 -252
  180. package/esm/cell-block/useCellBlockSelection.js.map +0 -1
  181. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -4
  182. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  183. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +0 -66
  184. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  185. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -4
  186. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  187. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -31
  188. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  189. package/esm/cell-renderers/input-cell/InputCell.css.js +0 -4
  190. package/esm/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  191. package/esm/cell-renderers/input-cell/InputCell.js +0 -50
  192. package/esm/cell-renderers/input-cell/InputCell.js.map +0 -1
  193. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +0 -4
  194. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  195. package/esm/cell-renderers/toggle-cell/ToggleCell.js +0 -65
  196. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  197. package/esm/column-header-pill/ColumnHeaderPill.css.js +0 -4
  198. package/esm/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  199. package/esm/column-header-pill/ColumnHeaderPill.js +0 -51
  200. package/esm/column-header-pill/ColumnHeaderPill.js.map +0 -1
  201. package/esm/column-header-pill/GroupColumnPill.css.js +0 -4
  202. package/esm/column-header-pill/GroupColumnPill.css.js.map +0 -1
  203. package/esm/column-header-pill/GroupColumnPill.js +0 -27
  204. package/esm/column-header-pill/GroupColumnPill.js.map +0 -1
  205. package/esm/column-header-pill/SortIndicator.css.js +0 -4
  206. package/esm/column-header-pill/SortIndicator.css.js.map +0 -1
  207. package/esm/column-header-pill/SortIndicator.js +0 -25
  208. package/esm/column-header-pill/SortIndicator.js.map +0 -1
  209. package/esm/column-resizing/ColumnResizer.css.js +0 -4
  210. package/esm/column-resizing/ColumnResizer.css.js.map +0 -1
  211. package/esm/column-resizing/ColumnResizer.js +0 -70
  212. package/esm/column-resizing/ColumnResizer.js.map +0 -1
  213. package/esm/column-resizing/useTableColumnResize.js +0 -53
  214. package/esm/column-resizing/useTableColumnResize.js.map +0 -1
  215. package/esm/header-cell/GroupHeaderCell.css.js +0 -4
  216. package/esm/header-cell/GroupHeaderCell.css.js.map +0 -1
  217. package/esm/header-cell/GroupHeaderCell.js +0 -125
  218. package/esm/header-cell/GroupHeaderCell.js.map +0 -1
  219. package/esm/header-cell/HeaderCell.css.js +0 -4
  220. package/esm/header-cell/HeaderCell.css.js.map +0 -1
  221. package/esm/header-cell/HeaderCell.js +0 -105
  222. package/esm/header-cell/HeaderCell.js.map +0 -1
  223. package/esm/pagination/PaginationControl.css.js +0 -4
  224. package/esm/pagination/PaginationControl.css.js.map +0 -1
  225. package/esm/pagination/PaginationControl.js +0 -36
  226. package/esm/pagination/PaginationControl.js.map +0 -1
  227. package/esm/pagination/usePagination.js +0 -34
  228. package/esm/pagination/usePagination.js.map +0 -1
  229. package/esm/table-cell/TableCell.css.js +0 -4
  230. package/esm/table-cell/TableCell.css.js.map +0 -1
  231. package/esm/table-cell/TableCell.js +0 -93
  232. package/esm/table-cell/TableCell.js.map +0 -1
  233. package/esm/table-cell/TableGroupCell.css.js +0 -4
  234. package/esm/table-cell/TableGroupCell.css.js.map +0 -1
  235. package/esm/table-cell/TableGroupCell.js +0 -64
  236. package/esm/table-cell/TableGroupCell.js.map +0 -1
  237. package/esm/table-config.js +0 -33
  238. package/esm/table-config.js.map +0 -1
  239. package/esm/table-dom-utils.js +0 -181
  240. package/esm/table-dom-utils.js.map +0 -1
  241. package/esm/table-header/HeaderProvider.js +0 -15
  242. package/esm/table-header/HeaderProvider.js.map +0 -1
  243. package/esm/table-header/TableHeader.js +0 -152
  244. package/esm/table-header/TableHeader.js.map +0 -1
  245. package/esm/table-header/useTableHeader.js +0 -85
  246. package/esm/table-header/useTableHeader.js.map +0 -1
  247. package/esm/useCell.js +0 -26
  248. package/esm/useCell.js.map +0 -1
  249. package/esm/useCellEditing.js +0 -77
  250. package/esm/useCellEditing.js.map +0 -1
  251. package/esm/useCellFocus.js +0 -113
  252. package/esm/useCellFocus.js.map +0 -1
  253. package/esm/useControlledTableNavigation.js +0 -43
  254. package/esm/useControlledTableNavigation.js.map +0 -1
  255. package/esm/useDataSource.js +0 -144
  256. package/esm/useDataSource.js.map +0 -1
  257. package/esm/useEditableCell.js +0 -30
  258. package/esm/useEditableCell.js.map +0 -1
  259. package/esm/useHighlighting.js +0 -31
  260. package/esm/useHighlighting.js.map +0 -1
  261. package/esm/useKeyboardNavigation.js +0 -314
  262. package/esm/useKeyboardNavigation.js.map +0 -1
  263. package/esm/useMeasuredHeight.js +0 -39
  264. package/esm/useMeasuredHeight.js.map +0 -1
  265. package/esm/useRowClassNameGenerators.js +0 -32
  266. package/esm/useRowClassNameGenerators.js.map +0 -1
  267. package/esm/useSelection.js +0 -72
  268. package/esm/useSelection.js.map +0 -1
  269. package/esm/useTable.js +0 -712
  270. package/esm/useTable.js.map +0 -1
  271. package/esm/useTableContextMenu.js +0 -56
  272. package/esm/useTableContextMenu.js.map +0 -1
  273. package/esm/useTableModel.js +0 -381
  274. package/esm/useTableModel.js.map +0 -1
  275. package/esm/useTableScroll.js +0 -443
  276. package/esm/useTableScroll.js.map +0 -1
  277. package/esm/useTableViewport.js +0 -135
  278. package/esm/useTableViewport.js.map +0 -1
@@ -1,105 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { useComponentCssInjection } from '@salt-ds/styles';
3
- import { useWindow } from '@salt-ds/window';
4
- import { ColumnMenu } from '@vuu-ui/vuu-table-extras';
5
- import cx from 'clsx';
6
- import { useRef, useMemo, useCallback } from 'react';
7
- import { SortIndicator } from '../column-header-pill/SortIndicator.js';
8
- import { ColumnResizer } from '../column-resizing/ColumnResizer.js';
9
- import { useTableColumnResize } from '../column-resizing/useTableColumnResize.js';
10
- import { useCell } from '../useCell.js';
11
- import headerCellCss from './HeaderCell.css.js';
12
-
13
- const classBase = "vuuTableHeaderCell";
14
- const HeaderCell = ({
15
- className: classNameProp,
16
- column,
17
- onClick,
18
- onResize,
19
- showColumnHeaderMenus = true,
20
- ...htmlAttributes
21
- }) => {
22
- const targetWindow = useWindow();
23
- useComponentCssInjection({
24
- testId: "vuu-header-cell",
25
- css: headerCellCss,
26
- window: targetWindow
27
- });
28
- const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;
29
- const rootRef = useRef(null);
30
- const { isResizing, ...resizeProps } = useTableColumnResize({
31
- column,
32
- onResize,
33
- rootRef
34
- });
35
- const headerItems = useMemo(() => {
36
- const sortIndicator = /* @__PURE__ */ jsx(SortIndicator, { column });
37
- const columnLabel = HeaderCellLabelRenderer ? /* @__PURE__ */ jsx(
38
- HeaderCellLabelRenderer,
39
- {
40
- className: `${classBase}-label`,
41
- column
42
- }
43
- ) : /* @__PURE__ */ jsx("div", { className: `${classBase}-label`, children: column.label ?? column.name });
44
- const columnContent = HeaderCellContentRenderer ? [/* @__PURE__ */ jsx(HeaderCellContentRenderer, { column }, "content")] : [];
45
- if (showColumnHeaderMenus) {
46
- const menuPermissions = showColumnHeaderMenus === true ? void 0 : showColumnHeaderMenus;
47
- const columnMenu = /* @__PURE__ */ jsx(ColumnMenu, { column, menuPermissions });
48
- if (column.align === "right") {
49
- return [sortIndicator, columnLabel, columnContent, columnMenu];
50
- } else {
51
- return [columnMenu, columnLabel, sortIndicator, columnContent];
52
- }
53
- } else {
54
- if (column.align === "right") {
55
- return [sortIndicator, columnLabel, columnContent];
56
- } else {
57
- return [columnLabel, sortIndicator, columnContent];
58
- }
59
- }
60
- }, [
61
- HeaderCellContentRenderer,
62
- HeaderCellLabelRenderer,
63
- column,
64
- showColumnHeaderMenus
65
- ]);
66
- const handleClick = useCallback(
67
- (evt) => {
68
- !isResizing && onClick?.(evt);
69
- },
70
- [isResizing, onClick]
71
- );
72
- const handleKeyDown = useCallback(
73
- (evt) => {
74
- if (evt.key === "Enter") {
75
- onClick?.(evt);
76
- }
77
- },
78
- [onClick]
79
- );
80
- const { className, style } = useCell(column, classBase, true);
81
- return /* @__PURE__ */ jsxs(
82
- "div",
83
- {
84
- ...htmlAttributes,
85
- "aria-colindex": column.ariaColIndex,
86
- "aria-label": `${column.label ?? column.name} column header`,
87
- className: cx(className, classNameProp, {
88
- [`${classBase}-resizing`]: isResizing,
89
- [`${classBase}-noMenu`]: showColumnHeaderMenus === false
90
- }),
91
- onClick: handleClick,
92
- onKeyDown: handleKeyDown,
93
- ref: rootRef,
94
- role: "columnheader",
95
- style,
96
- children: [
97
- ...headerItems,
98
- column.resizeable !== false ? /* @__PURE__ */ jsx(ColumnResizer, { ...resizeProps }) : null
99
- ]
100
- }
101
- );
102
- };
103
-
104
- export { HeaderCell };
105
- //# sourceMappingURL=HeaderCell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HeaderCell.js","sources":["../../src/header-cell/HeaderCell.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnMenu } from \"@vuu-ui/vuu-table-extras\";\nimport { HeaderCellProps } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport {\n KeyboardEventHandler,\n MouseEventHandler,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { SortIndicator } from \"../column-header-pill\";\nimport { ColumnResizer, useTableColumnResize } from \"../column-resizing\";\nimport { useCell } from \"../useCell\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst classBase = \"vuuTableHeaderCell\";\n\nexport const HeaderCell = ({\n className: classNameProp,\n column,\n onClick,\n onResize,\n showColumnHeaderMenus = true,\n ...htmlAttributes\n}: HeaderCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;\n const rootRef = useRef<HTMLDivElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column,\n onResize,\n rootRef,\n });\n\n const headerItems = useMemo(() => {\n const sortIndicator = <SortIndicator column={column} />;\n const columnLabel = HeaderCellLabelRenderer ? (\n <HeaderCellLabelRenderer\n className={`${classBase}-label`}\n column={column}\n />\n ) : (\n <div className={`${classBase}-label`}>{column.label ?? column.name}</div>\n );\n const columnContent = HeaderCellContentRenderer\n ? [<HeaderCellContentRenderer column={column} key=\"content\" />]\n : [];\n\n if (showColumnHeaderMenus) {\n const menuPermissions =\n showColumnHeaderMenus === true ? undefined : showColumnHeaderMenus;\n const columnMenu = (\n <ColumnMenu column={column} menuPermissions={menuPermissions} />\n );\n\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent, columnMenu];\n } else {\n return [columnMenu, columnLabel, sortIndicator, columnContent];\n }\n } else {\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent];\n } else {\n return [columnLabel, sortIndicator, columnContent];\n }\n }\n }, [\n HeaderCellContentRenderer,\n HeaderCellLabelRenderer,\n column,\n showColumnHeaderMenus,\n ]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLDivElement>>(\n (evt) => {\n !isResizing && onClick?.(evt);\n },\n [isResizing, onClick],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (evt) => {\n if (evt.key === \"Enter\") {\n onClick?.(evt);\n }\n },\n [onClick],\n );\n\n const { className, style } = useCell(column, classBase, true);\n\n return (\n <div\n {...htmlAttributes}\n aria-colindex={column.ariaColIndex}\n aria-label={`${column.label ?? column.name} column header`}\n className={cx(className, classNameProp, {\n [`${classBase}-resizing`]: isResizing,\n [`${classBase}-noMenu`]: showColumnHeaderMenus === false,\n })}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n ref={rootRef}\n role=\"columnheader\"\n style={style}\n >\n {...headerItems}\n {column.resizeable !== false ? <ColumnResizer {...resizeProps} /> : null}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- var paginationControlCss = ".vuuPaginationControl {\n align-items: center;\n display: flex;\n height: var(--vuuPaginationControl-height, auto);\n justify-content: flex-end;\n padding: 0 var(--salt-spacing-100);\n .saltButton {\n .saltIcon {\n display: block !important;\n }\n }\n}\n";
2
-
3
- export { paginationControlCss as default };
4
- //# sourceMappingURL=PaginationControl.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaginationControl.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,36 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { useComponentCssInjection } from '@salt-ds/styles';
3
- import { useWindow } from '@salt-ds/window';
4
- import { Pagination, GoToInput, Paginator } from '@salt-ds/core';
5
- import cx from 'clsx';
6
- import { usePagination } from './usePagination.js';
7
- import paginationControlCss from './PaginationControl.css.js';
8
- import { forwardRef } from 'react';
9
-
10
- const classBase = "vuuPaginationControl";
11
- const PaginationControl = forwardRef(function PaginationControl2({ className, dataSource, ...htmlAttributes }, forwardedRef) {
12
- const targetWindow = useWindow();
13
- useComponentCssInjection({
14
- testId: "vuu-table",
15
- css: paginationControlCss,
16
- window: targetWindow
17
- });
18
- const { onPageChange, pageCount } = usePagination({
19
- dataSource
20
- });
21
- return /* @__PURE__ */ jsx(
22
- "div",
23
- {
24
- ...htmlAttributes,
25
- className: cx(classBase, className),
26
- ref: forwardedRef,
27
- children: /* @__PURE__ */ jsxs(Pagination, { count: pageCount, onPageChange, children: [
28
- /* @__PURE__ */ jsx(GoToInput, {}),
29
- /* @__PURE__ */ jsx(Paginator, {})
30
- ] })
31
- }
32
- );
33
- });
34
-
35
- export { PaginationControl };
36
- //# sourceMappingURL=PaginationControl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaginationControl.js","sources":["../../src/pagination/PaginationControl.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { GoToInput, Pagination, Paginator } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { usePagination } from \"./usePagination\";\n\nimport paginationControlCss from \"./PaginationControl.css\";\nimport { HtmlHTMLAttributes, forwardRef } from \"react\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\n\nconst classBase = \"vuuPaginationControl\";\n\nexport interface PaginationControlProps\n extends HtmlHTMLAttributes<HTMLDivElement> {\n dataSource: DataSource;\n}\n\nexport const PaginationControl = forwardRef<\n HTMLDivElement,\n PaginationControlProps\n>(function PaginationControl(\n { className, dataSource, ...htmlAttributes },\n forwardedRef,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table\",\n css: paginationControlCss,\n window: targetWindow,\n });\n\n const { onPageChange, pageCount } = usePagination({\n dataSource,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n <Pagination count={pageCount} onPageChange={onPageChange}>\n <GoToInput />\n <Paginator />\n </Pagination>\n </div>\n );\n});\n"],"names":["PaginationControl"],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,sBAAA;AAOL,MAAA,iBAAA,GAAoB,UAG/B,CAAA,SAASA,kBACT,CAAA,EAAE,WAAW,UAAY,EAAA,GAAG,cAAe,EAAA,EAC3C,YACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,WAAA;AAAA,IACR,GAAK,EAAA,oBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,YAAA,EAAc,SAAU,EAAA,GAAI,aAAc,CAAA;AAAA,IAChD;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAK,EAAA,YAAA;AAAA,MAEL,QAAC,kBAAA,IAAA,CAAA,UAAA,EAAA,EAAW,KAAO,EAAA,SAAA,EAAW,YAC5B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAU,EAAA,EAAA,CAAA;AAAA,4BACV,SAAU,EAAA,EAAA;AAAA,OACb,EAAA;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
@@ -1,34 +0,0 @@
1
- import { useState, useMemo, useCallback } from 'react';
2
- import { Range } from '@vuu-ui/vuu-utils';
3
-
4
- const getPageCount = (dataSource) => {
5
- const { range, size } = dataSource;
6
- const pageSize = range.to - range.from;
7
- if (pageSize > 0) {
8
- return Math.ceil(size / pageSize);
9
- } else {
10
- return 0;
11
- }
12
- };
13
- const usePagination = ({ dataSource }) => {
14
- const [pageCount, setPageCount] = useState(getPageCount(dataSource));
15
- useMemo(() => {
16
- dataSource.on("page-count", (n) => setPageCount(n));
17
- }, [dataSource]);
18
- const handlePageChange = useCallback(
19
- (_evt, page) => {
20
- const { range } = dataSource;
21
- const pageSize = range.to - range.from;
22
- const firstRow = pageSize * (page - 1);
23
- dataSource.range = Range(firstRow, firstRow + pageSize);
24
- },
25
- [dataSource]
26
- );
27
- return {
28
- onPageChange: handlePageChange,
29
- pageCount
30
- };
31
- };
32
-
33
- export { usePagination };
34
- //# sourceMappingURL=usePagination.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePagination.js","sources":["../../src/pagination/usePagination.ts"],"sourcesContent":["import { SyntheticEvent, useCallback, useMemo, useState } from \"react\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { Range } from \"@vuu-ui/vuu-utils\";\n\nexport interface PaginationHookProps {\n dataSource: DataSource;\n}\n\nconst getPageCount = (dataSource: DataSource) => {\n const { range, size } = dataSource;\n const pageSize = range.to - range.from;\n if (pageSize > 0) {\n return Math.ceil(size / pageSize);\n } else {\n return 0;\n }\n};\n\nexport const usePagination = ({ dataSource }: PaginationHookProps) => {\n const [pageCount, setPageCount] = useState<number>(getPageCount(dataSource));\n\n useMemo(() => {\n dataSource.on(\"page-count\", (n: number) => setPageCount(n));\n }, [dataSource]);\n\n const handlePageChange = useCallback(\n (_evt: SyntheticEvent, page: number) => {\n const { range } = dataSource;\n const pageSize = range.to - range.from;\n const firstRow = pageSize * (page - 1);\n dataSource.range = Range(firstRow, firstRow + pageSize);\n },\n [dataSource],\n );\n\n return {\n onPageChange: handlePageChange,\n pageCount,\n };\n};\n"],"names":[],"mappings":";;;AAQA,MAAM,YAAA,GAAe,CAAC,UAA2B,KAAA;AAC/C,EAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,UAAA;AACxB,EAAM,MAAA,QAAA,GAAW,KAAM,CAAA,EAAA,GAAK,KAAM,CAAA,IAAA;AAClC,EAAA,IAAI,WAAW,CAAG,EAAA;AAChB,IAAO,OAAA,IAAA,CAAK,IAAK,CAAA,IAAA,GAAO,QAAQ,CAAA;AAAA,GAC3B,MAAA;AACL,IAAO,OAAA,CAAA;AAAA;AAEX,CAAA;AAEO,MAAM,aAAgB,GAAA,CAAC,EAAE,UAAA,EAAsC,KAAA;AACpE,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,IAAI,QAAiB,CAAA,YAAA,CAAa,UAAU,CAAC,CAAA;AAE3E,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAA,UAAA,CAAW,GAAG,YAAc,EAAA,CAAC,CAAc,KAAA,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,GAC5D,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,MAAsB,IAAiB,KAAA;AACtC,MAAM,MAAA,EAAE,OAAU,GAAA,UAAA;AAClB,MAAM,MAAA,QAAA,GAAW,KAAM,CAAA,EAAA,GAAK,KAAM,CAAA,IAAA;AAClC,MAAM,MAAA,QAAA,GAAW,YAAY,IAAO,GAAA,CAAA,CAAA;AACpC,MAAA,UAAA,CAAW,KAAQ,GAAA,KAAA,CAAM,QAAU,EAAA,QAAA,GAAW,QAAQ,CAAA;AAAA,KACxD;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAO,OAAA;AAAA,IACL,YAAc,EAAA,gBAAA;AAAA,IACd;AAAA,GACF;AACF;;;;"}
@@ -1,4 +0,0 @@
1
- var tableCellCss = ".vuuTableCell {\n border-right-color: var(--cell-borderColor);\n border-right-style: solid;\n border-right-width: 1px;\n /* unfortunately inline-flex doesn't play nice with text-overflow ellipsis */\n display: inline-block;\n white-space: nowrap;\n height: 100%;\n overflow: hidden;\n padding: var(--vuuTableCell-padding, 0 11px 0 12px);\n text-overflow: ellipsis;\n vertical-align: top;\n}\n\n.vuuTableCell-right {\n text-align: right;\n}\n\n.vuuTableCell-editable {\n align-items: center;\n display: inline-flex;\n text-overflow: unset;\n}\n\n.vuuTableCell:focus {\n outline: var(\n --vuuTableCell-outline,\n solid var(--salt-focused-outlineColor) 2px\n );\n outline-offset: -2px;\n /** This is to achieve a white background to outline dashes */\n box-shadow: inset 0 0 0 var(--cell-outline-width) white;\n border-bottom: none;\n}\n\n.vuuTableRow-selected .vuuTableCell:not(.vuuTableCell-editable):focus {\n outline: var(\n --vuuTableCell-outline,\n solid var(--salt-focused-outlineColor) 2px\n );\n\n &:has(.vuuCheckboxRowSelector) {\n outline: none;\n }\n}\n.vuuTableCell-editable:focus {\n outline: none;\n}\n";
2
-
3
- export { tableCellCss as default };
4
- //# sourceMappingURL=TableCell.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableCell.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,93 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { getTypedValue } from '@vuu-ui/vuu-utils';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { useState, useCallback } from 'react';
6
- import { useCell } from '../useCell.js';
7
- import { useHighlighting } from '../useHighlighting.js';
8
- import tableCellCss from './TableCell.css.js';
9
-
10
- const classBase = "vuuTableCell";
11
- const TableCell = ({
12
- column,
13
- columnMap,
14
- onClick,
15
- onDataEdited,
16
- row,
17
- searchPattern = ""
18
- }) => {
19
- const targetWindow = useWindow();
20
- useComponentCssInjection({
21
- testId: "vuu-table-cell",
22
- css: tableCellCss,
23
- window: targetWindow
24
- });
25
- const [hasError, setHasError] = useState(false);
26
- const { className, style } = useCell(column, classBase, false, hasError);
27
- const { ariaColIndex, CellRenderer, valueFormatter } = column;
28
- const dataIdx = columnMap[column.name];
29
- const handleDataItemEdited = useCallback(
30
- (editState, editPhase) => {
31
- if (editPhase === "commit") {
32
- const { serverDataType = "string" } = column;
33
- if (onDataEdited) {
34
- const typedValue = getTypedValue(
35
- String(editState.value),
36
- serverDataType,
37
- true
38
- );
39
- return onDataEdited({
40
- ...editState,
41
- row,
42
- columnName: column.name,
43
- value: typedValue
44
- });
45
- } else {
46
- throw Error(
47
- "TableCell onDataEdited prop not supplied for an editable cell"
48
- );
49
- }
50
- } else {
51
- setHasError(editState.isValid === false);
52
- onDataEdited({
53
- ...editState,
54
- row,
55
- columnName: column.name
56
- });
57
- return void 0;
58
- }
59
- },
60
- [column, onDataEdited, row]
61
- );
62
- const handleClick = useCallback(
63
- (evt) => {
64
- onClick?.(evt, column);
65
- },
66
- [column, onClick]
67
- );
68
- const value = valueFormatter(row[dataIdx]);
69
- const valueWithHighlighting = useHighlighting(value, searchPattern);
70
- return /* @__PURE__ */ jsx(
71
- "div",
72
- {
73
- "aria-colindex": ariaColIndex,
74
- className,
75
- onClick: onClick ? handleClick : void 0,
76
- role: "cell",
77
- style,
78
- children: CellRenderer ? /* @__PURE__ */ jsx(
79
- CellRenderer,
80
- {
81
- column,
82
- columnMap,
83
- onEdit: handleDataItemEdited,
84
- row,
85
- searchPattern
86
- }
87
- ) : valueWithHighlighting
88
- }
89
- );
90
- };
91
-
92
- export { TableCell };
93
- //# sourceMappingURL=TableCell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableCell.js","sources":["../../src/table-cell/TableCell.tsx"],"sourcesContent":["import type {\n DataItemEditHandler,\n TableCellProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getTypedValue } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { MouseEventHandler, useCallback, useState } from \"react\";\nimport { useCell } from \"../useCell\";\nimport { useHighlighting } from \"../useHighlighting\";\n\nimport tableCellCss from \"./TableCell.css\";\n\nconst classBase = \"vuuTableCell\";\n\nexport const TableCell = ({\n column,\n columnMap,\n onClick,\n onDataEdited,\n row,\n searchPattern = \"\",\n}: TableCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-cell\",\n css: tableCellCss,\n window: targetWindow,\n });\n\n const [hasError, setHasError] = useState(false);\n\n const { className, style } = useCell(column, classBase, false, hasError);\n const { ariaColIndex, CellRenderer, valueFormatter } = column;\n const dataIdx = columnMap[column.name];\n\n const handleDataItemEdited = useCallback<DataItemEditHandler>(\n (editState, editPhase) => {\n if (editPhase === \"commit\") {\n const { serverDataType = \"string\" } = column;\n if (onDataEdited) {\n const typedValue = getTypedValue(\n String(editState.value),\n serverDataType,\n true,\n );\n return onDataEdited({\n ...editState,\n row,\n columnName: column.name,\n value: typedValue,\n });\n } else {\n throw Error(\n \"TableCell onDataEdited prop not supplied for an editable cell\",\n );\n }\n } else {\n setHasError(editState.isValid === false);\n onDataEdited({\n ...editState,\n row,\n columnName: column.name,\n });\n return undefined;\n }\n },\n [column, onDataEdited, row],\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n onClick?.(evt, column);\n },\n [column, onClick],\n );\n\n const value = valueFormatter(row[dataIdx]);\n const valueWithHighlighting = useHighlighting(value, searchPattern);\n\n return (\n <div\n aria-colindex={ariaColIndex}\n className={className}\n onClick={onClick ? handleClick : undefined}\n role=\"cell\"\n style={style}\n >\n {CellRenderer ? (\n <CellRenderer\n column={column}\n columnMap={columnMap}\n onEdit={handleDataItemEdited}\n row={row}\n searchPattern={searchPattern}\n />\n ) : (\n valueWithHighlighting\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAaA,MAAM,SAAY,GAAA,cAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAgB,GAAA;AAClB,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAM,MAAA,EAAE,WAAW,KAAM,EAAA,GAAI,QAAQ,MAAQ,EAAA,SAAA,EAAW,OAAO,QAAQ,CAAA;AACvE,EAAA,MAAM,EAAE,YAAA,EAAc,YAAc,EAAA,cAAA,EAAmB,GAAA,MAAA;AACvD,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AAErC,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CAAC,WAAW,SAAc,KAAA;AACxB,MAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,QAAM,MAAA,EAAE,cAAiB,GAAA,QAAA,EAAa,GAAA,MAAA;AACtC,QAAA,IAAI,YAAc,EAAA;AAChB,UAAA,MAAM,UAAa,GAAA,aAAA;AAAA,YACjB,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,YACtB,cAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,OAAO,YAAa,CAAA;AAAA,YAClB,GAAG,SAAA;AAAA,YACH,GAAA;AAAA,YACA,YAAY,MAAO,CAAA,IAAA;AAAA,YACnB,KAAO,EAAA;AAAA,WACR,CAAA;AAAA,SACI,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ;AAAA,WACF;AAAA;AACF,OACK,MAAA;AACL,QAAY,WAAA,CAAA,SAAA,CAAU,YAAY,KAAK,CAAA;AACvC,QAAa,YAAA,CAAA;AAAA,UACX,GAAG,SAAA;AAAA,UACH,GAAA;AAAA,UACA,YAAY,MAAO,CAAA;AAAA,SACpB,CAAA;AACD,QAAO,OAAA,KAAA,CAAA;AAAA;AACT,KACF;AAAA,IACA,CAAC,MAAQ,EAAA,YAAA,EAAc,GAAG;AAAA,GAC5B;AAEA,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AACP,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,GAAI,CAAA,OAAO,CAAC,CAAA;AACzC,EAAM,MAAA,qBAAA,GAAwB,eAAgB,CAAA,KAAA,EAAO,aAAa,CAAA;AAElE,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,YAAA;AAAA,MACf,SAAA;AAAA,MACA,OAAA,EAAS,UAAU,WAAc,GAAA,KAAA,CAAA;AAAA,MACjC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MAEC,QACC,EAAA,YAAA,mBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAQ,EAAA,oBAAA;AAAA,UACR,GAAA;AAAA,UACA;AAAA;AAAA,OAGF,GAAA;AAAA;AAAA,GAEJ;AAEJ;;;;"}
@@ -1,4 +0,0 @@
1
- var tableGroupCellCss = ".vuuTableGroupCell.vuuTableCell {\n --group-cell-spacer-width: 20px;\n align-items: center;\n border-right-color: var(\n --vuuTableGroupCell-borderColor,\n var(--salt-separable-tertiary-borderColor)\n );\n border-right-style: solid;\n border-right-width: 1px;\n\n cursor: pointer;\n display: inline-flex;\n line-height: 16px;\n\n .vuuIcon {\n --vuu-icon-height: 20px;\n --vuu-icon-width: 20px;\n margin-right: var(--salt-spacing-100);\n min-width: 20px;\n }\n\n .vuuTableGroupCell-toggle {\n --vuu-icon-height: 16px;\n --vuu-icon-size: 7px;\n --vuu-icon-width: 8px;\n margin-right: 4px;\n transition: transform 0.25s;\n transform: var(--toggle-icon-transform);\n }\n\n .vuuTableGroupCell-label {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n[aria-level=\"2\"] {\n --indent: 1;\n}\n[aria-level=\"3\"] {\n --indent: 2;\n}\n[aria-level=\"4\"] {\n --indent: 3;\n}\n[aria-level=\"5\"] {\n --indent: 4;\n}\n[aria-level=\"6\"] {\n --indent: 5;\n}\n[aria-level=\"7\"] {\n --indent: 6;\n}\n[aria-level=\"8\"] {\n --indent: 7;\n}\n[aria-level=\"9\"] {\n --indent: 8;\n}\n[aria-level=\"10\"] {\n --indent: 9;\n}\n\n.vuuTableGroupCell-spacer {\n display: inline-block;\n min-width: calc(var(--indent, 0) * var(--group-cell-spacer-width));\n}\n\n.vuuTreeTable {\n .vuuTableGroupCell.vuuTableCell {\n border-right: none;\n } \n}";
2
-
3
- export { tableGroupCellCss as default };
4
- //# sourceMappingURL=TableGroupCell.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableGroupCell.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,64 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { ToggleIconButton, Icon } from '@vuu-ui/vuu-ui-controls';
3
- import { getGroupValue, getGroupIcon, metadataKeys } from '@vuu-ui/vuu-utils';
4
- import { useComponentCssInjection } from '@salt-ds/styles';
5
- import { useWindow } from '@salt-ds/window';
6
- import cx from 'clsx';
7
- import { useCallback } from 'react';
8
- import { useCell } from '../useCell.js';
9
- import tableCellCss from './TableCell.css.js';
10
- import tableGroupCellCss from './TableGroupCell.css.js';
11
- import { useHighlighting } from '../useHighlighting.js';
12
-
13
- const { COUNT, IS_EXPANDED, IS_LEAF } = metadataKeys;
14
- const classBase = "vuuTableGroupCell";
15
- const TableGroupCell = ({
16
- column,
17
- columnMap,
18
- onClick,
19
- row,
20
- searchPattern = ""
21
- }) => {
22
- const targetWindow = useWindow();
23
- useComponentCssInjection({
24
- testId: "vuu-table-cell",
25
- css: tableCellCss,
26
- window: targetWindow
27
- });
28
- useComponentCssInjection({
29
- testId: "vuu-table-group-cell",
30
- css: tableGroupCellCss,
31
- window: targetWindow
32
- });
33
- const { columns } = column;
34
- const value = getGroupValue(columns, row, columnMap);
35
- const valueWithHighlighting = useHighlighting(value || "", searchPattern);
36
- const icon = getGroupIcon(columns, row);
37
- const { className, style } = useCell(column, classBase);
38
- const handleClick = useCallback(
39
- (evt) => {
40
- onClick?.(evt, column);
41
- },
42
- [column, onClick]
43
- );
44
- const { [COUNT]: count, [IS_EXPANDED]: isExpanded, [IS_LEAF]: isLeaf } = row;
45
- return /* @__PURE__ */ jsxs(
46
- "div",
47
- {
48
- "aria-colindex": 1,
49
- className: cx(className, "vuuTableCell"),
50
- role: "cell",
51
- style,
52
- onClick: isLeaf ? void 0 : handleClick,
53
- children: [
54
- /* @__PURE__ */ jsx("span", { className: `${classBase}-spacer` }),
55
- isLeaf || count == 0 ? null : /* @__PURE__ */ jsx(ToggleIconButton, { isExpanded }),
56
- icon ? /* @__PURE__ */ jsx(Icon, { name: icon }) : null,
57
- /* @__PURE__ */ jsx("span", { className: `${classBase}-label`, children: valueWithHighlighting })
58
- ]
59
- }
60
- );
61
- };
62
-
63
- export { TableGroupCell };
64
- //# sourceMappingURL=TableGroupCell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableGroupCell.js","sources":["../../src/table-cell/TableGroupCell.tsx"],"sourcesContent":["import { GroupColumnDescriptor, TableCellProps } from \"@vuu-ui/vuu-table-types\";\nimport { Icon, ToggleIconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { getGroupIcon, getGroupValue, metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { MouseEvent, useCallback } from \"react\";\nimport { useCell } from \"../useCell\";\n\nimport tableCellCss from \"./TableCell.css\";\nimport tableGroupCellCss from \"./TableGroupCell.css\";\nimport { useHighlighting } from \"../useHighlighting\";\n\nconst { COUNT, IS_EXPANDED, IS_LEAF } = metadataKeys;\n\nconst classBase = \"vuuTableGroupCell\";\n\nexport const TableGroupCell = ({\n column,\n columnMap,\n onClick,\n row,\n searchPattern = \"\",\n}: TableCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-cell\",\n css: tableCellCss,\n window: targetWindow,\n });\n useComponentCssInjection({\n testId: \"vuu-table-group-cell\",\n css: tableGroupCellCss,\n window: targetWindow,\n });\n\n const { columns } = column as GroupColumnDescriptor;\n const value = getGroupValue(columns, row, columnMap);\n const valueWithHighlighting = useHighlighting(value || \"\", searchPattern);\n\n const icon = getGroupIcon(columns, row);\n const { className, style } = useCell(column, classBase);\n\n const handleClick = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n onClick?.(evt, column);\n },\n [column, onClick],\n );\n\n const { [COUNT]: count, [IS_EXPANDED]: isExpanded, [IS_LEAF]: isLeaf } = row;\n\n return (\n <div\n aria-colindex={1}\n className={cx(className, \"vuuTableCell\")}\n role=\"cell\"\n style={style}\n onClick={isLeaf ? undefined : handleClick}\n >\n <span className={`${classBase}-spacer`} />\n {isLeaf || count == 0 ? null : (\n <ToggleIconButton isExpanded={isExpanded} />\n )}\n {icon ? <Icon name={icon} /> : null}\n <span className={`${classBase}-label`}>{valueWithHighlighting}</span>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAaA,MAAM,EAAE,KAAA,EAAO,WAAa,EAAA,OAAA,EAAY,GAAA,YAAA;AAExC,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAgB,GAAA;AAClB,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AACD,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,sBAAA;AAAA,IACR,GAAK,EAAA,iBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,SAAY,GAAA,MAAA;AACpB,EAAA,MAAM,KAAQ,GAAA,aAAA,CAAc,OAAS,EAAA,GAAA,EAAK,SAAS,CAAA;AACnD,EAAA,MAAM,qBAAwB,GAAA,eAAA,CAAgB,KAAS,IAAA,EAAA,EAAI,aAAa,CAAA;AAExE,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,EAAS,GAAG,CAAA;AACtC,EAAA,MAAM,EAAE,SAAW,EAAA,KAAA,EAAU,GAAA,OAAA,CAAQ,QAAQ,SAAS,CAAA;AAEtD,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAoC,KAAA;AACnC,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,EAAE,CAAC,KAAK,GAAG,KAAO,EAAA,CAAC,WAAW,GAAG,UAAY,EAAA,CAAC,OAAO,GAAG,QAAW,GAAA,GAAA;AAEzE,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,CAAA;AAAA,MACf,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,cAAc,CAAA;AAAA,MACvC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MACA,OAAA,EAAS,SAAS,KAAY,CAAA,GAAA,WAAA;AAAA,MAE9B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAAW,OAAA,CAAA,EAAA,CAAA;AAAA,QACvC,UAAU,KAAS,IAAA,CAAA,GAAI,IACtB,mBAAA,GAAA,CAAC,oBAAiB,UAAwB,EAAA,CAAA;AAAA,QAE3C,IAAO,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAM,MAAM,CAAK,GAAA,IAAA;AAAA,4BAC9B,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAsB,EAAA,qBAAA,EAAA;AAAA;AAAA;AAAA,GAChE;AAEJ;;;;"}
@@ -1,33 +0,0 @@
1
- import { getRuntimeColumnWidth } from '@vuu-ui/vuu-utils';
2
-
3
- const updateTableConfig = (config, action) => {
4
- switch (action.type) {
5
- case "col-size": {
6
- const { columns: runtimeColumns, width } = action;
7
- const isFit = config.columnLayout === "fit";
8
- return {
9
- ...config,
10
- columnLayout: isFit ? "manual" : config.columnLayout,
11
- columns: config.columns.map((col) => {
12
- if (isFit) {
13
- return col.name === action.column.name ? { ...col, width } : col.width ? col : { ...col, width: getRuntimeColumnWidth(col, runtimeColumns) };
14
- } else {
15
- return col.name === action.column.name ? { ...col, width: action.width } : col;
16
- }
17
- })
18
- };
19
- }
20
- case "column-prop":
21
- return {
22
- ...config,
23
- columns: config.columns.map(
24
- (col) => col.name === action.column.name ? { ...col, [action.property]: action.value } : col
25
- )
26
- };
27
- default:
28
- return config;
29
- }
30
- };
31
-
32
- export { updateTableConfig };
33
- //# sourceMappingURL=table-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-config.js","sources":["../src/table-config.ts"],"sourcesContent":["import {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n TableConfig,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getRuntimeColumnWidth } from \"@vuu-ui/vuu-utils\";\n\nexport type MoveColumnTableConfigAction = {\n type: \"col-move\";\n column: ColumnDescriptor;\n fromIndex: number;\n toIndex: number;\n};\n\nexport type ResizeColumnTableConfigAction = {\n type: \"col-size\";\n column: ColumnDescriptor;\n columns: RuntimeColumnDescriptor[];\n width: number;\n};\n\nexport type SubscribeColumnTableConfigAction = {\n type: \"subscribed\";\n column: ColumnDescriptor;\n value: boolean;\n};\n\nexport type UpdateColumnPropertyTableConfigAction = {\n type: \"column-prop\";\n column: ColumnDescriptor;\n property: keyof ColumnDescriptor;\n value: boolean | number | string;\n};\n\nexport type TableConfigAction =\n | MoveColumnTableConfigAction\n | ResizeColumnTableConfigAction\n | UpdateColumnPropertyTableConfigAction;\n\nexport const updateTableConfig = (\n config: TableConfig,\n action: TableConfigAction,\n): TableConfig => {\n switch (action.type) {\n case \"col-size\": {\n const { columns: runtimeColumns, width } = action;\n const isFit = config.columnLayout === \"fit\";\n return {\n ...config,\n columnLayout: isFit ? \"manual\" : config.columnLayout,\n columns: config.columns.map((col) => {\n if (isFit) {\n // When user resizes a column and 'fit' column layout is in effect,\n // column layout becomes 'manual' and all columns are set to\n // their current widths (unless subsequently resized by user).\n return col.name === action.column.name\n ? { ...col, width }\n : col.width\n ? col\n : { ...col, width: getRuntimeColumnWidth(col, runtimeColumns) };\n } else {\n return col.name === action.column.name\n ? { ...col, width: action.width }\n : col;\n }\n }),\n };\n }\n case \"column-prop\":\n return {\n ...config,\n columns: config.columns.map((col) =>\n col.name === action.column.name\n ? { ...col, [action.property]: action.value }\n : col,\n ),\n };\n\n default:\n return config;\n }\n};\n"],"names":[],"mappings":";;AAuCa,MAAA,iBAAA,GAAoB,CAC/B,MAAA,EACA,MACgB,KAAA;AAChB,EAAA,QAAQ,OAAO,IAAM;AAAA,IACnB,KAAK,UAAY,EAAA;AACf,MAAA,MAAM,EAAE,OAAA,EAAS,cAAgB,EAAA,KAAA,EAAU,GAAA,MAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,OAAO,YAAiB,KAAA,KAAA;AACtC,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,YAAA,EAAc,KAAQ,GAAA,QAAA,GAAW,MAAO,CAAA,YAAA;AAAA,QACxC,OAAS,EAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,CAAI,CAAC,GAAQ,KAAA;AACnC,UAAA,IAAI,KAAO,EAAA;AAIT,YAAO,OAAA,GAAA,CAAI,SAAS,MAAO,CAAA,MAAA,CAAO,OAC9B,EAAE,GAAG,KAAK,KAAM,EAAA,GAChB,IAAI,KACF,GAAA,GAAA,GACA,EAAE,GAAG,GAAA,EAAK,OAAO,qBAAsB,CAAA,GAAA,EAAK,cAAc,CAAE,EAAA;AAAA,WAC7D,MAAA;AACL,YAAO,OAAA,GAAA,CAAI,IAAS,KAAA,MAAA,CAAO,MAAO,CAAA,IAAA,GAC9B,EAAE,GAAG,GAAK,EAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EACxB,GAAA,GAAA;AAAA;AACN,SACD;AAAA,OACH;AAAA;AACF,IACA,KAAK,aAAA;AACH,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,OAAO,OAAQ,CAAA,GAAA;AAAA,UAAI,CAAC,GAC3B,KAAA,GAAA,CAAI,IAAS,KAAA,MAAA,CAAO,OAAO,IACvB,GAAA,EAAE,GAAG,GAAA,EAAK,CAAC,MAAO,CAAA,QAAQ,GAAG,MAAA,CAAO,OACpC,GAAA;AAAA;AACN,OACF;AAAA,IAEF;AACE,MAAO,OAAA,MAAA;AAAA;AAEb;;;;"}
@@ -1,181 +0,0 @@
1
- const headerCellQuery = (colIdx) => `.vuuTable-col-headers .vuuTableHeaderCell[aria-colindex='${colIdx}']`;
2
- const dataCellQuery = (ariaRowIdx, ariaColIdx) => `.vuuTable-table [aria-rowindex='${ariaRowIdx}'] > [aria-colindex='${ariaColIdx}']`;
3
- const getLevelUp = (containerRef, cellPos) => {
4
- const cell = getTableCell(containerRef, cellPos);
5
- let row = cell?.parentElement;
6
- const level = parseInt(row?.ariaLevel ?? "1");
7
- if (level > 1) {
8
- const targetLevel = `${level - 1}`;
9
- while (row !== null && row.ariaLevel !== targetLevel) {
10
- row = row.previousElementSibling;
11
- }
12
- if (row) {
13
- const nextRowIndex = parseInt(row.ariaRowIndex ?? "- 1");
14
- if (nextRowIndex !== -1) {
15
- return [nextRowIndex, 1];
16
- }
17
- }
18
- }
19
- return cellPos;
20
- };
21
- const getTableCell = (containerRef, [rowIdx, colIdx]) => {
22
- const cssQuery = dataCellQuery(rowIdx, colIdx);
23
- const cell = containerRef.current?.querySelector(cssQuery);
24
- if (cellIsEditable(cell)) {
25
- const focusableContent = cell.querySelector(
26
- `button,input[type="checkbox"]`
27
- );
28
- return focusableContent || cell;
29
- } else {
30
- return cell;
31
- }
32
- };
33
- const getFocusedCell = (el) => {
34
- if (el?.role == "cell" || el?.role === "columnheader") {
35
- return el;
36
- } else {
37
- return el?.closest(
38
- "[role='columnHeader'],[role='cell']"
39
- );
40
- }
41
- };
42
- const cellIsEditable = (cell) => cell?.classList.contains("vuuTableCell-editable");
43
- const cellDropdownShowing = (cell) => {
44
- if (cellIsEditable(cell)) {
45
- return cell?.querySelector('.saltDropdown[aria-expanded="true"]') !== null;
46
- }
47
- return false;
48
- };
49
- const cellIsGroupCell = (cell) => cell?.classList.contains("vuuTableGroupCell");
50
- const rowIsExpanded = (cell) => {
51
- switch (cell.parentElement?.ariaExpanded) {
52
- case "true":
53
- return true;
54
- case "false":
55
- return false;
56
- default:
57
- return void 0;
58
- }
59
- };
60
- const cellIsTextInput = (cell) => cell.querySelector(".vuuTableInputCell") !== null;
61
- const getAriaRowIndex = (rowElement) => {
62
- const rowIndex = rowElement?.ariaRowIndex;
63
- if (rowIndex != null) {
64
- const index = parseInt(rowIndex);
65
- if (!isNaN(index)) {
66
- return index;
67
- }
68
- }
69
- return -1;
70
- };
71
- const getAriaColIndex = (cellElement) => {
72
- const colIndex = cellElement?.ariaColIndex;
73
- if (colIndex != null) {
74
- const index = parseInt(colIndex);
75
- if (!isNaN(index)) {
76
- return index;
77
- }
78
- }
79
- return -1;
80
- };
81
- const getRowElementByAriaIndex = (container, rowIndex) => {
82
- if (rowIndex === -1) {
83
- return null;
84
- } else {
85
- const activeRow = container.querySelector(
86
- `[aria-rowindex="${rowIndex}"]`
87
- );
88
- if (activeRow) {
89
- return activeRow;
90
- } else {
91
- throw Error(
92
- `getRowElementAtIndex no row found for index index ${rowIndex}`
93
- );
94
- }
95
- }
96
- };
97
- const getAriaCellPos = (tableCell) => {
98
- const focusedRow = tableCell.closest("[role='row']");
99
- return [getAriaRowIndex(focusedRow), getAriaColIndex(tableCell)];
100
- };
101
- const closestRow = (el) => el.closest('[role="row"]');
102
- const closestRowIndex = (el) => getAriaRowIndex(closestRow(el));
103
- function getNextCellPos(key, [rowIdx, colIdx], columnCount, maxRowIndex) {
104
- if (key === "ArrowUp") {
105
- if (rowIdx > -1) {
106
- return [rowIdx - 1, colIdx];
107
- } else {
108
- return [rowIdx, colIdx];
109
- }
110
- } else if (key === "ArrowDown") {
111
- if (rowIdx === -1) {
112
- return [1, colIdx];
113
- } else if (rowIdx === maxRowIndex) {
114
- return [rowIdx, colIdx];
115
- } else {
116
- return [rowIdx + 1, colIdx];
117
- }
118
- } else if (key === "ArrowRight") {
119
- if (colIdx < columnCount) {
120
- return [rowIdx, colIdx + 1];
121
- } else {
122
- return [rowIdx, colIdx];
123
- }
124
- } else if (key === "ArrowLeft") {
125
- if (colIdx > 1) {
126
- return [rowIdx, colIdx - 1];
127
- } else {
128
- return [rowIdx, colIdx];
129
- }
130
- }
131
- return [rowIdx, colIdx];
132
- }
133
- const getTreeNodeOperation = (containerRef, navigationStyle, cellPos, key, shiftKey) => {
134
- const cell = getTableCell(containerRef, cellPos);
135
- if (navigationStyle === "cell" && !cellIsGroupCell(cell)) {
136
- return void 0;
137
- }
138
- if (navigationStyle == "cell" && !shiftKey) {
139
- return void 0;
140
- }
141
- if (cellIsGroupCell(cell)) {
142
- const isExpanded = rowIsExpanded(cell);
143
- if (isExpanded === true) {
144
- if (key === "ArrowLeft") {
145
- return "collapse";
146
- }
147
- } else if (isExpanded === false) {
148
- if (key === "ArrowRight") {
149
- return "expand";
150
- } else if (key === "ArrowLeft") {
151
- return "level-up";
152
- }
153
- } else if (key === "ArrowLeft") {
154
- return "level-up";
155
- }
156
- }
157
- };
158
- const NO_SCROLL_NECESSARY = [void 0, void 0];
159
- const howFarIsRowOutsideViewport = (rowEl, totalHeaderHeight, contentContainer = rowEl.closest(".vuuTable-contentContainer")) => {
160
- if (contentContainer) {
161
- const viewport = contentContainer?.getBoundingClientRect();
162
- const upperBoundary = viewport.top + totalHeaderHeight;
163
- const row = rowEl.getBoundingClientRect();
164
- if (row) {
165
- if (row.bottom > viewport.bottom) {
166
- return ["down", row.bottom - viewport.bottom];
167
- } else if (row.top < upperBoundary) {
168
- return ["up", row.top - upperBoundary];
169
- } else {
170
- return NO_SCROLL_NECESSARY;
171
- }
172
- } else {
173
- throw Error("Whats going on, row not found");
174
- }
175
- } else {
176
- throw Error("Whats going on, scrollbar container not found");
177
- }
178
- };
179
-
180
- export { cellDropdownShowing, cellIsEditable, cellIsTextInput, closestRowIndex, dataCellQuery, getAriaCellPos, getAriaColIndex, getAriaRowIndex, getFocusedCell, getLevelUp, getNextCellPos, getRowElementByAriaIndex, getTableCell, getTreeNodeOperation, headerCellQuery, howFarIsRowOutsideViewport };
181
- //# sourceMappingURL=table-dom-utils.js.map