@1771technologies/lytenyte-pro 1.0.0-beta.1 → 1.0.0-beta.10

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 (396) hide show
  1. package/dist/+types.d.ts +4135 -3940
  2. package/dist/cell-selection/adjust-rect-for-row-and-cell-span.d.ts +1 -1
  3. package/dist/cell-selection/adjust-rect-for-row-and-cell-span.js +39 -39
  4. package/dist/cell-selection/are-rects-equal.d.ts +1 -1
  5. package/dist/cell-selection/are-rects-equal.js +6 -4
  6. package/dist/cell-selection/bound-selection-rect.d.ts +1 -1
  7. package/dist/cell-selection/bound-selection-rect.js +14 -14
  8. package/dist/cell-selection/cell-selection-containers.js +108 -78
  9. package/dist/cell-selection/cell-selection-driver.js +250 -254
  10. package/dist/cell-selection/cell-style-row.d.ts +12 -6
  11. package/dist/cell-selection/cell-style-row.js +82 -79
  12. package/dist/cell-selection/deselect-rect-range.d.ts +1 -1
  13. package/dist/cell-selection/deselect-rect-range.js +42 -41
  14. package/dist/cell-selection/expand-cell-selection-down.d.ts +7 -4
  15. package/dist/cell-selection/expand-cell-selection-down.js +30 -34
  16. package/dist/cell-selection/expand-cell-selection-end.d.ts +7 -4
  17. package/dist/cell-selection/expand-cell-selection-end.js +31 -35
  18. package/dist/cell-selection/expand-cell-selection-start.d.ts +7 -4
  19. package/dist/cell-selection/expand-cell-selection-start.js +30 -34
  20. package/dist/cell-selection/expand-cell-selection-up.d.ts +7 -4
  21. package/dist/cell-selection/expand-cell-selection-up.js +30 -34
  22. package/dist/cell-selection/full-width-start-end-index.d.ts +1 -1
  23. package/dist/cell-selection/full-width-start-end-index.js +3 -3
  24. package/dist/cell-selection/get-root-cell.d.ts +6 -2
  25. package/dist/cell-selection/get-root-cell.js +79 -81
  26. package/dist/cell-selection/is-bottom-rect.d.ts +1 -1
  27. package/dist/cell-selection/is-bottom-rect.js +5 -5
  28. package/dist/cell-selection/is-center-col-rect.d.ts +6 -3
  29. package/dist/cell-selection/is-center-col-rect.js +5 -3
  30. package/dist/cell-selection/is-center-rect.d.ts +1 -1
  31. package/dist/cell-selection/is-center-rect.js +3 -3
  32. package/dist/cell-selection/is-end-rect.d.ts +6 -3
  33. package/dist/cell-selection/is-end-rect.js +2 -2
  34. package/dist/cell-selection/is-overlapping-rect.d.ts +1 -1
  35. package/dist/cell-selection/is-overlapping-rect.js +6 -4
  36. package/dist/cell-selection/is-start-rect.d.ts +6 -3
  37. package/dist/cell-selection/is-start-rect.js +2 -2
  38. package/dist/cell-selection/is-top-rect.d.ts +1 -1
  39. package/dist/cell-selection/is-top-rect.js +2 -2
  40. package/dist/cell-selection/is-within-selection-rect.d.ts +1 -1
  41. package/dist/cell-selection/is-within-selection-rect.js +1 -1
  42. package/dist/cell-selection/split-cell-selection-rect.d.ts +13 -7
  43. package/dist/cell-selection/split-cell-selection-rect.js +53 -47
  44. package/dist/cell-selection/update-additive-cell-selection.d.ts +7 -4
  45. package/dist/cell-selection/update-additive-cell-selection.js +22 -23
  46. package/dist/cell-selection/use-edge-scroll.d.ts +10 -8
  47. package/dist/cell-selection/use-edge-scroll.js +65 -63
  48. package/dist/cells/cell-default.d.ts +5 -1
  49. package/dist/cells/cell-default.js +5 -5
  50. package/dist/cells/cell-editor.d.ts +4 -2
  51. package/dist/cells/cell-editor.js +121 -86
  52. package/dist/cells/cell.d.ts +16 -3
  53. package/dist/cells/cell.js +55 -26
  54. package/dist/column-manager/branch-lookup-context.d.ts +3 -1
  55. package/dist/column-manager/branch.d.ts +12 -4
  56. package/dist/column-manager/branch.js +39 -29
  57. package/dist/column-manager/column-manager.d.ts +58 -9
  58. package/dist/column-manager/column-manager.js +9 -9
  59. package/dist/column-manager/context.d.ts +1 -1
  60. package/dist/column-manager/label.d.ts +10 -2
  61. package/dist/column-manager/label.js +11 -12
  62. package/dist/column-manager/leaf.d.ts +10 -2
  63. package/dist/column-manager/leaf.js +42 -32
  64. package/dist/column-manager/move-handle.d.ts +14 -6
  65. package/dist/column-manager/move-handle.js +54 -50
  66. package/dist/column-manager/root.d.ts +9 -3
  67. package/dist/column-manager/root.js +26 -13
  68. package/dist/column-manager/use-column-manager.d.ts +14 -14
  69. package/dist/column-manager/use-column-manager.js +21 -21
  70. package/dist/column-manager/use-columns-from-context.d.ts +2 -2
  71. package/dist/column-manager/use-columns-from-context.js +19 -19
  72. package/dist/column-manager/visibility-checkbox.d.ts +14 -6
  73. package/dist/column-manager/visibility-checkbox.js +36 -23
  74. package/dist/context.d.ts +4 -4
  75. package/dist/filter-tree/branch.d.ts +13 -5
  76. package/dist/filter-tree/branch.js +23 -13
  77. package/dist/filter-tree/context.d.ts +16 -16
  78. package/dist/filter-tree/filter-tree.d.ts +53 -12
  79. package/dist/filter-tree/filter-tree.js +16 -16
  80. package/dist/filter-tree/hooks/use-filter-tree.d.ts +35 -29
  81. package/dist/filter-tree/hooks/use-filter-tree.js +94 -92
  82. package/dist/filter-tree/hooks/use-tree-item.d.ts +6 -6
  83. package/dist/filter-tree/hooks/use-tree-item.js +101 -108
  84. package/dist/filter-tree/inclusion-checkbox.d.ts +14 -6
  85. package/dist/filter-tree/inclusion-checkbox.js +19 -9
  86. package/dist/filter-tree/label.d.ts +10 -2
  87. package/dist/filter-tree/label.js +11 -12
  88. package/dist/filter-tree/leaf.d.ts +10 -2
  89. package/dist/filter-tree/leaf.js +15 -5
  90. package/dist/filter-tree/root.d.ts +23 -7
  91. package/dist/filter-tree/root.js +51 -23
  92. package/dist/grid-box/+types.d.ts +10 -10
  93. package/dist/grid-box/context.d.ts +4 -4
  94. package/dist/grid-box/grid-box.d.ts +26 -6
  95. package/dist/grid-box/grid-box.js +6 -6
  96. package/dist/grid-box/item.d.ts +11 -3
  97. package/dist/grid-box/item.js +29 -26
  98. package/dist/grid-box/panel.d.ts +13 -1
  99. package/dist/grid-box/panel.js +9 -2
  100. package/dist/grid-box/root.d.ts +11 -5
  101. package/dist/grid-box/root.js +11 -2
  102. package/dist/grid-box/use-aggregation-box-items.d.ts +18 -15
  103. package/dist/grid-box/use-aggregation-box-items.js +54 -55
  104. package/dist/grid-box/use-column-box-items.d.ts +33 -23
  105. package/dist/grid-box/use-column-box-items.js +90 -78
  106. package/dist/grid-box/use-row-group-box-items.d.ts +19 -14
  107. package/dist/grid-box/use-row-group-box-items.js +116 -124
  108. package/dist/grid-provider/context.d.ts +6 -4
  109. package/dist/grid-provider/provider.d.ts +5 -3
  110. package/dist/grid-provider/provider.js +1 -1
  111. package/dist/grid-provider/use-grid.d.ts +2 -2
  112. package/dist/grid-provider/use-grid.js +1 -1
  113. package/dist/grid.d.ts +150 -25
  114. package/dist/grid.js +39 -25
  115. package/dist/header/header-cell.d.ts +13 -5
  116. package/dist/header/header-cell.js +41 -15
  117. package/dist/header/header-group-cell.d.ts +10 -2
  118. package/dist/header/header-group-cell.js +21 -6
  119. package/dist/header/header-row.d.ts +10 -2
  120. package/dist/header/header-row.js +2 -2
  121. package/dist/header/header.d.ts +10 -1
  122. package/dist/header/header.js +11 -2
  123. package/dist/header/resize-handler.d.ts +15 -6
  124. package/dist/header/resize-handler.js +128 -117
  125. package/dist/header/use-drag-move.d.ts +23 -12
  126. package/dist/header/use-drag-move.js +83 -87
  127. package/dist/header/use-header-cell-renderer.d.ts +9 -2
  128. package/dist/header/use-header-cell-renderer.js +24 -29
  129. package/dist/icons/index.d.ts +92 -0
  130. package/dist/icons/index.js +92 -0
  131. package/dist/index.d.ts +1 -0
  132. package/dist/index.js +1 -0
  133. package/dist/license.js +174 -174
  134. package/dist/listbox/context.d.ts +2 -2
  135. package/dist/listbox/item.d.ts +10 -1
  136. package/dist/listbox/item.js +23 -19
  137. package/dist/listbox/panel.d.ts +10 -1
  138. package/dist/listbox/panel.js +69 -43
  139. package/dist/listbox/root.d.ts +5 -3
  140. package/dist/listbox/root.js +7 -7
  141. package/dist/root/dialog-driver.js +22 -16
  142. package/dist/root/popover-driver.js +27 -16
  143. package/dist/root/root.d.ts +7 -3
  144. package/dist/root/root.js +111 -107
  145. package/dist/row-data-source-client/+types.d.ts +17 -17
  146. package/dist/row-data-source-client/built-ins/avg.js +3 -4
  147. package/dist/row-data-source-client/built-ins/built-ins.d.ts +17 -17
  148. package/dist/row-data-source-client/built-ins/built-ins.js +17 -17
  149. package/dist/row-data-source-client/built-ins/count.js +3 -5
  150. package/dist/row-data-source-client/built-ins/first.js +1 -1
  151. package/dist/row-data-source-client/built-ins/group.js +1 -1
  152. package/dist/row-data-source-client/built-ins/last.js +1 -1
  153. package/dist/row-data-source-client/built-ins/max.js +9 -13
  154. package/dist/row-data-source-client/built-ins/min.js +9 -13
  155. package/dist/row-data-source-client/built-ins/sum.js +8 -10
  156. package/dist/row-data-source-client/filter/+types.d.ts +35 -13
  157. package/dist/row-data-source-client/filter/compute-filtered-rows.d.ts +16 -2
  158. package/dist/row-data-source-client/filter/compute-filtered-rows.js +102 -102
  159. package/dist/row-data-source-client/pivots/create-agg-model.d.ts +8 -4
  160. package/dist/row-data-source-client/pivots/create-agg-model.js +8 -9
  161. package/dist/row-data-source-client/pivots/create-pivot-columns-from-paths.d.ts +6 -1
  162. package/dist/row-data-source-client/pivots/create-pivot-columns-from-paths.js +42 -46
  163. package/dist/row-data-source-client/pivots/create-pivot-columns.d.ts +6 -1
  164. package/dist/row-data-source-client/pivots/create-pivot-columns.js +18 -19
  165. package/dist/row-data-source-client/pivots/create-pivot-tree.d.ts +7 -1
  166. package/dist/row-data-source-client/pivots/create-pivot-tree.js +19 -19
  167. package/dist/row-data-source-client/tree/client-tree.d.ts +19 -13
  168. package/dist/row-data-source-client/tree/client-tree.js +64 -67
  169. package/dist/row-data-source-client/tree/evaluator-aggregation.d.ts +5 -2
  170. package/dist/row-data-source-client/tree/evaluator-aggregation.js +6 -6
  171. package/dist/row-data-source-client/tree/evaluator-group.d.ts +5 -2
  172. package/dist/row-data-source-client/tree/evaluator-group.js +6 -7
  173. package/dist/row-data-source-client/tree/traverse.d.ts +6 -2
  174. package/dist/row-data-source-client/tree/traverse.js +16 -19
  175. package/dist/row-data-source-client/use-client-data-source-paginated.d.ts +11 -7
  176. package/dist/row-data-source-client/use-client-data-source-paginated.js +528 -512
  177. package/dist/row-data-source-client/use-client-data-source.d.ts +11 -7
  178. package/dist/row-data-source-client/use-client-data-source.js +673 -639
  179. package/dist/row-data-source-client/use-client-tree-data-source.d.ts +10 -6
  180. package/dist/row-data-source-client/use-client-tree-data-source.js +499 -489
  181. package/dist/row-data-source-server/async-tree/+types.async-tree.d.ts +36 -33
  182. package/dist/row-data-source-server/async-tree/apply-delete-action-to-tree.d.ts +4 -1
  183. package/dist/row-data-source-server/async-tree/apply-delete-action-to-tree.js +19 -23
  184. package/dist/row-data-source-server/async-tree/apply-set-action-to-tree.d.ts +4 -1
  185. package/dist/row-data-source-server/async-tree/apply-set-action-to-tree.js +17 -25
  186. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-are-unique.js +18 -18
  187. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-are-valid.js +9 -10
  188. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-fit.d.ts +4 -1
  189. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-fit.js +13 -14
  190. package/dist/row-data-source-server/async-tree/check-set-action-item-kinds.js +9 -10
  191. package/dist/row-data-source-server/async-tree/get-parent-node-by-path.d.ts +4 -1
  192. package/dist/row-data-source-server/async-tree/get-parent-node-by-path.js +13 -13
  193. package/dist/row-data-source-server/async-tree/is-set-action-a-no-op-on-node.d.ts +4 -1
  194. package/dist/row-data-source-server/async-tree/is-set-action-a-no-op-on-node.js +1 -1
  195. package/dist/row-data-source-server/async-tree/make-async-tree.js +17 -17
  196. package/dist/row-data-source-server/async-tree/maybe-apply-parent-remove-self.d.ts +3 -1
  197. package/dist/row-data-source-server/async-tree/maybe-apply-parent-remove-self.js +6 -6
  198. package/dist/row-data-source-server/async-tree/maybe-apply-resize.d.ts +5 -1
  199. package/dist/row-data-source-server/async-tree/maybe-apply-resize.js +11 -14
  200. package/dist/row-data-source-server/async-tree/maybe-apply-set-action-items.d.ts +4 -1
  201. package/dist/row-data-source-server/async-tree/maybe-apply-set-action-items.js +42 -46
  202. package/dist/row-data-source-server/range-tree/range-tree.d.ts +28 -28
  203. package/dist/row-data-source-server/range-tree/range-tree.js +49 -48
  204. package/dist/row-data-source-server/use-server-data-source.d.ts +12 -3
  205. package/dist/row-data-source-server/use-server-data-source.js +667 -654
  206. package/dist/row-data-source-server/utils/get-node-depth.js +7 -7
  207. package/dist/row-data-source-server/utils/get-node-path.js +7 -7
  208. package/dist/row-data-source-server/utils/get-request-id.js +3 -4
  209. package/dist/rows/row/context.d.ts +2 -2
  210. package/dist/rows/row/row.d.ts +16 -3
  211. package/dist/rows/row/row.js +19 -4
  212. package/dist/rows/row/use-row-context-value.d.ts +5 -2
  213. package/dist/rows/row/use-row-context-value.js +23 -26
  214. package/dist/rows/row-detail-row.d.ts +4 -2
  215. package/dist/rows/row-detail-row.js +147 -124
  216. package/dist/rows/row-full-width.d.ts +12 -4
  217. package/dist/rows/row-full-width.js +35 -7
  218. package/dist/rows/rows-container.d.ts +10 -1
  219. package/dist/rows/rows-container.js +12 -3
  220. package/dist/rows/rows-sections.d.ts +30 -3
  221. package/dist/rows/rows-sections.js +42 -10
  222. package/dist/rows/scrollers/native-scroller.d.ts +3 -1
  223. package/dist/rows/scrollers/native-scroller.js +17 -13
  224. package/dist/sort-manager/+types.d.ts +14 -7
  225. package/dist/sort-manager/context.d.ts +7 -7
  226. package/dist/sort-manager/hooks/use-sort-manager.d.ts +10 -10
  227. package/dist/sort-manager/hooks/use-sort-manager.js +47 -51
  228. package/dist/sort-manager/hooks/use-sort-row-item.d.ts +58 -47
  229. package/dist/sort-manager/hooks/use-sort-row-item.js +127 -132
  230. package/dist/sort-manager/hooks/use-sortable-column-items.d.ts +6 -3
  231. package/dist/sort-manager/hooks/use-sortable-column-items.js +10 -10
  232. package/dist/sort-manager/root.d.ts +7 -1
  233. package/dist/sort-manager/root.js +10 -10
  234. package/dist/sort-manager/sort-add.d.ts +13 -5
  235. package/dist/sort-manager/sort-add.js +8 -8
  236. package/dist/sort-manager/sort-apply.d.ts +12 -4
  237. package/dist/sort-manager/sort-apply.js +16 -16
  238. package/dist/sort-manager/sort-cancel.d.ts +12 -4
  239. package/dist/sort-manager/sort-cancel.js +19 -19
  240. package/dist/sort-manager/sort-clear.d.ts +12 -4
  241. package/dist/sort-manager/sort-clear.js +15 -16
  242. package/dist/sort-manager/sort-column-select.d.ts +14 -6
  243. package/dist/sort-manager/sort-column-select.js +26 -15
  244. package/dist/sort-manager/sort-direction-select.d.ts +14 -6
  245. package/dist/sort-manager/sort-direction-select.js +27 -19
  246. package/dist/sort-manager/sort-manager.d.ts +93 -12
  247. package/dist/sort-manager/sort-manager.js +12 -12
  248. package/dist/sort-manager/sort-remove.d.ts +12 -4
  249. package/dist/sort-manager/sort-remove.js +8 -8
  250. package/dist/sort-manager/sort-row.d.ts +10 -2
  251. package/dist/sort-manager/sort-row.js +4 -1
  252. package/dist/sort-manager/sort-rows.d.ts +10 -1
  253. package/dist/sort-manager/sort-rows.js +1 -1
  254. package/dist/sort-manager/sort-value-select.d.ts +15 -7
  255. package/dist/sort-manager/sort-value-select.js +28 -19
  256. package/dist/sort-manager/utils/sort-item-to-sort-model.d.ts +5 -2
  257. package/dist/sort-manager/utils/sort-item-to-sort-model.js +46 -49
  258. package/dist/sort-manager/utils/sort-model-to-sort-items.d.ts +5 -2
  259. package/dist/sort-manager/utils/sort-model-to-sort-items.js +36 -44
  260. package/dist/state/+types.d.ts +41 -28
  261. package/dist/state/api/column-autosize.d.ts +5 -3
  262. package/dist/state/api/column-autosize.js +63 -64
  263. package/dist/state/api/column-by-id.js +4 -4
  264. package/dist/state/api/column-field.js +17 -20
  265. package/dist/state/api/column-from-index.js +4 -4
  266. package/dist/state/api/column-group-toggle.js +8 -8
  267. package/dist/state/api/column-index.js +5 -5
  268. package/dist/state/api/column-move.js +49 -47
  269. package/dist/state/api/column-resize.js +9 -7
  270. package/dist/state/api/column-update.js +11 -11
  271. package/dist/state/api/dialog-frame.d.ts +9 -5
  272. package/dist/state/api/dialog-frame.js +11 -12
  273. package/dist/state/api/edit-begin.d.ts +5 -3
  274. package/dist/state/api/edit-begin.js +72 -85
  275. package/dist/state/api/edit-end.d.ts +5 -3
  276. package/dist/state/api/edit-end.js +38 -41
  277. package/dist/state/api/edit-is-cell-active.d.ts +5 -3
  278. package/dist/state/api/edit-is-cell-active.js +17 -24
  279. package/dist/state/api/edit-update.d.ts +5 -3
  280. package/dist/state/api/edit-update.js +75 -86
  281. package/dist/state/api/event-listeners.d.ts +12 -3
  282. package/dist/state/api/event-listeners.js +16 -17
  283. package/dist/state/api/export-csv.js +34 -36
  284. package/dist/state/api/export-data-rect.js +22 -22
  285. package/dist/state/api/focus-cell.d.ts +5 -3
  286. package/dist/state/api/focus-cell.js +110 -109
  287. package/dist/state/api/popover-frame.d.ts +10 -6
  288. package/dist/state/api/popover-frame.js +11 -12
  289. package/dist/state/api/position-from-element.js +5 -6
  290. package/dist/state/api/row-by-id.js +3 -3
  291. package/dist/state/api/row-by-index.js +11 -6
  292. package/dist/state/api/row-detail-is-expanded.d.ts +3 -1
  293. package/dist/state/api/row-detail-is-expanded.js +4 -4
  294. package/dist/state/api/row-detail-rendered-height.d.ts +6 -4
  295. package/dist/state/api/row-detail-rendered-height.js +10 -12
  296. package/dist/state/api/row-detail-toggle.js +26 -30
  297. package/dist/state/api/row-group-apply-expansions.d.ts +3 -1
  298. package/dist/state/api/row-group-apply-expansions.js +15 -17
  299. package/dist/state/api/row-group-column-index.d.ts +3 -1
  300. package/dist/state/api/row-group-column-index.js +14 -12
  301. package/dist/state/api/row-group-is-expanded.d.ts +3 -1
  302. package/dist/state/api/row-group-is-expanded.js +11 -13
  303. package/dist/state/api/row-group-toggle.js +5 -5
  304. package/dist/state/api/row-handle-select.d.ts +4 -2
  305. package/dist/state/api/row-handle-select.js +36 -40
  306. package/dist/state/api/row-select-all.js +14 -15
  307. package/dist/state/api/row-select.d.ts +4 -2
  308. package/dist/state/api/row-select.js +30 -33
  309. package/dist/state/api/row-selected.js +10 -11
  310. package/dist/state/api/scroll-into-view.d.ts +4 -2
  311. package/dist/state/api/scroll-into-view.js +47 -47
  312. package/dist/state/api/sort-for-column.js +6 -7
  313. package/dist/state/api/use-row-drag.js +22 -24
  314. package/dist/state/helpers/cell-row-group.d.ts +5 -1
  315. package/dist/state/helpers/cell-row-group.js +18 -16
  316. package/dist/state/helpers/column-add-row-group.d.ts +16 -6
  317. package/dist/state/helpers/column-add-row-group.js +63 -58
  318. package/dist/state/helpers/column-layout.d.ts +7 -1
  319. package/dist/state/helpers/column-layout.js +60 -60
  320. package/dist/state/helpers/column-marker.d.ts +8 -4
  321. package/dist/state/helpers/column-marker.js +38 -34
  322. package/dist/state/helpers/column-view.d.ts +21 -15
  323. package/dist/state/helpers/column-view.js +56 -32
  324. package/dist/state/helpers/edit-on-change.d.ts +18 -10
  325. package/dist/state/helpers/edit-on-change.js +24 -24
  326. package/dist/state/helpers/empty-row-data-source.js +15 -15
  327. package/dist/state/helpers/get-data-rect.d.ts +20 -10
  328. package/dist/state/helpers/get-data-rect.js +67 -62
  329. package/dist/state/helpers/get-full-width-callback.d.ts +5 -1
  330. package/dist/state/helpers/get-full-width-callback.js +5 -6
  331. package/dist/state/helpers/get-span-callback.d.ts +6 -1
  332. package/dist/state/helpers/get-span-callback.js +15 -18
  333. package/dist/state/helpers/resolve-column.d.ts +6 -2
  334. package/dist/state/helpers/resolve-column.js +18 -18
  335. package/dist/state/helpers/row-layout/get-focus-criteria.d.ts +15 -12
  336. package/dist/state/helpers/row-layout/get-focus-criteria.js +57 -56
  337. package/dist/state/helpers/row-layout/row-layout.d.ts +15 -9
  338. package/dist/state/helpers/row-layout/row-layout.js +387 -401
  339. package/dist/state/use-lytenyte.js +556 -516
  340. package/dist/tree-view/branch/branch.d.ts +16 -8
  341. package/dist/tree-view/branch/branch.js +104 -52
  342. package/dist/tree-view/branch/use-branch-keys.d.ts +5 -1
  343. package/dist/tree-view/branch/use-branch-keys.js +71 -74
  344. package/dist/tree-view/context.d.ts +21 -17
  345. package/dist/tree-view/hooks/use-tree-view-paths.d.ts +6 -1
  346. package/dist/tree-view/hooks/use-tree-view-paths.js +5 -5
  347. package/dist/tree-view/index.d.ts +35 -7
  348. package/dist/tree-view/index.js +7 -7
  349. package/dist/tree-view/leaf.d.ts +10 -2
  350. package/dist/tree-view/leaf.js +29 -20
  351. package/dist/tree-view/navigation/get-all-ids.js +3 -3
  352. package/dist/tree-view/navigation/get-first-node.js +3 -3
  353. package/dist/tree-view/navigation/get-last-node.js +3 -3
  354. package/dist/tree-view/navigation/get-next-node.js +6 -8
  355. package/dist/tree-view/navigation/get-prev-node.js +6 -8
  356. package/dist/tree-view/panel/make-handle-navigation.js +23 -31
  357. package/dist/tree-view/panel/make-handle-selection.js +68 -77
  358. package/dist/tree-view/panel/make-handle-typeahead.js +34 -40
  359. package/dist/tree-view/panel/panel.d.ts +10 -1
  360. package/dist/tree-view/panel/panel.js +40 -20
  361. package/dist/tree-view/panel/use-tree-navigation.js +64 -52
  362. package/dist/tree-view/root.d.ts +20 -14
  363. package/dist/tree-view/root.js +53 -55
  364. package/dist/tree-view/utils/get-focusable-nodes.js +4 -2
  365. package/dist/tree-view/utils/get-focused-node.js +11 -11
  366. package/dist/tree-view/utils/get-ids-between-nodes.d.ts +5 -1
  367. package/dist/tree-view/utils/get-ids-between-nodes.js +10 -11
  368. package/dist/tree-view/utils/get-panel.js +5 -5
  369. package/dist/tree-view/utils/get-parent-node.js +6 -7
  370. package/dist/tree-view/utils/get-sibling-branches.js +8 -10
  371. package/dist/tree-view/utils/get-tree-node-id.js +1 -1
  372. package/dist/tree-view/utils/is-branch-node.js +1 -1
  373. package/dist/tree-view/utils/is-leaf-node.js +1 -1
  374. package/dist/tree-view/utils/is-tree-node-disabled.js +1 -1
  375. package/dist/tree-view/utils/select-node.d.ts +5 -1
  376. package/dist/tree-view/utils/select-node.js +8 -11
  377. package/dist/tree-view/utils/toggle-all-selections.js +4 -6
  378. package/dist/tree-view/utils/toggle-selection.js +15 -18
  379. package/dist/tree-view/virtualized/force-sync-scrolling.d.ts +3 -1
  380. package/dist/tree-view/virtualized/force-sync-scrolling.js +24 -18
  381. package/dist/tree-view/virtualized/get-virtual-tree-paths.d.ts +3 -1
  382. package/dist/tree-view/virtualized/get-virtual-tree-paths.js +11 -12
  383. package/dist/tree-view/virtualized/make-virtual-tree.d.ts +26 -21
  384. package/dist/tree-view/virtualized/make-virtual-tree.js +79 -85
  385. package/dist/tree-view/virtualized/use-flattened-tree.d.ts +17 -8
  386. package/dist/tree-view/virtualized/use-flattened-tree.js +30 -31
  387. package/dist/tree-view/virtualized/use-row-start-and-end.d.ts +6 -1
  388. package/dist/tree-view/virtualized/use-row-start-and-end.js +21 -23
  389. package/dist/tree-view/virtualized/use-virtualized-tree.d.ts +21 -15
  390. package/dist/tree-view/virtualized/use-virtualized-tree.js +103 -90
  391. package/dist/utils/cycle-sorts.js +12 -14
  392. package/dist/viewport/begin-editing.d.ts +6 -2
  393. package/dist/viewport/begin-editing.js +9 -13
  394. package/dist/viewport/viewport.d.ts +10 -1
  395. package/dist/viewport/viewport.js +93 -70
  396. package/package.json +15 -9
