@vuu-ui/vuu-table 2.1.18 → 2.1.19-beta.1

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 (288) hide show
  1. package/package.json +12 -14
  2. package/types/VirtualColSpan.d.ts +2 -2
  3. package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +1 -1
  4. package/types/useTable.d.ts +3 -3
  5. package/cjs/CellFocusState.js +0 -45
  6. package/cjs/CellFocusState.js.map +0 -1
  7. package/cjs/Row.js +0 -116
  8. package/cjs/Row.js.map +0 -1
  9. package/cjs/Table.css.js +0 -6
  10. package/cjs/Table.css.js.map +0 -1
  11. package/cjs/Table.js +0 -455
  12. package/cjs/Table.js.map +0 -1
  13. package/cjs/VirtualColSpan.js +0 -19
  14. package/cjs/VirtualColSpan.js.map +0 -1
  15. package/cjs/applyHighlighting.js +0 -33
  16. package/cjs/applyHighlighting.js.map +0 -1
  17. package/cjs/bulk-edit/BulkEditPanel.css.js +0 -6
  18. package/cjs/bulk-edit/BulkEditPanel.css.js.map +0 -1
  19. package/cjs/bulk-edit/BulkEditPanel.js +0 -107
  20. package/cjs/bulk-edit/BulkEditPanel.js.map +0 -1
  21. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -6
  22. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
  23. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js +0 -80
  24. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
  25. package/cjs/bulk-edit/InsertNewRowEditor.css.js +0 -6
  26. package/cjs/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
  27. package/cjs/bulk-edit/InsertNewRowEditor.js +0 -80
  28. package/cjs/bulk-edit/InsertNewRowEditor.js.map +0 -1
  29. package/cjs/bulk-edit/useBulkEditPanel.js +0 -70
  30. package/cjs/bulk-edit/useBulkEditPanel.js.map +0 -1
  31. package/cjs/bulk-edit/useColumnCascadingEditor.js +0 -143
  32. package/cjs/bulk-edit/useColumnCascadingEditor.js.map +0 -1
  33. package/cjs/cell-block/CellBlock.css.js +0 -6
  34. package/cjs/cell-block/CellBlock.css.js.map +0 -1
  35. package/cjs/cell-block/CellBlock.js +0 -45
  36. package/cjs/cell-block/CellBlock.js.map +0 -1
  37. package/cjs/cell-block/cellblock-utils.js +0 -125
  38. package/cjs/cell-block/cellblock-utils.js.map +0 -1
  39. package/cjs/cell-block/useCellBlockSelection.js +0 -257
  40. package/cjs/cell-block/useCellBlockSelection.js.map +0 -1
  41. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -6
  42. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  43. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +0 -67
  44. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  45. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -6
  46. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  47. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -51
  48. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  49. package/cjs/cell-renderers/input-cell/InputCell.css.js +0 -6
  50. package/cjs/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  51. package/cjs/cell-renderers/input-cell/InputCell.js +0 -63
  52. package/cjs/cell-renderers/input-cell/InputCell.js.map +0 -1
  53. package/cjs/cell-renderers/input-cell/useInputCell.js +0 -211
  54. package/cjs/cell-renderers/input-cell/useInputCell.js.map +0 -1
  55. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +0 -6
  56. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  57. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +0 -66
  58. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  59. package/cjs/column-header-pill/ColumnHeaderPill.css.js +0 -6
  60. package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  61. package/cjs/column-header-pill/ColumnHeaderPill.js +0 -53
  62. package/cjs/column-header-pill/ColumnHeaderPill.js.map +0 -1
  63. package/cjs/column-header-pill/GroupColumnPill.css.js +0 -6
  64. package/cjs/column-header-pill/GroupColumnPill.css.js.map +0 -1
  65. package/cjs/column-header-pill/GroupColumnPill.js +0 -29
  66. package/cjs/column-header-pill/GroupColumnPill.js.map +0 -1
  67. package/cjs/column-header-pill/SortIndicator.css.js +0 -6
  68. package/cjs/column-header-pill/SortIndicator.css.js.map +0 -1
  69. package/cjs/column-header-pill/SortIndicator.js +0 -27
  70. package/cjs/column-header-pill/SortIndicator.js.map +0 -1
  71. package/cjs/column-resizing/ColumnResizer.css.js +0 -6
  72. package/cjs/column-resizing/ColumnResizer.css.js.map +0 -1
  73. package/cjs/column-resizing/ColumnResizer.js +0 -82
  74. package/cjs/column-resizing/ColumnResizer.js.map +0 -1
  75. package/cjs/column-resizing/useTableColumnResize.js +0 -55
  76. package/cjs/column-resizing/useTableColumnResize.js.map +0 -1
  77. package/cjs/data-row/DataRow.js +0 -262
  78. package/cjs/data-row/DataRow.js.map +0 -1
  79. package/cjs/header-cell/GroupHeaderCell.css.js +0 -6
  80. package/cjs/header-cell/GroupHeaderCell.css.js.map +0 -1
  81. package/cjs/header-cell/GroupHeaderCell.js +0 -127
  82. package/cjs/header-cell/GroupHeaderCell.js.map +0 -1
  83. package/cjs/header-cell/HeaderCell.css.js +0 -6
  84. package/cjs/header-cell/HeaderCell.css.js.map +0 -1
  85. package/cjs/header-cell/HeaderCell.js +0 -139
  86. package/cjs/header-cell/HeaderCell.js.map +0 -1
  87. package/cjs/index.js +0 -64
  88. package/cjs/index.js.map +0 -1
  89. package/cjs/pagination/PaginationControl.css.js +0 -6
  90. package/cjs/pagination/PaginationControl.css.js.map +0 -1
  91. package/cjs/pagination/PaginationControl.js +0 -38
  92. package/cjs/pagination/PaginationControl.js.map +0 -1
  93. package/cjs/pagination/usePagination.js +0 -36
  94. package/cjs/pagination/usePagination.js.map +0 -1
  95. package/cjs/table-cell/TableCell.css.js +0 -6
  96. package/cjs/table-cell/TableCell.css.js.map +0 -1
  97. package/cjs/table-cell/TableCell.js +0 -75
  98. package/cjs/table-cell/TableCell.js.map +0 -1
  99. package/cjs/table-cell/TableGroupCell.css.js +0 -6
  100. package/cjs/table-cell/TableGroupCell.css.js.map +0 -1
  101. package/cjs/table-cell/TableGroupCell.js +0 -65
  102. package/cjs/table-cell/TableGroupCell.js.map +0 -1
  103. package/cjs/table-config/useTableConfig.js +0 -67
  104. package/cjs/table-config/useTableConfig.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-data-source/DataRowMovingWindow.js +0 -99
  108. package/cjs/table-data-source/DataRowMovingWindow.js.map +0 -1
  109. package/cjs/table-data-source/useDataSource.js +0 -236
  110. package/cjs/table-data-source/useDataSource.js.map +0 -1
  111. package/cjs/table-dom-utils.js +0 -206
  112. package/cjs/table-dom-utils.js.map +0 -1
  113. package/cjs/table-header/HeaderProvider.js +0 -18
  114. package/cjs/table-header/HeaderProvider.js.map +0 -1
  115. package/cjs/table-header/TableHeader.js +0 -180
  116. package/cjs/table-header/TableHeader.js.map +0 -1
  117. package/cjs/table-header/useTableHeader.js +0 -87
  118. package/cjs/table-header/useTableHeader.js.map +0 -1
  119. package/cjs/useCell.js +0 -26
  120. package/cjs/useCell.js.map +0 -1
  121. package/cjs/useCellEditing.js +0 -77
  122. package/cjs/useCellEditing.js.map +0 -1
  123. package/cjs/useCellFocus.js +0 -119
  124. package/cjs/useCellFocus.js.map +0 -1
  125. package/cjs/useControlledTableNavigation.js +0 -46
  126. package/cjs/useControlledTableNavigation.js.map +0 -1
  127. package/cjs/useEditableCell.js +0 -27
  128. package/cjs/useEditableCell.js.map +0 -1
  129. package/cjs/useKeyboardNavigation.js +0 -323
  130. package/cjs/useKeyboardNavigation.js.map +0 -1
  131. package/cjs/useMeasuredHeight.js +0 -51
  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 -130
  136. package/cjs/useSelection.js.map +0 -1
  137. package/cjs/useTable.js +0 -742
  138. package/cjs/useTable.js.map +0 -1
  139. package/cjs/useTableContextMenu.js +0 -76
  140. package/cjs/useTableContextMenu.js.map +0 -1
  141. package/cjs/useTableModel.js +0 -421
  142. package/cjs/useTableModel.js.map +0 -1
  143. package/cjs/useTableScroll.js +0 -464
  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.js +0 -114
  150. package/esm/Row.js.map +0 -1
  151. package/esm/Table.css.js +0 -4
  152. package/esm/Table.css.js.map +0 -1
  153. package/esm/Table.js +0 -453
  154. package/esm/Table.js.map +0 -1
  155. package/esm/VirtualColSpan.js +0 -17
  156. package/esm/VirtualColSpan.js.map +0 -1
  157. package/esm/applyHighlighting.js +0 -31
  158. package/esm/applyHighlighting.js.map +0 -1
  159. package/esm/bulk-edit/BulkEditPanel.css.js +0 -4
  160. package/esm/bulk-edit/BulkEditPanel.css.js.map +0 -1
  161. package/esm/bulk-edit/BulkEditPanel.js +0 -105
  162. package/esm/bulk-edit/BulkEditPanel.js.map +0 -1
  163. package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -4
  164. package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
  165. package/esm/bulk-edit/ColumnCascadingUpdateEditor.js +0 -78
  166. package/esm/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
  167. package/esm/bulk-edit/InsertNewRowEditor.css.js +0 -4
  168. package/esm/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
  169. package/esm/bulk-edit/InsertNewRowEditor.js +0 -78
  170. package/esm/bulk-edit/InsertNewRowEditor.js.map +0 -1
  171. package/esm/bulk-edit/useBulkEditPanel.js +0 -68
  172. package/esm/bulk-edit/useBulkEditPanel.js.map +0 -1
  173. package/esm/bulk-edit/useColumnCascadingEditor.js +0 -141
  174. package/esm/bulk-edit/useColumnCascadingEditor.js.map +0 -1
  175. package/esm/cell-block/CellBlock.css.js +0 -4
  176. package/esm/cell-block/CellBlock.css.js.map +0 -1
  177. package/esm/cell-block/CellBlock.js +0 -43
  178. package/esm/cell-block/CellBlock.js.map +0 -1
  179. package/esm/cell-block/cellblock-utils.js +0 -116
  180. package/esm/cell-block/cellblock-utils.js.map +0 -1
  181. package/esm/cell-block/useCellBlockSelection.js +0 -255
  182. package/esm/cell-block/useCellBlockSelection.js.map +0 -1
  183. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -4
  184. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  185. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +0 -65
  186. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  187. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -4
  188. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  189. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -49
  190. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  191. package/esm/cell-renderers/input-cell/InputCell.css.js +0 -4
  192. package/esm/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  193. package/esm/cell-renderers/input-cell/InputCell.js +0 -61
  194. package/esm/cell-renderers/input-cell/InputCell.js.map +0 -1
  195. package/esm/cell-renderers/input-cell/useInputCell.js +0 -209
  196. package/esm/cell-renderers/input-cell/useInputCell.js.map +0 -1
  197. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +0 -4
  198. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  199. package/esm/cell-renderers/toggle-cell/ToggleCell.js +0 -64
  200. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  201. package/esm/column-header-pill/ColumnHeaderPill.css.js +0 -4
  202. package/esm/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  203. package/esm/column-header-pill/ColumnHeaderPill.js +0 -51
  204. package/esm/column-header-pill/ColumnHeaderPill.js.map +0 -1
  205. package/esm/column-header-pill/GroupColumnPill.css.js +0 -4
  206. package/esm/column-header-pill/GroupColumnPill.css.js.map +0 -1
  207. package/esm/column-header-pill/GroupColumnPill.js +0 -27
  208. package/esm/column-header-pill/GroupColumnPill.js.map +0 -1
  209. package/esm/column-header-pill/SortIndicator.css.js +0 -4
  210. package/esm/column-header-pill/SortIndicator.css.js.map +0 -1
  211. package/esm/column-header-pill/SortIndicator.js +0 -25
  212. package/esm/column-header-pill/SortIndicator.js.map +0 -1
  213. package/esm/column-resizing/ColumnResizer.css.js +0 -4
  214. package/esm/column-resizing/ColumnResizer.css.js.map +0 -1
  215. package/esm/column-resizing/ColumnResizer.js +0 -80
  216. package/esm/column-resizing/ColumnResizer.js.map +0 -1
  217. package/esm/column-resizing/useTableColumnResize.js +0 -53
  218. package/esm/column-resizing/useTableColumnResize.js.map +0 -1
  219. package/esm/data-row/DataRow.js +0 -260
  220. package/esm/data-row/DataRow.js.map +0 -1
  221. package/esm/header-cell/GroupHeaderCell.css.js +0 -4
  222. package/esm/header-cell/GroupHeaderCell.css.js.map +0 -1
  223. package/esm/header-cell/GroupHeaderCell.js +0 -125
  224. package/esm/header-cell/GroupHeaderCell.js.map +0 -1
  225. package/esm/header-cell/HeaderCell.css.js +0 -4
  226. package/esm/header-cell/HeaderCell.css.js.map +0 -1
  227. package/esm/header-cell/HeaderCell.js +0 -137
  228. package/esm/header-cell/HeaderCell.js.map +0 -1
  229. package/esm/index.js +0 -27
  230. package/esm/index.js.map +0 -1
  231. package/esm/pagination/PaginationControl.css.js +0 -4
  232. package/esm/pagination/PaginationControl.css.js.map +0 -1
  233. package/esm/pagination/PaginationControl.js +0 -36
  234. package/esm/pagination/PaginationControl.js.map +0 -1
  235. package/esm/pagination/usePagination.js +0 -34
  236. package/esm/pagination/usePagination.js.map +0 -1
  237. package/esm/table-cell/TableCell.css.js +0 -4
  238. package/esm/table-cell/TableCell.css.js.map +0 -1
  239. package/esm/table-cell/TableCell.js +0 -73
  240. package/esm/table-cell/TableCell.js.map +0 -1
  241. package/esm/table-cell/TableGroupCell.css.js +0 -4
  242. package/esm/table-cell/TableGroupCell.css.js.map +0 -1
  243. package/esm/table-cell/TableGroupCell.js +0 -63
  244. package/esm/table-cell/TableGroupCell.js.map +0 -1
  245. package/esm/table-config/useTableConfig.js +0 -65
  246. package/esm/table-config/useTableConfig.js.map +0 -1
  247. package/esm/table-config.js +0 -33
  248. package/esm/table-config.js.map +0 -1
  249. package/esm/table-data-source/DataRowMovingWindow.js +0 -97
  250. package/esm/table-data-source/DataRowMovingWindow.js.map +0 -1
  251. package/esm/table-data-source/useDataSource.js +0 -234
  252. package/esm/table-data-source/useDataSource.js.map +0 -1
  253. package/esm/table-dom-utils.js +0 -188
  254. package/esm/table-dom-utils.js.map +0 -1
  255. package/esm/table-header/HeaderProvider.js +0 -15
  256. package/esm/table-header/HeaderProvider.js.map +0 -1
  257. package/esm/table-header/TableHeader.js +0 -178
  258. package/esm/table-header/TableHeader.js.map +0 -1
  259. package/esm/table-header/useTableHeader.js +0 -85
  260. package/esm/table-header/useTableHeader.js.map +0 -1
  261. package/esm/useCell.js +0 -24
  262. package/esm/useCell.js.map +0 -1
  263. package/esm/useCellEditing.js +0 -75
  264. package/esm/useCellEditing.js.map +0 -1
  265. package/esm/useCellFocus.js +0 -117
  266. package/esm/useCellFocus.js.map +0 -1
  267. package/esm/useControlledTableNavigation.js +0 -43
  268. package/esm/useControlledTableNavigation.js.map +0 -1
  269. package/esm/useEditableCell.js +0 -25
  270. package/esm/useEditableCell.js.map +0 -1
  271. package/esm/useKeyboardNavigation.js +0 -319
  272. package/esm/useKeyboardNavigation.js.map +0 -1
  273. package/esm/useMeasuredHeight.js +0 -49
  274. package/esm/useMeasuredHeight.js.map +0 -1
  275. package/esm/useRowClassNameGenerators.js +0 -32
  276. package/esm/useRowClassNameGenerators.js.map +0 -1
  277. package/esm/useSelection.js +0 -128
  278. package/esm/useSelection.js.map +0 -1
  279. package/esm/useTable.js +0 -740
  280. package/esm/useTable.js.map +0 -1
  281. package/esm/useTableContextMenu.js +0 -73
  282. package/esm/useTableContextMenu.js.map +0 -1
  283. package/esm/useTableModel.js +0 -419
  284. package/esm/useTableModel.js.map +0 -1
  285. package/esm/useTableScroll.js +0 -461
  286. package/esm/useTableScroll.js.map +0 -1
  287. package/esm/useTableViewport.js +0 -135
  288. package/esm/useTableViewport.js.map +0 -1
