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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/package.json +13 -16
  2. package/src/CellFocusState.mjs +25 -0
  3. package/src/Row.mjs +83 -0
  4. package/src/Table.css.js +441 -0
  5. package/src/Table.mjs +297 -0
  6. package/src/VirtualColSpan.mjs +12 -0
  7. package/src/applyHighlighting.mjs +28 -0
  8. package/src/bulk-edit/BulkEditPanel.css.js +27 -0
  9. package/src/bulk-edit/BulkEditPanel.mjs +77 -0
  10. package/src/bulk-edit/ColumnCascadingUpdateEditor.css.js +86 -0
  11. package/src/bulk-edit/ColumnCascadingUpdateEditor.mjs +59 -0
  12. package/src/bulk-edit/InsertNewRowEditor.css.js +86 -0
  13. package/src/bulk-edit/InsertNewRowEditor.mjs +59 -0
  14. package/src/bulk-edit/useBulkEditPanel.mjs +61 -0
  15. package/src/bulk-edit/useColumnCascadingEditor.mjs +124 -0
  16. package/src/cell-block/CellBlock.css.js +95 -0
  17. package/src/cell-block/CellBlock.mjs +32 -0
  18. package/src/cell-block/cellblock-utils.mjs +114 -0
  19. package/src/cell-block/useCellBlockSelection.mjs +245 -0
  20. package/src/cell-renderers/checkbox-cell/CheckboxCell.css.js +16 -0
  21. package/src/cell-renderers/checkbox-cell/CheckboxCell.mjs +56 -0
  22. package/src/cell-renderers/checkbox-cell/index.mjs +1 -0
  23. package/src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +19 -0
  24. package/src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.mjs +34 -0
  25. package/src/cell-renderers/checkbox-row-selector/index.mjs +1 -0
  26. package/src/cell-renderers/index.mjs +4 -0
  27. package/src/cell-renderers/input-cell/InputCell.css.js +81 -0
  28. package/src/cell-renderers/input-cell/InputCell.mjs +73 -0
  29. package/src/cell-renderers/input-cell/index.mjs +1 -0
  30. package/src/cell-renderers/input-cell/useInputCell.mjs +199 -0
  31. package/src/cell-renderers/toggle-cell/ToggleCell.css.js +31 -0
  32. package/src/cell-renderers/toggle-cell/ToggleCell.mjs +47 -0
  33. package/src/cell-renderers/toggle-cell/index.mjs +1 -0
  34. package/src/column-header-pill/ColumnHeaderPill.css.js +34 -0
  35. package/src/column-header-pill/ColumnHeaderPill.mjs +39 -0
  36. package/src/column-header-pill/GroupColumnPill.css.js +10 -0
  37. package/src/column-header-pill/GroupColumnPill.mjs +33 -0
  38. package/src/column-header-pill/SortIndicator.css.js +15 -0
  39. package/src/column-header-pill/SortIndicator.mjs +29 -0
  40. package/src/column-header-pill/index.mjs +3 -0
  41. package/src/column-resizing/ColumnResizer.css.js +32 -0
  42. package/src/column-resizing/ColumnResizer.mjs +69 -0
  43. package/src/column-resizing/index.mjs +2 -0
  44. package/src/column-resizing/useTableColumnResize.mjs +57 -0
  45. package/src/data-row/DataRow.mjs +298 -0
  46. package/src/header-cell/GroupHeaderCell.css.js +91 -0
  47. package/src/header-cell/GroupHeaderCell.mjs +98 -0
  48. package/src/header-cell/HeaderCell.css.js +182 -0
  49. package/src/header-cell/HeaderCell.mjs +126 -0
  50. package/src/header-cell/index.mjs +2 -0
  51. package/src/index.mjs +20 -0
  52. package/src/pagination/PaginationControl.css.js +18 -0
  53. package/src/pagination/PaginationControl.mjs +34 -0
  54. package/src/pagination/index.mjs +1 -0
  55. package/src/pagination/usePagination.mjs +29 -0
  56. package/src/table-cell/TableCell.css.js +67 -0
  57. package/src/table-cell/TableCell.mjs +54 -0
  58. package/src/table-cell/TableGroupCell.css.js +91 -0
  59. package/src/table-cell/TableGroupCell.mjs +61 -0
  60. package/src/table-cell/index.mjs +2 -0
  61. package/src/table-config/useTableConfig.mjs +49 -0
  62. package/src/table-config.mjs +38 -0
  63. package/src/table-data-source/DataRowMovingWindow.mjs +66 -0
  64. package/src/table-data-source/useDataSource.mjs +177 -0
  65. package/src/table-dom-utils.mjs +162 -0
  66. package/src/table-header/HeaderProvider.mjs +14 -0
  67. package/src/table-header/TableHeader.mjs +182 -0
  68. package/src/table-header/index.mjs +2 -0
  69. package/src/table-header/useTableHeader.mjs +69 -0
  70. package/src/useCell.mjs +22 -0
  71. package/src/useCellEditing.mjs +58 -0
  72. package/src/useCellFocus.mjs +112 -0
  73. package/src/useControlledTableNavigation.mjs +34 -0
  74. package/src/useEditableCell.mjs +18 -0
  75. package/src/useInitialValue.mjs +6 -0
  76. package/src/useKeyboardNavigation.mjs +275 -0
  77. package/src/useMeasuredHeight.mjs +44 -0
  78. package/src/useResizeObserver.mjs +118 -0
  79. package/src/useRowClassNameGenerators.mjs +21 -0
  80. package/src/useSelection.mjs +101 -0
  81. package/src/useTable.mjs +588 -0
  82. package/src/useTableContextMenu.mjs +54 -0
  83. package/src/useTableModel.mjs +344 -0
  84. package/src/useTableScroll.mjs +382 -0
  85. package/src/useTableViewport.mjs +120 -0
  86. package/types/VirtualColSpan.d.ts +2 -2
  87. package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +1 -1
  88. package/types/useTable.d.ts +3 -3
  89. package/cjs/CellFocusState.js +0 -45
  90. package/cjs/CellFocusState.js.map +0 -1
  91. package/cjs/Row.js +0 -116
  92. package/cjs/Row.js.map +0 -1
  93. package/cjs/Table.css.js +0 -6
  94. package/cjs/Table.css.js.map +0 -1
  95. package/cjs/Table.js +0 -455
  96. package/cjs/Table.js.map +0 -1
  97. package/cjs/VirtualColSpan.js +0 -19
  98. package/cjs/VirtualColSpan.js.map +0 -1
  99. package/cjs/applyHighlighting.js +0 -33
  100. package/cjs/applyHighlighting.js.map +0 -1
  101. package/cjs/bulk-edit/BulkEditPanel.css.js +0 -6
  102. package/cjs/bulk-edit/BulkEditPanel.css.js.map +0 -1
  103. package/cjs/bulk-edit/BulkEditPanel.js +0 -107
  104. package/cjs/bulk-edit/BulkEditPanel.js.map +0 -1
  105. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -6
  106. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
  107. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js +0 -80
  108. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
  109. package/cjs/bulk-edit/InsertNewRowEditor.css.js +0 -6
  110. package/cjs/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
  111. package/cjs/bulk-edit/InsertNewRowEditor.js +0 -80
  112. package/cjs/bulk-edit/InsertNewRowEditor.js.map +0 -1
  113. package/cjs/bulk-edit/useBulkEditPanel.js +0 -70
  114. package/cjs/bulk-edit/useBulkEditPanel.js.map +0 -1
  115. package/cjs/bulk-edit/useColumnCascadingEditor.js +0 -143
  116. package/cjs/bulk-edit/useColumnCascadingEditor.js.map +0 -1
  117. package/cjs/cell-block/CellBlock.css.js +0 -6
  118. package/cjs/cell-block/CellBlock.css.js.map +0 -1
  119. package/cjs/cell-block/CellBlock.js +0 -45
  120. package/cjs/cell-block/CellBlock.js.map +0 -1
  121. package/cjs/cell-block/cellblock-utils.js +0 -125
  122. package/cjs/cell-block/cellblock-utils.js.map +0 -1
  123. package/cjs/cell-block/useCellBlockSelection.js +0 -257
  124. package/cjs/cell-block/useCellBlockSelection.js.map +0 -1
  125. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -6
  126. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  127. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +0 -67
  128. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  129. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -6
  130. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  131. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -51
  132. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  133. package/cjs/cell-renderers/input-cell/InputCell.css.js +0 -6
  134. package/cjs/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  135. package/cjs/cell-renderers/input-cell/InputCell.js +0 -63
  136. package/cjs/cell-renderers/input-cell/InputCell.js.map +0 -1
  137. package/cjs/cell-renderers/input-cell/useInputCell.js +0 -211
  138. package/cjs/cell-renderers/input-cell/useInputCell.js.map +0 -1
  139. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +0 -6
  140. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  141. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +0 -66
  142. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  143. package/cjs/column-header-pill/ColumnHeaderPill.css.js +0 -6
  144. package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  145. package/cjs/column-header-pill/ColumnHeaderPill.js +0 -53
  146. package/cjs/column-header-pill/ColumnHeaderPill.js.map +0 -1
  147. package/cjs/column-header-pill/GroupColumnPill.css.js +0 -6
  148. package/cjs/column-header-pill/GroupColumnPill.css.js.map +0 -1
  149. package/cjs/column-header-pill/GroupColumnPill.js +0 -29
  150. package/cjs/column-header-pill/GroupColumnPill.js.map +0 -1
  151. package/cjs/column-header-pill/SortIndicator.css.js +0 -6
  152. package/cjs/column-header-pill/SortIndicator.css.js.map +0 -1
  153. package/cjs/column-header-pill/SortIndicator.js +0 -27
  154. package/cjs/column-header-pill/SortIndicator.js.map +0 -1
  155. package/cjs/column-resizing/ColumnResizer.css.js +0 -6
  156. package/cjs/column-resizing/ColumnResizer.css.js.map +0 -1
  157. package/cjs/column-resizing/ColumnResizer.js +0 -82
  158. package/cjs/column-resizing/ColumnResizer.js.map +0 -1
  159. package/cjs/column-resizing/useTableColumnResize.js +0 -55
  160. package/cjs/column-resizing/useTableColumnResize.js.map +0 -1
  161. package/cjs/data-row/DataRow.js +0 -262
  162. package/cjs/data-row/DataRow.js.map +0 -1
  163. package/cjs/header-cell/GroupHeaderCell.css.js +0 -6
  164. package/cjs/header-cell/GroupHeaderCell.css.js.map +0 -1
  165. package/cjs/header-cell/GroupHeaderCell.js +0 -127
  166. package/cjs/header-cell/GroupHeaderCell.js.map +0 -1
  167. package/cjs/header-cell/HeaderCell.css.js +0 -6
  168. package/cjs/header-cell/HeaderCell.css.js.map +0 -1
  169. package/cjs/header-cell/HeaderCell.js +0 -139
  170. package/cjs/header-cell/HeaderCell.js.map +0 -1
  171. package/cjs/index.js +0 -64
  172. package/cjs/index.js.map +0 -1
  173. package/cjs/pagination/PaginationControl.css.js +0 -6
  174. package/cjs/pagination/PaginationControl.css.js.map +0 -1
  175. package/cjs/pagination/PaginationControl.js +0 -38
  176. package/cjs/pagination/PaginationControl.js.map +0 -1
  177. package/cjs/pagination/usePagination.js +0 -36
  178. package/cjs/pagination/usePagination.js.map +0 -1
  179. package/cjs/table-cell/TableCell.css.js +0 -6
  180. package/cjs/table-cell/TableCell.css.js.map +0 -1
  181. package/cjs/table-cell/TableCell.js +0 -75
  182. package/cjs/table-cell/TableCell.js.map +0 -1
  183. package/cjs/table-cell/TableGroupCell.css.js +0 -6
  184. package/cjs/table-cell/TableGroupCell.css.js.map +0 -1
  185. package/cjs/table-cell/TableGroupCell.js +0 -65
  186. package/cjs/table-cell/TableGroupCell.js.map +0 -1
  187. package/cjs/table-config/useTableConfig.js +0 -67
  188. package/cjs/table-config/useTableConfig.js.map +0 -1
  189. package/cjs/table-config.js +0 -35
  190. package/cjs/table-config.js.map +0 -1
  191. package/cjs/table-data-source/DataRowMovingWindow.js +0 -99
  192. package/cjs/table-data-source/DataRowMovingWindow.js.map +0 -1
  193. package/cjs/table-data-source/useDataSource.js +0 -236
  194. package/cjs/table-data-source/useDataSource.js.map +0 -1
  195. package/cjs/table-dom-utils.js +0 -206
  196. package/cjs/table-dom-utils.js.map +0 -1
  197. package/cjs/table-header/HeaderProvider.js +0 -18
  198. package/cjs/table-header/HeaderProvider.js.map +0 -1
  199. package/cjs/table-header/TableHeader.js +0 -180
  200. package/cjs/table-header/TableHeader.js.map +0 -1
  201. package/cjs/table-header/useTableHeader.js +0 -87
  202. package/cjs/table-header/useTableHeader.js.map +0 -1
  203. package/cjs/useCell.js +0 -26
  204. package/cjs/useCell.js.map +0 -1
  205. package/cjs/useCellEditing.js +0 -77
  206. package/cjs/useCellEditing.js.map +0 -1
  207. package/cjs/useCellFocus.js +0 -119
  208. package/cjs/useCellFocus.js.map +0 -1
  209. package/cjs/useControlledTableNavigation.js +0 -46
  210. package/cjs/useControlledTableNavigation.js.map +0 -1
  211. package/cjs/useEditableCell.js +0 -27
  212. package/cjs/useEditableCell.js.map +0 -1
  213. package/cjs/useKeyboardNavigation.js +0 -323
  214. package/cjs/useKeyboardNavigation.js.map +0 -1
  215. package/cjs/useMeasuredHeight.js +0 -51
  216. package/cjs/useMeasuredHeight.js.map +0 -1
  217. package/cjs/useRowClassNameGenerators.js +0 -34
  218. package/cjs/useRowClassNameGenerators.js.map +0 -1
  219. package/cjs/useSelection.js +0 -130
  220. package/cjs/useSelection.js.map +0 -1
  221. package/cjs/useTable.js +0 -742
  222. package/cjs/useTable.js.map +0 -1
  223. package/cjs/useTableContextMenu.js +0 -76
  224. package/cjs/useTableContextMenu.js.map +0 -1
  225. package/cjs/useTableModel.js +0 -421
  226. package/cjs/useTableModel.js.map +0 -1
  227. package/cjs/useTableScroll.js +0 -464
  228. package/cjs/useTableScroll.js.map +0 -1
  229. package/cjs/useTableViewport.js +0 -137
  230. package/cjs/useTableViewport.js.map +0 -1
  231. package/esm/CellFocusState.js +0 -43
  232. package/esm/CellFocusState.js.map +0 -1
  233. package/esm/Row.js +0 -114
  234. package/esm/Row.js.map +0 -1
  235. package/esm/Table.css.js +0 -4
  236. package/esm/Table.css.js.map +0 -1
  237. package/esm/Table.js +0 -453
  238. package/esm/Table.js.map +0 -1
  239. package/esm/VirtualColSpan.js +0 -17
  240. package/esm/VirtualColSpan.js.map +0 -1
  241. package/esm/applyHighlighting.js +0 -31
  242. package/esm/applyHighlighting.js.map +0 -1
  243. package/esm/bulk-edit/BulkEditPanel.css.js +0 -4
  244. package/esm/bulk-edit/BulkEditPanel.css.js.map +0 -1
  245. package/esm/bulk-edit/BulkEditPanel.js +0 -105
  246. package/esm/bulk-edit/BulkEditPanel.js.map +0 -1
  247. package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -4
  248. package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
  249. package/esm/bulk-edit/ColumnCascadingUpdateEditor.js +0 -78
  250. package/esm/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
  251. package/esm/bulk-edit/InsertNewRowEditor.css.js +0 -4
  252. package/esm/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
  253. package/esm/bulk-edit/InsertNewRowEditor.js +0 -78
  254. package/esm/bulk-edit/InsertNewRowEditor.js.map +0 -1
  255. package/esm/bulk-edit/useBulkEditPanel.js +0 -68
  256. package/esm/bulk-edit/useBulkEditPanel.js.map +0 -1
  257. package/esm/bulk-edit/useColumnCascadingEditor.js +0 -141
  258. package/esm/bulk-edit/useColumnCascadingEditor.js.map +0 -1
  259. package/esm/cell-block/CellBlock.css.js +0 -4
  260. package/esm/cell-block/CellBlock.css.js.map +0 -1
  261. package/esm/cell-block/CellBlock.js +0 -43
  262. package/esm/cell-block/CellBlock.js.map +0 -1
  263. package/esm/cell-block/cellblock-utils.js +0 -116
  264. package/esm/cell-block/cellblock-utils.js.map +0 -1
  265. package/esm/cell-block/useCellBlockSelection.js +0 -255
  266. package/esm/cell-block/useCellBlockSelection.js.map +0 -1
  267. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -4
  268. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  269. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +0 -65
  270. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  271. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -4
  272. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  273. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -49
  274. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  275. package/esm/cell-renderers/input-cell/InputCell.css.js +0 -4
  276. package/esm/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  277. package/esm/cell-renderers/input-cell/InputCell.js +0 -61
  278. package/esm/cell-renderers/input-cell/InputCell.js.map +0 -1
  279. package/esm/cell-renderers/input-cell/useInputCell.js +0 -209
  280. package/esm/cell-renderers/input-cell/useInputCell.js.map +0 -1
  281. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +0 -4
  282. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  283. package/esm/cell-renderers/toggle-cell/ToggleCell.js +0 -64
  284. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  285. package/esm/column-header-pill/ColumnHeaderPill.css.js +0 -4
  286. package/esm/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  287. package/esm/column-header-pill/ColumnHeaderPill.js +0 -51
  288. package/esm/column-header-pill/ColumnHeaderPill.js.map +0 -1
  289. package/esm/column-header-pill/GroupColumnPill.css.js +0 -4
  290. package/esm/column-header-pill/GroupColumnPill.css.js.map +0 -1
  291. package/esm/column-header-pill/GroupColumnPill.js +0 -27
  292. package/esm/column-header-pill/GroupColumnPill.js.map +0 -1
  293. package/esm/column-header-pill/SortIndicator.css.js +0 -4
  294. package/esm/column-header-pill/SortIndicator.css.js.map +0 -1
  295. package/esm/column-header-pill/SortIndicator.js +0 -25
  296. package/esm/column-header-pill/SortIndicator.js.map +0 -1
  297. package/esm/column-resizing/ColumnResizer.css.js +0 -4
  298. package/esm/column-resizing/ColumnResizer.css.js.map +0 -1
  299. package/esm/column-resizing/ColumnResizer.js +0 -80
  300. package/esm/column-resizing/ColumnResizer.js.map +0 -1
  301. package/esm/column-resizing/useTableColumnResize.js +0 -53
  302. package/esm/column-resizing/useTableColumnResize.js.map +0 -1
  303. package/esm/data-row/DataRow.js +0 -260
  304. package/esm/data-row/DataRow.js.map +0 -1
  305. package/esm/header-cell/GroupHeaderCell.css.js +0 -4
  306. package/esm/header-cell/GroupHeaderCell.css.js.map +0 -1
  307. package/esm/header-cell/GroupHeaderCell.js +0 -125
  308. package/esm/header-cell/GroupHeaderCell.js.map +0 -1
  309. package/esm/header-cell/HeaderCell.css.js +0 -4
  310. package/esm/header-cell/HeaderCell.css.js.map +0 -1
  311. package/esm/header-cell/HeaderCell.js +0 -137
  312. package/esm/header-cell/HeaderCell.js.map +0 -1
  313. package/esm/index.js +0 -27
  314. package/esm/index.js.map +0 -1
  315. package/esm/pagination/PaginationControl.css.js +0 -4
  316. package/esm/pagination/PaginationControl.css.js.map +0 -1
  317. package/esm/pagination/PaginationControl.js +0 -36
  318. package/esm/pagination/PaginationControl.js.map +0 -1
  319. package/esm/pagination/usePagination.js +0 -34
  320. package/esm/pagination/usePagination.js.map +0 -1
  321. package/esm/table-cell/TableCell.css.js +0 -4
  322. package/esm/table-cell/TableCell.css.js.map +0 -1
  323. package/esm/table-cell/TableCell.js +0 -73
  324. package/esm/table-cell/TableCell.js.map +0 -1
  325. package/esm/table-cell/TableGroupCell.css.js +0 -4
  326. package/esm/table-cell/TableGroupCell.css.js.map +0 -1
  327. package/esm/table-cell/TableGroupCell.js +0 -63
  328. package/esm/table-cell/TableGroupCell.js.map +0 -1
  329. package/esm/table-config/useTableConfig.js +0 -65
  330. package/esm/table-config/useTableConfig.js.map +0 -1
  331. package/esm/table-config.js +0 -33
  332. package/esm/table-config.js.map +0 -1
  333. package/esm/table-data-source/DataRowMovingWindow.js +0 -97
  334. package/esm/table-data-source/DataRowMovingWindow.js.map +0 -1
  335. package/esm/table-data-source/useDataSource.js +0 -234
  336. package/esm/table-data-source/useDataSource.js.map +0 -1
  337. package/esm/table-dom-utils.js +0 -188
  338. package/esm/table-dom-utils.js.map +0 -1
  339. package/esm/table-header/HeaderProvider.js +0 -15
  340. package/esm/table-header/HeaderProvider.js.map +0 -1
  341. package/esm/table-header/TableHeader.js +0 -178
  342. package/esm/table-header/TableHeader.js.map +0 -1
  343. package/esm/table-header/useTableHeader.js +0 -85
  344. package/esm/table-header/useTableHeader.js.map +0 -1
  345. package/esm/useCell.js +0 -24
  346. package/esm/useCell.js.map +0 -1
  347. package/esm/useCellEditing.js +0 -75
  348. package/esm/useCellEditing.js.map +0 -1
  349. package/esm/useCellFocus.js +0 -117
  350. package/esm/useCellFocus.js.map +0 -1
  351. package/esm/useControlledTableNavigation.js +0 -43
  352. package/esm/useControlledTableNavigation.js.map +0 -1
  353. package/esm/useEditableCell.js +0 -25
  354. package/esm/useEditableCell.js.map +0 -1
  355. package/esm/useKeyboardNavigation.js +0 -319
  356. package/esm/useKeyboardNavigation.js.map +0 -1
  357. package/esm/useMeasuredHeight.js +0 -49
  358. package/esm/useMeasuredHeight.js.map +0 -1
  359. package/esm/useRowClassNameGenerators.js +0 -32
  360. package/esm/useRowClassNameGenerators.js.map +0 -1
  361. package/esm/useSelection.js +0 -128
  362. package/esm/useSelection.js.map +0 -1
  363. package/esm/useTable.js +0 -740
  364. package/esm/useTable.js.map +0 -1
  365. package/esm/useTableContextMenu.js +0 -73
  366. package/esm/useTableContextMenu.js.map +0 -1
  367. package/esm/useTableModel.js +0 -419
  368. package/esm/useTableModel.js.map +0 -1
  369. package/esm/useTableScroll.js +0 -461
  370. package/esm/useTableScroll.js.map +0 -1
  371. package/esm/useTableViewport.js +0 -135
  372. package/esm/useTableViewport.js.map +0 -1