@@ -1,538 +1,554 @@
1
- import {} from "../+types";
1
+ import {} from "../+types.js";
2
2
  import { useRef } from "react";
3
3
  import { atom, createStore } from "@1771technologies/atom";
4
- import { traverse } from "./tree/traverse";
5
- import { dateComparator, makeGridAtom, numberComparator, stringComparator, } from "@1771technologies/lytenyte-shared";
4
+ import { traverse } from "./tree/traverse.js";
5
+ import {
6
+ dateComparator,
7
+ makeGridAtom,
8
+ numberComparator,
9
+ stringComparator,
10
+ } from "@1771technologies/lytenyte-shared";
6
11
  import { clamp, equal, get } from "@1771technologies/lytenyte-js-utils";
7
- import { makeClientTree } from "./tree/client-tree";
8
- import { computeFilteredRows } from "./filter/compute-filtered-rows";
9
- import { builtIns } from "./built-ins/built-ins";
12
+ import { makeClientTree } from "./tree/client-tree.js";
13
+ import { computeFilteredRows } from "./filter/compute-filtered-rows.js";
14
+ import { builtIns } from "./built-ins/built-ins.js";
10
15
  export function makeClientDataSourcePaginated(p) {
11
- const rdsStore = createStore();
12
- const pageInternal = atom(0);
13
- const rowsPerPage = atom(50);
14
- const pageCount = atom((g) => Math.max(Math.ceil(g(flatLength) / g(rowsPerPage)), 1));
15
- const page = atom((g) => clamp(0, g(pageInternal), g(pageCount) - 1), (g, s, n) => {
16
- const res = typeof n === "function" ? n(g(pageInternal)) : n;
17
- s(pageInternal, clamp(0, res, g(pageCount) - 1));
18
- });
19
- const data = atom(p.data);
20
- const topData = atom(p.topData ?? []);
21
- const bottomData = atom(p.bottomData ?? []);
22
- const cache = new Map();
23
- const centerNodes = atom((g) => {
24
- const nodes = [];
25
- const d = g(data);
26
- for (let i = 0; i < d.length; i++) {
27
- if (!cache.has(i)) {
28
- cache.set(i, {
29
- id: "",
30
- kind: "leaf",
31
- data: d[i],
32
- });
33
- }
34
- const node = cache.get(i);
35
- node.data = d[i];
36
- nodes.push(node);
37
- }
38
- return nodes;
39
- });
40
- const topNodes = atom((g) => {
41
- return g(topData).map((c, i) => ({ data: c, id: `top-${i}`, kind: "leaf" }));
42
- });
43
- const botNodes = atom((g) => {
44
- return g(bottomData).map((c, i) => ({ data: c, id: `bottom-${i}`, kind: "leaf" }));
45
- });
46
- const pinnedIdMap = atom((g) => {
47
- const combined = new Map([...g(topNodes), ...g(botNodes)].map((c) => [c.id, c]));
48
- return combined;
49
- });
50
- const models = atom({
51
- sort: [],
52
- filter: {},
53
- filterIn: {},
54
- quickSearch: null,
55
- agg: {},
56
- group: [],
57
- groupExpansions: {},
58
- });
59
- const sortModel = atom((g) => g(models).sort);
60
- const filterModel = atom((g) => g(models).filter);
61
- const filterInModel = atom((g) => g(models).filterIn);
62
- const rowGroupModel = atom((g) => g(models).group);
63
- const groupExpansions = atom((g) => g(models).groupExpansions);
64
- const aggModel = atom((g) => g(models).agg);
65
- const quickSearch = atom((g) => g(models).quickSearch);
66
- const grid$ = atom(null);
67
- const snapshot = atom(0);
68
- const tree = atom((g) => {
69
- g(snapshot);
70
- const grid = g(grid$);
71
- const rows = g(centerNodes);
72
- const filtered = computeFilteredRows(rows, grid, g(filterModel), g(filterInModel), g(quickSearch), grid?.state.quickSearchSensitivity.get() ?? "case-sensitive", false);
73
- const rowGroups = g(rowGroupModel)
74
- .map((c) => {
75
- if (typeof c === "string")
76
- return (r) => grid.api.columnField(c, { kind: "leaf", data: r.data });
77
- if (typeof c.field === "string" || typeof c.field === "number")
78
- return (r) => r.data[c.field];
79
- if (typeof c.field === "function")
80
- return (r) => c.field({ data: r.data, grid: grid });
81
- return (r) => get(r.data, c.field.path);
82
- })
83
- .map((c) => ({ fn: c }));
84
- const rowAggModel = Object.entries(g(aggModel)).map(([name, agg]) => {
85
- if (typeof agg.fn === "function") {
86
- const fn = agg.fn;
87
- return {
88
- name,
89
- fn: (rows) => fn(rows.map((c) => c.data), grid),
90
- };
91
- }
92
- const key = agg.fn;
93
- const fn = (data) => {
94
- const fieldData = data.map((r) => grid?.api.columnField(name, { kind: "leaf", data: r.data }));
95
- return builtIns[key](fieldData);
96
- };
97
- return { name, fn };
16
+ const rdsStore = createStore();
17
+ const pageInternal = atom(0);
18
+ const rowsPerPage = atom(50);
19
+ const pageCount = atom((g) => Math.max(Math.ceil(g(flatLength) / g(rowsPerPage)), 1));
20
+ const page = atom(
21
+ (g) => clamp(0, g(pageInternal), g(pageCount) - 1),
22
+ (g, s, n) => {
23
+ const res = typeof n === "function" ? n(g(pageInternal)) : n;
24
+ s(pageInternal, clamp(0, res, g(pageCount) - 1));
25
+ },
26
+ );
27
+ const data = atom(p.data);
28
+ const topData = atom(p.topData ?? []);
29
+ const bottomData = atom(p.bottomData ?? []);
30
+ const cache = new Map();
31
+ const centerNodes = atom((g) => {
32
+ const nodes = [];
33
+ const d = g(data);
34
+ for (let i = 0; i < d.length; i++) {
35
+ if (!cache.has(i)) {
36
+ cache.set(i, {
37
+ id: "",
38
+ kind: "leaf",
39
+ data: d[i],
98
40
  });
99
- return makeClientTree({
100
- rowData: filtered,
101
- rowAggModel: grid ? rowAggModel : [],
102
- rowBranchModel: grid ? rowGroups : [],
103
- rowIdGroup: p.rowIdBranch,
104
- rowIdLeaf: p.rowIdLeaf,
105
- });
106
- });
107
- const sortComparator = atom((g) => {
108
- const model = g(sortModel);
109
- const grid = g(grid$);
110
- if (!model.length || !grid)
111
- return () => 0;
112
- const comparator = (l, r) => {
113
- let res = 0;
114
- for (const sortSpec of model) {
115
- const sort = sortSpec.sort;
116
- const columnId = sortSpec.columnId;
117
- const ld = l.kind === 2
118
- ? { kind: "branch", data: l.data, key: l.key }
119
- : { kind: "leaf", data: l.data.data };
120
- const rd = r.kind === 2
121
- ? { kind: "branch", data: r.data, key: r.key }
122
- : { kind: "leaf", data: r.data.data };
123
- if (sort.kind === "custom") {
124
- res = sort.comparator(ld, rd, sort.options ?? {});
125
- }
126
- else if (sort.kind === "number") {
127
- const left = grid.api.columnField(columnId, ld);
128
- const right = grid.api.columnField(columnId, rd);
129
- res = numberComparator(left, right, sort.options ?? {});
130
- }
131
- else if (sort.kind === "date") {
132
- const left = grid.api.columnField(columnId, ld);
133
- const right = grid.api.columnField(columnId, rd);
134
- res = dateComparator(left, right, sort.options ?? {});
135
- }
136
- else if (sort.kind === "string") {
137
- const left = grid.api.columnField(columnId, ld);
138
- const right = grid.api.columnField(columnId, rd);
139
- res = stringComparator(left, right, sort.options ?? {});
140
- }
141
- else {
142
- res = 0;
143
- }
144
- res = sortSpec.isDescending ? -res : res;
145
- if (res !== 0)
146
- break;
147
- }
148
- return res;
41
+ }
42
+ const node = cache.get(i);
43
+ node.data = d[i];
44
+ nodes.push(node);
45
+ }
46
+ return nodes;
47
+ });
48
+ const topNodes = atom((g) => {
49
+ return g(topData).map((c, i) => ({ data: c, id: `top-${i}`, kind: "leaf" }));
50
+ });
51
+ const botNodes = atom((g) => {
52
+ return g(bottomData).map((c, i) => ({ data: c, id: `bottom-${i}`, kind: "leaf" }));
53
+ });
54
+ const pinnedIdMap = atom((g) => {
55
+ const combined = new Map([...g(topNodes), ...g(botNodes)].map((c) => [c.id, c]));
56
+ return combined;
57
+ });
58
+ const models = atom({
59
+ sort: [],
60
+ filter: {},
61
+ filterIn: {},
62
+ quickSearch: null,
63
+ agg: {},
64
+ group: [],
65
+ groupExpansions: {},
66
+ });
67
+ const sortModel = atom((g) => g(models).sort);
68
+ const filterModel = atom((g) => g(models).filter);
69
+ const filterInModel = atom((g) => g(models).filterIn);
70
+ const rowGroupModel = atom((g) => g(models).group);
71
+ const groupExpansions = atom((g) => g(models).groupExpansions);
72
+ const aggModel = atom((g) => g(models).agg);
73
+ const quickSearch = atom((g) => g(models).quickSearch);
74
+ const grid$ = atom(null);
75
+ const snapshot = atom(0);
76
+ const tree = atom((g) => {
77
+ g(snapshot);
78
+ const grid = g(grid$);
79
+ const rows = g(centerNodes);
80
+ const filtered = computeFilteredRows(
81
+ rows,
82
+ grid,
83
+ g(filterModel),
84
+ g(filterInModel),
85
+ g(quickSearch),
86
+ grid?.state.quickSearchSensitivity.get() ?? "case-sensitive",
87
+ false,
88
+ );
89
+ const rowGroups = g(rowGroupModel)
90
+ .map((c) => {
91
+ if (typeof c === "string")
92
+ return (r) => grid.api.columnField(c, { kind: "leaf", data: r.data });
93
+ if (typeof c.field === "string" || typeof c.field === "number")
94
+ return (r) => r.data[c.field];
95
+ if (typeof c.field === "function") return (r) => c.field({ data: r.data, grid: grid });
96
+ return (r) => get(r.data, c.field.path);
97
+ })
98
+ .map((c) => ({ fn: c }));
99
+ const rowAggModel = Object.entries(g(aggModel)).map(([name, agg]) => {
100
+ if (typeof agg.fn === "function") {
101
+ const fn = agg.fn;
102
+ return {
103
+ name,
104
+ fn: (rows) =>
105
+ fn(
106
+ rows.map((c) => c.data),
107
+ grid,
108
+ ),
149
109
  };
150
- return comparator;
110
+ }
111
+ const key = agg.fn;
112
+ const fn = (data) => {
113
+ const fieldData = data.map((r) =>
114
+ grid?.api.columnField(name, { kind: "leaf", data: r.data }),
115
+ );
116
+ return builtIns[key](fieldData);
117
+ };
118
+ return { name, fn };
151
119
  });
152
- const initialized = atom(false);
153
- const flat = atom((g) => {
154
- if (!g(initialized))
155
- return { flat: [], idMap: new Map(), idToIndexMap: new Map() };
156
- const idMap = new Map();
157
- const idToIndexMap = new Map();
158
- const flattened = [];
159
- const comparator = g(sortComparator);
160
- const expansions = g(groupExpansions);
161
- const defaultExpansion = g(grid$)?.state.rowGroupDefaultExpansion.get() ?? false;
162
- let index = g(topNodes).length;
163
- traverse(g(tree).root, (node) => {
164
- if (node.kind === 1) {
165
- node.data.id = node.id;
166
- flattened.push(node.data);
167
- }
168
- else {
169
- flattened.push({
170
- kind: "branch",
171
- data: node.data,
172
- id: node.id,
173
- key: node.key,
174
- depth: node.depth,
175
- });
176
- }
177
- idMap.set(node.id, flattened.at(-1));
178
- idToIndexMap.set(node.id, index);
179
- index++;
180
- if (node.kind === 2) {
181
- const expanded = expansions[node.id] ??
182
- (typeof defaultExpansion === "number"
183
- ? node.depth <= defaultExpansion
184
- : defaultExpansion);
185
- return expanded;
186
- }
187
- }, comparator);
188
- return { flat: flattened, idMap, idToIndexMap };
120
+ return makeClientTree({
121
+ rowData: filtered,
122
+ rowAggModel: grid ? rowAggModel : [],
123
+ rowBranchModel: grid ? rowGroups : [],
124
+ rowIdGroup: p.rowIdBranch,
125
+ rowIdLeaf: p.rowIdLeaf,
189
126
  });
190
- const flatLength = atom((g) => g(flat).flat.length);
191
- const cleanup = [];
192
- const init = (grid) => {
193
- while (cleanup.length)
194
- cleanup.pop()?.();
195
- rdsStore.set(grid$, grid);
196
- const store = grid.state.rowDataStore;
197
- // Monitor row count changes
127
+ });
128
+ const sortComparator = atom((g) => {
129
+ const model = g(sortModel);
130
+ const grid = g(grid$);
131
+ if (!model.length || !grid) return () => 0;
132
+ const comparator = (l, r) => {
133
+ let res = 0;
134
+ for (const sortSpec of model) {
135
+ const sort = sortSpec.sort;
136
+ const columnId = sortSpec.columnId;
137
+ const ld =
138
+ l.kind === 2
139
+ ? { kind: "branch", data: l.data, key: l.key }
140
+ : { kind: "leaf", data: l.data.data };
141
+ const rd =
142
+ r.kind === 2
143
+ ? { kind: "branch", data: r.data, key: r.key }
144
+ : { kind: "leaf", data: r.data.data };
145
+ if (sort.kind === "custom") {
146
+ res = sort.comparator(ld, rd, sort.options ?? {});
147
+ } else if (sort.kind === "number") {
148
+ const left = grid.api.columnField(columnId, ld);
149
+ const right = grid.api.columnField(columnId, rd);
150
+ res = numberComparator(left, right, sort.options ?? {});
151
+ } else if (sort.kind === "date") {
152
+ const left = grid.api.columnField(columnId, ld);
153
+ const right = grid.api.columnField(columnId, rd);
154
+ res = dateComparator(left, right, sort.options ?? {});
155
+ } else if (sort.kind === "string") {
156
+ const left = grid.api.columnField(columnId, ld);
157
+ const right = grid.api.columnField(columnId, rd);
158
+ res = stringComparator(left, right, sort.options ?? {});
159
+ } else {
160
+ res = 0;
161
+ }
162
+ res = sortSpec.isDescending ? -res : res;
163
+ if (res !== 0) break;
164
+ }
165
+ return res;
166
+ };
167
+ return comparator;
168
+ });
169
+ const initialized = atom(false);
170
+ const flat = atom((g) => {
171
+ if (!g(initialized)) return { flat: [], idMap: new Map(), idToIndexMap: new Map() };
172
+ const idMap = new Map();
173
+ const idToIndexMap = new Map();
174
+ const flattened = [];
175
+ const comparator = g(sortComparator);
176
+ const expansions = g(groupExpansions);
177
+ const defaultExpansion = g(grid$)?.state.rowGroupDefaultExpansion.get() ?? false;
178
+ let index = g(topNodes).length;
179
+ traverse(
180
+ g(tree).root,
181
+ (node) => {
182
+ if (node.kind === 1) {
183
+ node.data.id = node.id;
184
+ flattened.push(node.data);
185
+ } else {
186
+ flattened.push({
187
+ kind: "branch",
188
+ data: node.data,
189
+ id: node.id,
190
+ key: node.key,
191
+ depth: node.depth,
192
+ });
193
+ }
194
+ idMap.set(node.id, flattened.at(-1));
195
+ idToIndexMap.set(node.id, index);
196
+ index++;
197
+ if (node.kind === 2) {
198
+ const expanded =
199
+ expansions[node.id] ??
200
+ (typeof defaultExpansion === "number"
201
+ ? node.depth <= defaultExpansion
202
+ : defaultExpansion);
203
+ return expanded;
204
+ }
205
+ },
206
+ comparator,
207
+ );
208
+ return { flat: flattened, idMap, idToIndexMap };
209
+ });
210
+ const flatLength = atom((g) => g(flat).flat.length);
211
+ const cleanup = [];
212
+ const init = (grid) => {
213
+ while (cleanup.length) cleanup.pop()?.();
214
+ rdsStore.set(grid$, grid);
215
+ const store = grid.state.rowDataStore;
216
+ // Monitor row count changes
217
+ const rowCount = rdsStore.get(flatLength);
218
+ const perPage = rdsStore.get(rowsPerPage);
219
+ const currentPage = rdsStore.get(pageInternal);
220
+ const center = clamp(0, rowCount - currentPage * perPage, perPage);
221
+ store.rowCenterCount.set(center);
222
+ cleanup.push(
223
+ rdsStore.sub(flatLength, () => {
224
+ grid.state.rowDataStore.rowClearCache();
198
225
  const rowCount = rdsStore.get(flatLength);
199
226
  const perPage = rdsStore.get(rowsPerPage);
200
227
  const currentPage = rdsStore.get(pageInternal);
201
228
  const center = clamp(0, rowCount - currentPage * perPage, perPage);
202
229
  store.rowCenterCount.set(center);
203
- cleanup.push(rdsStore.sub(flatLength, () => {
204
- grid.state.rowDataStore.rowClearCache();
205
- const rowCount = rdsStore.get(flatLength);
206
- const perPage = rdsStore.get(rowsPerPage);
207
- const currentPage = rdsStore.get(pageInternal);
208
- const center = clamp(0, rowCount - currentPage * perPage, perPage);
209
- store.rowCenterCount.set(center);
210
- }));
211
- cleanup.push(rdsStore.sub(pageInternal, () => {
212
- grid.state.rowDataStore.rowClearCache();
213
- }));
230
+ }),
231
+ );
232
+ cleanup.push(
233
+ rdsStore.sub(pageInternal, () => {
234
+ grid.state.rowDataStore.rowClearCache();
235
+ }),
236
+ );
237
+ const top = rdsStore.get(topData).length;
238
+ store.rowTopCount.set(top);
239
+ cleanup.push(
240
+ rdsStore.sub(topData, () => {
241
+ grid.state.rowDataStore.rowClearCache();
214
242
  const top = rdsStore.get(topData).length;
215
243
  store.rowTopCount.set(top);
216
- cleanup.push(rdsStore.sub(topData, () => {
217
- grid.state.rowDataStore.rowClearCache();
218
- const top = rdsStore.get(topData).length;
219
- store.rowTopCount.set(top);
220
- }));
221
- const bottom = rdsStore.get(bottomData).length;
222
- store.rowBottomCount.set(bottom);
223
- cleanup.push(rdsStore.sub(bottomData, () => {
224
- grid.state.rowDataStore.rowClearCache();
225
- const bot = rdsStore.get(bottomData).length;
226
- store.rowBottomCount.set(bot);
227
- }));
228
- const sort = grid.state.sortModel.get();
229
- const filter = grid.state.filterModel.get();
230
- const filterIn = grid.state.filterInModel.get();
231
- const group = grid.state.rowGroupModel.get();
232
- const groupExpansions = grid.state.rowGroupExpansions.get();
233
- const agg = grid.state.aggModel.get();
234
- const quickSearch = grid.state.quickSearch.get();
235
- rdsStore.set(models, { agg, filter, filterIn, group, groupExpansions, sort, quickSearch });
236
- rdsStore.set(initialized, true);
237
- // Sort model monitoring
238
- cleanup.push(grid.state.sortModel.watch(() => {
239
- grid.state.rowDataStore.rowClearCache();
240
- rdsStore.set(models, (prev) => ({ ...prev, sort: grid.state.sortModel.get() }));
241
- }));
242
- // Filter model monitoring
243
- cleanup.push(grid.state.filterModel.watch(() => {
244
- rdsStore.set(models, (prev) => ({ ...prev, filter: grid.state.filterModel.get() }));
245
- grid.state.rowDataStore.rowClearCache();
246
- }));
247
- cleanup.push(grid.state.quickSearch.watch(() => {
248
- rdsStore.set(models, (prev) => ({ ...prev, quickSearch: grid.state.quickSearch.get() }));
249
- grid.state.rowDataStore.rowClearCache();
250
- }));
251
- cleanup.push(grid.state.filterInModel.watch(() => {
252
- grid.state.filterInModel.watch(() => {
253
- rdsStore.set(models, (prev) => ({ ...prev, filterIn: grid.state.filterInModel.get() }));
254
- grid.state.rowDataStore.rowClearCache();
255
- });
256
- }));
257
- // Row group model monitoring
258
- cleanup.push(grid.state.rowGroupModel.watch(() => {
259
- rdsStore.set(models, (prev) => ({ ...prev, group: grid.state.rowGroupModel.get() }));
260
- grid.state.rowDataStore.rowClearCache();
261
- }));
262
- // Row group expansions monitoring
263
- cleanup.push(grid.state.rowGroupExpansions.watch(() => {
264
- rdsStore.set(models, (prev) => ({
265
- ...prev,
266
- groupExpansions: grid.state.rowGroupExpansions.get(),
267
- }));
268
- grid.state.rowDataStore.rowClearCache();
269
- }));
270
- // Agg model monitoring
271
- cleanup.push(grid.state.aggModel.watch(() => {
272
- rdsStore.set(models, (prev) => ({ ...prev, agg: grid.state.aggModel.get() }));
273
- grid.state.rowDataStore.rowClearCache();
244
+ }),
245
+ );
246
+ const bottom = rdsStore.get(bottomData).length;
247
+ store.rowBottomCount.set(bottom);
248
+ cleanup.push(
249
+ rdsStore.sub(bottomData, () => {
250
+ grid.state.rowDataStore.rowClearCache();
251
+ const bot = rdsStore.get(bottomData).length;
252
+ store.rowBottomCount.set(bot);
253
+ }),
254
+ );
255
+ const sort = grid.state.sortModel.get();
256
+ const filter = grid.state.filterModel.get();
257
+ const filterIn = grid.state.filterInModel.get();
258
+ const group = grid.state.rowGroupModel.get();
259
+ const groupExpansions = grid.state.rowGroupExpansions.get();
260
+ const agg = grid.state.aggModel.get();
261
+ const quickSearch = grid.state.quickSearch.get();
262
+ rdsStore.set(models, { agg, filter, filterIn, group, groupExpansions, sort, quickSearch });
263
+ rdsStore.set(initialized, true);
264
+ // Sort model monitoring
265
+ cleanup.push(
266
+ grid.state.sortModel.watch(() => {
267
+ grid.state.rowDataStore.rowClearCache();
268
+ rdsStore.set(models, (prev) => ({ ...prev, sort: grid.state.sortModel.get() }));
269
+ }),
270
+ );
271
+ // Filter model monitoring
272
+ cleanup.push(
273
+ grid.state.filterModel.watch(() => {
274
+ rdsStore.set(models, (prev) => ({ ...prev, filter: grid.state.filterModel.get() }));
275
+ grid.state.rowDataStore.rowClearCache();
276
+ }),
277
+ );
278
+ cleanup.push(
279
+ grid.state.quickSearch.watch(() => {
280
+ rdsStore.set(models, (prev) => ({ ...prev, quickSearch: grid.state.quickSearch.get() }));
281
+ grid.state.rowDataStore.rowClearCache();
282
+ }),
283
+ );
284
+ cleanup.push(
285
+ grid.state.filterInModel.watch(() => {
286
+ grid.state.filterInModel.watch(() => {
287
+ rdsStore.set(models, (prev) => ({ ...prev, filterIn: grid.state.filterInModel.get() }));
288
+ grid.state.rowDataStore.rowClearCache();
289
+ });
290
+ }),
291
+ );
292
+ // Row group model monitoring
293
+ cleanup.push(
294
+ grid.state.rowGroupModel.watch(() => {
295
+ rdsStore.set(models, (prev) => ({ ...prev, group: grid.state.rowGroupModel.get() }));
296
+ grid.state.rowDataStore.rowClearCache();
297
+ }),
298
+ );
299
+ // Row group expansions monitoring
300
+ cleanup.push(
301
+ grid.state.rowGroupExpansions.watch(() => {
302
+ rdsStore.set(models, (prev) => ({
303
+ ...prev,
304
+ groupExpansions: grid.state.rowGroupExpansions.get(),
274
305
  }));
275
- };
276
- const rowById = (id) => {
277
- const pinned = rdsStore.get(pinnedIdMap);
278
- if (pinned.has(id))
279
- return pinned.get(id);
280
- const t = rdsStore.get(flat);
281
- return t.idMap.get(id) ?? null;
282
- };
283
- const rowByIndex = (index) => {
284
- const top = rdsStore.get(topNodes);
285
- const bot = rdsStore.get(botNodes);
286
- const center = rdsStore.get(flat).flat;
287
- const topOffset = top.length;
288
- const centerOffset = topOffset + center.length;
289
- const botOffset = centerOffset + bot.length;
290
- if (index < topOffset)
291
- return top[index];
292
- if (index < centerOffset) {
293
- const pageOffset = index + rdsStore.get(rowsPerPage) * rdsStore.get(pageInternal);
294
- return center[pageOffset - topOffset];
306
+ grid.state.rowDataStore.rowClearCache();
307
+ }),
308
+ );
309
+ // Agg model monitoring
310
+ cleanup.push(
311
+ grid.state.aggModel.watch(() => {
312
+ rdsStore.set(models, (prev) => ({ ...prev, agg: grid.state.aggModel.get() }));
313
+ grid.state.rowDataStore.rowClearCache();
314
+ }),
315
+ );
316
+ };
317
+ const rowById = (id) => {
318
+ const pinned = rdsStore.get(pinnedIdMap);
319
+ if (pinned.has(id)) return pinned.get(id);
320
+ const t = rdsStore.get(flat);
321
+ return t.idMap.get(id) ?? null;
322
+ };
323
+ const rowByIndex = (index) => {
324
+ const top = rdsStore.get(topNodes);
325
+ const bot = rdsStore.get(botNodes);
326
+ const center = rdsStore.get(flat).flat;
327
+ const topOffset = top.length;
328
+ const centerOffset = topOffset + center.length;
329
+ const botOffset = centerOffset + bot.length;
330
+ if (index < topOffset) return top[index];
331
+ if (index < centerOffset) {
332
+ const pageOffset = index + rdsStore.get(rowsPerPage) * rdsStore.get(pageInternal);
333
+ return center[pageOffset - topOffset];
334
+ }
335
+ if (index < botOffset) return bot[index - centerOffset];
336
+ return null;
337
+ };
338
+ const rowUpdate = (updates) => {
339
+ const grid = rdsStore.get(grid$);
340
+ const t = rdsStore.get(tree);
341
+ const d = rdsStore.get(data);
342
+ for (const [key, data] of updates.entries()) {
343
+ const rowIndex = typeof key === "number" ? key : rowToIndex(key);
344
+ const row = rowByIndex(rowIndex);
345
+ if (!row || !grid) {
346
+ console.error(`Failed to find the row at index ${rowIndex} which is being updated.`);
347
+ continue;
348
+ }
349
+ if (row.kind === "branch") {
350
+ row.data = data;
351
+ } else {
352
+ const source = t.idToSourceIndex.get(row.id);
353
+ if (source == null) {
354
+ console.error(`Failed to find the row at index ${rowIndex} which is being updated.`);
355
+ continue;
295
356
  }
296
- if (index < botOffset)
297
- return bot[index - centerOffset];
298
- return null;
299
- };
300
- const rowUpdate = (updates) => {
357
+ d[source] = data;
358
+ }
359
+ grid.state.rowDataStore.rowInvalidateIndex(rowIndex);
360
+ }
361
+ rdsStore.set(data, [...d]);
362
+ rdsStore.set(snapshot, (prev) => prev + 1);
363
+ };
364
+ const rowToIndex = (rowId) => {
365
+ const f = rdsStore.get(flat);
366
+ const top = rdsStore.get(topNodes);
367
+ const bot = rdsStore.get(botNodes);
368
+ const topCount = top.length;
369
+ const center = f.flat.length;
370
+ const rowIndex = f.idToIndexMap.get(rowId);
371
+ if (rowIndex != null) return rowIndex;
372
+ if (rowIndex == null) {
373
+ const foundTop = top.findIndex((row) => row.id === rowId);
374
+ if (foundTop !== -1) return foundTop;
375
+ const foundBot = bot.findIndex((row) => row.id === rowId);
376
+ if (foundBot !== -1) return foundBot + topCount + center;
377
+ }
378
+ return null;
379
+ };
380
+ const rowAllChildIds = (rowId) => {
381
+ const t = rdsStore.get(tree);
382
+ const ids = [];
383
+ const node = t.idToNode.get(rowId);
384
+ if (node?.kind === 2) {
385
+ traverse(node, (n) => {
386
+ ids.push(n.id);
387
+ });
388
+ }
389
+ return ids;
390
+ };
391
+ return [
392
+ {
393
+ page: {
394
+ current: makeGridAtom(page, rdsStore),
395
+ pageCount: makeGridAtom(pageCount, rdsStore),
396
+ perPage: makeGridAtom(rowsPerPage, rdsStore),
397
+ },
398
+ init,
399
+ rowById,
400
+ rowByIndex,
401
+ rowAllChildIds,
402
+ rowUpdate,
403
+ inFilterItems: (c) => {
301
404
  const grid = rdsStore.get(grid$);
302
- const t = rdsStore.get(tree);
303
- const d = rdsStore.get(data);
304
- for (const [key, data] of updates.entries()) {
305
- const rowIndex = typeof key === "number" ? key : rowToIndex(key);
306
- const row = rowByIndex(rowIndex);
307
- if (!row || !grid) {
308
- console.error(`Failed to find the row at index ${rowIndex} which is being updated.`);
309
- continue;
310
- }
311
- if (row.kind === "branch") {
312
- row.data = data;
313
- }
314
- else {
315
- const source = t.idToSourceIndex.get(row.id);
316
- if (source == null) {
317
- console.error(`Failed to find the row at index ${rowIndex} which is being updated.`);
318
- continue;
319
- }
320
- d[source] = data;
405
+ if (!grid) return [];
406
+ const data = rdsStore.get(centerNodes);
407
+ const values = new Set(
408
+ data.map((row) => {
409
+ const field = grid.api.columnField(c, row);
410
+ return field;
411
+ }),
412
+ );
413
+ if (p.transformInFilterItem) {
414
+ return p.transformInFilterItem({ column: c, values: [...values] });
415
+ }
416
+ return [...values].map((x) => ({ id: `${x}`, label: `${x}`, value: x }));
417
+ },
418
+ rowAreAllSelected: (rowId) => {
419
+ const g = rdsStore.get(grid$);
420
+ if (!g) return false;
421
+ const selected = g.state.rowSelectedIds.get();
422
+ if (rowId) {
423
+ const row = rowById(rowId);
424
+ if (!row) return false;
425
+ const childIds = new Set(rowAllChildIds(rowId));
426
+ return childIds.isSubsetOf(selected);
427
+ }
428
+ const f = rdsStore.get(tree);
429
+ return f.idsAll.isSubsetOf(selected);
430
+ },
431
+ rowAdd: (newRows, place = "end") => {
432
+ rdsStore.set(data, (prev) => {
433
+ if (!newRows.length) return prev;
434
+ let next;
435
+ if (place === "beginning") next = [...newRows, ...prev];
436
+ else if (place === "end") next = [...prev, ...newRows];
437
+ else {
438
+ next = [...prev];
439
+ next.splice(place, 0, ...newRows);
440
+ }
441
+ return next;
442
+ });
443
+ const grid = rdsStore.get(grid$);
444
+ grid?.state.rowDataStore.rowClearCache();
445
+ },
446
+ rowDelete: (rows) => {
447
+ const rowData = new Set(
448
+ rows
449
+ .map((c) => {
450
+ if (typeof c === "number") return rowByIndex(c)?.data;
451
+ else return rowById(c)?.data;
452
+ })
453
+ .filter((c) => !!c),
454
+ );
455
+ rdsStore.set(data, (prev) => {
456
+ if (!rowData.size) return prev;
457
+ return prev.filter((d) => !rowData.has(d));
458
+ });
459
+ const grid = rdsStore.get(grid$);
460
+ grid?.state.rowDataStore.rowClearCache();
461
+ },
462
+ rowSetBotData: (data) => {
463
+ rdsStore.set(bottomData, data);
464
+ const grid = rdsStore.get(grid$);
465
+ grid?.state.rowDataStore.rowClearCache();
466
+ },
467
+ rowSetTopData: (data) => {
468
+ rdsStore.set(topData, data);
469
+ const grid = rdsStore.get(grid$);
470
+ grid?.state.rowDataStore.rowClearCache();
471
+ },
472
+ rowExpand: (expansions) => {
473
+ const grid = rdsStore.get(grid$);
474
+ if (!grid) return;
475
+ grid.state.rowGroupExpansions.set((prev) => ({ ...prev, ...expansions }));
476
+ },
477
+ rowToIndex,
478
+ rowSelect: (params) => {
479
+ const grid = rdsStore.get(grid$);
480
+ if (!grid) return;
481
+ if (params.mode === "none") return;
482
+ if (params.mode === "single") {
483
+ if (params.deselect) {
484
+ grid.state.rowSelectedIds.set(new Set());
485
+ } else {
486
+ grid.state.rowSelectedIds.set(new Set([params.startId]));
487
+ }
488
+ return;
489
+ }
490
+ const ids = new Set();
491
+ if (params.startId === params.endId) {
492
+ ids.add(params.startId);
493
+ if (params.selectChildren) {
494
+ rowAllChildIds(params.startId).forEach((c) => ids.add(c));
495
+ }
496
+ } else {
497
+ const first = rowToIndex(params.startId);
498
+ const last = rowToIndex(params.endId);
499
+ if (first == null || last == null) return;
500
+ const start = Math.min(first, last);
501
+ const end = Math.max(first, last);
502
+ for (let i = start; i <= end; i++) {
503
+ const row = rowByIndex(i);
504
+ if (!row) continue;
505
+ if (params.selectChildren) {
506
+ rowAllChildIds(row.id).forEach((c) => ids.add(c));
321
507
  }
322
- grid.state.rowDataStore.rowInvalidateIndex(rowIndex);
508
+ if (row?.id) ids.add(row.id);
509
+ }
323
510
  }
324
- rdsStore.set(data, [...d]);
325
- rdsStore.set(snapshot, (prev) => prev + 1);
326
- };
327
- const rowToIndex = (rowId) => {
328
- const f = rdsStore.get(flat);
329
- const top = rdsStore.get(topNodes);
330
- const bot = rdsStore.get(botNodes);
331
- const topCount = top.length;
332
- const center = f.flat.length;
333
- const rowIndex = f.idToIndexMap.get(rowId);
334
- if (rowIndex != null)
335
- return rowIndex;
336
- if (rowIndex == null) {
337
- const foundTop = top.findIndex((row) => row.id === rowId);
338
- if (foundTop !== -1)
339
- return foundTop;
340
- const foundBot = bot.findIndex((row) => row.id === rowId);
341
- if (foundBot !== -1)
342
- return foundBot + topCount + center;
511
+ if (params.deselect) {
512
+ const current = grid.state.rowSelectedIds.get();
513
+ const next = current.difference(ids);
514
+ grid.state.rowSelectedIds.set(next);
515
+ } else {
516
+ const current = grid.state.rowSelectedIds.get();
517
+ const next = current.union(ids);
518
+ grid.state.rowSelectedIds.set(next);
343
519
  }
344
- return null;
345
- };
346
- const rowAllChildIds = (rowId) => {
347
- const t = rdsStore.get(tree);
348
- const ids = [];
349
- const node = t.idToNode.get(rowId);
350
- if (node?.kind === 2) {
351
- traverse(node, (n) => {
352
- ids.push(n.id);
353
- });
520
+ },
521
+ rowSelectAll: (params) => {
522
+ const grid = rdsStore.get(grid$);
523
+ if (!grid) return;
524
+ if (params.deselect) {
525
+ grid.state.rowSelectedIds.set(new Set());
526
+ return;
354
527
  }
355
- return ids;
356
- };
357
- return [
358
- {
359
- page: {
360
- current: makeGridAtom(page, rdsStore),
361
- pageCount: makeGridAtom(pageCount, rdsStore),
362
- perPage: makeGridAtom(rowsPerPage, rdsStore),
363
- },
364
- init,
365
- rowById,
366
- rowByIndex,
367
- rowAllChildIds,
368
- rowUpdate,
369
- inFilterItems: (c) => {
370
- const grid = rdsStore.get(grid$);
371
- if (!grid)
372
- return [];
373
- const data = rdsStore.get(centerNodes);
374
- const values = new Set(data.map((row) => {
375
- const field = grid.api.columnField(c, row);
376
- return field;
377
- }));
378
- return [...values].map((x) => {
379
- if (!p.transformInFilterItem)
380
- return { id: `${x}`, label: `${x}`, value: x };
381
- return p.transformInFilterItem({ field: x, column: c });
382
- });
383
- },
384
- rowAreAllSelected: (rowId) => {
385
- const g = rdsStore.get(grid$);
386
- if (!g)
387
- return false;
388
- const selected = g.state.rowSelectedIds.get();
389
- if (rowId) {
390
- const row = rowById(rowId);
391
- if (!row)
392
- return false;
393
- const childIds = new Set(rowAllChildIds(rowId));
394
- return childIds.isSubsetOf(selected);
395
- }
396
- const f = rdsStore.get(tree);
397
- return f.idsAll.isSubsetOf(selected);
398
- },
399
- rowAdd: (newRows, place = "end") => {
400
- rdsStore.set(data, (prev) => {
401
- if (!newRows.length)
402
- return prev;
403
- let next;
404
- if (place === "beginning")
405
- next = [...newRows, ...prev];
406
- else if (place === "end")
407
- next = [...prev, ...newRows];
408
- else {
409
- next = [...prev];
410
- next.splice(place, 0, ...newRows);
411
- }
412
- return next;
413
- });
414
- const grid = rdsStore.get(grid$);
415
- grid?.state.rowDataStore.rowClearCache();
416
- },
417
- rowDelete: (rows) => {
418
- const rowData = new Set(rows
419
- .map((c) => {
420
- if (typeof c === "number")
421
- return rowByIndex(c)?.data;
422
- else
423
- return rowById(c)?.data;
424
- })
425
- .filter((c) => !!c));
426
- rdsStore.set(data, (prev) => {
427
- if (!rowData.size)
428
- return prev;
429
- return prev.filter((d) => !rowData.has(d));
430
- });
431
- const grid = rdsStore.get(grid$);
432
- grid?.state.rowDataStore.rowClearCache();
433
- },
434
- rowSetBotData: (data) => {
435
- rdsStore.set(bottomData, data);
436
- const grid = rdsStore.get(grid$);
437
- grid?.state.rowDataStore.rowClearCache();
438
- },
439
- rowSetTopData: (data) => {
440
- rdsStore.set(topData, data);
441
- const grid = rdsStore.get(grid$);
442
- grid?.state.rowDataStore.rowClearCache();
443
- },
444
- rowExpand: (expansions) => {
445
- const grid = rdsStore.get(grid$);
446
- if (!grid)
447
- return;
448
- grid.state.rowGroupExpansions.set((prev) => ({ ...prev, ...expansions }));
449
- },
450
- rowToIndex,
451
- rowSelect: (params) => {
452
- const grid = rdsStore.get(grid$);
453
- if (!grid)
454
- return;
455
- if (params.mode === "none")
456
- return;
457
- if (params.mode === "single") {
458
- if (params.deselect) {
459
- grid.state.rowSelectedIds.set(new Set());
460
- }
461
- else {
462
- grid.state.rowSelectedIds.set(new Set([params.startId]));
463
- }
464
- return;
465
- }
466
- const ids = new Set();
467
- if (params.startId === params.endId) {
468
- ids.add(params.startId);
469
- if (params.selectChildren) {
470
- rowAllChildIds(params.startId).forEach((c) => ids.add(c));
471
- }
472
- }
473
- else {
474
- const first = rowToIndex(params.startId);
475
- const last = rowToIndex(params.endId);
476
- if (first == null || last == null)
477
- return;
478
- const start = Math.min(first, last);
479
- const end = Math.max(first, last);
480
- for (let i = start; i <= end; i++) {
481
- const row = rowByIndex(i);
482
- if (!row)
483
- continue;
484
- if (params.selectChildren) {
485
- rowAllChildIds(row.id).forEach((c) => ids.add(c));
486
- }
487
- if (row?.id)
488
- ids.add(row.id);
489
- }
490
- }
491
- if (params.deselect) {
492
- const current = grid.state.rowSelectedIds.get();
493
- const next = current.difference(ids);
494
- grid.state.rowSelectedIds.set(next);
495
- }
496
- else {
497
- const current = grid.state.rowSelectedIds.get();
498
- const next = current.union(ids);
499
- grid.state.rowSelectedIds.set(next);
500
- }
501
- },
502
- rowSelectAll: (params) => {
503
- const grid = rdsStore.get(grid$);
504
- if (!grid)
505
- return;
506
- if (params.deselect) {
507
- grid.state.rowSelectedIds.set(new Set());
508
- return;
509
- }
510
- const t = rdsStore.get(tree);
511
- grid.state.rowSelectedIds.set(new Set(t.idsAll));
512
- },
513
- },
514
- {
515
- top: makeGridAtom(topData, rdsStore),
516
- center: makeGridAtom(data, rdsStore),
517
- bottom: makeGridAtom(bottomData, rdsStore),
518
- },
519
- ];
528
+ const t = rdsStore.get(tree);
529
+ grid.state.rowSelectedIds.set(new Set(t.idsAll));
530
+ },
531
+ },
532
+ {
533
+ top: makeGridAtom(topData, rdsStore),
534
+ center: makeGridAtom(data, rdsStore),
535
+ bottom: makeGridAtom(bottomData, rdsStore),
536
+ },
537
+ ];
520
538
  }
521
539
  export function useClientRowDataSourcePaginated(p) {
522
- const ds = useRef(null);
523
- const dataAtomRef = useRef(null);
524
- if (!ds.current)
525
- [ds.current, dataAtomRef.current] = makeClientDataSourcePaginated(p);
526
- const da = dataAtomRef.current;
527
- if (p.reflectData) {
528
- // Need to queue the microtask since it we cannot update state during render.
529
- if (p.data !== da.center.get())
530
- queueMicrotask(() => da.center.set(p.data));
531
- if (!equal(p.topData ?? [], da.top.get())) {
532
- queueMicrotask(() => da.top.set(p.topData ?? []));
533
- }
534
- if (!equal(p.bottomData ?? [], da.bottom.get()))
535
- queueMicrotask(() => da.bottom.set(p.bottomData ?? []));
540
+ const ds = useRef(null);
541
+ const dataAtomRef = useRef(null);
542
+ if (!ds.current) [ds.current, dataAtomRef.current] = makeClientDataSourcePaginated(p);
543
+ const da = dataAtomRef.current;
544
+ if (p.reflectData) {
545
+ // Need to queue the microtask since it we cannot update state during render.
546
+ if (p.data !== da.center.get()) queueMicrotask(() => da.center.set(p.data));
547
+ if (!equal(p.topData ?? [], da.top.get())) {
548
+ queueMicrotask(() => da.top.set(p.topData ?? []));
536
549
  }
537
- return ds.current;
550
+ if (!equal(p.bottomData ?? [], da.bottom.get()))
551
+ queueMicrotask(() => da.bottom.set(p.bottomData ?? []));
552
+ }
553
+ return ds.current;
538
554
  }