@1771technologies/lytenyte-pro 1.0.0-beta.11 → 1.0.0-beta.12

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 (381) hide show
  1. package/dist/+types.d.ts +4155 -3957
  2. package/dist/cell-selection/adjust-rect-for-row-and-cell-span.js +38 -38
  3. package/dist/cell-selection/are-rects-equal.js +6 -4
  4. package/dist/cell-selection/bound-selection-rect.js +14 -14
  5. package/dist/cell-selection/cell-selection-containers.js +108 -78
  6. package/dist/cell-selection/cell-selection-driver.js +250 -262
  7. package/dist/cell-selection/cell-style-row.d.ts +12 -6
  8. package/dist/cell-selection/cell-style-row.js +82 -79
  9. package/dist/cell-selection/deselect-rect-range.js +41 -40
  10. package/dist/cell-selection/expand-cell-selection-down.d.ts +5 -2
  11. package/dist/cell-selection/expand-cell-selection-down.js +29 -33
  12. package/dist/cell-selection/expand-cell-selection-end.d.ts +5 -2
  13. package/dist/cell-selection/expand-cell-selection-end.js +30 -34
  14. package/dist/cell-selection/expand-cell-selection-start.d.ts +5 -2
  15. package/dist/cell-selection/expand-cell-selection-start.js +29 -33
  16. package/dist/cell-selection/expand-cell-selection-up.d.ts +5 -2
  17. package/dist/cell-selection/expand-cell-selection-up.js +29 -33
  18. package/dist/cell-selection/full-width-start-end-index.js +3 -3
  19. package/dist/cell-selection/get-root-cell.d.ts +5 -1
  20. package/dist/cell-selection/get-root-cell.js +77 -79
  21. package/dist/cell-selection/is-bottom-rect.js +5 -5
  22. package/dist/cell-selection/is-center-col-rect.d.ts +5 -2
  23. package/dist/cell-selection/is-center-col-rect.js +5 -3
  24. package/dist/cell-selection/is-center-rect.js +3 -3
  25. package/dist/cell-selection/is-end-rect.d.ts +5 -2
  26. package/dist/cell-selection/is-end-rect.js +2 -2
  27. package/dist/cell-selection/is-overlapping-rect.js +6 -4
  28. package/dist/cell-selection/is-start-rect.d.ts +5 -2
  29. package/dist/cell-selection/is-start-rect.js +2 -2
  30. package/dist/cell-selection/is-top-rect.js +2 -2
  31. package/dist/cell-selection/is-within-selection-rect.js +1 -1
  32. package/dist/cell-selection/split-cell-selection-rect.d.ts +12 -6
  33. package/dist/cell-selection/split-cell-selection-rect.js +53 -47
  34. package/dist/cell-selection/update-additive-cell-selection.d.ts +5 -2
  35. package/dist/cell-selection/update-additive-cell-selection.js +18 -19
  36. package/dist/cell-selection/use-edge-scroll.d.ts +8 -6
  37. package/dist/cell-selection/use-edge-scroll.js +65 -63
  38. package/dist/cells/cell-default.d.ts +5 -1
  39. package/dist/cells/cell-default.js +5 -5
  40. package/dist/cells/cell-editor.d.ts +4 -2
  41. package/dist/cells/cell-editor.js +121 -86
  42. package/dist/cells/cell.d.ts +16 -3
  43. package/dist/cells/cell.js +56 -27
  44. package/dist/column-manager/branch-lookup-context.d.ts +3 -1
  45. package/dist/column-manager/branch.d.ts +12 -4
  46. package/dist/column-manager/branch.js +39 -29
  47. package/dist/column-manager/column-manager.d.ts +58 -9
  48. package/dist/column-manager/column-manager.js +9 -9
  49. package/dist/column-manager/context.d.ts +1 -1
  50. package/dist/column-manager/label.d.ts +10 -2
  51. package/dist/column-manager/label.js +11 -12
  52. package/dist/column-manager/leaf.d.ts +10 -2
  53. package/dist/column-manager/leaf.js +42 -32
  54. package/dist/column-manager/move-handle.d.ts +14 -6
  55. package/dist/column-manager/move-handle.js +54 -50
  56. package/dist/column-manager/root.d.ts +9 -3
  57. package/dist/column-manager/root.js +26 -13
  58. package/dist/column-manager/use-column-manager.d.ts +12 -12
  59. package/dist/column-manager/use-column-manager.js +20 -20
  60. package/dist/column-manager/use-columns-from-context.js +18 -18
  61. package/dist/column-manager/visibility-checkbox.d.ts +14 -6
  62. package/dist/column-manager/visibility-checkbox.js +36 -23
  63. package/dist/context.d.ts +4 -4
  64. package/dist/filter-tree/branch.d.ts +13 -5
  65. package/dist/filter-tree/branch.js +23 -13
  66. package/dist/filter-tree/context.d.ts +16 -16
  67. package/dist/filter-tree/filter-tree.d.ts +49 -8
  68. package/dist/filter-tree/filter-tree.js +8 -8
  69. package/dist/filter-tree/hooks/use-filter-tree.d.ts +35 -29
  70. package/dist/filter-tree/hooks/use-filter-tree.js +94 -92
  71. package/dist/filter-tree/hooks/use-tree-item.d.ts +4 -4
  72. package/dist/filter-tree/hooks/use-tree-item.js +99 -106
  73. package/dist/filter-tree/inclusion-checkbox.d.ts +14 -6
  74. package/dist/filter-tree/inclusion-checkbox.js +19 -9
  75. package/dist/filter-tree/label.d.ts +10 -2
  76. package/dist/filter-tree/label.js +11 -12
  77. package/dist/filter-tree/leaf.d.ts +10 -2
  78. package/dist/filter-tree/leaf.js +15 -5
  79. package/dist/filter-tree/root.d.ts +23 -7
  80. package/dist/filter-tree/root.js +51 -23
  81. package/dist/grid-box/+types.d.ts +9 -9
  82. package/dist/grid-box/context.d.ts +3 -3
  83. package/dist/grid-box/grid-box.d.ts +26 -6
  84. package/dist/grid-box/grid-box.js +6 -6
  85. package/dist/grid-box/item.d.ts +11 -3
  86. package/dist/grid-box/item.js +29 -26
  87. package/dist/grid-box/panel.d.ts +13 -1
  88. package/dist/grid-box/panel.js +9 -2
  89. package/dist/grid-box/root.d.ts +11 -5
  90. package/dist/grid-box/root.js +11 -2
  91. package/dist/grid-box/use-aggregation-box-items.d.ts +16 -13
  92. package/dist/grid-box/use-aggregation-box-items.js +54 -55
  93. package/dist/grid-box/use-column-box-items.d.ts +31 -21
  94. package/dist/grid-box/use-column-box-items.js +90 -78
  95. package/dist/grid-box/use-row-group-box-items.d.ts +17 -12
  96. package/dist/grid-box/use-row-group-box-items.js +116 -124
  97. package/dist/grid-provider/context.d.ts +4 -2
  98. package/dist/grid-provider/provider.d.ts +4 -2
  99. package/dist/grid-provider/use-grid.d.ts +1 -1
  100. package/dist/grid.d.ts +150 -26
  101. package/dist/grid.js +38 -26
  102. package/dist/header/header-cell.d.ts +13 -5
  103. package/dist/header/header-cell.js +41 -15
  104. package/dist/header/header-group-cell.d.ts +10 -2
  105. package/dist/header/header-group-cell.js +21 -6
  106. package/dist/header/header-row.d.ts +10 -2
  107. package/dist/header/header-row.js +2 -2
  108. package/dist/header/header.d.ts +10 -1
  109. package/dist/header/header.js +11 -2
  110. package/dist/header/resize-handler.d.ts +15 -6
  111. package/dist/header/resize-handler.js +128 -118
  112. package/dist/header/use-drag-move.d.ts +22 -11
  113. package/dist/header/use-drag-move.js +83 -87
  114. package/dist/header/use-header-cell-renderer.d.ts +9 -2
  115. package/dist/header/use-header-cell-renderer.js +24 -29
  116. package/dist/icons/index.d.ts +92 -1
  117. package/dist/icons/index.js +92 -1
  118. package/dist/license.js +174 -174
  119. package/dist/listbox/context.d.ts +2 -2
  120. package/dist/listbox/item.d.ts +10 -1
  121. package/dist/listbox/item.js +23 -19
  122. package/dist/listbox/panel.d.ts +10 -1
  123. package/dist/listbox/panel.js +69 -43
  124. package/dist/listbox/root.d.ts +5 -3
  125. package/dist/listbox/root.js +7 -7
  126. package/dist/root/dialog-driver.js +22 -16
  127. package/dist/root/popover-driver.js +27 -16
  128. package/dist/root/root.d.ts +7 -3
  129. package/dist/root/root.js +111 -107
  130. package/dist/row-data-source-client/+types.d.ts +17 -17
  131. package/dist/row-data-source-client/built-ins/avg.js +3 -4
  132. package/dist/row-data-source-client/built-ins/built-ins.d.ts +16 -16
  133. package/dist/row-data-source-client/built-ins/built-ins.js +16 -16
  134. package/dist/row-data-source-client/built-ins/count.js +3 -5
  135. package/dist/row-data-source-client/built-ins/first.js +1 -1
  136. package/dist/row-data-source-client/built-ins/group.js +1 -1
  137. package/dist/row-data-source-client/built-ins/last.js +1 -1
  138. package/dist/row-data-source-client/built-ins/max.js +9 -13
  139. package/dist/row-data-source-client/built-ins/min.js +9 -13
  140. package/dist/row-data-source-client/built-ins/sum.js +8 -10
  141. package/dist/row-data-source-client/filter/+types.d.ts +35 -13
  142. package/dist/row-data-source-client/filter/compute-filtered-rows.d.ts +16 -2
  143. package/dist/row-data-source-client/filter/compute-filtered-rows.js +102 -102
  144. package/dist/row-data-source-client/pivots/create-agg-model.d.ts +8 -4
  145. package/dist/row-data-source-client/pivots/create-agg-model.js +8 -9
  146. package/dist/row-data-source-client/pivots/create-pivot-columns-from-paths.d.ts +6 -1
  147. package/dist/row-data-source-client/pivots/create-pivot-columns-from-paths.js +42 -46
  148. package/dist/row-data-source-client/pivots/create-pivot-columns.d.ts +6 -1
  149. package/dist/row-data-source-client/pivots/create-pivot-columns.js +16 -17
  150. package/dist/row-data-source-client/pivots/create-pivot-tree.d.ts +7 -1
  151. package/dist/row-data-source-client/pivots/create-pivot-tree.js +19 -19
  152. package/dist/row-data-source-client/tree/client-tree.d.ts +19 -13
  153. package/dist/row-data-source-client/tree/client-tree.js +64 -67
  154. package/dist/row-data-source-client/tree/evaluator-aggregation.d.ts +4 -1
  155. package/dist/row-data-source-client/tree/evaluator-aggregation.js +6 -6
  156. package/dist/row-data-source-client/tree/evaluator-group.d.ts +4 -1
  157. package/dist/row-data-source-client/tree/evaluator-group.js +6 -7
  158. package/dist/row-data-source-client/tree/traverse.d.ts +5 -1
  159. package/dist/row-data-source-client/tree/traverse.js +15 -18
  160. package/dist/row-data-source-client/use-client-data-source-paginated.d.ts +9 -5
  161. package/dist/row-data-source-client/use-client-data-source-paginated.js +539 -522
  162. package/dist/row-data-source-client/use-client-data-source.d.ts +9 -5
  163. package/dist/row-data-source-client/use-client-data-source.js +682 -647
  164. package/dist/row-data-source-client/use-client-tree-data-source.d.ts +9 -5
  165. package/dist/row-data-source-client/use-client-tree-data-source.js +510 -499
  166. package/dist/row-data-source-server/async-tree/+types.async-tree.d.ts +36 -33
  167. package/dist/row-data-source-server/async-tree/apply-delete-action-to-tree.d.ts +4 -1
  168. package/dist/row-data-source-server/async-tree/apply-delete-action-to-tree.js +18 -22
  169. package/dist/row-data-source-server/async-tree/apply-set-action-to-tree.d.ts +4 -1
  170. package/dist/row-data-source-server/async-tree/apply-set-action-to-tree.js +17 -25
  171. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-are-unique.js +18 -18
  172. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-are-valid.js +9 -10
  173. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-fit.d.ts +4 -1
  174. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-fit.js +13 -14
  175. package/dist/row-data-source-server/async-tree/check-set-action-item-kinds.js +9 -10
  176. package/dist/row-data-source-server/async-tree/get-parent-node-by-path.d.ts +4 -1
  177. package/dist/row-data-source-server/async-tree/get-parent-node-by-path.js +13 -13
  178. package/dist/row-data-source-server/async-tree/is-set-action-a-no-op-on-node.d.ts +4 -1
  179. package/dist/row-data-source-server/async-tree/is-set-action-a-no-op-on-node.js +1 -1
  180. package/dist/row-data-source-server/async-tree/make-async-tree.js +14 -14
  181. package/dist/row-data-source-server/async-tree/maybe-apply-parent-remove-self.d.ts +3 -1
  182. package/dist/row-data-source-server/async-tree/maybe-apply-parent-remove-self.js +6 -6
  183. package/dist/row-data-source-server/async-tree/maybe-apply-resize.d.ts +5 -1
  184. package/dist/row-data-source-server/async-tree/maybe-apply-resize.js +11 -14
  185. package/dist/row-data-source-server/async-tree/maybe-apply-set-action-items.d.ts +4 -1
  186. package/dist/row-data-source-server/async-tree/maybe-apply-set-action-items.js +42 -46
  187. package/dist/row-data-source-server/range-tree/range-tree.d.ts +28 -28
  188. package/dist/row-data-source-server/range-tree/range-tree.js +49 -48
  189. package/dist/row-data-source-server/use-server-data-source.d.ts +11 -2
  190. package/dist/row-data-source-server/use-server-data-source.js +665 -652
  191. package/dist/row-data-source-server/utils/get-node-depth.js +7 -7
  192. package/dist/row-data-source-server/utils/get-node-path.js +7 -7
  193. package/dist/row-data-source-server/utils/get-request-id.js +3 -4
  194. package/dist/rows/row/context.d.ts +2 -2
  195. package/dist/rows/row/row.d.ts +16 -3
  196. package/dist/rows/row/row.js +19 -4
  197. package/dist/rows/row/use-row-context-value.d.ts +5 -2
  198. package/dist/rows/row/use-row-context-value.js +23 -26
  199. package/dist/rows/row-detail-row.d.ts +4 -2
  200. package/dist/rows/row-detail-row.js +147 -124
  201. package/dist/rows/row-full-width.d.ts +12 -4
  202. package/dist/rows/row-full-width.js +35 -7
  203. package/dist/rows/rows-container.d.ts +10 -1
  204. package/dist/rows/rows-container.js +12 -3
  205. package/dist/rows/rows-sections.d.ts +30 -3
  206. package/dist/rows/rows-sections.js +42 -10
  207. package/dist/rows/scrollers/native-scroller.d.ts +3 -1
  208. package/dist/rows/scrollers/native-scroller.js +17 -13
  209. package/dist/sort-manager/+types.d.ts +14 -7
  210. package/dist/sort-manager/context.d.ts +4 -4
  211. package/dist/sort-manager/hooks/use-sort-manager.d.ts +9 -9
  212. package/dist/sort-manager/hooks/use-sort-manager.js +45 -49
  213. package/dist/sort-manager/hooks/use-sort-row-item.d.ts +57 -46
  214. package/dist/sort-manager/hooks/use-sort-row-item.js +126 -131
  215. package/dist/sort-manager/hooks/use-sortable-column-items.d.ts +6 -3
  216. package/dist/sort-manager/hooks/use-sortable-column-items.js +10 -10
  217. package/dist/sort-manager/root.d.ts +7 -1
  218. package/dist/sort-manager/root.js +10 -10
  219. package/dist/sort-manager/sort-add.d.ts +13 -5
  220. package/dist/sort-manager/sort-add.js +8 -8
  221. package/dist/sort-manager/sort-apply.d.ts +12 -4
  222. package/dist/sort-manager/sort-apply.js +16 -16
  223. package/dist/sort-manager/sort-cancel.d.ts +12 -4
  224. package/dist/sort-manager/sort-cancel.js +19 -19
  225. package/dist/sort-manager/sort-clear.d.ts +12 -4
  226. package/dist/sort-manager/sort-clear.js +15 -16
  227. package/dist/sort-manager/sort-column-select.d.ts +14 -6
  228. package/dist/sort-manager/sort-column-select.js +26 -15
  229. package/dist/sort-manager/sort-direction-select.d.ts +14 -6
  230. package/dist/sort-manager/sort-direction-select.js +27 -19
  231. package/dist/sort-manager/sort-manager.d.ts +93 -12
  232. package/dist/sort-manager/sort-manager.js +12 -12
  233. package/dist/sort-manager/sort-remove.d.ts +12 -4
  234. package/dist/sort-manager/sort-remove.js +8 -8
  235. package/dist/sort-manager/sort-row.d.ts +10 -2
  236. package/dist/sort-manager/sort-row.js +4 -1
  237. package/dist/sort-manager/sort-rows.d.ts +10 -1
  238. package/dist/sort-manager/sort-rows.js +1 -1
  239. package/dist/sort-manager/sort-value-select.d.ts +15 -7
  240. package/dist/sort-manager/sort-value-select.js +28 -19
  241. package/dist/sort-manager/utils/sort-item-to-sort-model.d.ts +4 -1
  242. package/dist/sort-manager/utils/sort-item-to-sort-model.js +46 -49
  243. package/dist/sort-manager/utils/sort-model-to-sort-items.d.ts +4 -1
  244. package/dist/sort-manager/utils/sort-model-to-sort-items.js +36 -44
  245. package/dist/state/+types.d.ts +41 -28
  246. package/dist/state/api/column-autosize.d.ts +4 -2
  247. package/dist/state/api/column-autosize.js +62 -63
  248. package/dist/state/api/column-by-id.js +4 -4
  249. package/dist/state/api/column-field.js +17 -20
  250. package/dist/state/api/column-from-index.js +4 -4
  251. package/dist/state/api/column-group-toggle.js +8 -8
  252. package/dist/state/api/column-index.js +5 -5
  253. package/dist/state/api/column-move.js +48 -46
  254. package/dist/state/api/column-resize.js +9 -7
  255. package/dist/state/api/column-update.js +11 -11
  256. package/dist/state/api/dialog-frame.d.ts +8 -4
  257. package/dist/state/api/dialog-frame.js +11 -12
  258. package/dist/state/api/edit-begin.d.ts +4 -2
  259. package/dist/state/api/edit-begin.js +71 -84
  260. package/dist/state/api/edit-end.d.ts +4 -2
  261. package/dist/state/api/edit-end.js +38 -41
  262. package/dist/state/api/edit-is-cell-active.d.ts +4 -2
  263. package/dist/state/api/edit-is-cell-active.js +17 -24
  264. package/dist/state/api/edit-update.d.ts +4 -2
  265. package/dist/state/api/edit-update.js +74 -85
  266. package/dist/state/api/event-listeners.d.ts +12 -3
  267. package/dist/state/api/event-listeners.js +16 -17
  268. package/dist/state/api/export-csv.js +33 -35
  269. package/dist/state/api/export-data-rect.js +21 -21
  270. package/dist/state/api/focus-cell.d.ts +4 -2
  271. package/dist/state/api/focus-cell.js +110 -109
  272. package/dist/state/api/popover-frame.d.ts +8 -4
  273. package/dist/state/api/popover-frame.js +11 -12
  274. package/dist/state/api/position-from-element.js +5 -6
  275. package/dist/state/api/row-by-id.js +3 -3
  276. package/dist/state/api/row-by-index.js +11 -6
  277. package/dist/state/api/row-detail-is-expanded.d.ts +3 -1
  278. package/dist/state/api/row-detail-is-expanded.js +4 -4
  279. package/dist/state/api/row-detail-rendered-height.d.ts +4 -2
  280. package/dist/state/api/row-detail-rendered-height.js +10 -12
  281. package/dist/state/api/row-detail-toggle.js +26 -30
  282. package/dist/state/api/row-group-apply-expansions.d.ts +3 -1
  283. package/dist/state/api/row-group-apply-expansions.js +15 -17
  284. package/dist/state/api/row-group-column-index.d.ts +3 -1
  285. package/dist/state/api/row-group-column-index.js +14 -12
  286. package/dist/state/api/row-group-is-expanded.d.ts +3 -1
  287. package/dist/state/api/row-group-is-expanded.js +11 -13
  288. package/dist/state/api/row-group-toggle.js +5 -5
  289. package/dist/state/api/row-handle-select.d.ts +4 -2
  290. package/dist/state/api/row-handle-select.js +36 -40
  291. package/dist/state/api/row-select-all.js +14 -15
  292. package/dist/state/api/row-select.d.ts +4 -2
  293. package/dist/state/api/row-select.js +30 -33
  294. package/dist/state/api/row-selected.js +10 -11
  295. package/dist/state/api/scroll-into-view.d.ts +4 -2
  296. package/dist/state/api/scroll-into-view.js +47 -47
  297. package/dist/state/api/sort-for-column.js +6 -7
  298. package/dist/state/api/use-row-drag.js +22 -24
  299. package/dist/state/helpers/cell-row-group.d.ts +5 -1
  300. package/dist/state/helpers/cell-row-group.js +18 -16
  301. package/dist/state/helpers/column-add-row-group.d.ts +16 -6
  302. package/dist/state/helpers/column-add-row-group.js +63 -58
  303. package/dist/state/helpers/column-layout.d.ts +7 -1
  304. package/dist/state/helpers/column-layout.js +60 -60
  305. package/dist/state/helpers/column-marker.d.ts +8 -4
  306. package/dist/state/helpers/column-marker.js +38 -34
  307. package/dist/state/helpers/column-view.d.ts +21 -15
  308. package/dist/state/helpers/column-view.js +56 -32
  309. package/dist/state/helpers/edit-on-change.d.ts +18 -10
  310. package/dist/state/helpers/edit-on-change.js +24 -24
  311. package/dist/state/helpers/empty-row-data-source.js +16 -16
  312. package/dist/state/helpers/get-data-rect.d.ts +20 -10
  313. package/dist/state/helpers/get-data-rect.js +67 -62
  314. package/dist/state/helpers/get-full-width-callback.d.ts +5 -1
  315. package/dist/state/helpers/get-full-width-callback.js +5 -6
  316. package/dist/state/helpers/get-span-callback.d.ts +6 -1
  317. package/dist/state/helpers/get-span-callback.js +15 -18
  318. package/dist/state/helpers/resolve-column.d.ts +6 -2
  319. package/dist/state/helpers/resolve-column.js +18 -18
  320. package/dist/state/helpers/row-layout/get-focus-criteria.d.ts +15 -12
  321. package/dist/state/helpers/row-layout/get-focus-criteria.js +57 -56
  322. package/dist/state/helpers/row-layout/row-layout.d.ts +15 -9
  323. package/dist/state/helpers/row-layout/row-layout.js +387 -401
  324. package/dist/state/use-lytenyte.js +556 -516
  325. package/dist/tree-view/branch/branch.d.ts +16 -8
  326. package/dist/tree-view/branch/branch.js +104 -52
  327. package/dist/tree-view/branch/use-branch-keys.d.ts +5 -1
  328. package/dist/tree-view/branch/use-branch-keys.js +71 -74
  329. package/dist/tree-view/context.d.ts +21 -17
  330. package/dist/tree-view/hooks/use-tree-view-paths.d.ts +6 -1
  331. package/dist/tree-view/hooks/use-tree-view-paths.js +5 -5
  332. package/dist/tree-view/index.d.ts +35 -7
  333. package/dist/tree-view/index.js +7 -7
  334. package/dist/tree-view/leaf.d.ts +10 -2
  335. package/dist/tree-view/leaf.js +29 -20
  336. package/dist/tree-view/navigation/get-all-ids.js +3 -3
  337. package/dist/tree-view/navigation/get-first-node.js +3 -3
  338. package/dist/tree-view/navigation/get-last-node.js +3 -3
  339. package/dist/tree-view/navigation/get-next-node.js +6 -8
  340. package/dist/tree-view/navigation/get-prev-node.js +6 -8
  341. package/dist/tree-view/panel/make-handle-navigation.js +23 -31
  342. package/dist/tree-view/panel/make-handle-selection.js +68 -77
  343. package/dist/tree-view/panel/make-handle-typeahead.js +34 -40
  344. package/dist/tree-view/panel/panel.d.ts +10 -1
  345. package/dist/tree-view/panel/panel.js +40 -20
  346. package/dist/tree-view/panel/use-tree-navigation.js +64 -52
  347. package/dist/tree-view/root.d.ts +20 -14
  348. package/dist/tree-view/root.js +53 -55
  349. package/dist/tree-view/utils/get-focusable-nodes.js +4 -2
  350. package/dist/tree-view/utils/get-focused-node.js +11 -11
  351. package/dist/tree-view/utils/get-ids-between-nodes.d.ts +5 -1
  352. package/dist/tree-view/utils/get-ids-between-nodes.js +10 -11
  353. package/dist/tree-view/utils/get-panel.js +5 -5
  354. package/dist/tree-view/utils/get-parent-node.js +6 -7
  355. package/dist/tree-view/utils/get-sibling-branches.js +8 -10
  356. package/dist/tree-view/utils/get-tree-node-id.js +1 -1
  357. package/dist/tree-view/utils/is-branch-node.js +1 -1
  358. package/dist/tree-view/utils/is-leaf-node.js +1 -1
  359. package/dist/tree-view/utils/is-tree-node-disabled.js +1 -1
  360. package/dist/tree-view/utils/select-node.d.ts +5 -1
  361. package/dist/tree-view/utils/select-node.js +8 -11
  362. package/dist/tree-view/utils/toggle-all-selections.js +4 -6
  363. package/dist/tree-view/utils/toggle-selection.js +15 -18
  364. package/dist/tree-view/virtualized/force-sync-scrolling.d.ts +3 -1
  365. package/dist/tree-view/virtualized/force-sync-scrolling.js +24 -18
  366. package/dist/tree-view/virtualized/get-virtual-tree-paths.d.ts +3 -1
  367. package/dist/tree-view/virtualized/get-virtual-tree-paths.js +11 -12
  368. package/dist/tree-view/virtualized/make-virtual-tree.d.ts +26 -21
  369. package/dist/tree-view/virtualized/make-virtual-tree.js +79 -85
  370. package/dist/tree-view/virtualized/use-flattened-tree.d.ts +17 -8
  371. package/dist/tree-view/virtualized/use-flattened-tree.js +30 -31
  372. package/dist/tree-view/virtualized/use-row-start-and-end.d.ts +6 -1
  373. package/dist/tree-view/virtualized/use-row-start-and-end.js +21 -23
  374. package/dist/tree-view/virtualized/use-virtualized-tree.d.ts +21 -15
  375. package/dist/tree-view/virtualized/use-virtualized-tree.js +103 -90
  376. package/dist/utils/cycle-sorts.js +12 -14
  377. package/dist/viewport/begin-editing.d.ts +6 -2
  378. package/dist/viewport/begin-editing.js +9 -13
  379. package/dist/viewport/viewport.d.ts +10 -1
  380. package/dist/viewport/viewport.js +93 -70
  381. package/package.json +7 -7