@@ -1,178 +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 { isNotHidden, DragDropProvider, RestrictToHorizontalAxis, KeyboardSensor, PointerSensor, isGroupColumn, DragOverlay } from '@vuu-ui/vuu-utils';
5
- import { memo, useMemo, isValidElement, cloneElement } from 'react';
6
- import { GroupHeaderCell } from '../header-cell/GroupHeaderCell.js';
7
- import { HeaderCell } from '../header-cell/HeaderCell.js';
8
- import { HeaderProvider } from './HeaderProvider.js';
9
- import { useTableHeader } from './useTableHeader.js';
10
- import headerCellCss from '../header-cell/HeaderCell.css.js';
11
-
12
- const isHeaderElement = (h) => isValidElement(h);
13
- const classBase = "vuuTableHeader";
14
- const TableHeader = memo(
15
- ({
16
- HeaderCell: HeaderCell$1 = HeaderCell,
17
- allowDragColumnHeader,
18
- allowSelectAll,
19
- allRowsSelected,
20
- columns,
21
- customHeader,
22
- headings,
23
- onCheckBoxColumnHeaderClick,
24
- onHeightMeasured,
25
- onMoveColumn,
26
- onMoveGroupColumn,
27
- onRemoveGroupColumn,
28
- onResizeColumn,
29
- onSortColumn,
30
- showBookends,
31
- showColumnHeaderMenus,
32
- tableConfig,
33
- tableId,
34
- virtualColSpan = 0
35
- }) => {
36
- const targetWindow = useWindow();
37
- useComponentCssInjection({
38
- testId: "vuu-table-header-cell",
39
- css: headerCellCss,
40
- window: targetWindow
41
- });
42
- const [customHeaders, customHeaderCount] = useMemo(() => {
43
- const offset = headings.length;
44
- const createElement = (Component, index) => /* @__PURE__ */ jsx(
45
- Component,
46
- {
47
- ariaRowIndex: offset + index + 2,
48
- ariaRole: "row",
49
- columns,
50
- virtualColSpan
51
- },
52
- index
53
- );
54
- const enrichElementWithAria = (el, rowIndex) => {
55
- const offset2 = headings.length;
56
- return cloneElement(el, {
57
- "aria-rowindex": rowIndex + offset2 + 2,
58
- ariaRole: "row"
59
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
- });
61
- };
62
- if (customHeader === void 0) {
63
- return [null, 0];
64
- } else if (Array.isArray(customHeader)) {
65
- const header = /* @__PURE__ */ jsx(HeaderProvider, { columns, virtualColSpan, children: customHeader.map(
66
- (header2, i) => isHeaderElement(header2) ? enrichElementWithAria(header2, i) : createElement(header2, i)
67
- ) });
68
- return [header, customHeader.length];
69
- } else if (isHeaderElement(customHeader)) {
70
- const header = /* @__PURE__ */ jsx(HeaderProvider, { columns, virtualColSpan, children: enrichElementWithAria(customHeader, 0) });
71
- return [header, 1];
72
- } else {
73
- return [createElement(customHeader, 0), 1];
74
- }
75
- }, [columns, customHeader, headings.length, virtualColSpan]);
76
- const { dragColumn, onClick, onDragEnd, onDragStart, setContainerRef } = useTableHeader({
77
- columns,
78
- customHeaderCount,
79
- headings,
80
- onHeightMeasured,
81
- onMoveColumn,
82
- onSortColumn,
83
- tableConfig
84
- });
85
- const visibleColumns = columns.filter(isNotHidden);
86
- return /* @__PURE__ */ jsxs("div", { className: classBase, ref: setContainerRef, role: "rowgroup", children: [
87
- headings.map((colHeaders, i) => /* @__PURE__ */ jsx(
88
- "div",
89
- {
90
- className: "vuuTable-heading",
91
- role: "row",
92
- "aria-rowindex": i + 1,
93
- children: colHeaders.map(({ label, width }, j) => /* @__PURE__ */ jsx("div", { className: "vuuTable-headingCell", style: { width }, children: label }, j))
94
- },
95
- i
96
- )),
97
- /* @__PURE__ */ jsxs(
98
- DragDropProvider,
99
- {
100
- onDragEnd,
101
- onDragStart,
102
- modifiers: [RestrictToHorizontalAxis],
103
- sensors: [
104
- KeyboardSensor.configure({
105
- keyboardCodes: {
106
- start: ["Space"],
107
- cancel: ["Escape"],
108
- end: ["Space", "Enter"],
109
- left: ["ArrowLeft"],
110
- right: ["ArrowRight"],
111
- up: [],
112
- down: []
113
- }
114
- }),
115
- PointerSensor
116
- ],
117
- children: [
118
- /* @__PURE__ */ jsxs(
119
- "div",
120
- {
121
- className: "vuuTableColHeaderRow",
122
- role: "row",
123
- "aria-rowindex": headings.length + 1,
124
- children: [
125
- showBookends ? /* @__PURE__ */ jsx("div", { className: "vuuSelectionDecorator vuuStickyLeft" }) : null,
126
- visibleColumns.map((col, i) => {
127
- const allowDragDrop = allowDragColumnHeader && !col.pin ? true : false;
128
- return isGroupColumn(col) ? /* @__PURE__ */ jsx(
129
- GroupHeaderCell,
130
- {
131
- column: col,
132
- id: `${tableId}-${col.name}`,
133
- onMoveColumn: onMoveGroupColumn,
134
- onRemoveColumn: onRemoveGroupColumn,
135
- onResize: onResizeColumn
136
- },
137
- col.name
138
- ) : /* @__PURE__ */ jsx(
139
- HeaderCell$1,
140
- {
141
- allowDragColumnHeader: allowDragDrop,
142
- allowSelectAll,
143
- allRowsSelected,
144
- column: col,
145
- index: i,
146
- id: `${tableId}-${col.name}`,
147
- onCheckBoxColumnHeaderClick,
148
- onClick,
149
- onResize: onResizeColumn,
150
- showColumnHeaderMenus
151
- },
152
- `${col.name}-${allowDragDrop}`
153
- );
154
- }),
155
- showBookends ? /* @__PURE__ */ jsx("div", { className: "vuuSelectionDecorator vuuStickyRight" }) : null
156
- ]
157
- }
158
- ),
159
- /* @__PURE__ */ jsx(DragOverlay, { children: dragColumn ? /* @__PURE__ */ jsx("div", { id: dragColumn.id, className: "DragColumn", children: /* @__PURE__ */ jsx(
160
- HeaderCell$1,
161
- {
162
- column: dragColumn.column,
163
- className: "vuuDragging",
164
- id: `${tableId}-${dragColumn.id}-dragging`,
165
- index: -1
166
- }
167
- ) }) : null })
168
- ]
169
- }
170
- ),
171
- customHeaders
172
- ] });
173
- }
174
- );
175
- TableHeader.displayName = "TableHeader";
176
-
177
- export { TableHeader };
178
- //# sourceMappingURL=TableHeader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableHeader.js","sources":["../../../../packages/vuu-table/src/table-header/TableHeader.tsx"],"sourcesContent":["import { VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport {\n DragDropProvider,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n RestrictToHorizontalAxis,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n ColumnDescriptor,\n ColumnMoveHandler,\n CustomHeader,\n CustomHeaderComponent,\n CustomHeaderElement,\n HeaderCellProps,\n RuntimeColumnDescriptor,\n TableColumnResizeHandler,\n TableConfig,\n TableHeadings,\n} from \"@vuu-ui/vuu-table-types\";\nimport { isGroupColumn, isNotHidden } from \"@vuu-ui/vuu-utils\";\nimport {\n cloneElement,\n FC,\n isValidElement,\n memo,\n ReactElement,\n useMemo,\n} from \"react\";\nimport {\n GroupHeaderCell,\n HeaderCell as DefaultHeaderCell,\n} from \"../header-cell\";\nimport { HeaderProvider } from \"./HeaderProvider\";\nimport { useTableHeader } from \"./useTableHeader\";\n\n// We import headercell css once here so it is available to custom\n// headercell implementations.\nimport headerCellCss from \"../header-cell/HeaderCell.css\";\n\nexport type ColumnSortHandler = (\n column: ColumnDescriptor,\n addToExistingSort: boolean,\n sortType?: VuuSortType,\n) => void;\n\nconst isHeaderElement = (h: CustomHeader): h is CustomHeaderElement =>\n isValidElement(h);\n\nconst classBase = \"vuuTableHeader\";\n\nexport interface TableHeaderProps\n extends Pick<\n HeaderCellProps,\n | \"allRowsSelected\"\n | \"allowDragColumnHeader\"\n | \"allowSelectAll\"\n | \"onCheckBoxColumnHeaderClick\"\n | \"showColumnHeaderMenus\"\n > {\n HeaderCell?: FC<HeaderCellProps>;\n columns: RuntimeColumnDescriptor[];\n customHeader?: CustomHeader | CustomHeader[];\n headings: TableHeadings;\n onHeightMeasured: (height: number, count: number) => void;\n onResizeColumn: TableColumnResizeHandler;\n onMoveColumn: ColumnMoveHandler;\n onMoveGroupColumn: (columns: ColumnDescriptor[]) => void;\n onRemoveGroupColumn: (column: RuntimeColumnDescriptor) => void;\n onSortColumn: ColumnSortHandler;\n showBookends?: boolean;\n tableConfig: TableConfig;\n tableId: string;\n virtualColSpan?: number;\n}\n\nexport const TableHeader = memo(\n ({\n HeaderCell = DefaultHeaderCell,\n allowDragColumnHeader,\n allowSelectAll,\n allRowsSelected,\n columns,\n customHeader,\n headings,\n onCheckBoxColumnHeaderClick,\n onHeightMeasured,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onResizeColumn,\n onSortColumn,\n showBookends,\n showColumnHeaderMenus,\n tableConfig,\n tableId,\n virtualColSpan = 0,\n }: TableHeaderProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const [customHeaders, customHeaderCount] = useMemo<\n [ReactElement | ReactElement[] | null, number]\n >(() => {\n const offset = headings.length;\n const createElement = (\n Component: CustomHeaderComponent,\n index: number,\n ) => (\n <Component\n ariaRowIndex={offset + index + 2}\n ariaRole=\"row\"\n columns={columns}\n key={index}\n virtualColSpan={virtualColSpan}\n />\n );\n\n const enrichElementWithAria = (el: ReactElement, rowIndex: number) => {\n const offset = headings.length;\n return cloneElement(el, {\n \"aria-rowindex\": rowIndex + offset + 2,\n ariaRole: \"row\",\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any);\n };\n\n if (customHeader === undefined) {\n return [null, 0];\n } else if (Array.isArray(customHeader)) {\n const header = (\n <HeaderProvider columns={columns} virtualColSpan={virtualColSpan}>\n {customHeader.map((header, i) =>\n isHeaderElement(header)\n ? enrichElementWithAria(header, i)\n : createElement(header, i),\n )}\n </HeaderProvider>\n );\n return [header, customHeader.length];\n } else if (isHeaderElement(customHeader)) {\n // TODO rowIndex and role\n const header = (\n <HeaderProvider columns={columns} virtualColSpan={virtualColSpan}>\n {enrichElementWithAria(customHeader, 0)}\n </HeaderProvider>\n );\n return [header, 1];\n } else {\n return [createElement(customHeader, 0), 1];\n }\n }, [columns, customHeader, headings.length, virtualColSpan]);\n\n const { dragColumn, onClick, onDragEnd, onDragStart, setContainerRef } =\n useTableHeader({\n columns,\n customHeaderCount,\n headings,\n onHeightMeasured,\n onMoveColumn,\n onSortColumn,\n tableConfig,\n });\n\n const visibleColumns = columns.filter(isNotHidden);\n\n return (\n <div className={classBase} ref={setContainerRef} role=\"rowgroup\">\n {headings.map((colHeaders, i) => (\n <div\n className=\"vuuTable-heading\"\n key={i}\n role=\"row\"\n aria-rowindex={i + 1}\n >\n {colHeaders.map(({ label, width }, j) => (\n <div key={j} className=\"vuuTable-headingCell\" style={{ width }}>\n {label}\n </div>\n ))}\n </div>\n ))}\n <DragDropProvider // whats the difference between this and DnDContext\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore typing error from dnd-kit\n modifiers={[RestrictToHorizontalAxis]}\n sensors={[\n KeyboardSensor.configure({\n keyboardCodes: {\n start: [\"Space\"],\n cancel: [\"Escape\"],\n end: [\"Space\", \"Enter\"],\n left: [\"ArrowLeft\"],\n right: [\"ArrowRight\"],\n up: [],\n down: [],\n },\n }),\n PointerSensor,\n ]}\n >\n <div\n className=\"vuuTableColHeaderRow\"\n role=\"row\"\n aria-rowindex={headings.length + 1}\n >\n {showBookends ? (\n <div className=\"vuuSelectionDecorator vuuStickyLeft\" />\n ) : null}\n\n {visibleColumns.map((col, i) => {\n const allowDragDrop =\n allowDragColumnHeader && !col.pin ? true : false;\n return isGroupColumn(col) ? (\n <GroupHeaderCell\n column={col}\n id={`${tableId}-${col.name}`}\n key={col.name}\n onMoveColumn={onMoveGroupColumn}\n onRemoveColumn={onRemoveGroupColumn}\n onResize={onResizeColumn}\n />\n ) : (\n <HeaderCell\n allowDragColumnHeader={allowDragDrop}\n allowSelectAll={allowSelectAll}\n allRowsSelected={allRowsSelected}\n column={col}\n index={i}\n id={`${tableId}-${col.name}`}\n key={`${col.name}-${allowDragDrop}`}\n onCheckBoxColumnHeaderClick={onCheckBoxColumnHeaderClick}\n onClick={onClick}\n onResize={onResizeColumn}\n showColumnHeaderMenus={showColumnHeaderMenus}\n />\n );\n })}\n {showBookends ? (\n <div className=\"vuuSelectionDecorator vuuStickyRight\" />\n ) : null}\n </div>\n\n <DragOverlay>\n {dragColumn ? (\n <div id={dragColumn.id} className=\"DragColumn\">\n <HeaderCell\n column={dragColumn.column}\n className=\"vuuDragging\"\n id={`${tableId}-${dragColumn.id}-dragging`}\n index={-1}\n />\n </div>\n ) : null}\n </DragOverlay>\n </DragDropProvider>\n {customHeaders}\n </div>\n );\n },\n);\nTableHeader.displayName = \"TableHeader\";\n"],"names":["HeaderCell","DefaultHeaderCell","offset","header"],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import { reorderColumnItems, queryClosest, visibleColumnAtIndex } from '@vuu-ui/vuu-utils';
2
- import { useRef, useState, useCallback } from 'react';
3
- import { useMeasuredHeight } from '../useMeasuredHeight.js';
4
- import { useForkRef } from '@salt-ds/core';
5
-
6
- const useTableHeader = ({
7
- columns,
8
- customHeaderCount,
9
- headings,
10
- onHeightMeasured,
11
- onMoveColumn,
12
- onSortColumn
13
- }) => {
14
- const containerRef = useRef(null);
15
- const scrollingContainerRef = useRef(null);
16
- const [dragColumn, setDragColumn] = useState(null);
17
- const handleHeightMeasured = useCallback(
18
- (height) => {
19
- onHeightMeasured(height, customHeaderCount + headings.length + 1);
20
- },
21
- [customHeaderCount, headings, onHeightMeasured]
22
- );
23
- const { measuredRef: rowRef } = useMeasuredHeight({
24
- onHeightMeasured: handleHeightMeasured
25
- });
26
- const setContainerRef = useCallback((el) => {
27
- containerRef.current = el;
28
- if (el) {
29
- scrollingContainerRef.current = el.closest(".vuuTable-contentContainer");
30
- } else {
31
- scrollingContainerRef.current = null;
32
- }
33
- }, []);
34
- const handleDragStart = useCallback(
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
- (evt) => {
37
- const element = evt.operation.source;
38
- const columnName = element.id.split("-").at(-1);
39
- const column = columns.find((col) => col.name === columnName);
40
- if (column === void 0) {
41
- throw Error(`[useTableHeader] No column '${columnName}'`);
42
- }
43
- setDragColumn({ column, id: element.id });
44
- },
45
- [columns]
46
- );
47
- const handleDragEnd = useCallback(() => {
48
- setTimeout(() => {
49
- const listItems = containerRef.current?.querySelectorAll(
50
- ".vuuTableHeaderCell"
51
- );
52
- if (listItems && dragColumn?.column) {
53
- const orderedColumnNames = Array.from(listItems).map(
54
- ({ dataset }) => dataset.columnName
55
- );
56
- onMoveColumn(
57
- dragColumn?.column.name,
58
- reorderColumnItems(columns, orderedColumnNames)
59
- );
60
- }
61
- }, 300);
62
- }, [columns, dragColumn, onMoveColumn]);
63
- const handleColumnHeaderClick = useCallback(
64
- (evt) => {
65
- const headerCell = queryClosest(evt.target, ".vuuTableHeaderCell");
66
- const colIdx = parseInt(headerCell?.dataset.index ?? "-1");
67
- const column = visibleColumnAtIndex(columns, colIdx);
68
- if (column && column.sortable !== false) {
69
- const isAdditive = evt.shiftKey;
70
- onSortColumn(column, isAdditive);
71
- }
72
- },
73
- [columns, onSortColumn]
74
- );
75
- return {
76
- dragColumn,
77
- onClick: handleColumnHeaderClick,
78
- onDragEnd: handleDragEnd,
79
- onDragStart: handleDragStart,
80
- setContainerRef: useForkRef(setContainerRef, rowRef)
81
- };
82
- };
83
-
84
- export { useTableHeader };
85
- //# sourceMappingURL=useTableHeader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTableHeader.js","sources":["../../../../packages/vuu-table/src/table-header/useTableHeader.ts"],"sourcesContent":["import {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n TableHeadings,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n queryClosest,\n reorderColumnItems,\n visibleColumnAtIndex,\n} from \"@vuu-ui/vuu-utils\";\nimport { RefCallback, useCallback, useRef, useState } from \"react\";\nimport { TableHeaderProps } from \"./TableHeader\";\nimport { useMeasuredHeight } from \"../useMeasuredHeight\";\nimport { useForkRef } from \"@salt-ds/core\";\n\nexport interface TableHeaderHookProps\n extends Pick<\n TableHeaderProps,\n \"columns\" | \"onMoveColumn\" | \"onSortColumn\" | \"tableConfig\"\n > {\n customHeaderCount: number;\n headings: TableHeadings;\n label?: string;\n onHeightMeasured: (height: number, customHeaderCount: number) => void;\n onMoveColumn: (columnName: string, columns: ColumnDescriptor[]) => void;\n onSortColumn: (column: ColumnDescriptor, addToExistingSort: boolean) => void;\n}\n\nexport type DragColumn = {\n id: string;\n column: RuntimeColumnDescriptor;\n};\n\nexport const useTableHeader = ({\n columns,\n customHeaderCount,\n headings,\n onHeightMeasured,\n onMoveColumn,\n onSortColumn,\n}: TableHeaderHookProps) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const scrollingContainerRef = useRef<HTMLDivElement | null>(null);\n const [dragColumn, setDragColumn] = useState<DragColumn | null>(null);\n\n const handleHeightMeasured = useCallback(\n (height: number) => {\n onHeightMeasured(height, customHeaderCount + headings.length + 1);\n },\n [customHeaderCount, headings, onHeightMeasured],\n );\n\n const { measuredRef: rowRef } = useMeasuredHeight({\n onHeightMeasured: handleHeightMeasured,\n });\n\n const setContainerRef = useCallback<RefCallback<HTMLDivElement>>((el) => {\n containerRef.current = el;\n if (el) {\n scrollingContainerRef.current = el.closest(\".vuuTable-contentContainer\");\n } else {\n scrollingContainerRef.current = null;\n }\n }, []);\n\n // const handleDropColumnHeader = useCallback(\n // ({ fromIndex: moveFrom, toIndex: moveTo }: DropOptions) => {\n // const column = columns[moveFrom];\n // // columns are what get rendered, so these are the columns that\n // // the drop operation relates to. We must translate these into\n // // columns within the table config. Grouping complicates this\n // // as the group columns are not present in columns but ARE in\n // // config.columns\n // const orderedColumns = moveColumnTo(columns, column, moveTo);\n\n // const ofColumn =\n // ({ name }: ColumnDescriptor) =>\n // (col: ColumnDescriptor) =>\n // col.name === name;\n\n // const targetIndex = orderedColumns.findIndex(ofColumn(column));\n // const nextColumn = orderedColumns[targetIndex + 1];\n // const insertPos = nextColumn\n // ? tableConfig.columns.findIndex(ofColumn(nextColumn))\n // : -1;\n\n // if (moveTo > moveFrom && insertPos !== -1) {\n // onMoveColumn(\n // dragColumn?.column?.name,\n // moveColumnTo(tableConfig.columns, column, insertPos - 1),\n // );\n // } else {\n // onMoveColumn(moveColumnTo(tableConfig.columns, column, insertPos));\n // }\n // },\n // [columns, onMoveColumn, tableConfig.columns],\n // );\n\n const handleDragStart = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (evt: any) => {\n const element = evt.operation.source as HTMLDivElement;\n const columnName = element.id.split(\"-\").at(-1);\n const column = columns.find((col) => col.name === columnName);\n if (column === undefined) {\n throw Error(`[useTableHeader] No column '${columnName}'`);\n }\n setDragColumn({ column, id: element.id });\n },\n [columns],\n );\n\n const handleDragEnd = useCallback(() => {\n setTimeout(() => {\n const listItems = containerRef.current?.querySelectorAll<HTMLDivElement>(\n \".vuuTableHeaderCell\",\n );\n\n if (listItems && dragColumn?.column) {\n const orderedColumnNames = Array.from<HTMLDivElement>(listItems).map(\n ({ dataset }) => dataset.columnName as string,\n );\n onMoveColumn(\n dragColumn?.column.name,\n reorderColumnItems(columns, orderedColumnNames),\n );\n }\n }, 300);\n }, [columns, dragColumn, onMoveColumn]);\n\n const handleColumnHeaderClick = useCallback(\n (evt: React.MouseEvent | React.KeyboardEvent) => {\n const headerCell = queryClosest(evt.target, \".vuuTableHeaderCell\");\n const colIdx = parseInt(headerCell?.dataset.index ?? \"-1\");\n const column = visibleColumnAtIndex(columns, colIdx);\n if (column && column.sortable !== false) {\n const isAdditive = evt.shiftKey;\n onSortColumn(column, isAdditive);\n }\n },\n [columns, onSortColumn],\n );\n\n return {\n dragColumn,\n onClick: handleColumnHeaderClick,\n onDragEnd: handleDragEnd,\n onDragStart: handleDragStart,\n setContainerRef: useForkRef(setContainerRef, rowRef),\n };\n};\n"],"names":[],"mappings":"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"}
package/esm/useCell.js DELETED
@@ -1,24 +0,0 @@
1
- import { getColumnStyle } from '@vuu-ui/vuu-utils';
2
- import cx from 'clsx';
3
- import { useMemo } from 'react';
4
-
5
- const useCell = (column, classBase, isHeader) => (
6
- // TODO measure perf without the memo, might not be worth the cost
7
- useMemo(() => {
8
- const className = cx(classBase, column.className, {
9
- vuuPinLeft: column.pin === "left",
10
- vuuPinRight: column.pin === "right",
11
- vuuEndPin: isHeader && column.pinnedWidth,
12
- [`${classBase}-editable`]: column.editable,
13
- [`${classBase}-right`]: column.align === "right"
14
- });
15
- const style = getColumnStyle(column);
16
- return {
17
- className,
18
- style
19
- };
20
- }, [classBase, column, isHeader])
21
- );
22
-
23
- export { useCell };
24
- //# sourceMappingURL=useCell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCell.js","sources":["../../../packages/vuu-table/src/useCell.ts"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { getColumnStyle } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { useMemo } from \"react\";\n\nexport const useCell = (\n column: RuntimeColumnDescriptor,\n classBase: string,\n isHeader?: boolean,\n) =>\n // TODO measure perf without the memo, might not be worth the cost\n useMemo(() => {\n const className = cx(classBase, column.className, {\n vuuPinLeft: column.pin === \"left\",\n vuuPinRight: column.pin === \"right\",\n vuuEndPin: isHeader && column.pinnedWidth,\n [`${classBase}-editable`]: column.editable,\n [`${classBase}-right`]: column.align === \"right\",\n });\n\n const style = getColumnStyle(column);\n return {\n className,\n style,\n };\n }, [classBase, column, isHeader]);\n"],"names":[],"mappings":";;;;AAKa,MAAA,OAAA,GAAU,CACrB,MAAA,EACA,SACA,EAAA,QAAA;AAAA;AAAA,EAGA,QAAQ,MAAM;AACZ,IAAA,MAAM,SAAY,GAAA,EAAA,CAAG,SAAW,EAAA,MAAA,CAAO,SAAW,EAAA;AAAA,MAChD,UAAA,EAAY,OAAO,GAAQ,KAAA,MAAA;AAAA,MAC3B,WAAA,EAAa,OAAO,GAAQ,KAAA,OAAA;AAAA,MAC5B,SAAA,EAAW,YAAY,MAAO,CAAA,WAAA;AAAA,MAC9B,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,MAAO,CAAA,QAAA;AAAA,MAClC,CAAC,CAAG,EAAA,SAAS,CAAQ,MAAA,CAAA,GAAG,OAAO,KAAU,KAAA;AAAA,KAC1C,CAAA;AAED,IAAM,MAAA,KAAA,GAAQ,eAAe,MAAM,CAAA;AACnC,IAAO,OAAA;AAAA,MACL,SAAA;AAAA,MACA;AAAA,KACF;AAAA,GACC,EAAA,CAAC,SAAW,EAAA,MAAA,EAAQ,QAAQ,CAAC;AAAA;;;;"}
@@ -1,75 +0,0 @@
1
- import { isCharacterKey } from '@vuu-ui/vuu-utils';
2
- import { useCallback } from 'react';
3
- import { cellIsTextInput } from './table-dom-utils.js';
4
-
5
- const useCellEditing = ({ navigate }) => {
6
- const commitHandler = useCallback(() => {
7
- navigate();
8
- }, [navigate]);
9
- const editInput = useCallback(
10
- (evt) => {
11
- const cellEl = evt.target;
12
- const input = cellEl.matches("input") ? cellEl : cellEl.querySelector("input");
13
- if (input) {
14
- input.focus();
15
- }
16
- },
17
- []
18
- );
19
- const focusInput = useCallback(
20
- (evt) => {
21
- const cellEl = evt.target;
22
- const input = cellEl.querySelector("input");
23
- if (input) {
24
- input.focus();
25
- }
26
- },
27
- []
28
- );
29
- const handleKeyDown = useCallback(
30
- (e) => {
31
- const el = e.target;
32
- if (cellIsTextInput(el)) {
33
- if (isCharacterKey(e.key)) {
34
- editInput(e);
35
- } else if (e.key === "Enter") {
36
- focusInput(e);
37
- }
38
- }
39
- },
40
- [editInput, focusInput]
41
- );
42
- const handleDoubleClick = useCallback(
43
- (e) => {
44
- const el = e.target;
45
- if (el.matches("input") || el.querySelector("input")) {
46
- editInput(e);
47
- e.stopPropagation();
48
- }
49
- },
50
- [editInput]
51
- );
52
- const handleBlur = useCallback(
53
- (e) => {
54
- const el = e.target;
55
- el.removeEventListener("vuu-commit", commitHandler, true);
56
- },
57
- [commitHandler]
58
- );
59
- const handleFocus = useCallback(
60
- (e) => {
61
- const el = e.target;
62
- el.addEventListener("vuu-commit", commitHandler, true);
63
- },
64
- [commitHandler]
65
- );
66
- return {
67
- onBlur: handleBlur,
68
- onDoubleClick: handleDoubleClick,
69
- onFocus: handleFocus,
70
- onKeyDown: handleKeyDown
71
- };
72
- };
73
-
74
- export { useCellEditing };
75
- //# sourceMappingURL=useCellEditing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCellEditing.js","sources":["../../../packages/vuu-table/src/useCellEditing.ts"],"sourcesContent":["import { isCharacterKey } from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEventHandler,\n KeyboardEvent as ReactKeyboardEvent,\n MouseEvent,\n useCallback,\n} from \"react\";\nimport { cellIsTextInput } from \"./table-dom-utils\";\n\nexport interface CellEditingHookProps {\n navigate: () => void;\n}\n\nexport const useCellEditing = ({ navigate }: CellEditingHookProps) => {\n const commitHandler = useCallback(() => {\n navigate();\n }, [navigate]);\n\n const editInput = useCallback(\n (evt: MouseEvent<HTMLElement> | ReactKeyboardEvent<HTMLElement>) => {\n const cellEl = evt.target as HTMLDivElement;\n const input = cellEl.matches(\"input\")\n ? (cellEl as HTMLInputElement)\n : cellEl.querySelector(\"input\");\n\n if (input) {\n input.focus();\n }\n },\n [],\n );\n\n const focusInput = useCallback(\n (evt: MouseEvent<HTMLElement> | ReactKeyboardEvent<HTMLElement>) => {\n const cellEl = evt.target as HTMLDivElement;\n const input = cellEl.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n },\n [],\n );\n\n const handleKeyDown = useCallback(\n (e: ReactKeyboardEvent<HTMLElement>) => {\n const el = e.target as HTMLElement;\n if (cellIsTextInput(el)) {\n if (isCharacterKey(e.key)) {\n editInput(e);\n } else if (e.key === \"Enter\") {\n focusInput(e);\n }\n }\n },\n [editInput, focusInput],\n );\n\n const handleDoubleClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n const el = e.target as HTMLElement;\n if (el.matches(\"input\") || el.querySelector(\"input\")) {\n editInput(e);\n e.stopPropagation();\n }\n },\n [editInput],\n );\n\n const handleBlur = useCallback<FocusEventHandler>(\n (e) => {\n const el = e.target as HTMLElement;\n el.removeEventListener(\"vuu-commit\", commitHandler, true);\n },\n [commitHandler],\n );\n\n const handleFocus = useCallback<FocusEventHandler>(\n (e) => {\n const el = e.target as HTMLElement;\n el.addEventListener(\"vuu-commit\", commitHandler, true);\n },\n [commitHandler],\n );\n\n return {\n onBlur: handleBlur,\n onDoubleClick: handleDoubleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n };\n};\n"],"names":[],"mappings":";;;;AAaO,MAAM,cAAiB,GAAA,CAAC,EAAE,QAAA,EAAqC,KAAA;AACpE,EAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAS,QAAA,EAAA;AAAA,GACX,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,GAAmE,KAAA;AAClE,MAAA,MAAM,SAAS,GAAI,CAAA,MAAA;AACnB,MAAM,MAAA,KAAA,GAAQ,OAAO,OAAQ,CAAA,OAAO,IAC/B,MACD,GAAA,MAAA,CAAO,cAAc,OAAO,CAAA;AAEhC,MAAA,IAAI,KAAO,EAAA;AACT,QAAA,KAAA,CAAM,KAAM,EAAA;AAAA;AACd,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,GAAmE,KAAA;AAClE,MAAA,MAAM,SAAS,GAAI,CAAA,MAAA;AACnB,MAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,aAAA,CAAc,OAAO,CAAA;AAC1C,MAAA,IAAI,KAAO,EAAA;AACT,QAAA,KAAA,CAAM,KAAM,EAAA;AAAA;AACd,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,IACpB,CAAC,CAAuC,KAAA;AACtC,MAAA,MAAM,KAAK,CAAE,CAAA,MAAA;AACb,MAAI,IAAA,eAAA,CAAgB,EAAE,CAAG,EAAA;AACvB,QAAI,IAAA,cAAA,CAAe,CAAE,CAAA,GAAG,CAAG,EAAA;AACzB,UAAA,SAAA,CAAU,CAAC,CAAA;AAAA,SACb,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,OAAS,EAAA;AAC5B,UAAA,UAAA,CAAW,CAAC,CAAA;AAAA;AACd;AACF,KACF;AAAA,IACA,CAAC,WAAW,UAAU;AAAA,GACxB;AAEA,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,CAA+B,KAAA;AAC9B,MAAA,MAAM,KAAK,CAAE,CAAA,MAAA;AACb,MAAA,IAAI,GAAG,OAAQ,CAAA,OAAO,KAAK,EAAG,CAAA,aAAA,CAAc,OAAO,CAAG,EAAA;AACpD,QAAA,SAAA,CAAU,CAAC,CAAA;AACX,QAAA,CAAA,CAAE,eAAgB,EAAA;AAAA;AACpB,KACF;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,CAAM,KAAA;AACL,MAAA,MAAM,KAAK,CAAE,CAAA,MAAA;AACb,MAAG,EAAA,CAAA,mBAAA,CAAoB,YAAc,EAAA,aAAA,EAAe,IAAI,CAAA;AAAA,KAC1D;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,CAAM,KAAA;AACL,MAAA,MAAM,KAAK,CAAE,CAAA,MAAA;AACb,MAAG,EAAA,CAAA,gBAAA,CAAiB,YAAc,EAAA,aAAA,EAAe,IAAI,CAAA;AAAA,KACvD;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAO,OAAA;AAAA,IACL,MAAQ,EAAA,UAAA;AAAA,IACR,aAAe,EAAA,iBAAA;AAAA,IACf,OAAS,EAAA,WAAA;AAAA,IACT,SAAW,EAAA;AAAA,GACb;AACF;;;;"}
@@ -1,117 +0,0 @@
1
- import { useCallback } from 'react';
2
- import { getTableCell, headerCellQuery, dataCellQuery } from './table-dom-utils.js';
3
- import { queryClosest, isArrowKey } from '@vuu-ui/vuu-utils';
4
-
5
- const getCellPosition = (el) => {
6
- const top = parseInt(el.parentElement?.style.top ?? "-1");
7
- return { top };
8
- };
9
- const isDifferentCellPosition = (currentPos, newPos) => {
10
- if (currentPos === void 0) {
11
- return true;
12
- }
13
- return currentPos[0] !== newPos[0] || currentPos[1] !== newPos[1];
14
- };
15
- const useCellFocus = ({
16
- cellFocusStateRef,
17
- containerRef,
18
- disableFocus = false,
19
- requestScroll
20
- }) => {
21
- const focusCellPlaceholderRef = useCallback(
22
- (el) => {
23
- cellFocusStateRef.current.placeholderEl = el;
24
- },
25
- [cellFocusStateRef]
26
- );
27
- const focusCell = useCallback(
28
- (cellPos) => {
29
- if (containerRef.current) {
30
- const { current: state } = cellFocusStateRef;
31
- if (isDifferentCellPosition(state.cellPos, cellPos)) {
32
- const activeCell = getTableCell(containerRef, cellPos);
33
- if (activeCell) {
34
- if (activeCell !== state.el) {
35
- state.el?.removeAttribute("tabindex");
36
- activeCell.setAttribute("tabindex", "0");
37
- state.el = activeCell;
38
- state.pos = getCellPosition(activeCell);
39
- state.outsideViewport = false;
40
- if (state.placeholderEl) {
41
- state.placeholderEl.style.top = `${state.pos.top}px`;
42
- }
43
- }
44
- state.cellPos = cellPos;
45
- requestScroll?.({ type: "scroll-row", rowIndex: cellPos[0] });
46
- activeCell.focus({ preventScroll: true });
47
- }
48
- }
49
- }
50
- },
51
- [cellFocusStateRef, containerRef, requestScroll]
52
- );
53
- const setTableBodyRef = useCallback(
54
- (el) => {
55
- if (el) {
56
- const { current: state } = cellFocusStateRef;
57
- const table = queryClosest(el, ".vuuTable");
58
- if (table) {
59
- if (state.el === null && !disableFocus) {
60
- const headerCell = table.querySelector(
61
- headerCellQuery(1)
62
- );
63
- if (headerCell) {
64
- headerCell.setAttribute("tabindex", "0");
65
- state.cellPos = [1, 1];
66
- state.el = headerCell;
67
- state.pos = { top: -20 };
68
- if (state.placeholderEl) {
69
- state.placeholderEl.style.top = `-20px`;
70
- }
71
- } else {
72
- const cell = table.querySelector(
73
- dataCellQuery(0, 0)
74
- );
75
- if (cell) {
76
- cell.setAttribute("tabindex", "0");
77
- state.cellPos = [1, 1];
78
- state.el = cell;
79
- state.pos = { top: 0 };
80
- if (state.placeholderEl) {
81
- state.placeholderEl.style.top = `0px`;
82
- }
83
- }
84
- }
85
- }
86
- }
87
- }
88
- },
89
- [cellFocusStateRef, disableFocus]
90
- );
91
- const focusCellPlaceholderKeyDown = useCallback(
92
- (evt) => {
93
- const { outsideViewport, pos } = cellFocusStateRef.current;
94
- if (pos && isArrowKey(evt.key)) {
95
- if (outsideViewport === "above") {
96
- requestScroll?.({ type: "scroll-top", scrollPos: pos.top });
97
- } else if (outsideViewport === "below") {
98
- requestScroll?.({ type: "scroll-bottom", scrollPos: pos.top });
99
- } else {
100
- throw Error(
101
- `cellFocusPlaceholder should not have focus if inside viewport`
102
- );
103
- }
104
- }
105
- },
106
- [cellFocusStateRef, requestScroll]
107
- );
108
- return {
109
- focusCell,
110
- focusCellPlaceholderKeyDown,
111
- focusCellPlaceholderRef,
112
- setTableBodyRef
113
- };
114
- };
115
-
116
- export { useCellFocus };
117
- //# sourceMappingURL=useCellFocus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCellFocus.js","sources":["../../../packages/vuu-table/src/useCellFocus.ts"],"sourcesContent":["import {\n KeyboardEventHandler,\n RefCallback,\n RefObject,\n useCallback,\n} from \"react\";\nimport {\n dataCellQuery,\n getTableCell,\n headerCellQuery,\n} from \"./table-dom-utils\";\nimport { ScrollRequestHandler } from \"./useTableScroll\";\nimport { isArrowKey, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { CellPos } from \"@vuu-ui/vuu-table-types\";\nimport type { ICellFocusState } from \"./CellFocusState\";\n\nexport interface CellFocusHookProps {\n cellFocusStateRef: RefObject<ICellFocusState>;\n containerRef: RefObject<HTMLElement | null>;\n disableFocus?: boolean;\n requestScroll?: ScrollRequestHandler;\n}\n\nconst getCellPosition = (el: HTMLElement) => {\n const top = parseInt(el.parentElement?.style.top ?? \"-1\");\n return { top };\n};\n\nconst isDifferentCellPosition = (\n currentPos: CellPos | undefined,\n newPos: CellPos,\n) => {\n if (currentPos === undefined) {\n return true;\n }\n return currentPos[0] !== newPos[0] || currentPos[1] !== newPos[1];\n};\n\nexport type FocusCell = (cellPos: CellPos, fromKeyboard?: boolean) => void;\n\nexport const useCellFocus = ({\n cellFocusStateRef,\n containerRef,\n disableFocus = false,\n requestScroll,\n}: CellFocusHookProps) => {\n const focusCellPlaceholderRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n cellFocusStateRef.current.placeholderEl = el;\n },\n [cellFocusStateRef],\n );\n\n const focusCell = useCallback<FocusCell>(\n (cellPos) => {\n if (containerRef.current) {\n const { current: state } = cellFocusStateRef;\n if (isDifferentCellPosition(state.cellPos, cellPos)) {\n const activeCell = getTableCell(containerRef, cellPos);\n if (activeCell) {\n if (activeCell !== state.el) {\n state.el?.removeAttribute(\"tabindex\");\n activeCell.setAttribute(\"tabindex\", \"0\");\n\n // TODO no need to measure if we're navigating horizontally\n // state.cellPos = cellPos;\n state.el = activeCell;\n state.pos = getCellPosition(activeCell);\n state.outsideViewport = false;\n\n if (state.placeholderEl) {\n state.placeholderEl.style.top = `${state.pos.top}px`;\n }\n }\n state.cellPos = cellPos;\n\n requestScroll?.({ type: \"scroll-row\", rowIndex: cellPos[0] });\n // if (activeCell.classList.contains(\"vuuTableCell-editable\")) {\n // const input = activeCell.querySelector(\"input\");\n // if (input) {\n // input.focus({ preventScroll: true });\n // } else {\n // activeCell.focus({ preventScroll: true });\n // }\n // } else {\n activeCell.focus({ preventScroll: true });\n // }\n }\n }\n }\n },\n [cellFocusStateRef, containerRef, requestScroll],\n );\n\n const setTableBodyRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n const { current: state } = cellFocusStateRef;\n const table = queryClosest<HTMLDivElement>(el, \".vuuTable\");\n if (table) {\n if (state.el === null && !disableFocus) {\n const headerCell = table.querySelector<HTMLDivElement>(\n headerCellQuery(1),\n );\n if (headerCell) {\n headerCell.setAttribute(\"tabindex\", \"0\");\n state.cellPos = [1, 1];\n state.el = headerCell;\n state.pos = { top: -20 };\n if (state.placeholderEl) {\n state.placeholderEl.style.top = `-20px`;\n }\n } else {\n const cell = table.querySelector<HTMLDivElement>(\n dataCellQuery(0, 0),\n );\n if (cell) {\n cell.setAttribute(\"tabindex\", \"0\");\n state.cellPos = [1, 1];\n state.el = cell;\n state.pos = { top: 0 };\n if (state.placeholderEl) {\n state.placeholderEl.style.top = `0px`;\n }\n }\n }\n }\n }\n }\n },\n [cellFocusStateRef, disableFocus],\n );\n\n const focusCellPlaceholderKeyDown = useCallback<KeyboardEventHandler>(\n (evt) => {\n const { outsideViewport, pos } = cellFocusStateRef.current;\n if (pos && isArrowKey(evt.key)) {\n // TODO depends on whether we're scrolling up or down\n if (outsideViewport === \"above\") {\n requestScroll?.({ type: \"scroll-top\", scrollPos: pos.top });\n } else if (outsideViewport === \"below\") {\n requestScroll?.({ type: \"scroll-bottom\", scrollPos: pos.top });\n } else {\n throw Error(\n `cellFocusPlaceholder should not have focus if inside viewport`,\n );\n }\n }\n },\n [cellFocusStateRef, requestScroll],\n );\n\n return {\n focusCell,\n focusCellPlaceholderKeyDown,\n focusCellPlaceholderRef,\n setTableBodyRef,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import { useStateRef, dispatchMouseEvent } from '@vuu-ui/vuu-utils';
2
- import { useRef, useCallback } from 'react';
3
-
4
- const isRowSelectionKey = (key) => key === "Enter" || key === " ";
5
- const useControlledTableNavigation = (initialValue, rowCount) => {
6
- const tableRef = useRef(null);
7
- const [highlightedIndexRef, setHighlightedIndex] = useStateRef(initialValue);
8
- const handleKeyDown = useCallback(
9
- (e) => {
10
- if (e.key === "ArrowDown") {
11
- setHighlightedIndex((index = -1) => Math.min(rowCount - 1, index + 1));
12
- } else if (e.key === "ArrowUp") {
13
- setHighlightedIndex((index = -1) => Math.max(0, index - 1));
14
- } else if (isRowSelectionKey(e.key)) {
15
- const { current: rowIdx } = highlightedIndexRef;
16
- if (typeof rowIdx === "number") {
17
- const rowEl = tableRef.current?.querySelector(
18
- `[aria-rowindex="${rowIdx + 1}"]`
19
- );
20
- if (rowEl) {
21
- dispatchMouseEvent(rowEl, "click");
22
- }
23
- }
24
- }
25
- },
26
- [highlightedIndexRef, rowCount, setHighlightedIndex]
27
- );
28
- const handleHighlight = useCallback(
29
- (idx) => {
30
- setHighlightedIndex(idx);
31
- },
32
- [setHighlightedIndex]
33
- );
34
- return {
35
- highlightedIndexRef,
36
- onHighlight: handleHighlight,
37
- onKeyDown: handleKeyDown,
38
- tableRef
39
- };
40
- };
41
-
42
- export { isRowSelectionKey, useControlledTableNavigation };
43
- //# sourceMappingURL=useControlledTableNavigation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useControlledTableNavigation.js","sources":["../../../packages/vuu-table/src/useControlledTableNavigation.ts"],"sourcesContent":["import { dispatchMouseEvent, useStateRef } from \"@vuu-ui/vuu-utils\";\nimport { KeyboardEventHandler, useCallback, useRef } from \"react\";\n\nexport const isRowSelectionKey = (key: string) =>\n key === \"Enter\" || key === \" \";\n\nexport const useControlledTableNavigation = (\n initialValue: number,\n rowCount: number,\n) => {\n const tableRef = useRef<HTMLDivElement>(null);\n\n const [highlightedIndexRef, setHighlightedIndex] = useStateRef<\n number | undefined\n >(initialValue);\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n (e) => {\n if (e.key === \"ArrowDown\") {\n setHighlightedIndex((index = -1) => Math.min(rowCount - 1, index + 1));\n } else if (e.key === \"ArrowUp\") {\n setHighlightedIndex((index = -1) => Math.max(0, index - 1));\n } else if (isRowSelectionKey(e.key)) {\n const { current: rowIdx } = highlightedIndexRef;\n // induce an onSelect event by 'clicking' the row\n if (typeof rowIdx === \"number\") {\n const rowEl = tableRef.current?.querySelector(\n `[aria-rowindex=\"${rowIdx + 1}\"]`,\n ) as HTMLElement;\n if (rowEl) {\n dispatchMouseEvent(rowEl, \"click\");\n }\n }\n }\n },\n [highlightedIndexRef, rowCount, setHighlightedIndex],\n );\n\n const handleHighlight = useCallback(\n (idx: number) => {\n setHighlightedIndex(idx);\n },\n [setHighlightedIndex],\n );\n\n return {\n highlightedIndexRef,\n onHighlight: handleHighlight,\n onKeyDown: handleKeyDown,\n tableRef,\n };\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,iBAAoB,GAAA,CAAC,GAChC,KAAA,GAAA,KAAQ,WAAW,GAAQ,KAAA;AAEhB,MAAA,4BAAA,GAA+B,CAC1C,YAAA,EACA,QACG,KAAA;AACH,EAAM,MAAA,QAAA,GAAW,OAAuB,IAAI,CAAA;AAE5C,EAAA,MAAM,CAAC,mBAAA,EAAqB,mBAAmB,CAAA,GAAI,YAEjD,YAAY,CAAA;AAEd,EAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,IACpB,CAAC,CAAM,KAAA;AACL,MAAI,IAAA,CAAA,CAAE,QAAQ,WAAa,EAAA;AACzB,QAAoB,mBAAA,CAAA,CAAC,QAAQ,CAAO,CAAA,KAAA,IAAA,CAAK,IAAI,QAAW,GAAA,CAAA,EAAG,KAAQ,GAAA,CAAC,CAAC,CAAA;AAAA,OACvE,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,SAAW,EAAA;AAC9B,QAAoB,mBAAA,CAAA,CAAC,QAAQ,CAAO,CAAA,KAAA,IAAA,CAAK,IAAI,CAAG,EAAA,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,OACjD,MAAA,IAAA,iBAAA,CAAkB,CAAE,CAAA,GAAG,CAAG,EAAA;AACnC,QAAM,MAAA,EAAE,OAAS,EAAA,MAAA,EAAW,GAAA,mBAAA;AAE5B,QAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC9B,UAAM,MAAA,KAAA,GAAQ,SAAS,OAAS,EAAA,aAAA;AAAA,YAC9B,CAAA,gBAAA,EAAmB,SAAS,CAAC,CAAA,EAAA;AAAA,WAC/B;AACA,UAAA,IAAI,KAAO,EAAA;AACT,YAAA,kBAAA,CAAmB,OAAO,OAAO,CAAA;AAAA;AACnC;AACF;AACF,KACF;AAAA,IACA,CAAC,mBAAqB,EAAA,QAAA,EAAU,mBAAmB;AAAA,GACrD;AAEA,EAAA,MAAM,eAAkB,GAAA,WAAA;AAAA,IACtB,CAAC,GAAgB,KAAA;AACf,MAAA,mBAAA,CAAoB,GAAG,CAAA;AAAA,KACzB;AAAA,IACA,CAAC,mBAAmB;AAAA,GACtB;AAEA,EAAO,OAAA;AAAA,IACL,mBAAA;AAAA,IACA,WAAa,EAAA,eAAA;AAAA,IACb,SAAW,EAAA,aAAA;AAAA,IACX;AAAA,GACF;AACF;;;;"}
@@ -1,25 +0,0 @@
1
- import { queryClosest } from '@vuu-ui/vuu-utils';
2
- import { useCallback } from 'react';
3
-
4
- const useEditableCell = () => {
5
- return useCallback((evt) => {
6
- if (evt.key === "Enter") {
7
- const el = evt.target;
8
- const inputElement = el.querySelector("input");
9
- if (inputElement !== document.activeElement) {
10
- inputElement?.focus();
11
- }
12
- } else if (evt.key === "Escape") {
13
- const input = queryClosest(evt.target, "input");
14
- const cell = queryClosest(input, ".vuuTableCell");
15
- if (cell) {
16
- cell.tabIndex = 0;
17
- cell.focus();
18
- evt.stopPropagation();
19
- }
20
- }
21
- }, []);
22
- };
23
-
24
- export { useEditableCell };
25
- //# 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":[],"mappings":";;;AAGO,MAAM,kBAAkB,MAAM;AACnC,EAAO,OAAA,WAAA,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,GAAA,YAAA,CAA+B,GAAI,CAAA,MAAA,EAAQ,OAAO,CAAA;AAChE,MAAM,MAAA,IAAA,GAAO,YAAa,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;;;;"}