@@ -1,27 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
-
6
- const useEditableCell = () => {
7
- return react.useCallback((evt) => {
8
- if (evt.key === "Enter") {
9
- const el = evt.target;
10
- const inputElement = el.querySelector("input");
11
- if (inputElement !== document.activeElement) {
12
- inputElement?.focus();
13
- }
14
- } else if (evt.key === "Escape") {
15
- const input = vuuUtils.queryClosest(evt.target, "input");
16
- const cell = vuuUtils.queryClosest(input, ".vuuTableCell");
17
- if (cell) {
18
- cell.tabIndex = 0;
19
- cell.focus();
20
- evt.stopPropagation();
21
- }
22
- }
23
- }, []);
24
- };
25
-
26
- exports.useEditableCell = useEditableCell;
27
- //# sourceMappingURL=useEditableCell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useEditableCell.js","sources":["../../../packages/vuu-table/src/useEditableCell.ts"],"sourcesContent":["import { queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { KeyboardEventHandler, useCallback } from \"react\";\n\nexport const useEditableCell = () => {\n return useCallback<KeyboardEventHandler<HTMLDivElement>>((evt) => {\n if (evt.key === \"Enter\") {\n const el = evt.target as HTMLElement;\n const inputElement = el.querySelector(\"input\");\n if (inputElement !== document.activeElement) {\n inputElement?.focus();\n }\n } else if (evt.key === \"Escape\") {\n const input = queryClosest<HTMLInputElement>(evt.target, \"input\");\n const cell = queryClosest(input, \".vuuTableCell\");\n if (cell) {\n cell.tabIndex = 0;\n cell.focus();\n evt.stopPropagation();\n }\n }\n }, []);\n};\n"],"names":["useCallback","queryClosest"],"mappings":";;;;;AAGO,MAAM,kBAAkB,MAAM;AACnC,EAAO,OAAAA,iBAAA,CAAkD,CAAC,GAAQ,KAAA;AAChE,IAAI,IAAA,GAAA,CAAI,QAAQ,OAAS,EAAA;AACvB,MAAA,MAAM,KAAK,GAAI,CAAA,MAAA;AACf,MAAM,MAAA,YAAA,GAAe,EAAG,CAAA,aAAA,CAAc,OAAO,CAAA;AAC7C,MAAI,IAAA,YAAA,KAAiB,SAAS,aAAe,EAAA;AAC3C,QAAA,YAAA,EAAc,KAAM,EAAA;AAAA;AACtB,KACF,MAAA,IAAW,GAAI,CAAA,GAAA,KAAQ,QAAU,EAAA;AAC/B,MAAA,MAAM,KAAQ,GAAAC,qBAAA,CAA+B,GAAI,CAAA,MAAA,EAAQ,OAAO,CAAA;AAChE,MAAM,MAAA,IAAA,GAAOA,qBAAa,CAAA,KAAA,EAAO,eAAe,CAAA;AAChD,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,IAAA,CAAK,QAAW,GAAA,CAAA;AAChB,QAAA,IAAA,CAAK,KAAM,EAAA;AACX,QAAA,GAAA,CAAI,eAAgB,EAAA;AAAA;AACtB;AACF,GACF,EAAG,EAAE,CAAA;AACP;;;;"}
@@ -1,323 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var core = require('@salt-ds/core');
5
- var react = require('react');
6
- var tableDomUtils = require('./table-dom-utils.js');
7
-
8
- const rowNavigationKeys = /* @__PURE__ */ new Set([
9
- "Home",
10
- "End",
11
- "PageUp",
12
- "PageDown",
13
- "ArrowDown",
14
- "ArrowUp"
15
- ]);
16
- const CellLocator = ".vuuTableCell,.vuuTableHeaderCell,.vuuTableGroupHeaderCell";
17
- const CellControlLocator = ".vuuColumnMenu,.vuuColumnHeaderPill";
18
- const cellNavigationKeys = new Set(rowNavigationKeys);
19
- cellNavigationKeys.add("ArrowLeft");
20
- cellNavigationKeys.add("ArrowRight");
21
- const isNavigationKey = (key, navigationStyle) => {
22
- switch (navigationStyle) {
23
- case "cell":
24
- case "tree":
25
- return cellNavigationKeys.has(key);
26
- case "row":
27
- return rowNavigationKeys.has(key);
28
- default:
29
- return false;
30
- }
31
- };
32
- const focusControlWithinCell = (e, el) => {
33
- if (e.shiftKey && e.key.match(/Arrow(Left|Right)/)) {
34
- if (el?.classList.contains("vuuTableHeaderCell")) {
35
- const menuButton = el?.querySelector(".vuuColumnMenu");
36
- if (menuButton) {
37
- menuButton.focus();
38
- return true;
39
- }
40
- } else if (el?.classList.contains("vuuTableGroupHeaderCell")) {
41
- const headerPill = el?.querySelector(
42
- ".vuuColumnHeaderPill"
43
- );
44
- if (headerPill) {
45
- headerPill.focus();
46
- return true;
47
- }
48
- } else if (el?.classList.contains("vuuColumnHeaderPill")) {
49
- const nextPill = el.parentElement?.nextElementSibling?.firstChild;
50
- if (nextPill?.classList.contains("vuuColumnHeaderPill")) {
51
- nextPill.focus();
52
- return true;
53
- } else {
54
- const removeButton = vuuUtils.queryClosest(
55
- el,
56
- ".vuuTableGroupHeaderCell",
57
- true
58
- ).querySelector(".vuuTableGroupHeaderCell-removeAll");
59
- if (removeButton) {
60
- removeButton.focus();
61
- return true;
62
- }
63
- }
64
- }
65
- }
66
- return false;
67
- };
68
- const PageKeys = ["Home", "End", "PageUp", "PageDown"];
69
- const isPagingKey = (key) => PageKeys.includes(key);
70
- const useKeyboardNavigation = ({
71
- cellFocusStateRef,
72
- columnCount = 0,
73
- containerRef,
74
- defaultHighlightedIndex,
75
- disableHighlightOnFocus,
76
- editSessionInProgress,
77
- focusCell,
78
- headerCount,
79
- highlightedIndex: highlightedIndexProp,
80
- navigationStyle,
81
- requestScroll,
82
- onHighlight,
83
- onToggleGroup,
84
- rowCount = 0,
85
- viewportRowCount
86
- }) => {
87
- const highlightedIndexRef = react.useRef(void 0);
88
- const [highlightedIndex, setHighlightedIdx] = core.useControlled({
89
- controlled: highlightedIndexProp,
90
- default: defaultHighlightedIndex,
91
- name: "UseKeyboardNavigation"
92
- });
93
- highlightedIndexRef.current = highlightedIndex;
94
- const maxRowIndex = rowCount + headerCount;
95
- const setHighlightedIndex = react.useCallback(
96
- (idx) => {
97
- onHighlight?.(idx);
98
- setHighlightedIdx(idx);
99
- highlightedIndexRef.current = idx;
100
- },
101
- [onHighlight, setHighlightedIdx]
102
- );
103
- const setActiveCell = react.useCallback(
104
- (rowIdx, colIdx) => {
105
- const pos = [rowIdx, colIdx];
106
- if (navigationStyle === "row") {
107
- setHighlightedIdx(rowIdx);
108
- } else {
109
- focusCell(pos);
110
- }
111
- },
112
- [focusCell, navigationStyle, setHighlightedIdx]
113
- );
114
- const nextPageItemIdx = react.useCallback(
115
- (key, [rowIdx, colIdx]) => new Promise((resolve) => {
116
- let newRowIdx = rowIdx;
117
- switch (key) {
118
- case "PageDown": {
119
- newRowIdx = Math.min(rowCount - 1, rowIdx + viewportRowCount);
120
- if (newRowIdx !== rowIdx) {
121
- requestScroll?.({ type: "scroll-page", direction: "down" });
122
- }
123
- break;
124
- }
125
- case "PageUp": {
126
- newRowIdx = Math.max(0, rowIdx - viewportRowCount);
127
- if (newRowIdx !== rowIdx) {
128
- requestScroll?.({ type: "scroll-page", direction: "up" });
129
- }
130
- break;
131
- }
132
- case "Home": {
133
- newRowIdx = headerCount + 1;
134
- if (newRowIdx !== rowIdx) {
135
- requestScroll?.({ type: "scroll-end", direction: "home" });
136
- }
137
- break;
138
- }
139
- case "End": {
140
- newRowIdx = rowCount + headerCount;
141
- if (newRowIdx !== rowIdx) {
142
- requestScroll?.({ type: "scroll-end", direction: "end" });
143
- }
144
- break;
145
- }
146
- }
147
- setTimeout(() => {
148
- resolve([newRowIdx, colIdx]);
149
- }, 35);
150
- }),
151
- [headerCount, requestScroll, rowCount, viewportRowCount]
152
- );
153
- const handleFocus = react.useCallback(() => {
154
- if (disableHighlightOnFocus !== true) {
155
- if (containerRef.current?.contains(document.activeElement)) {
156
- const focusedCell = tableDomUtils.getFocusedCell(document.activeElement);
157
- if (focusedCell) {
158
- cellFocusStateRef.current.cell = focusedCell;
159
- if (navigationStyle === "row") {
160
- setHighlightedIdx(cellFocusStateRef.current.cellPos?.[0]);
161
- }
162
- }
163
- }
164
- }
165
- }, [
166
- disableHighlightOnFocus,
167
- containerRef,
168
- cellFocusStateRef,
169
- navigationStyle,
170
- setHighlightedIdx
171
- ]);
172
- const navigateChildItems = react.useCallback(
173
- async (navigationStyle2 = "cell", key, shiftKey = false) => {
174
- const { cellPos } = cellFocusStateRef.current;
175
- if (cellPos === void 0) {
176
- throw Error("navigateChildItems called before cellPos is set");
177
- }
178
- const [rowIdx, colIdx] = cellPos;
179
- let nextRowIdx = -1, nextColIdx = -1;
180
- if (isPagingKey(key)) {
181
- [nextRowIdx, nextColIdx] = await nextPageItemIdx(key, cellPos);
182
- } else {
183
- const treeNodeOperation = tableDomUtils.getTreeNodeOperation(
184
- containerRef,
185
- navigationStyle2,
186
- cellPos,
187
- key,
188
- shiftKey
189
- );
190
- if (treeNodeOperation === "expand" || treeNodeOperation === "collapse") {
191
- onToggleGroup(treeNodeOperation, rowIdx - headerCount - 1);
192
- } else if (treeNodeOperation === "level-up") {
193
- [nextRowIdx, nextColIdx] = tableDomUtils.getLevelUp(containerRef, cellPos);
194
- } else if (editSessionInProgress) {
195
- [nextRowIdx, nextColIdx] = tableDomUtils.getNextEditableCellPos(
196
- containerRef,
197
- key,
198
- cellPos,
199
- columnCount,
200
- maxRowIndex
201
- );
202
- } else {
203
- [nextRowIdx, nextColIdx] = tableDomUtils.getNextCellPos(
204
- key,
205
- cellPos,
206
- columnCount,
207
- maxRowIndex
208
- );
209
- }
210
- }
211
- if (nextRowIdx !== rowIdx || nextColIdx !== colIdx) {
212
- setActiveCell(nextRowIdx, nextColIdx);
213
- setHighlightedIndex(nextRowIdx);
214
- }
215
- },
216
- [
217
- cellFocusStateRef,
218
- nextPageItemIdx,
219
- containerRef,
220
- editSessionInProgress,
221
- onToggleGroup,
222
- headerCount,
223
- columnCount,
224
- maxRowIndex,
225
- setActiveCell,
226
- setHighlightedIndex
227
- ]
228
- );
229
- const scrollRowIntoViewIfNecessary = react.useCallback(
230
- (rowIndex) => {
231
- requestScroll?.({ type: "scroll-row", rowIndex });
232
- },
233
- [requestScroll]
234
- );
235
- const moveHighlightedRow = react.useCallback(
236
- async (key) => {
237
- const { current: highlighted } = highlightedIndexRef;
238
- const [nextRowIdx] = isPagingKey(key) ? await nextPageItemIdx(key, [highlighted ?? -1, 0]) : tableDomUtils.getNextCellPos(key, [highlighted ?? -1, 0], columnCount, maxRowIndex);
239
- if (nextRowIdx !== highlighted) {
240
- setHighlightedIndex(nextRowIdx);
241
- scrollRowIntoViewIfNecessary(nextRowIdx);
242
- }
243
- },
244
- [
245
- columnCount,
246
- maxRowIndex,
247
- nextPageItemIdx,
248
- scrollRowIntoViewIfNecessary,
249
- setHighlightedIndex
250
- ]
251
- );
252
- react.useEffect(() => {
253
- if (highlightedIndexProp !== void 0 && highlightedIndexProp !== -1) {
254
- requestAnimationFrame(() => {
255
- scrollRowIntoViewIfNecessary(highlightedIndexProp);
256
- });
257
- }
258
- }, [highlightedIndexProp, scrollRowIntoViewIfNecessary]);
259
- const handleKeyDown = react.useCallback(
260
- (e) => {
261
- const cell = vuuUtils.queryClosest(
262
- e.target,
263
- `${CellLocator},${CellControlLocator}`
264
- );
265
- if (tableDomUtils.cellDropdownShowing(cell)) {
266
- return;
267
- }
268
- if (rowCount > 0 && isNavigationKey(e.key, navigationStyle)) {
269
- e.preventDefault();
270
- e.stopPropagation();
271
- if (navigationStyle === "row") {
272
- moveHighlightedRow(e.key);
273
- } else if (navigationStyle !== "none") {
274
- if (!focusControlWithinCell(e, cell)) {
275
- navigateChildItems(navigationStyle, e.key, e.shiftKey);
276
- }
277
- }
278
- }
279
- },
280
- [rowCount, navigationStyle, moveHighlightedRow, navigateChildItems]
281
- );
282
- const handleClick = react.useCallback(
283
- // Might not be a cell e.g the Settings button
284
- (evt) => {
285
- const target = vuuUtils.queryClosest(evt.target, CellLocator);
286
- const focusedCell = tableDomUtils.getFocusedCell(target);
287
- if (focusedCell) {
288
- const [rowIdx, colIdx] = tableDomUtils.getAriaCellPos(focusedCell);
289
- setActiveCell(rowIdx, colIdx);
290
- }
291
- },
292
- [setActiveCell]
293
- );
294
- const handleMouseLeave = react.useCallback(() => {
295
- setHighlightedIndex(-1);
296
- }, [setHighlightedIndex]);
297
- const handleMouseMove = react.useCallback(
298
- (evt) => {
299
- const rowIdx = tableDomUtils.closestRowIndex(evt.target);
300
- if (rowIdx !== -1 && rowIdx !== highlightedIndexRef.current) {
301
- setHighlightedIndex(rowIdx);
302
- }
303
- },
304
- [setHighlightedIndex]
305
- );
306
- const navigateCell = react.useCallback(() => {
307
- navigateChildItems("cell", "ArrowDown");
308
- }, [navigateChildItems]);
309
- return {
310
- highlightedIndexRef,
311
- navigateCell,
312
- onClick: handleClick,
313
- onFocus: handleFocus,
314
- onKeyDown: handleKeyDown,
315
- onMouseLeave: navigationStyle === "row" ? handleMouseLeave : void 0,
316
- onMouseMove: navigationStyle === "row" ? handleMouseMove : void 0
317
- };
318
- };
319
-
320
- exports.isNavigationKey = isNavigationKey;
321
- exports.isPagingKey = isPagingKey;
322
- exports.useKeyboardNavigation = useKeyboardNavigation;
323
- //# sourceMappingURL=useKeyboardNavigation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useKeyboardNavigation.js","sources":["../../../packages/vuu-table/src/useKeyboardNavigation.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { PageKey, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { useControlled } from \"@salt-ds/core\";\nimport {\n KeyboardEvent,\n MouseEvent,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { TableNavigationStyle } from \"./Table\";\nimport {\n NavigationKey,\n cellDropdownShowing,\n closestRowIndex,\n getAriaCellPos,\n getFocusedCell,\n getNextCellPos,\n getTreeNodeOperation,\n getLevelUp as getLevelUp,\n getNextEditableCellPos,\n} from \"./table-dom-utils\";\nimport { ScrollRequestHandler } from \"./useTableScroll\";\nimport { FocusCell } from \"./useCellFocus\";\nimport { CellPos } from \"@vuu-ui/vuu-table-types\";\nimport { CellFocusState } from \"./CellFocusState\";\n\nconst rowNavigationKeys = new Set<NavigationKey>([\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \"ArrowDown\",\n \"ArrowUp\",\n]);\n\nconst CellLocator =\n \".vuuTableCell,.vuuTableHeaderCell,.vuuTableGroupHeaderCell\";\n\nconst CellControlLocator = \".vuuColumnMenu,.vuuColumnHeaderPill\";\n\nconst cellNavigationKeys = new Set(rowNavigationKeys);\ncellNavigationKeys.add(\"ArrowLeft\");\ncellNavigationKeys.add(\"ArrowRight\");\n\nexport const isNavigationKey = (\n key: string,\n navigationStyle: TableNavigationStyle,\n): key is NavigationKey => {\n switch (navigationStyle) {\n case \"cell\":\n case \"tree\":\n return cellNavigationKeys.has(key as NavigationKey);\n case \"row\":\n return rowNavigationKeys.has(key as NavigationKey);\n default:\n return false;\n }\n};\n\nconst focusControlWithinCell = (e: KeyboardEvent, el: HTMLElement | null) => {\n if (e.shiftKey && e.key.match(/Arrow(Left|Right)/)) {\n if (el?.classList.contains(\"vuuTableHeaderCell\")) {\n const menuButton = el?.querySelector<HTMLButtonElement>(\".vuuColumnMenu\");\n if (menuButton) {\n menuButton.focus();\n return true;\n }\n } else if (el?.classList.contains(\"vuuTableGroupHeaderCell\")) {\n const headerPill = el?.querySelector<HTMLButtonElement>(\n \".vuuColumnHeaderPill\",\n );\n if (headerPill) {\n headerPill.focus();\n return true;\n }\n } else if (el?.classList.contains(\"vuuColumnHeaderPill\")) {\n const nextPill = el.parentElement?.nextElementSibling\n ?.firstChild as HTMLElement;\n if (nextPill?.classList.contains(\"vuuColumnHeaderPill\")) {\n nextPill.focus();\n return true;\n } else {\n const removeButton = queryClosest(\n el,\n \".vuuTableGroupHeaderCell\",\n true,\n ).querySelector(\".vuuTableGroupHeaderCell-removeAll\") as HTMLElement;\n if (removeButton) {\n removeButton.focus();\n return true;\n }\n }\n }\n }\n return false;\n};\n\nconst PageKeys = [\"Home\", \"End\", \"PageUp\", \"PageDown\"];\nexport const isPagingKey = (key: string): key is PageKey =>\n PageKeys.includes(key);\n\nexport type GroupToggleHandler = (\n treeNodeOperation: \"expand\" | \"collapse\",\n rowIndex: number,\n) => void;\n\nexport interface NavigationHookProps {\n cellFocusStateRef: RefObject<CellFocusState>;\n containerRef: RefObject<HTMLElement | null>;\n columnCount?: number;\n headerCount: number;\n defaultHighlightedIndex?: number;\n disableFocus?: boolean;\n disableHighlightOnFocus?: boolean;\n editSessionInProgress?: boolean;\n focusCell: FocusCell;\n highlightedIndex?: number;\n label?: string;\n navigationStyle: TableNavigationStyle;\n viewportRange: VuuRange;\n onHighlight?: (idx: number) => void;\n onToggleGroup: GroupToggleHandler;\n requestScroll?: ScrollRequestHandler;\n restoreLastFocus?: boolean;\n rowCount?: number;\n selected?: unknown;\n viewportRowCount: number;\n}\n\nexport const useKeyboardNavigation = ({\n cellFocusStateRef,\n columnCount = 0,\n containerRef,\n defaultHighlightedIndex,\n disableHighlightOnFocus,\n editSessionInProgress,\n focusCell,\n headerCount,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n onHighlight,\n onToggleGroup,\n rowCount = 0,\n viewportRowCount,\n}: NavigationHookProps) => {\n // Keep this in sync with state value. This can be used by functions that need\n // to reference highlightedIndex at call time but do not need to be regenerated\n // every time it changes (i.e keep highlightedIndex out of their dependency\n // arrays, as it can update frequently)\n const highlightedIndexRef = useRef<number | undefined>(undefined);\n\n const [highlightedIndex, setHighlightedIdx] = useControlled({\n controlled: highlightedIndexProp,\n default: defaultHighlightedIndex,\n name: \"UseKeyboardNavigation\",\n });\n highlightedIndexRef.current = highlightedIndex;\n\n // We use aria row index for tracking rows\n const maxRowIndex = rowCount + headerCount;\n\n const setHighlightedIndex = useCallback(\n (idx: number) => {\n onHighlight?.(idx);\n setHighlightedIdx(idx);\n highlightedIndexRef.current = idx;\n },\n [onHighlight, setHighlightedIdx],\n );\n\n const setActiveCell = useCallback(\n (rowIdx: number, colIdx: number) => {\n const pos: CellPos = [rowIdx, colIdx];\n if (navigationStyle === \"row\") {\n setHighlightedIdx(rowIdx);\n } else {\n focusCell(pos);\n }\n },\n [focusCell, navigationStyle, setHighlightedIdx],\n );\n\n const nextPageItemIdx = useCallback(\n (\n key: \"PageDown\" | \"PageUp\" | \"Home\" | \"End\",\n [rowIdx, colIdx]: CellPos,\n ): Promise<CellPos> =>\n new Promise((resolve) => {\n let newRowIdx = rowIdx;\n switch (key) {\n case \"PageDown\": {\n newRowIdx = Math.min(rowCount - 1, rowIdx + viewportRowCount);\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-page\", direction: \"down\" });\n }\n break;\n }\n case \"PageUp\": {\n newRowIdx = Math.max(0, rowIdx - viewportRowCount);\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-page\", direction: \"up\" });\n }\n break;\n }\n case \"Home\": {\n newRowIdx = headerCount + 1;\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-end\", direction: \"home\" });\n }\n break;\n }\n case \"End\": {\n newRowIdx = rowCount + headerCount;\n if (newRowIdx !== rowIdx) {\n requestScroll?.({ type: \"scroll-end\", direction: \"end\" });\n }\n break;\n }\n }\n // Introduce a delay to allow the scroll operation to complete,\n // which will trigger a range reset and rerender of rows. We\n // might need to tweak how this works. If we introduce too big\n // a delay, we risk seeing the newly rendered rows, with the focus\n // still on the old cell, which will be apparent as a brief flash\n // of the old cell focus before switching to correct cell. If we were\n // to change the way re assign keys such that we can guarantee that\n // when we page down, rows in same position get same keys, then same\n // cell would be focussed in new page as previous and issue would not\n // arise.\n setTimeout(() => {\n resolve([newRowIdx, colIdx]);\n }, 35);\n }),\n [headerCount, requestScroll, rowCount, viewportRowCount],\n );\n\n const handleFocus = useCallback(() => {\n // console.log(`[useKeyboardNavigation] handleFocus `);\n if (disableHighlightOnFocus !== true) {\n if (containerRef.current?.contains(document.activeElement)) {\n // IF focus arrives via keyboard, a cell will have received focus,\n // we handle that here. If focus arrives via click on a cell with\n // no tabindex (i.e all cells except one) we leave that to the\n // click handler.\n const focusedCell = getFocusedCell(document.activeElement);\n if (focusedCell) {\n cellFocusStateRef.current.cell = focusedCell;\n if (navigationStyle === \"row\") {\n setHighlightedIdx(cellFocusStateRef.current.cellPos?.[0]);\n }\n }\n }\n }\n }, [\n disableHighlightOnFocus,\n containerRef,\n cellFocusStateRef,\n navigationStyle,\n setHighlightedIdx,\n ]);\n\n const navigateChildItems = useCallback(\n async (\n navigationStyle: \"cell\" | \"tree\" = \"cell\",\n key: NavigationKey,\n shiftKey = false,\n ): Promise<undefined> => {\n const { cellPos } = cellFocusStateRef.current;\n if (cellPos === undefined) {\n throw Error(\"navigateChildItems called before cellPos is set\");\n }\n const [rowIdx, colIdx] = cellPos;\n let nextRowIdx = -1,\n nextColIdx = -1;\n\n if (isPagingKey(key)) {\n [nextRowIdx, nextColIdx] = await nextPageItemIdx(key, cellPos);\n } else {\n const treeNodeOperation = getTreeNodeOperation(\n containerRef,\n navigationStyle,\n cellPos,\n key,\n shiftKey,\n );\n if (\n treeNodeOperation === \"expand\" ||\n treeNodeOperation === \"collapse\"\n ) {\n onToggleGroup(treeNodeOperation, rowIdx - headerCount - 1);\n } else if (treeNodeOperation === \"level-up\") {\n [nextRowIdx, nextColIdx] = getLevelUp(containerRef, cellPos);\n } else if (editSessionInProgress) {\n [nextRowIdx, nextColIdx] = getNextEditableCellPos(\n containerRef,\n key,\n cellPos,\n columnCount,\n maxRowIndex,\n );\n } else {\n [nextRowIdx, nextColIdx] = getNextCellPos(\n key,\n cellPos,\n columnCount,\n maxRowIndex,\n );\n }\n }\n\n if (nextRowIdx !== rowIdx || nextColIdx !== colIdx) {\n setActiveCell(nextRowIdx, nextColIdx);\n setHighlightedIndex(nextRowIdx);\n }\n },\n [\n cellFocusStateRef,\n nextPageItemIdx,\n containerRef,\n editSessionInProgress,\n onToggleGroup,\n headerCount,\n columnCount,\n maxRowIndex,\n setActiveCell,\n setHighlightedIndex,\n ],\n );\n\n const scrollRowIntoViewIfNecessary = useCallback(\n (rowIndex: number) => {\n requestScroll?.({ type: \"scroll-row\", rowIndex });\n },\n [requestScroll],\n );\n\n const moveHighlightedRow = useCallback(\n async (key: NavigationKey) => {\n const { current: highlighted } = highlightedIndexRef;\n const [nextRowIdx] = isPagingKey(key)\n ? await nextPageItemIdx(key, [highlighted ?? -1, 0])\n : getNextCellPos(key, [highlighted ?? -1, 0], columnCount, maxRowIndex);\n if (nextRowIdx !== highlighted) {\n setHighlightedIndex(nextRowIdx);\n // TO(DO make this a scroll request)\n scrollRowIntoViewIfNecessary(nextRowIdx);\n }\n },\n [\n columnCount,\n maxRowIndex,\n nextPageItemIdx,\n scrollRowIntoViewIfNecessary,\n setHighlightedIndex,\n ],\n );\n\n useEffect(() => {\n if (highlightedIndexProp !== undefined && highlightedIndexProp !== -1) {\n requestAnimationFrame(() => {\n // deferred call, ensuring table has fully rendered\n scrollRowIntoViewIfNecessary(highlightedIndexProp);\n });\n }\n }, [highlightedIndexProp, scrollRowIntoViewIfNecessary]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n // console.log(`[useKeyboardNavigation] handleKeyDown`);\n\n const cell = queryClosest<HTMLDivElement>(\n e.target,\n `${CellLocator},${CellControlLocator}`,\n );\n if (cellDropdownShowing(cell)) {\n return;\n }\n if (rowCount > 0 && isNavigationKey(e.key, navigationStyle)) {\n e.preventDefault();\n e.stopPropagation();\n if (navigationStyle === \"row\") {\n moveHighlightedRow(e.key);\n } else if (navigationStyle !== \"none\") {\n if (!focusControlWithinCell(e, cell)) {\n navigateChildItems(navigationStyle, e.key, e.shiftKey);\n }\n }\n // }\n }\n },\n [rowCount, navigationStyle, moveHighlightedRow, navigateChildItems],\n );\n\n const handleClick = useCallback(\n // Might not be a cell e.g the Settings button\n (evt: MouseEvent) => {\n // console.log(`[useKeyboardNavigation] click`);\n const target = queryClosest<HTMLDivElement>(evt.target, CellLocator);\n const focusedCell = getFocusedCell(target);\n if (focusedCell) {\n const [rowIdx, colIdx] = getAriaCellPos(focusedCell);\n setActiveCell(rowIdx, colIdx);\n }\n },\n [setActiveCell],\n );\n\n const handleMouseLeave = useCallback(() => {\n setHighlightedIndex(-1);\n }, [setHighlightedIndex]);\n\n const handleMouseMove = useCallback(\n (evt: MouseEvent) => {\n const rowIdx = closestRowIndex(evt.target as HTMLElement);\n if (rowIdx !== -1 && rowIdx !== highlightedIndexRef.current) {\n setHighlightedIndex(rowIdx);\n }\n },\n [setHighlightedIndex],\n );\n\n /**\n * used when editing cells\n */\n const navigateCell = useCallback(() => {\n navigateChildItems(\"cell\", \"ArrowDown\");\n }, [navigateChildItems]);\n\n return {\n highlightedIndexRef,\n navigateCell,\n onClick: handleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseLeave: navigationStyle === \"row\" ? handleMouseLeave : undefined,\n onMouseMove: navigationStyle === \"row\" ? handleMouseMove : undefined,\n };\n};\n"],"names":["queryClosest","useRef","useControlled","useCallback","getFocusedCell","navigationStyle","getTreeNodeOperation","getLevelUp","getNextEditableCellPos","getNextCellPos","useEffect","cellDropdownShowing","getAriaCellPos","closestRowIndex"],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
-
6
- const useMeasuredHeight = ({
7
- onHeightMeasured,
8
- height: heightProp = 0
9
- }) => {
10
- const [measuredHeight, setMeasuredHeight] = react.useState(heightProp);
11
- const lastMeasuredHeight = react.useRef(-1);
12
- react.useMemo(() => {
13
- if (heightProp !== 0) {
14
- setMeasuredHeight(heightProp);
15
- }
16
- }, [heightProp]);
17
- const resizeObserver = react.useMemo(() => {
18
- return new ResizeObserver((entries) => {
19
- for (const entry of entries) {
20
- const [{ blockSize: measuredSize }] = entry.borderBoxSize;
21
- const newHeight = Math.round(measuredSize);
22
- if (lastMeasuredHeight.current !== newHeight) {
23
- if (vuuUtils.isValidNumber(newHeight)) {
24
- lastMeasuredHeight.current = newHeight;
25
- setMeasuredHeight(newHeight);
26
- onHeightMeasured?.(newHeight);
27
- }
28
- }
29
- }
30
- });
31
- }, [onHeightMeasured]);
32
- const measuredRef = react.useCallback(
33
- (el) => {
34
- if (el) {
35
- if (heightProp === 0) {
36
- const { height } = el.getBoundingClientRect();
37
- resizeObserver.observe(el);
38
- const measuredHeight2 = Math.round(height);
39
- setMeasuredHeight(measuredHeight2);
40
- }
41
- } else {
42
- resizeObserver.disconnect();
43
- }
44
- },
45
- [resizeObserver, heightProp]
46
- );
47
- return { measuredHeight, measuredRef };
48
- };
49
-
50
- exports.useMeasuredHeight = useMeasuredHeight;
51
- //# sourceMappingURL=useMeasuredHeight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMeasuredHeight.js","sources":["../../../packages/vuu-table/src/useMeasuredHeight.ts"],"sourcesContent":["import { isValidNumber } from \"@vuu-ui/vuu-utils\";\nimport { RefCallback, useCallback, useMemo, useRef, useState } from \"react\";\n\ninterface MeasuredHeightHookProps {\n onHeightMeasured?: (height: number) => void;\n height?: number;\n}\n\nexport const useMeasuredHeight = ({\n onHeightMeasured,\n height: heightProp = 0,\n}: MeasuredHeightHookProps) => {\n const [measuredHeight, setMeasuredHeight] = useState(heightProp);\n const lastMeasuredHeight = useRef(-1);\n\n useMemo(() => {\n if (heightProp !== 0) {\n setMeasuredHeight(heightProp);\n }\n }, [heightProp]);\n\n const resizeObserver = useMemo(() => {\n return new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const [{ blockSize: measuredSize }] = entry.borderBoxSize;\n const newHeight = Math.round(measuredSize);\n if (lastMeasuredHeight.current !== newHeight) {\n if (isValidNumber(newHeight)) {\n lastMeasuredHeight.current = newHeight;\n setMeasuredHeight(newHeight);\n onHeightMeasured?.(newHeight);\n }\n }\n }\n });\n }, [onHeightMeasured]);\n\n const measuredRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n if (heightProp === 0) {\n const { height } = el.getBoundingClientRect();\n resizeObserver.observe(el);\n // avoids tiny sub-pixel discrepancies\n const measuredHeight = Math.round(height);\n setMeasuredHeight(measuredHeight);\n }\n } else {\n resizeObserver.disconnect();\n }\n },\n [resizeObserver, heightProp],\n );\n return { measuredHeight, measuredRef };\n};\n"],"names":["useState","useRef","useMemo","isValidNumber","useCallback","measuredHeight"],"mappings":";;;;;AAQO,MAAM,oBAAoB,CAAC;AAAA,EAChC,gBAAA;AAAA,EACA,QAAQ,UAAa,GAAA;AACvB,CAA+B,KAAA;AAC7B,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAS,UAAU,CAAA;AAC/D,EAAM,MAAA,kBAAA,GAAqBC,aAAO,CAAE,CAAA,CAAA;AAEpC,EAAAC,aAAA,CAAQ,MAAM;AACZ,IAAA,IAAI,eAAe,CAAG,EAAA;AACpB,MAAA,iBAAA,CAAkB,UAAU,CAAA;AAAA;AAC9B,GACF,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAM,MAAA,cAAA,GAAiBA,cAAQ,MAAM;AACnC,IAAO,OAAA,IAAI,cAAe,CAAA,CAAC,OAAmC,KAAA;AAC5D,MAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,QAAA,MAAM,CAAC,EAAE,SAAA,EAAW,YAAa,EAAC,IAAI,KAAM,CAAA,aAAA;AAC5C,QAAM,MAAA,SAAA,GAAY,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA;AACzC,QAAI,IAAA,kBAAA,CAAmB,YAAY,SAAW,EAAA;AAC5C,UAAI,IAAAC,sBAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,YAAA,kBAAA,CAAmB,OAAU,GAAA,SAAA;AAC7B,YAAA,iBAAA,CAAkB,SAAS,CAAA;AAC3B,YAAA,gBAAA,GAAmB,SAAS,CAAA;AAAA;AAC9B;AACF;AACF,KACD,CAAA;AAAA,GACH,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,MAAM,WAAc,GAAAC,iBAAA;AAAA,IAClB,CAAC,EAAO,KAAA;AACN,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,IAAI,eAAe,CAAG,EAAA;AACpB,UAAA,MAAM,EAAE,MAAA,EAAW,GAAA,EAAA,CAAG,qBAAsB,EAAA;AAC5C,UAAA,cAAA,CAAe,QAAQ,EAAE,CAAA;AAEzB,UAAMC,MAAAA,eAAAA,GAAiB,IAAK,CAAA,KAAA,CAAM,MAAM,CAAA;AACxC,UAAA,iBAAA,CAAkBA,eAAc,CAAA;AAAA;AAClC,OACK,MAAA;AACL,QAAA,cAAA,CAAe,UAAW,EAAA;AAAA;AAC5B,KACF;AAAA,IACA,CAAC,gBAAgB,UAAU;AAAA,GAC7B;AACA,EAAO,OAAA,EAAE,gBAAgB,WAAY,EAAA;AACvC;;;;"}
@@ -1,34 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
-
6
- const createClassNameGenerator = (ids) => {
7
- const functions = [];
8
- ids?.forEach((id) => {
9
- const fn = vuuUtils.getRowClassNameGenerator(id);
10
- if (fn) {
11
- functions.push(fn.fn);
12
- }
13
- });
14
- return (dataRow) => {
15
- const classNames = [];
16
- functions?.forEach((fn) => {
17
- const className = fn(dataRow);
18
- if (className) {
19
- classNames.push(className);
20
- }
21
- });
22
- return classNames.join(" ");
23
- };
24
- };
25
- const useRowClassNameGenerators = ({
26
- rowClassNameGenerators
27
- }) => {
28
- return react.useMemo(() => {
29
- return createClassNameGenerator(rowClassNameGenerators);
30
- }, [rowClassNameGenerators]);
31
- };
32
-
33
- exports.useRowClassNameGenerators = useRowClassNameGenerators;
34
- //# sourceMappingURL=useRowClassNameGenerators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRowClassNameGenerators.js","sources":["../../../packages/vuu-table/src/useRowClassNameGenerators.ts"],"sourcesContent":["import { TableConfig } from \"@vuu-ui/vuu-table-types\";\nimport {\n getRowClassNameGenerator,\n RowClassNameGenerator,\n} from \"@vuu-ui/vuu-utils\";\nimport { useMemo } from \"react\";\n\nconst createClassNameGenerator = (\n ids?: string[],\n): RowClassNameGenerator | undefined => {\n const functions: RowClassNameGenerator[] = [];\n ids?.forEach((id) => {\n const fn = getRowClassNameGenerator(id);\n if (fn) {\n functions.push(fn.fn);\n }\n });\n return (dataRow) => {\n const classNames: string[] = [];\n functions?.forEach((fn) => {\n const className = fn(dataRow);\n if (className) {\n classNames.push(className);\n }\n });\n return classNames.join(\" \");\n };\n};\n\nexport const useRowClassNameGenerators = ({\n rowClassNameGenerators,\n}: TableConfig) => {\n return useMemo<RowClassNameGenerator | undefined>(() => {\n return createClassNameGenerator(rowClassNameGenerators);\n }, [rowClassNameGenerators]);\n};\n"],"names":["getRowClassNameGenerator","useMemo"],"mappings":";;;;;AAOA,MAAM,wBAAA,GAA2B,CAC/B,GACsC,KAAA;AACtC,EAAA,MAAM,YAAqC,EAAC;AAC5C,EAAK,GAAA,EAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AACnB,IAAM,MAAA,EAAA,GAAKA,kCAAyB,EAAE,CAAA;AACtC,IAAA,IAAI,EAAI,EAAA;AACN,MAAU,SAAA,CAAA,IAAA,CAAK,GAAG,EAAE,CAAA;AAAA;AACtB,GACD,CAAA;AACD,EAAA,OAAO,CAAC,OAAY,KAAA;AAClB,IAAA,MAAM,aAAuB,EAAC;AAC9B,IAAW,SAAA,EAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AACzB,MAAM,MAAA,SAAA,GAAY,GAAG,OAAO,CAAA;AAC5B,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA;AAC3B,KACD,CAAA;AACD,IAAO,OAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AAAA,GAC5B;AACF,CAAA;AAEO,MAAM,4BAA4B,CAAC;AAAA,EACxC;AACF,CAAmB,KAAA;AACjB,EAAA,OAAOC,cAA2C,MAAM;AACtD,IAAA,OAAO,yBAAyB,sBAAsB,CAAA;AAAA,GACxD,EAAG,CAAC,sBAAsB,CAAC,CAAA;AAC7B;;;;"}
@@ -1,130 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
- var tableDomUtils = require('./table-dom-utils.js');
6
-
7
- const orderedRowKeys = (activeRowIdentifier, newRowIdentifier, rangeSelect = false) => {
8
- if (rangeSelect && activeRowIdentifier) {
9
- if (newRowIdentifier.rowIdx > activeRowIdentifier.rowIdx) {
10
- return [activeRowIdentifier.rowKey, newRowIdentifier.rowKey];
11
- } else {
12
- return [newRowIdentifier.rowKey, activeRowIdentifier.rowKey];
13
- }
14
- } else {
15
- return [newRowIdentifier.rowKey];
16
- }
17
- };
18
- const defaultSelectionKeys = ["Enter", " "];
19
- const useSelection = ({
20
- allowSelectCheckboxRow,
21
- containerRef,
22
- dataSource,
23
- highlightedIndexRef,
24
- onSelect,
25
- onSelectionChange,
26
- selectionKeys = defaultSelectionKeys,
27
- selectionModel
28
- }) => {
29
- const lastActiveRef = react.useRef(void 0);
30
- const [allRowsSelected, setAllRowsSelected] = react.useState(false);
31
- const selectionAllowed = selectionModel !== "none" && selectionModel !== "checkbox-disabled";
32
- const handleRowSelection = react.useCallback(
33
- (selectedRowsCount) => {
34
- setAllRowsSelected(
35
- (allSelected) => allSelected && selectedRowsCount < dataSource.size ? false : allSelected
36
- );
37
- },
38
- [dataSource.size]
39
- );
40
- react.useEffect(() => {
41
- dataSource.on("row-selection", handleRowSelection);
42
- return () => dataSource.removeListener("row-selection", handleRowSelection);
43
- }, [dataSource, handleRowSelection]);
44
- const isSelectionEvent = react.useCallback(
45
- (evt) => selectionKeys.includes(evt.key),
46
- [selectionKeys]
47
- );
48
- const handleRowClick = react.useCallback(
49
- (e, dataRow, rangeSelect, keepExistingSelection) => {
50
- const { index: rowIdx, key: rowKey } = dataRow;
51
- const { current: activeRowKey } = lastActiveRef;
52
- const newRowIdentifier = { rowIdx, rowKey };
53
- if (dataRow.isSelected && selectionModel === "single-no-deselect") {
54
- return;
55
- }
56
- const selectOperation = dataRow.isSelected ? vuuUtils.deselectItem : vuuUtils.selectItem;
57
- if (selectionModel === "checkbox" && allowSelectCheckboxRow !== true) {
58
- const cell = vuuUtils.queryClosest(e.target, ".vuuTableCell");
59
- if (!cell?.querySelector(".vuuCheckboxRowSelector")) {
60
- return;
61
- }
62
- }
63
- const [fromRowKey, toRowKey] = orderedRowKeys(
64
- activeRowKey,
65
- newRowIdentifier,
66
- rangeSelect
67
- );
68
- const selectRequest = selectOperation(
69
- selectionModel,
70
- fromRowKey,
71
- rangeSelect,
72
- keepExistingSelection,
73
- toRowKey
74
- );
75
- lastActiveRef.current = newRowIdentifier;
76
- if (selectRequest) {
77
- onSelect?.(selectOperation === vuuUtils.selectItem ? dataRow : null);
78
- onSelectionChange?.(selectRequest);
79
- }
80
- if (allRowsSelected && selectOperation === vuuUtils.deselectItem) {
81
- setAllRowsSelected(false);
82
- }
83
- },
84
- [
85
- allRowsSelected,
86
- allowSelectCheckboxRow,
87
- onSelect,
88
- onSelectionChange,
89
- selectionModel
90
- ]
91
- );
92
- const handleKeyDown = react.useCallback(
93
- (e) => {
94
- if (isSelectionEvent(e)) {
95
- const { current: rowIndex } = highlightedIndexRef;
96
- const { current: container } = containerRef;
97
- if (rowIndex !== void 0 && rowIndex !== -1 && container) {
98
- const rowEl = tableDomUtils.getRowElementByAriaIndex(container, rowIndex);
99
- if (rowEl) {
100
- vuuUtils.dispatchMouseEvent(rowEl, "click");
101
- }
102
- }
103
- }
104
- },
105
- [containerRef, highlightedIndexRef, isSelectionEvent]
106
- );
107
- const handleCheckboxColumnHeaderClick = react.useCallback(() => {
108
- setAllRowsSelected((allSelected) => {
109
- if (allSelected) {
110
- onSelectionChange({
111
- type: "DESELECT_ALL"
112
- });
113
- } else {
114
- onSelectionChange({
115
- type: "SELECT_ALL"
116
- });
117
- }
118
- return !allSelected;
119
- });
120
- }, [onSelectionChange]);
121
- return {
122
- allRowsSelected,
123
- onCheckBoxColumnHeaderClick: handleCheckboxColumnHeaderClick,
124
- onKeyDown: handleKeyDown,
125
- onRowClick: selectionAllowed ? handleRowClick : void 0
126
- };
127
- };
128
-
129
- exports.useSelection = useSelection;
130
- //# sourceMappingURL=useSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSelection.js","sources":["../../../packages/vuu-table/src/useSelection.ts"],"sourcesContent":["import {\n TableRowClickHandlerInternal,\n TableRowSelectHandlerInternal,\n SelectionChangeHandler,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n deselectItem,\n dispatchMouseEvent,\n queryClosest,\n selectItem,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEvent,\n KeyboardEventHandler,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { getRowElementByAriaIndex } from \"./table-dom-utils\";\nimport { TableProps } from \"./Table\";\nimport { DataSource, RowSelectionEventHandler } from \"@vuu-ui/vuu-data-types\";\n\nconst orderedRowKeys = (\n activeRowIdentifier: RowIdentifier | undefined,\n newRowIdentifier: RowIdentifier,\n rangeSelect = false,\n): [string, string] | [string] => {\n if (rangeSelect && activeRowIdentifier) {\n if (newRowIdentifier.rowIdx > activeRowIdentifier.rowIdx) {\n return [activeRowIdentifier.rowKey, newRowIdentifier.rowKey];\n } else {\n return [newRowIdentifier.rowKey, activeRowIdentifier.rowKey];\n }\n } else {\n return [newRowIdentifier.rowKey];\n }\n};\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\ntype RowIdentifier = {\n rowIdx: number;\n rowKey: string;\n};\n\nexport interface SelectionHookProps\n extends Pick<TableProps, \"allowSelectCheckboxRow\" | \"onSelectionChange\"> {\n containerRef: RefObject<HTMLElement | null>;\n dataSource: DataSource;\n highlightedIndexRef: RefObject<number | undefined>;\n selectionKeys?: string[];\n selectionModel: TableSelectionModel;\n onSelectionChange: SelectionChangeHandler;\n onSelect?: TableRowSelectHandlerInternal;\n}\n\nexport const useSelection = ({\n allowSelectCheckboxRow,\n containerRef,\n dataSource,\n highlightedIndexRef,\n onSelect,\n onSelectionChange,\n selectionKeys = defaultSelectionKeys,\n selectionModel,\n}: SelectionHookProps) => {\n const lastActiveRef = useRef<RowIdentifier | undefined>(undefined);\n const [allRowsSelected, setAllRowsSelected] = useState(false);\n\n const selectionAllowed =\n selectionModel !== \"none\" && selectionModel !== \"checkbox-disabled\";\n\n const handleRowSelection = useCallback<RowSelectionEventHandler>(\n (selectedRowsCount) => {\n setAllRowsSelected((allSelected) =>\n allSelected && selectedRowsCount < dataSource.size\n ? false\n : allSelected,\n );\n },\n [dataSource.size],\n );\n\n useEffect(() => {\n dataSource.on(\"row-selection\", handleRowSelection);\n return () => dataSource.removeListener(\"row-selection\", handleRowSelection);\n }, [dataSource, handleRowSelection]);\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent<HTMLElement>) => selectionKeys.includes(evt.key),\n [selectionKeys],\n );\n\n const handleRowClick = useCallback<TableRowClickHandlerInternal>(\n (e, dataRow, rangeSelect, keepExistingSelection) => {\n const { index: rowIdx, key: rowKey } = dataRow;\n const { current: activeRowKey } = lastActiveRef;\n const newRowIdentifier = { rowIdx, rowKey } as RowIdentifier;\n\n if (dataRow.isSelected && selectionModel === \"single-no-deselect\") {\n return;\n }\n\n const selectOperation = dataRow.isSelected ? deselectItem : selectItem;\n\n if (selectionModel === \"checkbox\" && allowSelectCheckboxRow !== true) {\n const cell = queryClosest(e.target, \".vuuTableCell\");\n if (!cell?.querySelector(\".vuuCheckboxRowSelector\")) {\n return;\n }\n }\n\n const [fromRowKey, toRowKey] = orderedRowKeys(\n activeRowKey,\n newRowIdentifier,\n rangeSelect,\n );\n\n const selectRequest = selectOperation(\n selectionModel,\n fromRowKey,\n rangeSelect,\n keepExistingSelection,\n toRowKey,\n );\n\n lastActiveRef.current = newRowIdentifier;\n\n if (selectRequest) {\n onSelect?.(selectOperation === selectItem ? dataRow : null);\n onSelectionChange?.(selectRequest);\n }\n\n if (allRowsSelected && selectOperation === deselectItem) {\n setAllRowsSelected(false);\n }\n },\n [\n allRowsSelected,\n allowSelectCheckboxRow,\n onSelect,\n onSelectionChange,\n selectionModel,\n ],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLElement>>(\n (e) => {\n if (isSelectionEvent(e)) {\n const { current: rowIndex } = highlightedIndexRef;\n const { current: container } = containerRef;\n if (rowIndex !== undefined && rowIndex !== -1 && container) {\n const rowEl = getRowElementByAriaIndex(container, rowIndex);\n if (rowEl) {\n dispatchMouseEvent(rowEl, \"click\");\n }\n }\n }\n },\n [containerRef, highlightedIndexRef, isSelectionEvent],\n );\n\n const handleCheckboxColumnHeaderClick = useCallback(() => {\n setAllRowsSelected((allSelected) => {\n if (allSelected) {\n onSelectionChange({\n type: \"DESELECT_ALL\",\n });\n } else {\n onSelectionChange({\n type: \"SELECT_ALL\",\n });\n }\n return !allSelected;\n });\n }, [onSelectionChange]);\n\n return {\n allRowsSelected,\n onCheckBoxColumnHeaderClick: handleCheckboxColumnHeaderClick,\n onKeyDown: handleKeyDown,\n onRowClick: selectionAllowed ? handleRowClick : undefined,\n };\n};\n"],"names":["useRef","useState","useCallback","useEffect","deselectItem","selectItem","queryClosest","getRowElementByAriaIndex","dispatchMouseEvent"],"mappings":"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"}