@@ -2,7 +2,15 @@ import { atom, createStore } from "@1771technologies/atom";
2
2
  import {} from "../+types.js";
3
3
  import { useRef } from "react";
4
4
  import { makeColumnView } from "./helpers/column-view.js";
5
- import { applyLayoutUpdate, computeBounds, computeColumnPositions, computeRowPositions, DEFAULT_PREVIOUS_LAYOUT, makeGridAtom, makeRowDataStore, } from "@1771technologies/lytenyte-shared";
5
+ import {
6
+ applyLayoutUpdate,
7
+ computeBounds,
8
+ computeColumnPositions,
9
+ computeRowPositions,
10
+ DEFAULT_PREVIOUS_LAYOUT,
11
+ makeGridAtom,
12
+ makeRowDataStore,
13
+ } from "@1771technologies/lytenyte-shared";
6
14
  import { makeRowLayout } from "./helpers/row-layout/row-layout.js";
7
15
  import { equal } from "@1771technologies/lytenyte-js-utils";
8
16
  import { makeColumnLayout } from "./helpers/column-layout.js";
@@ -52,528 +60,560 @@ import { boundSelectionRect } from "../cell-selection/bound-selection-rect.js";
52
60
  const DEFAULT_HEADER_HEIGHT = 40;
53
61
  const COLUMN_GROUP_JOIN_DELIMITER = "-->";
54
62
  export function makeLyteNyte(p) {
55
- const store = createStore();
56
- /**
57
- * Primitive ATOMS and State
58
- */
59
- const rtl = atom(p.rtl ?? false);
60
- const columns = atom(p.columns ?? []);
61
- const base = atom(p.columnBase ?? {});
62
- const gridId = atom(p.gridId);
63
- const headerHeight = atom(p.headerHeight ?? DEFAULT_HEADER_HEIGHT);
64
- const headerGroupHeight = atom(p.headerGroupHeight ?? DEFAULT_HEADER_HEIGHT);
65
- const columnSizeToFit = atom(p.columnSizeToFit ?? false);
66
- const viewport = atom(null);
67
- const viewportHeightInner = atom(0);
68
- const viewportHeightOuter = atom(0);
69
- const viewportWidthInner = atom(0);
70
- const viewportWidthOuter = atom(0);
71
- const columnGroupJoinDelimiter = atom(p.columnGroupJoinDelimiter ?? COLUMN_GROUP_JOIN_DELIMITER);
72
- const columnGroupExpansions = atom(p.columnGroupExpansions ?? {});
73
- const columnGroupDefaultExpansion = atom(p.columnGroupDefaultExpansion ?? true);
74
- const rowDataSource = atom(emptyRowDataSource);
75
- const rowHeight = atom(p.rowHeight ?? 40);
76
- const rowAutoHeightGuess = atom(p.rowAutoHeightGuess ?? 40);
77
- const rowScanDistance = atom(p.rowScanDistance ?? 100);
78
- const colScanDistance = atom(p.colScanDistance ?? 100);
79
- const rowOverscanTop = atom(p.rowOverscanTop ?? 10);
80
- const rowOverscanBottom = atom(p.rowOverscanBottom ?? 10);
81
- const colOverScanStart = atom(p.colOverscanStart ?? 2);
82
- const colOverscanEnd = atom(p.colOverscanEnd ?? 2);
83
- const xScroll = atom(0);
84
- const yScroll = atom(0);
85
- const cellRenderers = atom(p.cellRenderers ?? {});
86
- const rowFullWidthPredicate = atom({ fn: p.rowFullWidthPredicate ?? (() => false) });
87
- const rowFullWidthRenderer = atom({ fn: p.rowFullWidthRenderer ?? (() => "Not defined") });
88
- const sortModel = atom(p.sortModel ?? []);
89
- const filterModel = atom(p.filterModel ?? {});
90
- const filterInModel = atom(p.filterInModel ?? {});
91
- const rowGroupModel = atom(p.rowGroupModel ?? []);
92
- const aggModel = atom(p.aggModel ?? {});
93
- const rowGroupDisplayMode = atom(p.rowGroupDisplayMode ?? "single-column");
94
- const rowGroupDefaultExpansion = atom(p.rowGroupDefaultExpansion ?? false);
95
- const rowGroupExpansions = atom(p.rowGroupExpansions ?? {});
96
- const rowGroupColumn = atom(p.rowGroupColumn ?? {});
97
- const headerCellRenderers = atom(p.headerCellRenderers ?? {});
98
- const floatingCellRenderers = atom(p.floatingCellRenderers ?? {});
99
- const floatingRowEnabled = atom(p.floatingRowEnabled ?? false);
100
- const floatingRowHeight = atom(p.floatingRowHeight ?? 40);
101
- const editRenderers = atom(p.editRenderers ?? {});
102
- const editRowValidatorFn = atom({ fn: p.editRowValidatorFn ?? (() => true) });
103
- const editClickActivator = atom(p.editClickActivator ?? "single");
104
- const editCellMode = atom(p.editCellMode ?? "readonly");
105
- const columnMarker = atom(p.columnMarker ?? {});
106
- const columnMarkerEnabled = atom(p.columnMarkerEnabled ?? false);
107
- const columnDoubleClickToAutosize = atom(p.columnDoubleClickToAutosize ?? true);
108
- const rowDetailHeight = atom(p.rowDetailHeight ?? 300);
109
- const rowDetailAutoHeightGuess = atom(p.rowDetailAutoHeightGuess ?? 300);
110
- const rowDetailExpansions = atom(p.rowDetailExpansions ?? new Set());
111
- const rowDetailRenderer = atom({ fn: p.rowDetailRenderer ?? (() => "Not defined") });
112
- const rowSelectedIds = atom(p.rowSelectedIds ?? new Set());
113
- const rowSelectionMode = atom(p.rowSelectionMode ?? "none");
114
- const rowSelectChildren = atom(p.rowSelectChildren ?? false);
115
- const rowSelectionActivator = atom(p.rowSelectionActivator ?? "single-click");
116
- const virtualizeRows = atom(p.virtualizeRows ?? true);
117
- const virtualizeCols = atom(p.virtualizeCols ?? true);
118
- const quickSearch = atom(p.quickSearch ?? null);
119
- const quickSearchSensitivity = atom(p.quickSearchSensitivity ?? "case-insensitive");
120
- const columnPivotMode = atom(p.columnPivotMode ?? false);
121
- const columnPivotModel = atom(p.columnPivotModel ??
122
- {
123
- columns: [],
124
- filters: {},
125
- filtersIn: {},
126
- rows: [],
127
- sorts: [],
128
- values: [],
129
- });
130
- const columnPivotColumns = atom([]);
131
- const columnPivotColumnGroupExpansions = atom({});
132
- const columnPivotRowGroupExpansions = atom({});
133
- const cellSelections = atom(p.cellSelections ?? []);
134
- const cellSelectionMode = atom(p.cellSelectionMode ?? "none");
135
- const internal_cellSelectionPivot = atom(null);
136
- const internal_cellSelectionAdditive = atom(null);
137
- const internal_cellSelectionSplits = atom((g) => {
138
- const selections = g(cellSelections);
139
- const topCount = g(rdsAtoms.topCount);
140
- const centerCount = g(rdsAtoms.rowCenterCount);
141
- const meta = g(columnMeta);
142
- return selections.flatMap((rect) => {
143
- return splitCellSelectionRect({
144
- rect,
145
- rowTopCount: topCount,
146
- rowCenterCount: centerCount,
147
- colStartCount: meta.columnVisibleStartCount,
148
- colCenterCount: meta.columnVisibleCenterCount,
149
- });
150
- });
63
+ const store = createStore();
64
+ /**
65
+ * Primitive ATOMS and State
66
+ */
67
+ const rtl = atom(p.rtl ?? false);
68
+ const columns = atom(p.columns ?? []);
69
+ const base = atom(p.columnBase ?? {});
70
+ const gridId = atom(p.gridId);
71
+ const headerHeight = atom(p.headerHeight ?? DEFAULT_HEADER_HEIGHT);
72
+ const headerGroupHeight = atom(p.headerGroupHeight ?? DEFAULT_HEADER_HEIGHT);
73
+ const columnSizeToFit = atom(p.columnSizeToFit ?? false);
74
+ const viewport = atom(null);
75
+ const viewportHeightInner = atom(0);
76
+ const viewportHeightOuter = atom(0);
77
+ const viewportWidthInner = atom(0);
78
+ const viewportWidthOuter = atom(0);
79
+ const columnGroupJoinDelimiter = atom(p.columnGroupJoinDelimiter ?? COLUMN_GROUP_JOIN_DELIMITER);
80
+ const columnGroupExpansions = atom(p.columnGroupExpansions ?? {});
81
+ const columnGroupDefaultExpansion = atom(p.columnGroupDefaultExpansion ?? true);
82
+ const rowDataSource = atom(emptyRowDataSource);
83
+ const rowHeight = atom(p.rowHeight ?? 40);
84
+ const rowAutoHeightGuess = atom(p.rowAutoHeightGuess ?? 40);
85
+ const rowScanDistance = atom(p.rowScanDistance ?? 100);
86
+ const colScanDistance = atom(p.colScanDistance ?? 100);
87
+ const rowOverscanTop = atom(p.rowOverscanTop ?? 10);
88
+ const rowOverscanBottom = atom(p.rowOverscanBottom ?? 10);
89
+ const colOverScanStart = atom(p.colOverscanStart ?? 2);
90
+ const colOverscanEnd = atom(p.colOverscanEnd ?? 2);
91
+ const xScroll = atom(0);
92
+ const yScroll = atom(0);
93
+ const cellRenderers = atom(p.cellRenderers ?? {});
94
+ const rowFullWidthPredicate = atom({ fn: p.rowFullWidthPredicate ?? (() => false) });
95
+ const rowFullWidthRenderer = atom({ fn: p.rowFullWidthRenderer ?? (() => "Not defined") });
96
+ const sortModel = atom(p.sortModel ?? []);
97
+ const filterModel = atom(p.filterModel ?? {});
98
+ const filterInModel = atom(p.filterInModel ?? {});
99
+ const rowGroupModel = atom(p.rowGroupModel ?? []);
100
+ const aggModel = atom(p.aggModel ?? {});
101
+ const rowGroupDisplayMode = atom(p.rowGroupDisplayMode ?? "single-column");
102
+ const rowGroupDefaultExpansion = atom(p.rowGroupDefaultExpansion ?? false);
103
+ const rowGroupExpansions = atom(p.rowGroupExpansions ?? {});
104
+ const rowGroupColumn = atom(p.rowGroupColumn ?? {});
105
+ const headerCellRenderers = atom(p.headerCellRenderers ?? {});
106
+ const floatingCellRenderers = atom(p.floatingCellRenderers ?? {});
107
+ const floatingRowEnabled = atom(p.floatingRowEnabled ?? false);
108
+ const floatingRowHeight = atom(p.floatingRowHeight ?? 40);
109
+ const editRenderers = atom(p.editRenderers ?? {});
110
+ const editRowValidatorFn = atom({ fn: p.editRowValidatorFn ?? (() => true) });
111
+ const editClickActivator = atom(p.editClickActivator ?? "single");
112
+ const editCellMode = atom(p.editCellMode ?? "readonly");
113
+ const columnMarker = atom(p.columnMarker ?? {});
114
+ const columnMarkerEnabled = atom(p.columnMarkerEnabled ?? false);
115
+ const columnDoubleClickToAutosize = atom(p.columnDoubleClickToAutosize ?? true);
116
+ const rowDetailHeight = atom(p.rowDetailHeight ?? 300);
117
+ const rowDetailAutoHeightGuess = atom(p.rowDetailAutoHeightGuess ?? 300);
118
+ const rowDetailExpansions = atom(p.rowDetailExpansions ?? new Set());
119
+ const rowDetailRenderer = atom({ fn: p.rowDetailRenderer ?? (() => "Not defined") });
120
+ const rowSelectedIds = atom(p.rowSelectedIds ?? new Set());
121
+ const rowSelectionMode = atom(p.rowSelectionMode ?? "none");
122
+ const rowSelectChildren = atom(p.rowSelectChildren ?? false);
123
+ const rowSelectionActivator = atom(p.rowSelectionActivator ?? "single-click");
124
+ const virtualizeRows = atom(p.virtualizeRows ?? true);
125
+ const virtualizeCols = atom(p.virtualizeCols ?? true);
126
+ const quickSearch = atom(p.quickSearch ?? null);
127
+ const quickSearchSensitivity = atom(p.quickSearchSensitivity ?? "case-insensitive");
128
+ const columnPivotMode = atom(p.columnPivotMode ?? false);
129
+ const columnPivotModel = atom(
130
+ p.columnPivotModel ?? {
131
+ columns: [],
132
+ filters: {},
133
+ filtersIn: {},
134
+ rows: [],
135
+ sorts: [],
136
+ values: [],
137
+ },
138
+ );
139
+ const columnPivotColumns = atom([]);
140
+ const columnPivotColumnGroupExpansions = atom({});
141
+ const columnPivotRowGroupExpansions = atom({});
142
+ const cellSelections = atom(p.cellSelections ?? []);
143
+ const cellSelectionMode = atom(p.cellSelectionMode ?? "none");
144
+ const internal_cellSelectionPivot = atom(null);
145
+ const internal_cellSelectionAdditive = atom(null);
146
+ const internal_cellSelectionSplits = atom((g) => {
147
+ const selections = g(cellSelections);
148
+ const topCount = g(rdsAtoms.topCount);
149
+ const centerCount = g(rdsAtoms.rowCenterCount);
150
+ const meta = g(columnMeta);
151
+ return selections.flatMap((rect) => {
152
+ return splitCellSelectionRect({
153
+ rect,
154
+ rowTopCount: topCount,
155
+ rowCenterCount: centerCount,
156
+ colStartCount: meta.columnVisibleStartCount,
157
+ colCenterCount: meta.columnVisibleCenterCount,
158
+ });
151
159
  });
152
- const dialogFrame = atom(p.dialogFrames ?? {});
153
- const popoverFrame = atom(p.popoverFrames ?? {});
154
- const internal_rowSelectionPivot = atom(null);
155
- const internal_rowSelectionLastWasDeselect = atom(false);
156
- const rowSelectionPivot = atom((g) => g(internal_rowSelectionPivot));
157
- const internal_draggingHeader = atom(null);
158
- const internal_rowAutoHeightCache = atom({});
159
- const internal_rowDetailHeightCache = atom({});
160
- const internal_focusActive = atom(null);
161
- const internal_focusPrevCol = atom(null);
162
- const internal_focusPrevRow = atom(null);
163
- const internal_editActivePosition = atom(null);
164
- const internal_editData = atom(null);
165
- const internal_editValidation = atom(true);
166
- const internal_dialogFrames = atom({});
167
- const internal_popoverFrames = atom({});
168
- const layoutMap = atom((g) => {
169
- g(rdsAtoms.bottomCount);
170
- g(rdsAtoms.rowCenterCount);
171
- g(rdsAtoms.topCount);
172
- g(rdsAtoms.snapshotKey);
173
- g(rowDataSource);
174
- g(rowGroupModel);
175
- g(sortModel);
176
- g(filterModel);
177
- g(filterInModel);
178
- g(aggModel);
179
- return new Map();
160
+ });
161
+ const dialogFrame = atom(p.dialogFrames ?? {});
162
+ const popoverFrame = atom(p.popoverFrames ?? {});
163
+ const internal_rowSelectionPivot = atom(null);
164
+ const internal_rowSelectionLastWasDeselect = atom(false);
165
+ const rowSelectionPivot = atom((g) => g(internal_rowSelectionPivot));
166
+ const internal_draggingHeader = atom(null);
167
+ const internal_rowAutoHeightCache = atom({});
168
+ const internal_rowDetailHeightCache = atom({});
169
+ const internal_focusActive = atom(null);
170
+ const internal_focusPrevCol = atom(null);
171
+ const internal_focusPrevRow = atom(null);
172
+ const internal_editActivePosition = atom(null);
173
+ const internal_editData = atom(null);
174
+ const internal_editValidation = atom(true);
175
+ const internal_dialogFrames = atom({});
176
+ const internal_popoverFrames = atom({});
177
+ const layoutMap = atom((g) => {
178
+ g(rdsAtoms.bottomCount);
179
+ g(rdsAtoms.rowCenterCount);
180
+ g(rdsAtoms.topCount);
181
+ g(rdsAtoms.snapshotKey);
182
+ g(rowDataSource);
183
+ g(rowGroupModel);
184
+ g(sortModel);
185
+ g(filterModel);
186
+ g(filterInModel);
187
+ g(aggModel);
188
+ return new Map();
189
+ });
190
+ /**
191
+ * VIEW BOUNDS
192
+ */
193
+ let prevBounds = null;
194
+ const bounds = atom((g) => {
195
+ const vpWidth = g(viewportWidthInner);
196
+ const vpHeight = g(viewportHeightInner);
197
+ const scrollTop = g(yScroll);
198
+ const scrollLeft = g(xScroll);
199
+ const xPos = g(xPositions);
200
+ const yPos = g(yPositions);
201
+ const topCount = g(rdsAtoms.topCount);
202
+ const bottomCount = g(rdsAtoms.bottomCount);
203
+ const start = g(startCount);
204
+ const end = g(endCount);
205
+ const bounds = computeBounds({
206
+ viewportWidth: vpWidth,
207
+ viewportHeight: vpHeight,
208
+ scrollTop,
209
+ scrollLeft,
210
+ xPositions: xPos,
211
+ yPositions: yPos,
212
+ topCount,
213
+ bottomCount,
214
+ startCount: start,
215
+ endCount: end,
216
+ rowOverscanTop: g(rowOverscanTop),
217
+ rowOverscanBottom: g(rowOverscanBottom),
218
+ colOverscanStart: g(colOverScanStart),
219
+ colOverscanEnd: g(colOverscanEnd),
180
220
  });
181
- /**
182
- * VIEW BOUNDS
183
- */
184
- let prevBounds = null;
185
- const bounds = atom((g) => {
186
- const vpWidth = g(viewportWidthInner);
187
- const vpHeight = g(viewportHeightInner);
188
- const scrollTop = g(yScroll);
189
- const scrollLeft = g(xScroll);
190
- const xPos = g(xPositions);
191
- const yPos = g(yPositions);
192
- const topCount = g(rdsAtoms.topCount);
193
- const bottomCount = g(rdsAtoms.bottomCount);
194
- const start = g(startCount);
195
- const end = g(endCount);
196
- const bounds = computeBounds({
197
- viewportWidth: vpWidth,
198
- viewportHeight: vpHeight,
199
- scrollTop,
200
- scrollLeft,
201
- xPositions: xPos,
202
- yPositions: yPos,
203
- topCount,
204
- bottomCount,
205
- startCount: start,
206
- endCount: end,
207
- rowOverscanTop: g(rowOverscanTop),
208
- rowOverscanBottom: g(rowOverscanBottom),
209
- colOverscanStart: g(colOverScanStart),
210
- colOverscanEnd: g(colOverscanEnd),
211
- });
212
- if (equal(prevBounds, bounds))
213
- return prevBounds;
214
- prevBounds = bounds;
215
- return bounds;
216
- });
217
- /**
218
- * COLUMN VIEW
219
- * Compute the column layout. This impacts both the row layout and header layout. Column layout
220
- * is impacted by the column definitions, the group expansions, the row group display mode.
221
- */
222
- const columnView = atom((g) => {
223
- const pivotMode = g(columnPivotMode);
224
- let cols;
225
- if (pivotMode) {
226
- const model = g(columnPivotModel);
227
- cols = columnAddRowGroup({
228
- columns: g(columnPivotColumns),
229
- rowGroupDisplayMode: "single-column",
230
- rowGroupModel: model.rows.filter((c) => c.active ?? true).map((c) => c.field),
231
- rowGroupTemplate: g(rowGroupColumn),
232
- });
233
- }
234
- else {
235
- cols = columnAddRowGroup({
236
- columns: g(columns),
237
- rowGroupDisplayMode: g(rowGroupDisplayMode),
238
- rowGroupModel: g(rowGroupModel),
239
- rowGroupTemplate: g(rowGroupColumn),
240
- });
241
- }
242
- const colsWithMarker = columnHandleMarker({
243
- columns: cols,
244
- marker: g(columnMarker),
245
- markerEnabled: g(columnMarkerEnabled),
246
- });
247
- const view = makeColumnView({
248
- columns: colsWithMarker,
249
- base: g(base),
250
- groupExpansionDefault: g(columnGroupDefaultExpansion),
251
- groupExpansions: g(columnGroupExpansions),
252
- groupJoinDelimiter: g(columnGroupJoinDelimiter),
253
- });
254
- return view;
255
- });
256
- /**
257
- * COMPUTE ATOMS
258
- */
259
- const headerLayout = atom((g) => {
260
- const view = g(columnView);
261
- const layout = makeColumnLayout(view.combinedView, view.meta, g(bounds), g(internal_focusActive), g(floatingRowEnabled));
262
- const dragged = g(internal_draggingHeader);
263
- // When dragging a group column, we may end up removing that group column when joining
264
- // the group with other columns in the same group (if they are separated). We want to ensure
265
- // the group remains mounted until after the drag. Hence we check if there would've been a merge
266
- // and add the dragged element to the layout. Once the drag ends the element will be removed. The
267
- // isHiddenMove is important for this.
268
- if (dragged) {
269
- const row = dragged.rowStart;
270
- const has = layout[row].findIndex((c) => c.kind === "group" && c.idOccurrence === dragged.idOccurrence);
271
- if (has === -1) {
272
- layout[row].push({ ...dragged, isHiddenMove: true });
273
- }
274
- }
275
- return { maxCol: view.maxCol, maxRow: view.maxRow, layout: layout };
276
- });
277
- const columnGroupMeta = atom((g) => g(columnView).meta);
278
- const columnMeta = atom((g) => {
279
- const view = g(columnView);
280
- return {
281
- columnLookup: view.lookup,
282
- columnsVisible: view.visibleColumns,
283
- columnVisibleCenterCount: view.centerCount,
284
- columnVisibleEndCount: view.endCount,
285
- columnVisibleStartCount: view.startCount,
286
- };
287
- });
288
- const xPositions = atom((g) => {
289
- const view = g(columnView);
290
- return computeColumnPositions(view.visibleColumns, g(base), g(viewportWidthInner), g(columnSizeToFit));
291
- });
292
- const widthTotal = atom((get) => get(xPositions).at(-1));
293
- const headerHeightTotal = atom((g) => {
294
- const groupHHeight = g(headerGroupHeight);
295
- const hHeight = g(headerHeight);
296
- const view = g(columnView);
297
- const floating = g(floatingRowEnabled);
298
- const floatingHeight = g(floatingRowHeight);
299
- return (view.maxRow - 1) * groupHHeight + hHeight + (floating ? floatingHeight : 0);
300
- });
301
- const startCount = atom((g) => g(columnView).startCount);
302
- const endCount = atom((g) => g(columnView).endCount);
303
- /** ROWS */
304
- const rowByIndex = makeGridAtom(atom((g) => g(rowDataSource).rowByIndex), store);
305
- const { store: rowDataStore, atoms: rdsAtoms } = makeRowDataStore(store, rowByIndex);
306
- const yPositions = atom((g) => {
307
- const rowCount = g(rdsAtoms.rowCount);
308
- const innerHeight = g(viewportHeightInner);
309
- const detailExpansions = g(rowDetailExpansions);
310
- g(internal_rowDetailHeightCache);
311
- const rds = g(rowDataSource);
312
- const rows = Object.fromEntries([...detailExpansions]
313
- .map((x) => rds.rowToIndex(x))
314
- .filter((x) => x != null)
315
- .map((x) => [x, api.rowByIndex(x)]));
316
- return computeRowPositions(rowCount, g(rowHeight), g(rowAutoHeightGuess), g(internal_rowAutoHeightCache), (i) => {
317
- const row = rows[i];
318
- if (!row || !api.rowDetailIsExpanded(row))
319
- return 0;
320
- return api.rowDetailRenderedHeight(row);
321
- }, innerHeight);
322
- });
323
- const heightTotal = atom((g) => g(yPositions).at(-1));
324
- let prevLayout = DEFAULT_PREVIOUS_LAYOUT;
325
- const rowView = atom((g) => {
326
- let n = g(bounds);
327
- if (!g(virtualizeRows)) {
328
- n = { ...n, rowCenterStart: n.rowTopEnd, rowCenterEnd: n.rowCenterLast };
329
- }
330
- if (!g(virtualizeCols)) {
331
- n = { ...n, colCenterStart: n.colStartEnd, colCenterEnd: n.colCenterLast };
332
- }
333
- const rowScan = g(rowScanDistance);
334
- const colScan = g(colScanDistance);
335
- const columns = g(columnMeta).columnsVisible;
336
- const rds = g(rowDataSource);
337
- applyLayoutUpdate({
338
- computeColSpan: getSpanFn(rds, grid, columns, "col"),
339
- computeRowSpan: getSpanFn(rds, grid, columns, "row"),
340
- colScanDistance: colScan,
341
- rowScanDistance: rowScan,
342
- invalidated: true,
343
- isFullWidth: getFullWidthCallback(rds, g(rowFullWidthPredicate).fn, grid),
344
- isRowCutoff: (r) => {
345
- const row = rds.rowByIndex(r);
346
- return !row || row.kind === "branch";
347
- },
348
- layoutMap: g(layoutMap),
349
- nextLayout: n,
350
- prevLayout,
351
- });
352
- prevLayout = n;
353
- const topCount = g(rdsAtoms.topCount);
354
- const botCount = g(rdsAtoms.bottomCount);
355
- const rowCount = g(rdsAtoms.rowCount);
356
- const yPos = g(yPositions);
357
- const botStart = rowCount - botCount;
358
- const focus = g(internal_focusActive);
359
- const view = makeRowLayout({
360
- layout: n,
361
- layoutMap: g(layoutMap),
362
- rds: rowDataStore,
363
- columns,
364
- focus: g(internal_focusActive),
365
- });
366
- const topHeight = yPos[topCount];
367
- const botHeight = yPos.at(-1) - yPos[botStart];
368
- const centerHeight = yPos.at(-1) - topHeight - botHeight;
369
- return {
370
- ...view,
371
- rowFocusedIndex: focus?.kind === "cell" || focus?.kind === "full-width"
372
- ? focus.rowIndex < topCount || focus.rowIndex >= rowCount - botCount
373
- ? null
374
- : focus.rowIndex
375
- : null,
376
- rowTopTotalHeight: topHeight,
377
- rowBottomTotalHeight: botHeight,
378
- rowCenterTotalHeight: centerHeight,
379
- rowFirstCenter: n.rowCenterStart,
380
- };
221
+ if (equal(prevBounds, bounds)) return prevBounds;
222
+ prevBounds = bounds;
223
+ return bounds;
224
+ });
225
+ /**
226
+ * COLUMN VIEW
227
+ * Compute the column layout. This impacts both the row layout and header layout. Column layout
228
+ * is impacted by the column definitions, the group expansions, the row group display mode.
229
+ */
230
+ const columnView = atom((g) => {
231
+ const pivotMode = g(columnPivotMode);
232
+ let cols;
233
+ if (pivotMode) {
234
+ const model = g(columnPivotModel);
235
+ cols = columnAddRowGroup({
236
+ columns: g(columnPivotColumns),
237
+ rowGroupDisplayMode: "single-column",
238
+ rowGroupModel: model.rows.filter((c) => c.active ?? true).map((c) => c.field),
239
+ rowGroupTemplate: g(rowGroupColumn),
240
+ });
241
+ } else {
242
+ cols = columnAddRowGroup({
243
+ columns: g(columns),
244
+ rowGroupDisplayMode: g(rowGroupDisplayMode),
245
+ rowGroupModel: g(rowGroupModel),
246
+ rowGroupTemplate: g(rowGroupColumn),
247
+ });
248
+ }
249
+ const colsWithMarker = columnHandleMarker({
250
+ columns: cols,
251
+ marker: g(columnMarker),
252
+ markerEnabled: g(columnMarkerEnabled),
381
253
  });
382
- /**
383
- * STATE VIEW AND API
384
- */
385
- const gridView = atom((g) => {
386
- return {
387
- header: g(headerLayout),
388
- rows: g(rowView),
389
- };
254
+ const view = makeColumnView({
255
+ columns: colsWithMarker,
256
+ base: g(base),
257
+ groupExpansionDefault: g(columnGroupDefaultExpansion),
258
+ groupExpansions: g(columnGroupExpansions),
259
+ groupJoinDelimiter: g(columnGroupJoinDelimiter),
390
260
  });
391
- const state = {
392
- rtl: makeGridAtom(rtl, store),
393
- columns: makeGridAtom(columns, store),
394
- columnMeta: makeGridAtom(columnMeta, store),
395
- columnBase: makeGridAtom(base, store),
396
- columnGroupExpansions: makeGridAtom(columnGroupExpansions, store),
397
- columnGroupDefaultExpansion: makeGridAtom(columnGroupDefaultExpansion, store),
398
- columnGroupJoinDelimiter: makeGridAtom(columnGroupJoinDelimiter, store),
399
- columnGroupMeta: makeGridAtom(columnGroupMeta, store),
400
- columnSizeToFit: makeGridAtom(columnSizeToFit, store),
401
- gridId: makeGridAtom(gridId, store),
402
- widthTotal: makeGridAtom(widthTotal, store),
403
- heightTotal: makeGridAtom(heightTotal, store),
404
- headerHeight: makeGridAtom(headerHeight, store),
405
- headerGroupHeight: makeGridAtom(headerGroupHeight, store),
406
- viewport: makeGridAtom(viewport, store),
407
- viewportHeightInner: makeGridAtom(viewportHeightInner, store),
408
- viewportHeightOuter: makeGridAtom(viewportHeightOuter, store),
409
- viewportWidthInner: makeGridAtom(viewportWidthInner, store),
410
- viewportWidthOuter: makeGridAtom(viewportWidthOuter, store),
411
- xPositions: makeGridAtom(xPositions, store),
412
- yPositions: makeGridAtom(yPositions, store),
413
- rowDataStore,
414
- rowDataSource: makeGridAtom(rowDataSource, store),
415
- rowAutoHeightGuess: makeGridAtom(rowAutoHeightGuess, store),
416
- rowHeight: makeGridAtom(rowHeight, store),
417
- rowScanDistance: makeGridAtom(rowScanDistance, store),
418
- colScanDistance: makeGridAtom(colScanDistance, store),
419
- colOverscanStart: makeGridAtom(colOverScanStart, store),
420
- colOverscanEnd: makeGridAtom(colOverscanEnd, store),
421
- rowOverscanTop: makeGridAtom(rowOverscanTop, store),
422
- rowOverscanBottom: makeGridAtom(rowOverscanBottom, store),
423
- rowFullWidthPredicate: makeGridAtom(rowFullWidthPredicate, store),
424
- rowFullWidthRenderer: makeGridAtom(rowFullWidthRenderer, store),
425
- cellRenderers: makeGridAtom(cellRenderers, store),
426
- sortModel: makeGridAtom(sortModel, store),
427
- filterModel: makeGridAtom(filterModel, store),
428
- filterInModel: makeGridAtom(filterInModel, store),
429
- rowGroupModel: makeGridAtom(rowGroupModel, store),
430
- aggModel: makeGridAtom(aggModel, store),
431
- rowGroupColumn: makeGridAtom(rowGroupColumn, store),
432
- rowGroupDefaultExpansion: makeGridAtom(rowGroupDefaultExpansion, store),
433
- rowGroupDisplayMode: makeGridAtom(rowGroupDisplayMode, store),
434
- rowGroupExpansions: makeGridAtom(rowGroupExpansions, store),
435
- headerCellRenderers: makeGridAtom(headerCellRenderers, store),
436
- floatingCellRenderers: makeGridAtom(floatingCellRenderers, store),
437
- floatingRowEnabled: makeGridAtom(floatingRowEnabled, store),
438
- floatingRowHeight: makeGridAtom(floatingRowHeight, store),
439
- editRenderers: makeGridAtom(editRenderers, store),
440
- editCellMode: makeGridAtom(editCellMode, store),
441
- editClickActivator: makeGridAtom(editClickActivator, store),
442
- editRowValidatorFn: makeGridAtom(editRowValidatorFn, store),
443
- editActivePosition: makeGridAtom(atom((g) => g(internal_editActivePosition)), store),
444
- columnMarker: makeGridAtom(columnMarker, store),
445
- columnMarkerEnabled: makeGridAtom(columnMarkerEnabled, store),
446
- columnDoubleClickToAutosize: makeGridAtom(columnDoubleClickToAutosize, store),
447
- rowDetailExpansions: makeGridAtom(rowDetailExpansions, store),
448
- rowDetailHeight: makeGridAtom(rowDetailHeight, store),
449
- rowDetailRenderer: makeGridAtom(rowDetailRenderer, store),
450
- rowDetailAutoHeightGuess: makeGridAtom(rowDetailAutoHeightGuess, store),
451
- rowSelectedIds: makeGridAtom(rowSelectedIds, store),
452
- rowSelectionMode: makeGridAtom(rowSelectionMode, store),
453
- rowSelectionPivot: makeGridAtom(rowSelectionPivot, store),
454
- rowSelectionActivator: makeGridAtom(rowSelectionActivator, store),
455
- rowSelectChildren: makeGridAtom(rowSelectChildren, store),
456
- viewBounds: makeGridAtom(bounds, store),
457
- virtualizeRows: makeGridAtom(virtualizeRows, store),
458
- virtualizeCols: makeGridAtom(virtualizeCols, store),
459
- quickSearch: makeGridAtom(quickSearch, store),
460
- quickSearchSensitivity: makeGridAtom(quickSearchSensitivity, store),
461
- columnPivotMode: makeGridAtom(columnPivotMode, store),
462
- columnPivotColumns: makeGridAtom(columnPivotColumns, store),
463
- columnPivotModel: makeGridAtom(columnPivotModel, store),
464
- columnPivotColumnGroupExpansions: makeGridAtom(columnPivotColumnGroupExpansions, store),
465
- columnPivotRowGroupExpansions: makeGridAtom(columnPivotRowGroupExpansions, store),
466
- dialogFrames: makeGridAtom(dialogFrame, store),
467
- popoverFrames: makeGridAtom(popoverFrame, store),
468
- cellSelections: makeGridAtom(cellSelections, store),
469
- cellSelectionMode: makeGridAtom(cellSelectionMode, store),
261
+ return view;
262
+ });
263
+ /**
264
+ * COMPUTE ATOMS
265
+ */
266
+ const headerLayout = atom((g) => {
267
+ const view = g(columnView);
268
+ const layout = makeColumnLayout(
269
+ view.combinedView,
270
+ view.meta,
271
+ g(bounds),
272
+ g(internal_focusActive),
273
+ g(floatingRowEnabled),
274
+ );
275
+ const dragged = g(internal_draggingHeader);
276
+ // When dragging a group column, we may end up removing that group column when joining
277
+ // the group with other columns in the same group (if they are separated). We want to ensure
278
+ // the group remains mounted until after the drag. Hence we check if there would've been a merge
279
+ // and add the dragged element to the layout. Once the drag ends the element will be removed. The
280
+ // isHiddenMove is important for this.
281
+ if (dragged) {
282
+ const row = dragged.rowStart;
283
+ const has = layout[row].findIndex(
284
+ (c) => c.kind === "group" && c.idOccurrence === dragged.idOccurrence,
285
+ );
286
+ if (has === -1) {
287
+ layout[row].push({ ...dragged, isHiddenMove: true });
288
+ }
289
+ }
290
+ return { maxCol: view.maxCol, maxRow: view.maxRow, layout: layout };
291
+ });
292
+ const columnGroupMeta = atom((g) => g(columnView).meta);
293
+ const columnMeta = atom((g) => {
294
+ const view = g(columnView);
295
+ return {
296
+ columnLookup: view.lookup,
297
+ columnsVisible: view.visibleColumns,
298
+ columnVisibleCenterCount: view.centerCount,
299
+ columnVisibleEndCount: view.endCount,
300
+ columnVisibleStartCount: view.startCount,
470
301
  };
471
- const api = {};
472
- const grid = { state, view: makeGridAtom(gridView, store), api };
473
- const listeners = makeEventListeners();
474
- Object.assign(api, {
475
- columnField: makeColumnField(grid),
476
- columnFromIndex: makeColumnFromIndex(grid),
477
- columnIndex: makeColumnIndex(grid),
478
- columnById: makeColumnById(grid),
479
- columnResize: makeColumnResize(grid),
480
- columnUpdate: makeColumnUpdate(grid),
481
- columnMove: makeColumnMove(grid),
482
- sortForColumn: makeSortForColumn(grid),
483
- rowIsGroup: (r) => r.kind === "branch",
484
- rowIsLeaf: (r) => r.kind === "leaf",
485
- eventAddListener: listeners.eventAddListener,
486
- eventRemoveListener: listeners.eventRemoveListener,
487
- eventFire: listeners.eventFire,
488
- rowGroupColumnIndex: makeRowGroupColumnIndex(grid),
489
- rowGroupIsExpanded: makeRowGroupIsExpanded(grid),
490
- rowGroupToggle: makeRowGroupToggle(grid),
491
- rowGroupApplyExpansions: makeRowGroupApplyExpansions(grid),
492
- scrollIntoView: makeScrollIntoView(grid),
493
- editBegin: makeEditBegin(grid),
494
- editEnd: makeEditEnd(grid),
495
- editIsCellActive: makeEditIsCellActive(grid),
496
- editUpdate: makeEditUpdate(grid),
497
- focusCell: makeFocusCell(grid),
498
- rowById: makeRowById(grid),
499
- rowByIndex: makeRowByIndex(grid),
500
- rowDetailIsExpanded: makeRowDetailIsExpanded(grid),
501
- rowDetailRenderedHeight: makeRowDetailRenderedHeight(grid),
502
- rowDetailToggle: makeRowDetailToggle(grid),
503
- rowSelect: makeRowSelect(grid),
504
- rowSelectAll: makeRowSelectAll(grid),
505
- rowSelected: makeRowSelected(grid),
506
- rowHandleSelect: makeRowHandleSelect(grid),
507
- columnToggleGroup: makeColumnGroupToggle(grid),
508
- columnAutosize: makeColumnAutosize(grid),
509
- useRowDrag: makeUseRowDrag(grid),
510
- exportCsv: makeExportCsv(grid),
511
- exportCsvFile: makeExportCsvFile(grid),
512
- exportDataRect: makeExportDataRect(grid),
513
- dialogFrameClose: makeDialogFrameClose(grid),
514
- dialogFrameOpen: makeDialogFrameOpen(grid),
515
- popoverFrameClose: makePopoverFrameClose(grid),
516
- popoverFrameOpen: makePopoverFrameOpen(grid),
517
- positionFromElement: makePositionFromElement(),
518
- });
519
- Object.assign(grid, {
520
- internal: {
521
- headerCols: makeGridAtom(atom((g) => g(columnView).maxCol), store),
522
- headerRows: makeGridAtom(atom((g) => g(columnView).maxRow), store),
523
- headerHeightTotal: makeGridAtom(headerHeightTotal, store),
524
- xScroll: makeGridAtom(xScroll, store),
525
- yScroll: makeGridAtom(yScroll, store),
526
- refreshKey: makeGridAtom(rdsAtoms.snapshotKey, store),
527
- layout: makeGridAtom(layoutMap, store),
528
- focusActive: makeGridAtom(internal_focusActive, store),
529
- focusPrevColIndex: makeGridAtom(internal_focusPrevCol, store),
530
- focusPrevRowIndex: makeGridAtom(internal_focusPrevRow, store),
531
- editActivePos: makeGridAtom(internal_editActivePosition, store),
532
- editData: makeGridAtom(internal_editData, store),
533
- editValidation: makeGridAtom(internal_editValidation, store),
534
- rowAutoHeightCache: makeGridAtom(internal_rowAutoHeightCache, store),
535
- rowDetailAutoHeightCache: makeGridAtom(internal_rowDetailHeightCache, store),
536
- rowSelectedIds: rowSelectedIds,
537
- rowSelectionPivot: makeGridAtom(internal_rowSelectionPivot, store),
538
- rowSelectionLastWasDeselect: makeGridAtom(internal_rowSelectionLastWasDeselect, store),
539
- draggingHeader: makeGridAtom(internal_draggingHeader, store),
540
- dialogFrames: makeGridAtom(internal_dialogFrames, store),
541
- popoverFrames: makeGridAtom(internal_popoverFrames, store),
542
- cellSelectionPivot: makeGridAtom(internal_cellSelectionPivot, store),
543
- cellSelectionAdditiveRects: makeGridAtom(internal_cellSelectionAdditive, store),
544
- cellSelectionIsDeselect: makeGridAtom(atom(false), store),
545
- cellSelectionSplits: makeGridAtom(internal_cellSelectionSplits, store),
546
- store: store,
547
- },
548
- });
549
- store.sub(rowDataSource, () => {
550
- store.get(rowDataSource).init(grid);
551
- });
552
- store.set(rowDataSource, p.rowDataSource ?? emptyRowDataSource);
553
- // Ensure cell selections are bounded.
554
- store.sub(cellSelections, () => {
555
- const selections = store.get(cellSelections);
556
- const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
557
- if (equal(selections, safeSelections))
558
- return;
559
- store.set(cellSelections, safeSelections);
560
- });
561
- store.sub(rdsAtoms.rowCount, () => {
562
- const selections = store.get(cellSelections);
563
- const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
564
- store.set(cellSelections, safeSelections);
302
+ });
303
+ const xPositions = atom((g) => {
304
+ const view = g(columnView);
305
+ return computeColumnPositions(
306
+ view.visibleColumns,
307
+ g(base),
308
+ g(viewportWidthInner),
309
+ g(columnSizeToFit),
310
+ );
311
+ });
312
+ const widthTotal = atom((get) => get(xPositions).at(-1));
313
+ const headerHeightTotal = atom((g) => {
314
+ const groupHHeight = g(headerGroupHeight);
315
+ const hHeight = g(headerHeight);
316
+ const view = g(columnView);
317
+ const floating = g(floatingRowEnabled);
318
+ const floatingHeight = g(floatingRowHeight);
319
+ return (view.maxRow - 1) * groupHHeight + hHeight + (floating ? floatingHeight : 0);
320
+ });
321
+ const startCount = atom((g) => g(columnView).startCount);
322
+ const endCount = atom((g) => g(columnView).endCount);
323
+ /** ROWS */
324
+ const rowByIndex = makeGridAtom(
325
+ atom((g) => g(rowDataSource).rowByIndex),
326
+ store,
327
+ );
328
+ const { store: rowDataStore, atoms: rdsAtoms } = makeRowDataStore(store, rowByIndex);
329
+ const yPositions = atom((g) => {
330
+ const rowCount = g(rdsAtoms.rowCount);
331
+ const innerHeight = g(viewportHeightInner);
332
+ const detailExpansions = g(rowDetailExpansions);
333
+ g(internal_rowDetailHeightCache);
334
+ const rds = g(rowDataSource);
335
+ const rows = Object.fromEntries(
336
+ [...detailExpansions]
337
+ .map((x) => rds.rowToIndex(x))
338
+ .filter((x) => x != null)
339
+ .map((x) => [x, api.rowByIndex(x)]),
340
+ );
341
+ return computeRowPositions(
342
+ rowCount,
343
+ g(rowHeight),
344
+ g(rowAutoHeightGuess),
345
+ g(internal_rowAutoHeightCache),
346
+ (i) => {
347
+ const row = rows[i];
348
+ if (!row || !api.rowDetailIsExpanded(row)) return 0;
349
+ return api.rowDetailRenderedHeight(row);
350
+ },
351
+ innerHeight,
352
+ );
353
+ });
354
+ const heightTotal = atom((g) => g(yPositions).at(-1));
355
+ let prevLayout = DEFAULT_PREVIOUS_LAYOUT;
356
+ const rowView = atom((g) => {
357
+ let n = g(bounds);
358
+ if (!g(virtualizeRows)) {
359
+ n = { ...n, rowCenterStart: n.rowTopEnd, rowCenterEnd: n.rowCenterLast };
360
+ }
361
+ if (!g(virtualizeCols)) {
362
+ n = { ...n, colCenterStart: n.colStartEnd, colCenterEnd: n.colCenterLast };
363
+ }
364
+ const rowScan = g(rowScanDistance);
365
+ const colScan = g(colScanDistance);
366
+ const columns = g(columnMeta).columnsVisible;
367
+ const rds = g(rowDataSource);
368
+ applyLayoutUpdate({
369
+ computeColSpan: getSpanFn(rds, grid, columns, "col"),
370
+ computeRowSpan: getSpanFn(rds, grid, columns, "row"),
371
+ colScanDistance: colScan,
372
+ rowScanDistance: rowScan,
373
+ invalidated: true,
374
+ isFullWidth: getFullWidthCallback(rds, g(rowFullWidthPredicate).fn, grid),
375
+ isRowCutoff: (r) => {
376
+ const row = rds.rowByIndex(r);
377
+ return !row || row.kind === "branch";
378
+ },
379
+ layoutMap: g(layoutMap),
380
+ nextLayout: n,
381
+ prevLayout,
565
382
  });
566
- store.sub(columnMeta, () => {
567
- const selections = store.get(cellSelections);
568
- const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
569
- store.set(cellSelections, safeSelections);
383
+ prevLayout = n;
384
+ const topCount = g(rdsAtoms.topCount);
385
+ const botCount = g(rdsAtoms.bottomCount);
386
+ const rowCount = g(rdsAtoms.rowCount);
387
+ const yPos = g(yPositions);
388
+ const botStart = rowCount - botCount;
389
+ const focus = g(internal_focusActive);
390
+ const view = makeRowLayout({
391
+ layout: n,
392
+ layoutMap: g(layoutMap),
393
+ rds: rowDataStore,
394
+ columns,
395
+ focus: g(internal_focusActive),
570
396
  });
571
- return grid;
397
+ const topHeight = yPos[topCount];
398
+ const botHeight = yPos.at(-1) - yPos[botStart];
399
+ const centerHeight = yPos.at(-1) - topHeight - botHeight;
400
+ return {
401
+ ...view,
402
+ rowFocusedIndex:
403
+ focus?.kind === "cell" || focus?.kind === "full-width"
404
+ ? focus.rowIndex < topCount || focus.rowIndex >= rowCount - botCount
405
+ ? null
406
+ : focus.rowIndex
407
+ : null,
408
+ rowTopTotalHeight: topHeight,
409
+ rowBottomTotalHeight: botHeight,
410
+ rowCenterTotalHeight: centerHeight,
411
+ rowFirstCenter: n.rowCenterStart,
412
+ };
413
+ });
414
+ /**
415
+ * STATE VIEW AND API
416
+ */
417
+ const gridView = atom((g) => {
418
+ return {
419
+ header: g(headerLayout),
420
+ rows: g(rowView),
421
+ };
422
+ });
423
+ const state = {
424
+ rtl: makeGridAtom(rtl, store),
425
+ columns: makeGridAtom(columns, store),
426
+ columnMeta: makeGridAtom(columnMeta, store),
427
+ columnBase: makeGridAtom(base, store),
428
+ columnGroupExpansions: makeGridAtom(columnGroupExpansions, store),
429
+ columnGroupDefaultExpansion: makeGridAtom(columnGroupDefaultExpansion, store),
430
+ columnGroupJoinDelimiter: makeGridAtom(columnGroupJoinDelimiter, store),
431
+ columnGroupMeta: makeGridAtom(columnGroupMeta, store),
432
+ columnSizeToFit: makeGridAtom(columnSizeToFit, store),
433
+ gridId: makeGridAtom(gridId, store),
434
+ widthTotal: makeGridAtom(widthTotal, store),
435
+ heightTotal: makeGridAtom(heightTotal, store),
436
+ headerHeight: makeGridAtom(headerHeight, store),
437
+ headerGroupHeight: makeGridAtom(headerGroupHeight, store),
438
+ viewport: makeGridAtom(viewport, store),
439
+ viewportHeightInner: makeGridAtom(viewportHeightInner, store),
440
+ viewportHeightOuter: makeGridAtom(viewportHeightOuter, store),
441
+ viewportWidthInner: makeGridAtom(viewportWidthInner, store),
442
+ viewportWidthOuter: makeGridAtom(viewportWidthOuter, store),
443
+ xPositions: makeGridAtom(xPositions, store),
444
+ yPositions: makeGridAtom(yPositions, store),
445
+ rowDataStore,
446
+ rowDataSource: makeGridAtom(rowDataSource, store),
447
+ rowAutoHeightGuess: makeGridAtom(rowAutoHeightGuess, store),
448
+ rowHeight: makeGridAtom(rowHeight, store),
449
+ rowScanDistance: makeGridAtom(rowScanDistance, store),
450
+ colScanDistance: makeGridAtom(colScanDistance, store),
451
+ colOverscanStart: makeGridAtom(colOverScanStart, store),
452
+ colOverscanEnd: makeGridAtom(colOverscanEnd, store),
453
+ rowOverscanTop: makeGridAtom(rowOverscanTop, store),
454
+ rowOverscanBottom: makeGridAtom(rowOverscanBottom, store),
455
+ rowFullWidthPredicate: makeGridAtom(rowFullWidthPredicate, store),
456
+ rowFullWidthRenderer: makeGridAtom(rowFullWidthRenderer, store),
457
+ cellRenderers: makeGridAtom(cellRenderers, store),
458
+ sortModel: makeGridAtom(sortModel, store),
459
+ filterModel: makeGridAtom(filterModel, store),
460
+ filterInModel: makeGridAtom(filterInModel, store),
461
+ rowGroupModel: makeGridAtom(rowGroupModel, store),
462
+ aggModel: makeGridAtom(aggModel, store),
463
+ rowGroupColumn: makeGridAtom(rowGroupColumn, store),
464
+ rowGroupDefaultExpansion: makeGridAtom(rowGroupDefaultExpansion, store),
465
+ rowGroupDisplayMode: makeGridAtom(rowGroupDisplayMode, store),
466
+ rowGroupExpansions: makeGridAtom(rowGroupExpansions, store),
467
+ headerCellRenderers: makeGridAtom(headerCellRenderers, store),
468
+ floatingCellRenderers: makeGridAtom(floatingCellRenderers, store),
469
+ floatingRowEnabled: makeGridAtom(floatingRowEnabled, store),
470
+ floatingRowHeight: makeGridAtom(floatingRowHeight, store),
471
+ editRenderers: makeGridAtom(editRenderers, store),
472
+ editCellMode: makeGridAtom(editCellMode, store),
473
+ editClickActivator: makeGridAtom(editClickActivator, store),
474
+ editRowValidatorFn: makeGridAtom(editRowValidatorFn, store),
475
+ editActivePosition: makeGridAtom(
476
+ atom((g) => g(internal_editActivePosition)),
477
+ store,
478
+ ),
479
+ columnMarker: makeGridAtom(columnMarker, store),
480
+ columnMarkerEnabled: makeGridAtom(columnMarkerEnabled, store),
481
+ columnDoubleClickToAutosize: makeGridAtom(columnDoubleClickToAutosize, store),
482
+ rowDetailExpansions: makeGridAtom(rowDetailExpansions, store),
483
+ rowDetailHeight: makeGridAtom(rowDetailHeight, store),
484
+ rowDetailRenderer: makeGridAtom(rowDetailRenderer, store),
485
+ rowDetailAutoHeightGuess: makeGridAtom(rowDetailAutoHeightGuess, store),
486
+ rowSelectedIds: makeGridAtom(rowSelectedIds, store),
487
+ rowSelectionMode: makeGridAtom(rowSelectionMode, store),
488
+ rowSelectionPivot: makeGridAtom(rowSelectionPivot, store),
489
+ rowSelectionActivator: makeGridAtom(rowSelectionActivator, store),
490
+ rowSelectChildren: makeGridAtom(rowSelectChildren, store),
491
+ viewBounds: makeGridAtom(bounds, store),
492
+ virtualizeRows: makeGridAtom(virtualizeRows, store),
493
+ virtualizeCols: makeGridAtom(virtualizeCols, store),
494
+ quickSearch: makeGridAtom(quickSearch, store),
495
+ quickSearchSensitivity: makeGridAtom(quickSearchSensitivity, store),
496
+ columnPivotMode: makeGridAtom(columnPivotMode, store),
497
+ columnPivotColumns: makeGridAtom(columnPivotColumns, store),
498
+ columnPivotModel: makeGridAtom(columnPivotModel, store),
499
+ columnPivotColumnGroupExpansions: makeGridAtom(columnPivotColumnGroupExpansions, store),
500
+ columnPivotRowGroupExpansions: makeGridAtom(columnPivotRowGroupExpansions, store),
501
+ dialogFrames: makeGridAtom(dialogFrame, store),
502
+ popoverFrames: makeGridAtom(popoverFrame, store),
503
+ cellSelections: makeGridAtom(cellSelections, store),
504
+ cellSelectionMode: makeGridAtom(cellSelectionMode, store),
505
+ };
506
+ const api = {};
507
+ const grid = { state, view: makeGridAtom(gridView, store), api };
508
+ const listeners = makeEventListeners();
509
+ Object.assign(api, {
510
+ columnField: makeColumnField(grid),
511
+ columnFromIndex: makeColumnFromIndex(grid),
512
+ columnIndex: makeColumnIndex(grid),
513
+ columnById: makeColumnById(grid),
514
+ columnResize: makeColumnResize(grid),
515
+ columnUpdate: makeColumnUpdate(grid),
516
+ columnMove: makeColumnMove(grid),
517
+ sortForColumn: makeSortForColumn(grid),
518
+ rowIsGroup: (r) => r.kind === "branch",
519
+ rowIsLeaf: (r) => r.kind === "leaf",
520
+ eventAddListener: listeners.eventAddListener,
521
+ eventRemoveListener: listeners.eventRemoveListener,
522
+ eventFire: listeners.eventFire,
523
+ rowGroupColumnIndex: makeRowGroupColumnIndex(grid),
524
+ rowGroupIsExpanded: makeRowGroupIsExpanded(grid),
525
+ rowGroupToggle: makeRowGroupToggle(grid),
526
+ rowGroupApplyExpansions: makeRowGroupApplyExpansions(grid),
527
+ scrollIntoView: makeScrollIntoView(grid),
528
+ editBegin: makeEditBegin(grid),
529
+ editEnd: makeEditEnd(grid),
530
+ editIsCellActive: makeEditIsCellActive(grid),
531
+ editUpdate: makeEditUpdate(grid),
532
+ focusCell: makeFocusCell(grid),
533
+ rowById: makeRowById(grid),
534
+ rowByIndex: makeRowByIndex(grid),
535
+ rowDetailIsExpanded: makeRowDetailIsExpanded(grid),
536
+ rowDetailRenderedHeight: makeRowDetailRenderedHeight(grid),
537
+ rowDetailToggle: makeRowDetailToggle(grid),
538
+ rowSelect: makeRowSelect(grid),
539
+ rowSelectAll: makeRowSelectAll(grid),
540
+ rowSelected: makeRowSelected(grid),
541
+ rowHandleSelect: makeRowHandleSelect(grid),
542
+ columnToggleGroup: makeColumnGroupToggle(grid),
543
+ columnAutosize: makeColumnAutosize(grid),
544
+ useRowDrag: makeUseRowDrag(grid),
545
+ exportCsv: makeExportCsv(grid),
546
+ exportCsvFile: makeExportCsvFile(grid),
547
+ exportDataRect: makeExportDataRect(grid),
548
+ dialogFrameClose: makeDialogFrameClose(grid),
549
+ dialogFrameOpen: makeDialogFrameOpen(grid),
550
+ popoverFrameClose: makePopoverFrameClose(grid),
551
+ popoverFrameOpen: makePopoverFrameOpen(grid),
552
+ positionFromElement: makePositionFromElement(),
553
+ });
554
+ Object.assign(grid, {
555
+ internal: {
556
+ headerCols: makeGridAtom(
557
+ atom((g) => g(columnView).maxCol),
558
+ store,
559
+ ),
560
+ headerRows: makeGridAtom(
561
+ atom((g) => g(columnView).maxRow),
562
+ store,
563
+ ),
564
+ headerHeightTotal: makeGridAtom(headerHeightTotal, store),
565
+ xScroll: makeGridAtom(xScroll, store),
566
+ yScroll: makeGridAtom(yScroll, store),
567
+ refreshKey: makeGridAtom(rdsAtoms.snapshotKey, store),
568
+ layout: makeGridAtom(layoutMap, store),
569
+ focusActive: makeGridAtom(internal_focusActive, store),
570
+ focusPrevColIndex: makeGridAtom(internal_focusPrevCol, store),
571
+ focusPrevRowIndex: makeGridAtom(internal_focusPrevRow, store),
572
+ editActivePos: makeGridAtom(internal_editActivePosition, store),
573
+ editData: makeGridAtom(internal_editData, store),
574
+ editValidation: makeGridAtom(internal_editValidation, store),
575
+ rowAutoHeightCache: makeGridAtom(internal_rowAutoHeightCache, store),
576
+ rowDetailAutoHeightCache: makeGridAtom(internal_rowDetailHeightCache, store),
577
+ rowSelectedIds: rowSelectedIds,
578
+ rowSelectionPivot: makeGridAtom(internal_rowSelectionPivot, store),
579
+ rowSelectionLastWasDeselect: makeGridAtom(internal_rowSelectionLastWasDeselect, store),
580
+ draggingHeader: makeGridAtom(internal_draggingHeader, store),
581
+ dialogFrames: makeGridAtom(internal_dialogFrames, store),
582
+ popoverFrames: makeGridAtom(internal_popoverFrames, store),
583
+ cellSelectionPivot: makeGridAtom(internal_cellSelectionPivot, store),
584
+ cellSelectionAdditiveRects: makeGridAtom(internal_cellSelectionAdditive, store),
585
+ cellSelectionIsDeselect: makeGridAtom(atom(false), store),
586
+ cellSelectionSplits: makeGridAtom(internal_cellSelectionSplits, store),
587
+ store: store,
588
+ },
589
+ });
590
+ store.sub(rowDataSource, () => {
591
+ store.get(rowDataSource).init(grid);
592
+ });
593
+ store.set(rowDataSource, p.rowDataSource ?? emptyRowDataSource);
594
+ // Ensure cell selections are bounded.
595
+ store.sub(cellSelections, () => {
596
+ const selections = store.get(cellSelections);
597
+ const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
598
+ if (equal(selections, safeSelections)) return;
599
+ store.set(cellSelections, safeSelections);
600
+ });
601
+ store.sub(rdsAtoms.rowCount, () => {
602
+ const selections = store.get(cellSelections);
603
+ const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
604
+ store.set(cellSelections, safeSelections);
605
+ });
606
+ store.sub(columnMeta, () => {
607
+ const selections = store.get(cellSelections);
608
+ const safeSelections = selections.map((c) => boundSelectionRect(grid, c));
609
+ store.set(cellSelections, safeSelections);
610
+ });
611
+ return grid;
572
612
  }
573
613
  export function useLyteNyte(p) {
574
- const m = useRef(null);
575
- if (!m.current) {
576
- m.current = makeLyteNyte(p);
577
- }
578
- return m.current;
614
+ const m = useRef(null);
615
+ if (!m.current) {
616
+ m.current = makeLyteNyte(p);
617
+ }
618
+ return m.current;
579
619
  }