photon-grid-core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +0 -0
  3. package/cell-selection/active-grid-registry.d.ts +37 -0
  4. package/cell-selection/active-grid-registry.d.ts.map +1 -0
  5. package/cell-selection/active-grid-registry.js +25 -0
  6. package/cell-selection/active-grid-registry.js.map +1 -0
  7. package/cell-selection/cell-selection-engine.d.ts +336 -0
  8. package/cell-selection/cell-selection-engine.d.ts.map +1 -0
  9. package/cell-selection/cell-selection-engine.js +1534 -0
  10. package/cell-selection/cell-selection-engine.js.map +1 -0
  11. package/cell-selection/selection-range.d.ts +16 -0
  12. package/cell-selection/selection-range.d.ts.map +1 -0
  13. package/cell-selection/selection-range.js +48 -0
  14. package/cell-selection/selection-range.js.map +1 -0
  15. package/cell-selection/selection-renderer.d.ts +24 -0
  16. package/cell-selection/selection-renderer.d.ts.map +1 -0
  17. package/cell-selection/selection-renderer.js +107 -0
  18. package/cell-selection/selection-renderer.js.map +1 -0
  19. package/chart/chart-analyzer/aggregation-analyzer.d.ts +18 -0
  20. package/chart/chart-analyzer/aggregation-analyzer.d.ts.map +1 -0
  21. package/chart/chart-analyzer/aggregation-analyzer.js +63 -0
  22. package/chart/chart-analyzer/aggregation-analyzer.js.map +1 -0
  23. package/chart/chart-analyzer/bar-analyzer.d.ts +19 -0
  24. package/chart/chart-analyzer/bar-analyzer.d.ts.map +1 -0
  25. package/chart/chart-analyzer/bar-analyzer.js +56 -0
  26. package/chart/chart-analyzer/bar-analyzer.js.map +1 -0
  27. package/chart/chart-analyzer/bubble-analyzer.d.ts +16 -0
  28. package/chart/chart-analyzer/bubble-analyzer.d.ts.map +1 -0
  29. package/chart/chart-analyzer/bubble-analyzer.js +61 -0
  30. package/chart/chart-analyzer/bubble-analyzer.js.map +1 -0
  31. package/chart/chart-analyzer/cardinality-analyzer.d.ts +13 -0
  32. package/chart/chart-analyzer/cardinality-analyzer.d.ts.map +1 -0
  33. package/chart/chart-analyzer/cardinality-analyzer.js +28 -0
  34. package/chart/chart-analyzer/cardinality-analyzer.js.map +1 -0
  35. package/chart/chart-analyzer/dimension-analyzer.d.ts +12 -0
  36. package/chart/chart-analyzer/dimension-analyzer.d.ts.map +1 -0
  37. package/chart/chart-analyzer/dimension-analyzer.js +33 -0
  38. package/chart/chart-analyzer/dimension-analyzer.js.map +1 -0
  39. package/chart/chart-analyzer/histogram-analyzer.d.ts +11 -0
  40. package/chart/chart-analyzer/histogram-analyzer.d.ts.map +1 -0
  41. package/chart/chart-analyzer/histogram-analyzer.js +43 -0
  42. package/chart/chart-analyzer/histogram-analyzer.js.map +1 -0
  43. package/chart/chart-analyzer/index.d.ts +58 -0
  44. package/chart/chart-analyzer/index.d.ts.map +1 -0
  45. package/chart/chart-analyzer/index.js +130 -0
  46. package/chart/chart-analyzer/index.js.map +1 -0
  47. package/chart/chart-analyzer/line-analyzer.d.ts +23 -0
  48. package/chart/chart-analyzer/line-analyzer.d.ts.map +1 -0
  49. package/chart/chart-analyzer/line-analyzer.js +61 -0
  50. package/chart/chart-analyzer/line-analyzer.js.map +1 -0
  51. package/chart/chart-analyzer/measure-analyzer.d.ts +11 -0
  52. package/chart/chart-analyzer/measure-analyzer.d.ts.map +1 -0
  53. package/chart/chart-analyzer/measure-analyzer.js +44 -0
  54. package/chart/chart-analyzer/measure-analyzer.js.map +1 -0
  55. package/chart/chart-analyzer/pie-analyzer.d.ts +19 -0
  56. package/chart/chart-analyzer/pie-analyzer.d.ts.map +1 -0
  57. package/chart/chart-analyzer/pie-analyzer.js +64 -0
  58. package/chart/chart-analyzer/pie-analyzer.js.map +1 -0
  59. package/chart/chart-analyzer/recommendation-engine.d.ts +18 -0
  60. package/chart/chart-analyzer/recommendation-engine.d.ts.map +1 -0
  61. package/chart/chart-analyzer/recommendation-engine.js +82 -0
  62. package/chart/chart-analyzer/recommendation-engine.js.map +1 -0
  63. package/chart/chart-analyzer/scatter-analyzer.d.ts +16 -0
  64. package/chart/chart-analyzer/scatter-analyzer.d.ts.map +1 -0
  65. package/chart/chart-analyzer/scatter-analyzer.js +70 -0
  66. package/chart/chart-analyzer/scatter-analyzer.js.map +1 -0
  67. package/chart/chart-analyzer/types.d.ts +52 -0
  68. package/chart/chart-analyzer/types.d.ts.map +1 -0
  69. package/chart/chart-analyzer/types.js +10 -0
  70. package/chart/chart-analyzer/types.js.map +1 -0
  71. package/chart/chart-analyzer.d.ts +12 -0
  72. package/chart/chart-analyzer.d.ts.map +1 -0
  73. package/chart/chart-analyzer.js +77 -0
  74. package/chart/chart-analyzer.js.map +1 -0
  75. package/chart/chart-data-transformer.d.ts +26 -0
  76. package/chart/chart-data-transformer.d.ts.map +1 -0
  77. package/chart/chart-data-transformer.js +93 -0
  78. package/chart/chart-data-transformer.js.map +1 -0
  79. package/chart/chart-engine.d.ts +38 -0
  80. package/chart/chart-engine.d.ts.map +1 -0
  81. package/chart/chart-engine.js +96 -0
  82. package/chart/chart-engine.js.map +1 -0
  83. package/chart/chart-panel.d.ts +54 -0
  84. package/chart/chart-panel.d.ts.map +1 -0
  85. package/chart/chart-panel.js +350 -0
  86. package/chart/chart-panel.js.map +1 -0
  87. package/chart/chart-renderer.d.ts +93 -0
  88. package/chart/chart-renderer.d.ts.map +1 -0
  89. package/chart/chart-renderer.js +1330 -0
  90. package/chart/chart-renderer.js.map +1 -0
  91. package/chart/sparkline/sparkline-renderer.d.ts +269 -0
  92. package/chart/sparkline/sparkline-renderer.d.ts.map +1 -0
  93. package/chart/sparkline/sparkline-renderer.js +875 -0
  94. package/chart/sparkline/sparkline-renderer.js.map +1 -0
  95. package/chart/sparkline/sparkline.types.d.ts +214 -0
  96. package/chart/sparkline/sparkline.types.d.ts.map +1 -0
  97. package/chart/sparkline/sparkline.types.js +8 -0
  98. package/chart/sparkline/sparkline.types.js.map +1 -0
  99. package/column-groups/column-group-drag-handler.d.ts +169 -0
  100. package/column-groups/column-group-drag-handler.d.ts.map +1 -0
  101. package/column-groups/column-group-drag-handler.js +517 -0
  102. package/column-groups/column-group-drag-handler.js.map +1 -0
  103. package/column-groups/column-group-header-builder.d.ts +106 -0
  104. package/column-groups/column-group-header-builder.d.ts.map +1 -0
  105. package/column-groups/column-group-header-builder.js +311 -0
  106. package/column-groups/column-group-header-builder.js.map +1 -0
  107. package/column-groups/column-group-model.d.ts +248 -0
  108. package/column-groups/column-group-model.d.ts.map +1 -0
  109. package/column-groups/column-group-model.js +668 -0
  110. package/column-groups/column-group-model.js.map +1 -0
  111. package/column-groups/column-group-state-manager.d.ts +110 -0
  112. package/column-groups/column-group-state-manager.d.ts.map +1 -0
  113. package/column-groups/column-group-state-manager.js +153 -0
  114. package/column-groups/column-group-state-manager.js.map +1 -0
  115. package/column-groups/column-group.types.d.ts +250 -0
  116. package/column-groups/column-group.types.d.ts.map +1 -0
  117. package/column-groups/column-group.types.js +20 -0
  118. package/column-groups/column-group.types.js.map +1 -0
  119. package/column-groups/display-group-builder.d.ts +91 -0
  120. package/column-groups/display-group-builder.d.ts.map +1 -0
  121. package/column-groups/display-group-builder.js +225 -0
  122. package/column-groups/display-group-builder.js.map +1 -0
  123. package/column-groups/display-group-drag-handler.d.ts +205 -0
  124. package/column-groups/display-group-drag-handler.d.ts.map +1 -0
  125. package/column-groups/display-group-drag-handler.js +536 -0
  126. package/column-groups/display-group-drag-handler.js.map +1 -0
  127. package/column-groups/display-group-engine.d.ts +310 -0
  128. package/column-groups/display-group-engine.d.ts.map +1 -0
  129. package/column-groups/display-group-engine.js +549 -0
  130. package/column-groups/display-group-engine.js.map +1 -0
  131. package/column-groups/display-group-header-builder.d.ts +94 -0
  132. package/column-groups/display-group-header-builder.d.ts.map +1 -0
  133. package/column-groups/display-group-header-builder.js +224 -0
  134. package/column-groups/display-group-header-builder.js.map +1 -0
  135. package/column-groups/display-group.types.d.ts +140 -0
  136. package/column-groups/display-group.types.d.ts.map +1 -0
  137. package/column-groups/display-group.types.js +2 -0
  138. package/column-groups/display-group.types.js.map +1 -0
  139. package/column-groups/index.d.ts +25 -0
  140. package/column-groups/index.d.ts.map +1 -0
  141. package/column-groups/index.js +26 -0
  142. package/column-groups/index.js.map +1 -0
  143. package/column-groups/logical-group-registry.d.ts +77 -0
  144. package/column-groups/logical-group-registry.d.ts.map +1 -0
  145. package/column-groups/logical-group-registry.js +118 -0
  146. package/column-groups/logical-group-registry.js.map +1 -0
  147. package/core/column-model.d.ts +30 -0
  148. package/core/column-model.d.ts.map +1 -0
  149. package/core/column-model.js +203 -0
  150. package/core/column-model.js.map +1 -0
  151. package/core/grid-api.d.ts +187 -0
  152. package/core/grid-api.d.ts.map +1 -0
  153. package/core/grid-api.js +569 -0
  154. package/core/grid-api.js.map +1 -0
  155. package/core/grid-context.d.ts +61 -0
  156. package/core/grid-context.d.ts.map +1 -0
  157. package/core/grid-context.js +2 -0
  158. package/core/grid-context.js.map +1 -0
  159. package/core/grid-core.d.ts +49 -0
  160. package/core/grid-core.d.ts.map +1 -0
  161. package/core/grid-core.js +675 -0
  162. package/core/grid-core.js.map +1 -0
  163. package/core/grid-store.d.ts +62 -0
  164. package/core/grid-store.d.ts.map +1 -0
  165. package/core/grid-store.js +104 -0
  166. package/core/grid-store.js.map +1 -0
  167. package/core/row-model.d.ts +32 -0
  168. package/core/row-model.d.ts.map +1 -0
  169. package/core/row-model.js +150 -0
  170. package/core/row-model.js.map +1 -0
  171. package/drag-drop/drag-autoscroll.d.ts +14 -0
  172. package/drag-drop/drag-autoscroll.d.ts.map +1 -0
  173. package/drag-drop/drag-autoscroll.js +66 -0
  174. package/drag-drop/drag-autoscroll.js.map +1 -0
  175. package/drag-drop/drag-drop-engine.d.ts +55 -0
  176. package/drag-drop/drag-drop-engine.d.ts.map +1 -0
  177. package/drag-drop/drag-drop-engine.js +179 -0
  178. package/drag-drop/drag-drop-engine.js.map +1 -0
  179. package/drag-drop/drag-preview.d.ts +32 -0
  180. package/drag-drop/drag-preview.d.ts.map +1 -0
  181. package/drag-drop/drag-preview.js +74 -0
  182. package/drag-drop/drag-preview.js.map +1 -0
  183. package/engines/aggregation/aggregation-engine.d.ts +66 -0
  184. package/engines/aggregation/aggregation-engine.d.ts.map +1 -0
  185. package/engines/aggregation/aggregation-engine.js +149 -0
  186. package/engines/aggregation/aggregation-engine.js.map +1 -0
  187. package/engines/clipboard/clipboard-engine.d.ts +89 -0
  188. package/engines/clipboard/clipboard-engine.d.ts.map +1 -0
  189. package/engines/clipboard/clipboard-engine.js +323 -0
  190. package/engines/clipboard/clipboard-engine.js.map +1 -0
  191. package/engines/editing/cell-editor-engine.d.ts +62 -0
  192. package/engines/editing/cell-editor-engine.d.ts.map +1 -0
  193. package/engines/editing/cell-editor-engine.js +359 -0
  194. package/engines/editing/cell-editor-engine.js.map +1 -0
  195. package/engines/editing/custom-dropdown-editor.d.ts +99 -0
  196. package/engines/editing/custom-dropdown-editor.d.ts.map +1 -0
  197. package/engines/editing/custom-dropdown-editor.js +355 -0
  198. package/engines/editing/custom-dropdown-editor.js.map +1 -0
  199. package/engines/editing/value-parser.d.ts +12 -0
  200. package/engines/editing/value-parser.d.ts.map +1 -0
  201. package/engines/editing/value-parser.js +125 -0
  202. package/engines/editing/value-parser.js.map +1 -0
  203. package/engines/export/export-engine.d.ts +16 -0
  204. package/engines/export/export-engine.d.ts.map +1 -0
  205. package/engines/export/export-engine.js +99 -0
  206. package/engines/export/export-engine.js.map +1 -0
  207. package/engines/filter/filter-condition.d.ts +7 -0
  208. package/engines/filter/filter-condition.d.ts.map +1 -0
  209. package/engines/filter/filter-condition.js +126 -0
  210. package/engines/filter/filter-condition.js.map +1 -0
  211. package/engines/filter/filter-engine.d.ts +35 -0
  212. package/engines/filter/filter-engine.d.ts.map +1 -0
  213. package/engines/filter/filter-engine.js +150 -0
  214. package/engines/filter/filter-engine.js.map +1 -0
  215. package/engines/filter/filter-panel.d.ts +103 -0
  216. package/engines/filter/filter-panel.d.ts.map +1 -0
  217. package/engines/filter/filter-panel.js +645 -0
  218. package/engines/filter/filter-panel.js.map +1 -0
  219. package/engines/grouping/group-node.d.ts +21 -0
  220. package/engines/grouping/group-node.d.ts.map +1 -0
  221. package/engines/grouping/group-node.js +96 -0
  222. package/engines/grouping/group-node.js.map +1 -0
  223. package/engines/grouping/grouping-engine.d.ts +33 -0
  224. package/engines/grouping/grouping-engine.d.ts.map +1 -0
  225. package/engines/grouping/grouping-engine.js +118 -0
  226. package/engines/grouping/grouping-engine.js.map +1 -0
  227. package/engines/master-detail/master-detail-engine.d.ts +77 -0
  228. package/engines/master-detail/master-detail-engine.d.ts.map +1 -0
  229. package/engines/master-detail/master-detail-engine.js +199 -0
  230. package/engines/master-detail/master-detail-engine.js.map +1 -0
  231. package/engines/pagination/pagination-engine.d.ts +33 -0
  232. package/engines/pagination/pagination-engine.d.ts.map +1 -0
  233. package/engines/pagination/pagination-engine.js +110 -0
  234. package/engines/pagination/pagination-engine.js.map +1 -0
  235. package/engines/selection/row-selection-engine.d.ts +26 -0
  236. package/engines/selection/row-selection-engine.d.ts.map +1 -0
  237. package/engines/selection/row-selection-engine.js +145 -0
  238. package/engines/selection/row-selection-engine.js.map +1 -0
  239. package/engines/sort/sort-comparator.d.ts +43 -0
  240. package/engines/sort/sort-comparator.d.ts.map +1 -0
  241. package/engines/sort/sort-comparator.js +113 -0
  242. package/engines/sort/sort-comparator.js.map +1 -0
  243. package/engines/sort/sort-engine.d.ts +67 -0
  244. package/engines/sort/sort-engine.d.ts.map +1 -0
  245. package/engines/sort/sort-engine.js +178 -0
  246. package/engines/sort/sort-engine.js.map +1 -0
  247. package/engines/summary/summary-engine.d.ts +17 -0
  248. package/engines/summary/summary-engine.d.ts.map +1 -0
  249. package/engines/summary/summary-engine.js +72 -0
  250. package/engines/summary/summary-engine.js.map +1 -0
  251. package/engines/tree/tree-data-service.d.ts +117 -0
  252. package/engines/tree/tree-data-service.d.ts.map +1 -0
  253. package/engines/tree/tree-data-service.js +296 -0
  254. package/engines/tree/tree-data-service.js.map +1 -0
  255. package/engines/tree/tree-expansion-service.d.ts +35 -0
  256. package/engines/tree/tree-expansion-service.d.ts.map +1 -0
  257. package/engines/tree/tree-expansion-service.js +84 -0
  258. package/engines/tree/tree-expansion-service.js.map +1 -0
  259. package/engines/tree/tree-node.d.ts +40 -0
  260. package/engines/tree/tree-node.d.ts.map +1 -0
  261. package/engines/tree/tree-node.js +199 -0
  262. package/engines/tree/tree-node.js.map +1 -0
  263. package/engines/tree/tree-selection-service.d.ts +35 -0
  264. package/engines/tree/tree-selection-service.d.ts.map +1 -0
  265. package/engines/tree/tree-selection-service.js +72 -0
  266. package/engines/tree/tree-selection-service.js.map +1 -0
  267. package/engines/undo-redo/undo-redo-engine.d.ts +114 -0
  268. package/engines/undo-redo/undo-redo-engine.d.ts.map +1 -0
  269. package/engines/undo-redo/undo-redo-engine.js +165 -0
  270. package/engines/undo-redo/undo-redo-engine.js.map +1 -0
  271. package/event-bus/event-bus.d.ts +21 -0
  272. package/event-bus/event-bus.d.ts.map +1 -0
  273. package/event-bus/event-bus.js +106 -0
  274. package/event-bus/event-bus.js.map +1 -0
  275. package/icons/icon-registry.d.ts +19 -0
  276. package/icons/icon-registry.d.ts.map +1 -0
  277. package/icons/icon-registry.js +37 -0
  278. package/icons/icon-registry.js.map +1 -0
  279. package/icons/icon-renderer.d.ts +18 -0
  280. package/icons/icon-renderer.d.ts.map +1 -0
  281. package/icons/icon-renderer.js +75 -0
  282. package/icons/icon-renderer.js.map +1 -0
  283. package/icons/icon-sets/core-icons.d.ts +2 -0
  284. package/icons/icon-sets/core-icons.d.ts.map +1 -0
  285. package/icons/icon-sets/core-icons.js +48 -0
  286. package/icons/icon-sets/core-icons.js.map +1 -0
  287. package/index.d.ts +72 -0
  288. package/index.d.ts.map +1 -0
  289. package/index.js +54 -0
  290. package/index.js.map +1 -0
  291. package/package.json +64 -0
  292. package/photon-ai/builtins/filter.commands.d.ts +4 -0
  293. package/photon-ai/builtins/filter.commands.d.ts.map +1 -0
  294. package/photon-ai/builtins/filter.commands.js +189 -0
  295. package/photon-ai/builtins/filter.commands.js.map +1 -0
  296. package/photon-ai/builtins/grouping.commands.d.ts +4 -0
  297. package/photon-ai/builtins/grouping.commands.d.ts.map +1 -0
  298. package/photon-ai/builtins/grouping.commands.js +115 -0
  299. package/photon-ai/builtins/grouping.commands.js.map +1 -0
  300. package/photon-ai/builtins/index.d.ts +10 -0
  301. package/photon-ai/builtins/index.d.ts.map +1 -0
  302. package/photon-ai/builtins/index.js +26 -0
  303. package/photon-ai/builtins/index.js.map +1 -0
  304. package/photon-ai/builtins/info.commands.d.ts +4 -0
  305. package/photon-ai/builtins/info.commands.d.ts.map +1 -0
  306. package/photon-ai/builtins/info.commands.js +201 -0
  307. package/photon-ai/builtins/info.commands.js.map +1 -0
  308. package/photon-ai/builtins/move.commands.d.ts +4 -0
  309. package/photon-ai/builtins/move.commands.d.ts.map +1 -0
  310. package/photon-ai/builtins/move.commands.js +53 -0
  311. package/photon-ai/builtins/move.commands.js.map +1 -0
  312. package/photon-ai/builtins/pin.commands.d.ts +4 -0
  313. package/photon-ai/builtins/pin.commands.d.ts.map +1 -0
  314. package/photon-ai/builtins/pin.commands.js +106 -0
  315. package/photon-ai/builtins/pin.commands.js.map +1 -0
  316. package/photon-ai/builtins/selection.commands.d.ts +4 -0
  317. package/photon-ai/builtins/selection.commands.d.ts.map +1 -0
  318. package/photon-ai/builtins/selection.commands.js +102 -0
  319. package/photon-ai/builtins/selection.commands.js.map +1 -0
  320. package/photon-ai/builtins/sort.commands.d.ts +4 -0
  321. package/photon-ai/builtins/sort.commands.d.ts.map +1 -0
  322. package/photon-ai/builtins/sort.commands.js +67 -0
  323. package/photon-ai/builtins/sort.commands.js.map +1 -0
  324. package/photon-ai/builtins/visibility.commands.d.ts +4 -0
  325. package/photon-ai/builtins/visibility.commands.d.ts.map +1 -0
  326. package/photon-ai/builtins/visibility.commands.js +75 -0
  327. package/photon-ai/builtins/visibility.commands.js.map +1 -0
  328. package/photon-ai/command-builder.d.ts +21 -0
  329. package/photon-ai/command-builder.d.ts.map +1 -0
  330. package/photon-ai/command-builder.js +18 -0
  331. package/photon-ai/command-builder.js.map +1 -0
  332. package/photon-ai/command-executor.d.ts +15 -0
  333. package/photon-ai/command-executor.d.ts.map +1 -0
  334. package/photon-ai/command-executor.js +26 -0
  335. package/photon-ai/command-executor.js.map +1 -0
  336. package/photon-ai/entity-resolver.d.ts +121 -0
  337. package/photon-ai/entity-resolver.d.ts.map +1 -0
  338. package/photon-ai/entity-resolver.js +393 -0
  339. package/photon-ai/entity-resolver.js.map +1 -0
  340. package/photon-ai/fuzzy-match.d.ts +12 -0
  341. package/photon-ai/fuzzy-match.d.ts.map +1 -0
  342. package/photon-ai/fuzzy-match.js +37 -0
  343. package/photon-ai/fuzzy-match.js.map +1 -0
  344. package/photon-ai/index.d.ts +15 -0
  345. package/photon-ai/index.d.ts.map +1 -0
  346. package/photon-ai/index.js +13 -0
  347. package/photon-ai/index.js.map +1 -0
  348. package/photon-ai/intent-parser.d.ts +20 -0
  349. package/photon-ai/intent-parser.d.ts.map +1 -0
  350. package/photon-ai/intent-parser.js +52 -0
  351. package/photon-ai/intent-parser.js.map +1 -0
  352. package/photon-ai/photon-ai-memory.d.ts +42 -0
  353. package/photon-ai/photon-ai-memory.d.ts.map +1 -0
  354. package/photon-ai/photon-ai-memory.js +86 -0
  355. package/photon-ai/photon-ai-memory.js.map +1 -0
  356. package/photon-ai/photon-ai-panel.d.ts +54 -0
  357. package/photon-ai/photon-ai-panel.d.ts.map +1 -0
  358. package/photon-ai/photon-ai-panel.js +191 -0
  359. package/photon-ai/photon-ai-panel.js.map +1 -0
  360. package/photon-ai/photon-ai-registry.d.ts +25 -0
  361. package/photon-ai/photon-ai-registry.d.ts.map +1 -0
  362. package/photon-ai/photon-ai-registry.js +41 -0
  363. package/photon-ai/photon-ai-registry.js.map +1 -0
  364. package/photon-ai/photon-ai-service.d.ts +71 -0
  365. package/photon-ai/photon-ai-service.d.ts.map +1 -0
  366. package/photon-ai/photon-ai-service.js +165 -0
  367. package/photon-ai/photon-ai-service.js.map +1 -0
  368. package/photon-ai/photon-ai.types.d.ts +100 -0
  369. package/photon-ai/photon-ai.types.d.ts.map +1 -0
  370. package/photon-ai/photon-ai.types.js +2 -0
  371. package/photon-ai/photon-ai.types.js.map +1 -0
  372. package/photon-ai/query-splitter.d.ts +22 -0
  373. package/photon-ai/query-splitter.d.ts.map +1 -0
  374. package/photon-ai/query-splitter.js +81 -0
  375. package/photon-ai/query-splitter.js.map +1 -0
  376. package/photon-ai/text-normalizer.d.ts +33 -0
  377. package/photon-ai/text-normalizer.d.ts.map +1 -0
  378. package/photon-ai/text-normalizer.js +132 -0
  379. package/photon-ai/text-normalizer.js.map +1 -0
  380. package/renderer/auto-scroller.d.ts +78 -0
  381. package/renderer/auto-scroller.d.ts.map +1 -0
  382. package/renderer/auto-scroller.js +141 -0
  383. package/renderer/auto-scroller.js.map +1 -0
  384. package/renderer/body-renderer.d.ts +191 -0
  385. package/renderer/body-renderer.d.ts.map +1 -0
  386. package/renderer/body-renderer.js +806 -0
  387. package/renderer/body-renderer.js.map +1 -0
  388. package/renderer/cell-renderer.d.ts +26 -0
  389. package/renderer/cell-renderer.d.ts.map +1 -0
  390. package/renderer/cell-renderer.js +201 -0
  391. package/renderer/cell-renderer.js.map +1 -0
  392. package/renderer/column-menu.d.ts +285 -0
  393. package/renderer/column-menu.d.ts.map +1 -0
  394. package/renderer/column-menu.js +873 -0
  395. package/renderer/column-menu.js.map +1 -0
  396. package/renderer/column-style-manager.d.ts +38 -0
  397. package/renderer/column-style-manager.d.ts.map +1 -0
  398. package/renderer/column-style-manager.js +110 -0
  399. package/renderer/column-style-manager.js.map +1 -0
  400. package/renderer/detail-row-renderer.d.ts +153 -0
  401. package/renderer/detail-row-renderer.d.ts.map +1 -0
  402. package/renderer/detail-row-renderer.js +388 -0
  403. package/renderer/detail-row-renderer.js.map +1 -0
  404. package/renderer/dom-utils.d.ts +22 -0
  405. package/renderer/dom-utils.d.ts.map +1 -0
  406. package/renderer/dom-utils.js +132 -0
  407. package/renderer/dom-utils.js.map +1 -0
  408. package/renderer/footer-renderer.d.ts +25 -0
  409. package/renderer/footer-renderer.d.ts.map +1 -0
  410. package/renderer/footer-renderer.js +168 -0
  411. package/renderer/footer-renderer.js.map +1 -0
  412. package/renderer/grid-renderer.d.ts +295 -0
  413. package/renderer/grid-renderer.d.ts.map +1 -0
  414. package/renderer/grid-renderer.js +1456 -0
  415. package/renderer/grid-renderer.js.map +1 -0
  416. package/renderer/group-context-menu.d.ts +79 -0
  417. package/renderer/group-context-menu.d.ts.map +1 -0
  418. package/renderer/group-context-menu.js +238 -0
  419. package/renderer/group-context-menu.js.map +1 -0
  420. package/renderer/group-drop-zone.d.ts +56 -0
  421. package/renderer/group-drop-zone.d.ts.map +1 -0
  422. package/renderer/group-drop-zone.js +376 -0
  423. package/renderer/group-drop-zone.js.map +1 -0
  424. package/renderer/header-renderer.d.ts +264 -0
  425. package/renderer/header-renderer.d.ts.map +1 -0
  426. package/renderer/header-renderer.js +1321 -0
  427. package/renderer/header-renderer.js.map +1 -0
  428. package/renderer/overlay-renderer.d.ts +16 -0
  429. package/renderer/overlay-renderer.d.ts.map +1 -0
  430. package/renderer/overlay-renderer.js +64 -0
  431. package/renderer/overlay-renderer.js.map +1 -0
  432. package/renderer/renderer-resolver.d.ts +18 -0
  433. package/renderer/renderer-resolver.d.ts.map +1 -0
  434. package/renderer/renderer-resolver.js +18 -0
  435. package/renderer/renderer-resolver.js.map +1 -0
  436. package/renderer/row-animator.d.ts +72 -0
  437. package/renderer/row-animator.d.ts.map +1 -0
  438. package/renderer/row-animator.js +175 -0
  439. package/renderer/row-animator.js.map +1 -0
  440. package/renderer/row-drag-renderer.d.ts +58 -0
  441. package/renderer/row-drag-renderer.d.ts.map +1 -0
  442. package/renderer/row-drag-renderer.js +395 -0
  443. package/renderer/row-drag-renderer.js.map +1 -0
  444. package/renderer/row-offset-search.d.ts +17 -0
  445. package/renderer/row-offset-search.d.ts.map +1 -0
  446. package/renderer/row-offset-search.js +31 -0
  447. package/renderer/row-offset-search.js.map +1 -0
  448. package/renderer/row-position-sheet.d.ts +11 -0
  449. package/renderer/row-position-sheet.d.ts.map +1 -0
  450. package/renderer/row-position-sheet.js +29 -0
  451. package/renderer/row-position-sheet.js.map +1 -0
  452. package/renderer/scroll-controller.d.ts +58 -0
  453. package/renderer/scroll-controller.d.ts.map +1 -0
  454. package/renderer/scroll-controller.js +200 -0
  455. package/renderer/scroll-controller.js.map +1 -0
  456. package/renderer/sticky-row-tracker.d.ts +40 -0
  457. package/renderer/sticky-row-tracker.d.ts.map +1 -0
  458. package/renderer/sticky-row-tracker.js +63 -0
  459. package/renderer/sticky-row-tracker.js.map +1 -0
  460. package/renderer/tooltip-renderer.d.ts +36 -0
  461. package/renderer/tooltip-renderer.d.ts.map +1 -0
  462. package/renderer/tooltip-renderer.js +133 -0
  463. package/renderer/tooltip-renderer.js.map +1 -0
  464. package/renderer/tree-cell-renderer.d.ts +37 -0
  465. package/renderer/tree-cell-renderer.d.ts.map +1 -0
  466. package/renderer/tree-cell-renderer.js +75 -0
  467. package/renderer/tree-cell-renderer.js.map +1 -0
  468. package/renderer/tree-sticky-row-tracker.d.ts +62 -0
  469. package/renderer/tree-sticky-row-tracker.d.ts.map +1 -0
  470. package/renderer/tree-sticky-row-tracker.js +120 -0
  471. package/renderer/tree-sticky-row-tracker.js.map +1 -0
  472. package/renderer/virtual-scroll-renderer.d.ts +37 -0
  473. package/renderer/virtual-scroll-renderer.d.ts.map +1 -0
  474. package/renderer/virtual-scroll-renderer.js +133 -0
  475. package/renderer/virtual-scroll-renderer.js.map +1 -0
  476. package/styles/base-styles.d.ts +3 -0
  477. package/styles/base-styles.d.ts.map +1 -0
  478. package/styles/base-styles.js +3045 -0
  479. package/styles/base-styles.js.map +1 -0
  480. package/styles/themes/theme-alpine.d.ts +2 -0
  481. package/styles/themes/theme-alpine.d.ts.map +1 -0
  482. package/styles/themes/theme-alpine.js +120 -0
  483. package/styles/themes/theme-alpine.js.map +1 -0
  484. package/styles/themes/theme-balham.d.ts +2 -0
  485. package/styles/themes/theme-balham.d.ts.map +1 -0
  486. package/styles/themes/theme-balham.js +120 -0
  487. package/styles/themes/theme-balham.js.map +1 -0
  488. package/styles/themes/theme-dark.d.ts +2 -0
  489. package/styles/themes/theme-dark.d.ts.map +1 -0
  490. package/styles/themes/theme-dark.js +216 -0
  491. package/styles/themes/theme-dark.js.map +1 -0
  492. package/styles/themes/theme-material.d.ts +2 -0
  493. package/styles/themes/theme-material.d.ts.map +1 -0
  494. package/styles/themes/theme-material.js +134 -0
  495. package/styles/themes/theme-material.js.map +1 -0
  496. package/styles/themes/theme-quartz.d.ts +2 -0
  497. package/styles/themes/theme-quartz.d.ts.map +1 -0
  498. package/styles/themes/theme-quartz.js +120 -0
  499. package/styles/themes/theme-quartz.js.map +1 -0
  500. package/theme/css-var-injector.d.ts +10 -0
  501. package/theme/css-var-injector.d.ts.map +1 -0
  502. package/theme/css-var-injector.js +63 -0
  503. package/theme/css-var-injector.js.map +1 -0
  504. package/theme/theme-manager.d.ts +20 -0
  505. package/theme/theme-manager.d.ts.map +1 -0
  506. package/theme/theme-manager.js +79 -0
  507. package/theme/theme-manager.js.map +1 -0
  508. package/theme/themes/dark-theme.d.ts +3 -0
  509. package/theme/themes/dark-theme.d.ts.map +1 -0
  510. package/theme/themes/dark-theme.js +149 -0
  511. package/theme/themes/dark-theme.js.map +1 -0
  512. package/theme/themes/light-theme.d.ts +3 -0
  513. package/theme/themes/light-theme.d.ts.map +1 -0
  514. package/theme/themes/light-theme.js +149 -0
  515. package/theme/themes/light-theme.js.map +1 -0
  516. package/types/column.types.d.ts +195 -0
  517. package/types/column.types.d.ts.map +1 -0
  518. package/types/column.types.js +2 -0
  519. package/types/column.types.js.map +1 -0
  520. package/types/event.types.d.ts +213 -0
  521. package/types/event.types.d.ts.map +1 -0
  522. package/types/event.types.js +67 -0
  523. package/types/event.types.js.map +1 -0
  524. package/types/filter.types.d.ts +42 -0
  525. package/types/filter.types.d.ts.map +1 -0
  526. package/types/filter.types.js +2 -0
  527. package/types/filter.types.js.map +1 -0
  528. package/types/grid.types.d.ts +214 -0
  529. package/types/grid.types.d.ts.map +1 -0
  530. package/types/grid.types.js +2 -0
  531. package/types/grid.types.js.map +1 -0
  532. package/types/master-detail.types.d.ts +112 -0
  533. package/types/master-detail.types.d.ts.map +1 -0
  534. package/types/master-detail.types.js +2 -0
  535. package/types/master-detail.types.js.map +1 -0
  536. package/types/photon-ai.types.d.ts +19 -0
  537. package/types/photon-ai.types.d.ts.map +1 -0
  538. package/types/photon-ai.types.js +2 -0
  539. package/types/photon-ai.types.js.map +1 -0
  540. package/types/renderer.types.d.ts +156 -0
  541. package/types/renderer.types.d.ts.map +1 -0
  542. package/types/renderer.types.js +19 -0
  543. package/types/renderer.types.js.map +1 -0
  544. package/types/row.types.d.ts +127 -0
  545. package/types/row.types.d.ts.map +1 -0
  546. package/types/row.types.js +9 -0
  547. package/types/row.types.js.map +1 -0
  548. package/types/theme.types.d.ts +159 -0
  549. package/types/theme.types.d.ts.map +1 -0
  550. package/types/theme.types.js +2 -0
  551. package/types/theme.types.js.map +1 -0
  552. package/types/tree-data.types.d.ts +94 -0
  553. package/types/tree-data.types.d.ts.map +1 -0
  554. package/types/tree-data.types.js +2 -0
  555. package/types/tree-data.types.js.map +1 -0
@@ -0,0 +1,668 @@
1
+ import { GridEventType } from '../types/event.types';
2
+ import { ColumnGroupResizeStrategy, } from './column-group.types';
3
+ /** Internal counter used to generate unique solo-group IDs without `Date.now()`. */
4
+ let _soloGroupSeq = 0;
5
+ /**
6
+ * Central model for the column-group tree.
7
+ *
8
+ * Responsibilities:
9
+ * - Build and maintain the column tree from a `ColumnDef[]` hierarchy.
10
+ * - Provide flat leaf arrays for {@link ColumnModel} initialization.
11
+ * - Answer width and position queries for {@link ColumnGroupHeaderBuilder}.
12
+ * - Manage group collapse / expand state.
13
+ * - Handle ordered mutations: move leaf, move group, set visibility/pin/width.
14
+ *
15
+ * The model fires grid events on all state changes so that {@link GridRenderer}
16
+ * can schedule a re-render without having to poll the model directly.
17
+ */
18
+ export class ColumnGroupModel {
19
+ constructor(eventBus) {
20
+ this.eventBus = eventBus;
21
+ /** Ordered root-level nodes of the full column tree. */
22
+ this.rootNodes = [];
23
+ /** Quick O(1) lookup by groupId → IColumnGroupNode. */
24
+ this.groupMap = new Map();
25
+ /** Quick O(1) lookup by colId → IColumnLeafNode. */
26
+ this.leafMap = new Map();
27
+ /**
28
+ * Maps any node identifier (groupId or colId) to its immediate parent group.
29
+ * `null` means the node is at the root level.
30
+ */
31
+ this.parentMap = new Map();
32
+ }
33
+ // ── Initialization ───────────────────────────────────────────────────────
34
+ /**
35
+ * Build the column tree from a `ColumnDef[]`.
36
+ *
37
+ * A `ColumnDef` with a non-empty `children` array becomes an
38
+ * {@link IColumnGroupNode}; all others become {@link IColumnLeafNode}s.
39
+ * Nesting is unlimited.
40
+ *
41
+ * @param defs - Top-level column definitions (may contain nested children).
42
+ */
43
+ init(defs) {
44
+ this.groupMap.clear();
45
+ this.leafMap.clear();
46
+ this.parentMap.clear();
47
+ this.rootNodes = this.buildTree(defs, null);
48
+ for (const [groupId, group] of this.groupMap) {
49
+ this.eventBus.emit(GridEventType.COLUMN_GROUP_HEADER_CREATED, {
50
+ groupId,
51
+ header: group.header,
52
+ childCount: group.children.length,
53
+ });
54
+ }
55
+ }
56
+ /** `true` when at least one group (a `ColumnDef` with `children`) exists. */
57
+ hasGroups() {
58
+ return this.groupMap.size > 0;
59
+ }
60
+ // ── Tree queries ─────────────────────────────────────────────────────────
61
+ /**
62
+ * Maximum nesting depth across the entire column tree.
63
+ *
64
+ * | Tree shape | Result |
65
+ * |---------------------|--------|
66
+ * | Pure flat columns | `0` |
67
+ * | One level of groups | `1` |
68
+ * | Groups within groups| `2` |
69
+ */
70
+ getMaxDepth() {
71
+ return this.computeDepth(this.rootNodes);
72
+ }
73
+ /**
74
+ * Returns root-level tree nodes, optionally filtered by pinned panel.
75
+ *
76
+ * @param panel - `'left'`, `'center'`, `'right'`, or `undefined` for all panels.
77
+ */
78
+ getRootNodes(panel) {
79
+ if (!panel)
80
+ return this.rootNodes;
81
+ return this.rootNodes.filter((node) => {
82
+ const pin = node.nodeType === "group" /* ColumnGroupNodeType.GROUP */
83
+ ? (node.pinned ?? null)
84
+ : (node.colDef.pinned ?? null);
85
+ if (panel === 'left')
86
+ return pin === 'left';
87
+ if (panel === 'right')
88
+ return pin === 'right';
89
+ return pin !== 'left' && pin !== 'right';
90
+ });
91
+ }
92
+ /**
93
+ * Return the {@link IColumnGroupNode} for a given `groupId`, or `undefined`
94
+ * when not found.
95
+ */
96
+ getGroup(groupId) {
97
+ return this.groupMap.get(groupId);
98
+ }
99
+ /**
100
+ * Return the {@link IColumnLeafNode} for a given `colId`, or `undefined`
101
+ * when not found.
102
+ */
103
+ getLeafNode(colId) {
104
+ return this.leafMap.get(colId);
105
+ }
106
+ /**
107
+ * Return the immediate parent group of any node (group or leaf).
108
+ * Returns `null` for root-level nodes.
109
+ */
110
+ getParent(nodeId) {
111
+ return this.parentMap.get(nodeId) ?? null;
112
+ }
113
+ /**
114
+ * Return the ordered ancestor path from the root group down to (but not
115
+ * including) the node identified by `nodeId`.
116
+ * Returns `[]` for root-level nodes.
117
+ */
118
+ getAncestors(nodeId) {
119
+ const path = [];
120
+ let current = this.parentMap.get(nodeId) ?? null;
121
+ while (current !== null) {
122
+ path.unshift(current);
123
+ current = this.parentMap.get(current.groupId) ?? null;
124
+ }
125
+ return path;
126
+ }
127
+ // ── Leaf column queries ──────────────────────────────────────────────────
128
+ /**
129
+ * Returns **all** leaf columns in document order (depth-first, left-to-right),
130
+ * regardless of their visibility or their parent group's collapsed state.
131
+ * Used to initialize {@link ColumnModel} with the full flat leaf list.
132
+ */
133
+ getAllLeaves() {
134
+ const result = [];
135
+ this.collectLeaves(this.rootNodes, result, false);
136
+ return result;
137
+ }
138
+ /**
139
+ * Returns **visible** leaf columns in document order, skipping:
140
+ * - Columns whose `visible` flag is `false`.
141
+ * - Children of collapsed groups (`collapsed === true`).
142
+ *
143
+ * @param panel - Optional filter for a specific pinned panel.
144
+ */
145
+ getVisibleLeaves(panel) {
146
+ const result = [];
147
+ const nodes = panel ? this.getRootNodes(panel) : this.rootNodes;
148
+ this.collectLeaves(nodes, result, true);
149
+ return result;
150
+ }
151
+ /**
152
+ * Returns all leaf {@link ColumnDef}s that are direct or indirect children
153
+ * of the group identified by `groupId`.
154
+ * Returns an empty array when the group is not found.
155
+ */
156
+ getLeavesInGroup(groupId) {
157
+ const group = this.groupMap.get(groupId);
158
+ if (!group)
159
+ return [];
160
+ const result = [];
161
+ this.collectLeaves(group.children, result, false);
162
+ return result;
163
+ }
164
+ // ── Collapse / expand ────────────────────────────────────────────────────
165
+ /** `true` when the group with `groupId` is currently collapsed. */
166
+ isGroupCollapsed(groupId) {
167
+ return this.groupMap.get(groupId)?.collapsed ?? false;
168
+ }
169
+ /**
170
+ * Collapse a group, visually hiding all its children in the header.
171
+ * Emits {@link GridEventType.COLUMN_GROUP_HEADER_COLLAPSED} when the state changes.
172
+ */
173
+ collapseGroup(groupId) {
174
+ const group = this.groupMap.get(groupId);
175
+ if (!group || group.collapsed)
176
+ return;
177
+ group.collapsed = true;
178
+ this.eventBus.emit(GridEventType.COLUMN_GROUP_HEADER_COLLAPSED, {
179
+ groupId,
180
+ header: group.header,
181
+ });
182
+ }
183
+ /**
184
+ * Expand a collapsed group, revealing its children in the header.
185
+ * Emits {@link GridEventType.COLUMN_GROUP_HEADER_EXPANDED} when the state changes.
186
+ */
187
+ expandGroup(groupId) {
188
+ const group = this.groupMap.get(groupId);
189
+ if (!group || !group.collapsed)
190
+ return;
191
+ group.collapsed = false;
192
+ this.eventBus.emit(GridEventType.COLUMN_GROUP_HEADER_EXPANDED, {
193
+ groupId,
194
+ header: group.header,
195
+ });
196
+ }
197
+ /**
198
+ * Toggle the collapsed state of a group.
199
+ * Internally calls either {@link collapseGroup} or {@link expandGroup}.
200
+ */
201
+ toggleGroup(groupId) {
202
+ const group = this.groupMap.get(groupId);
203
+ if (!group)
204
+ return;
205
+ if (group.collapsed)
206
+ this.expandGroup(groupId);
207
+ else
208
+ this.collapseGroup(groupId);
209
+ }
210
+ // ── Width computation ────────────────────────────────────────────────────
211
+ /**
212
+ * Compute the pixel width of a group header cell by summing all visible
213
+ * leaf column widths within the group's subtree.
214
+ *
215
+ * When the group is collapsed the width equals the first visible leaf's
216
+ * width (the "peek" column), falling back to `collapsedWidth` only when no
217
+ * visible leaf exists.
218
+ *
219
+ * @param groupId - The group to measure.
220
+ * @param colStyles - Authoritative column-width source.
221
+ */
222
+ computeGroupWidth(groupId, colStyles) {
223
+ const group = this.groupMap.get(groupId);
224
+ if (!group)
225
+ return 0;
226
+ if (group.collapsed) {
227
+ const first = this.findFirstVisibleLeaf(group.children);
228
+ if (first)
229
+ return colStyles.getWidth(first.colDef.colId);
230
+ return group.collapsedWidth;
231
+ }
232
+ return this.sumLeafWidths(group.children, colStyles);
233
+ }
234
+ /**
235
+ * Returns the first visible leaf `ColumnDef` directly inside a group.
236
+ * Used to determine the "peek" column width when the group is collapsed.
237
+ *
238
+ * @param groupId - Target group identifier.
239
+ */
240
+ getFirstLeaf(groupId) {
241
+ const group = this.groupMap.get(groupId);
242
+ if (!group)
243
+ return null;
244
+ return this.findFirstVisibleLeaf(group.children)?.colDef ?? null;
245
+ }
246
+ /**
247
+ * Compute the total pixel width of all visible leaves in an arbitrary
248
+ * subtree. Respects collapsed groups.
249
+ *
250
+ * @param nodes - Root nodes of the subtree to measure.
251
+ * @param colStyles - Authoritative column-width source.
252
+ */
253
+ computeSubtreeWidth(nodes, colStyles) {
254
+ return this.sumLeafWidths(nodes, colStyles);
255
+ }
256
+ // ── Ordered leaf index ───────────────────────────────────────────────────
257
+ /**
258
+ * Return the zero-based index of a leaf column within the ordered
259
+ * visible-leaf sequence for a panel.
260
+ *
261
+ * Used to locate the column within the virtual center column window.
262
+ * Returns `-1` when the column is invisible or not found.
263
+ *
264
+ * @param colId - Target leaf column identifier.
265
+ * @param panel - Optional panel filter.
266
+ */
267
+ getVisibleLeafIndex(colId, panel) {
268
+ return this.getVisibleLeaves(panel).findIndex((c) => c.colId === colId);
269
+ }
270
+ // ── Leaf mutations ───────────────────────────────────────────────────────
271
+ /**
272
+ * Update the `visible` flag on a leaf column.
273
+ * Does **not** fire a grid event — the caller (typically {@link HeaderRenderer}
274
+ * or {@link GridApi}) is responsible for propagating the change to
275
+ * {@link ColumnModel} which fires the relevant events.
276
+ */
277
+ setLeafVisible(colId, visible) {
278
+ const leaf = this.leafMap.get(colId);
279
+ if (leaf)
280
+ leaf.colDef.visible = visible;
281
+ }
282
+ // ── Ordering ─────────────────────────────────────────────────────────────
283
+ /**
284
+ * Move a **leaf** column within the tree.
285
+ *
286
+ * @param colId - The leaf column to move.
287
+ * @param newParentId - Target group's `groupId`, or `null` to move to root.
288
+ * @param insertBeforeId - `colId` or `groupId` to insert before; `null` appends.
289
+ */
290
+ moveLeaf(colId, newParentId, insertBeforeId) {
291
+ const leaf = this.leafMap.get(colId);
292
+ if (!leaf)
293
+ return;
294
+ const oldParent = this.parentMap.get(colId) ?? null;
295
+ const newParent = newParentId ? (this.groupMap.get(newParentId) ?? null) : null;
296
+ const oldList = oldParent ? oldParent.children : this.rootNodes;
297
+ const oldIdx = oldList.findIndex((n) => this.nodeId(n) === colId);
298
+ if (oldIdx !== -1)
299
+ oldList.splice(oldIdx, 1);
300
+ const newList = newParent ? newParent.children : this.rootNodes;
301
+ const insertIdx = insertBeforeId !== null
302
+ ? newList.findIndex((n) => this.nodeId(n) === insertBeforeId)
303
+ : -1;
304
+ if (insertIdx !== -1)
305
+ newList.splice(insertIdx, 0, leaf);
306
+ else
307
+ newList.push(leaf);
308
+ this.parentMap.set(colId, newParent);
309
+ this.eventBus.emit(GridEventType.COLUMN_MOVED, {
310
+ colDef: leaf.colDef,
311
+ fromIndex: oldIdx,
312
+ toIndex: insertIdx >= 0 ? insertIdx : newList.length - 1,
313
+ });
314
+ }
315
+ /**
316
+ * Move an **entire group** (with all its children) within the tree.
317
+ *
318
+ * Moving a group into one of its own descendants is silently ignored.
319
+ *
320
+ * @param groupId - The group to move.
321
+ * @param newParentId - Target group's `groupId`, or `null` to move to root.
322
+ * @param insertBeforeId - `colId` or `groupId` to insert before; `null` appends.
323
+ */
324
+ moveGroup(groupId, newParentId, insertBeforeId) {
325
+ const group = this.groupMap.get(groupId);
326
+ if (!group)
327
+ return;
328
+ const newParent = newParentId ? (this.groupMap.get(newParentId) ?? null) : null;
329
+ if (newParent && this.isAncestorOf(groupId, newParent.groupId))
330
+ return;
331
+ const oldParent = this.parentMap.get(groupId) ?? null;
332
+ const oldList = oldParent ? oldParent.children : this.rootNodes;
333
+ const oldIdx = oldList.findIndex((n) => this.nodeId(n) === groupId);
334
+ if (oldIdx !== -1)
335
+ oldList.splice(oldIdx, 1);
336
+ const newList = newParent ? newParent.children : this.rootNodes;
337
+ const insertIdx = insertBeforeId !== null
338
+ ? newList.findIndex((n) => this.nodeId(n) === insertBeforeId)
339
+ : -1;
340
+ if (insertIdx !== -1)
341
+ newList.splice(insertIdx, 0, group);
342
+ else
343
+ newList.push(group);
344
+ this.parentMap.set(groupId, newParent);
345
+ }
346
+ // ── Resize ───────────────────────────────────────────────────────────────
347
+ /**
348
+ * Distribute a resize `delta` (positive = grow, negative = shrink) across
349
+ * the sibling columns of `colId` according to the group's
350
+ * {@link IColumnGroupNode.resizeStrategy}.
351
+ *
352
+ * @param colId - The column being resized.
353
+ * @param delta - Pixel delta to distribute among siblings.
354
+ * @param colStyles - Width manager; widths are updated in-place via `setWidth`.
355
+ * @returns Map of `colId → newWidth` for all affected siblings.
356
+ */
357
+ distributeResizeDelta(colId, delta, colStyles) {
358
+ const result = new Map();
359
+ const parent = this.parentMap.get(colId);
360
+ if (!parent)
361
+ return result;
362
+ const siblings = parent.children
363
+ .filter((n) => n.nodeType === "leaf" /* ColumnGroupNodeType.LEAF */ &&
364
+ n.colDef.colId !== colId &&
365
+ n.colDef.visible !== false)
366
+ .map((n) => n.colDef);
367
+ if (siblings.length === 0)
368
+ return result;
369
+ const strategy = parent.resizeStrategy;
370
+ if (strategy === ColumnGroupResizeStrategy.PROPORTIONAL) {
371
+ const totalW = siblings.reduce((s, c) => s + colStyles.getWidth(c.colId), 0);
372
+ for (const sibling of siblings) {
373
+ const w = colStyles.getWidth(sibling.colId);
374
+ const share = totalW > 0 ? (w / totalW) : (1 / siblings.length);
375
+ const newW = Math.max(sibling.minWidth ?? 40, w - delta * share);
376
+ result.set(sibling.colId, newW);
377
+ }
378
+ }
379
+ else if (strategy === ColumnGroupResizeStrategy.EQUAL) {
380
+ const perSibling = delta / siblings.length;
381
+ for (const sibling of siblings) {
382
+ const newW = Math.max(sibling.minWidth ?? 40, colStyles.getWidth(sibling.colId) - perSibling);
383
+ result.set(sibling.colId, newW);
384
+ }
385
+ }
386
+ else if (strategy === ColumnGroupResizeStrategy.FIRST_FIXED) {
387
+ // Last sibling absorbs all delta
388
+ const last = siblings[siblings.length - 1];
389
+ const newW = Math.max(last.minWidth ?? 40, colStyles.getWidth(last.colId) - delta);
390
+ result.set(last.colId, newW);
391
+ }
392
+ else {
393
+ // LAST_FIXED: first sibling absorbs all delta
394
+ const first = siblings[0];
395
+ const newW = Math.max(first.minWidth ?? 40, colStyles.getWidth(first.colId) - delta);
396
+ result.set(first.colId, newW);
397
+ }
398
+ return result;
399
+ }
400
+ // ── Solo-group (clone) management ────────────────────────────────────────
401
+ /**
402
+ * Extract a leaf from its current parent and wrap it in a new **solo group**
403
+ * — a one-child group that acts as a draggable clone of the original parent.
404
+ *
405
+ * The new group is inserted at the root level immediately after the leaf's
406
+ * old parent group position, or at the end when the old parent is null.
407
+ *
408
+ * @param colId - Leaf column identifier to extract.
409
+ * @returns The generated `groupId` of the new solo group, or `null` when
410
+ * the leaf is not found.
411
+ */
412
+ createSoloGroupForLeaf(colId) {
413
+ const leaf = this.leafMap.get(colId);
414
+ if (!leaf)
415
+ return null;
416
+ const oldParent = this.parentMap.get(colId) ?? null;
417
+ // Remove leaf from its current parent
418
+ const oldList = oldParent ? oldParent.children : this.rootNodes;
419
+ const oldIdx = oldList.findIndex((n) => this.nodeId(n) === colId);
420
+ if (oldIdx !== -1)
421
+ oldList.splice(oldIdx, 1);
422
+ // Build solo group inheriting the original parent's identity
423
+ const soloGroupId = `grp_solo_${colId}_${++_soloGroupSeq}`;
424
+ const soloGroup = {
425
+ nodeType: "group" /* ColumnGroupNodeType.GROUP */,
426
+ groupId: soloGroupId,
427
+ header: oldParent?.header ?? leaf.colDef.header,
428
+ children: [leaf],
429
+ collapsed: false,
430
+ collapsedWidth: 36,
431
+ resizable: true,
432
+ marryChildren: false,
433
+ openByDefault: true,
434
+ resizeStrategy: ColumnGroupResizeStrategy.PROPORTIONAL,
435
+ isSoloGroup: true,
436
+ originalParentGroupId: oldParent?.groupId ?? undefined,
437
+ };
438
+ this.groupMap.set(soloGroupId, soloGroup);
439
+ this.parentMap.set(soloGroupId, null);
440
+ this.parentMap.set(colId, soloGroup);
441
+ // Insert into root right after the old parent
442
+ const insertAfter = oldParent
443
+ ? this.rootNodes.findIndex((n) => this.nodeId(n) === oldParent.groupId)
444
+ : -1;
445
+ if (insertAfter >= 0) {
446
+ this.rootNodes.splice(insertAfter + 1, 0, soloGroup);
447
+ }
448
+ else {
449
+ this.rootNodes.push(soloGroup);
450
+ }
451
+ this.eventBus.emit(GridEventType.COLUMN_GROUP_HEADER_CREATED, {
452
+ groupId: soloGroupId,
453
+ header: soloGroup.header,
454
+ childCount: 1,
455
+ });
456
+ return soloGroupId;
457
+ }
458
+ /**
459
+ * Dissolve a solo group: remove the wrapper group from the tree and move its
460
+ * single leaf into the `targetGroupId`. If the target is `null`, the leaf
461
+ * is promoted to the root level at the original position.
462
+ *
463
+ * A no-op when the group is not a solo group or when the group is not found.
464
+ *
465
+ * @param soloGroupId - The solo group to dissolve.
466
+ * @param targetGroupId - Group to receive the leaf, or `null` for root level.
467
+ * @param insertBeforeId - Optional sibling ID to insert before inside target.
468
+ */
469
+ dissolveGroupIfSolo(soloGroupId, targetGroupId, insertBeforeId = null) {
470
+ const group = this.groupMap.get(soloGroupId);
471
+ if (!group?.isSoloGroup || group.children.length !== 1)
472
+ return;
473
+ const leaf = group.children[0];
474
+ if (leaf.nodeType !== "leaf" /* ColumnGroupNodeType.LEAF */)
475
+ return;
476
+ // Remove solo group from root
477
+ const rootIdx = this.rootNodes.findIndex((n) => this.nodeId(n) === soloGroupId);
478
+ if (rootIdx !== -1)
479
+ this.rootNodes.splice(rootIdx, 1);
480
+ this.groupMap.delete(soloGroupId);
481
+ this.parentMap.delete(soloGroupId);
482
+ // Re-parent the leaf
483
+ const targetGroup = targetGroupId ? (this.groupMap.get(targetGroupId) ?? null) : null;
484
+ const targetList = targetGroup ? targetGroup.children : this.rootNodes;
485
+ const insertIdx = insertBeforeId !== null
486
+ ? targetList.findIndex((n) => this.nodeId(n) === insertBeforeId)
487
+ : -1;
488
+ if (insertIdx !== -1)
489
+ targetList.splice(insertIdx, 0, leaf);
490
+ else
491
+ targetList.push(leaf);
492
+ this.parentMap.set(leaf.colDef.colId, targetGroup);
493
+ this.eventBus.emit(GridEventType.COLUMN_GROUP_HEADER_REMOVED, {
494
+ groupId: soloGroupId,
495
+ header: group.header,
496
+ });
497
+ }
498
+ /**
499
+ * Prune any groups in the tree that have no children.
500
+ * Called after drag-drop operations to clean up empty parents.
501
+ */
502
+ cleanEmptyGroups() {
503
+ const toRemove = [];
504
+ for (const [id, group] of this.groupMap) {
505
+ if (group.children.length === 0)
506
+ toRemove.push(id);
507
+ }
508
+ for (const id of toRemove) {
509
+ const parent = this.parentMap.get(id) ?? null;
510
+ const list = parent ? parent.children : this.rootNodes;
511
+ const idx = list.findIndex((n) => this.nodeId(n) === id);
512
+ if (idx !== -1)
513
+ list.splice(idx, 1);
514
+ this.groupMap.delete(id);
515
+ this.parentMap.delete(id);
516
+ this.eventBus.emit(GridEventType.COLUMN_GROUP_HEADER_REMOVED, {
517
+ groupId: id,
518
+ header: this.groupMap.get(id)?.header ?? id,
519
+ });
520
+ }
521
+ }
522
+ // ── Serialisation ────────────────────────────────────────────────────────
523
+ /**
524
+ * Serialize all group expand/collapse states into a portable array.
525
+ * Pair with {@link deserialize} for state persistence.
526
+ */
527
+ serialize() {
528
+ const result = [];
529
+ for (const [groupId, group] of this.groupMap) {
530
+ result.push({ groupId, collapsed: group.collapsed });
531
+ }
532
+ return result;
533
+ }
534
+ /**
535
+ * Restore group states from a previously serialized snapshot.
536
+ * Unknown group IDs are silently ignored.
537
+ */
538
+ deserialize(states) {
539
+ for (const { groupId, collapsed } of states) {
540
+ const group = this.groupMap.get(groupId);
541
+ if (group)
542
+ group.collapsed = collapsed;
543
+ }
544
+ }
545
+ // ── Private: tree construction ───────────────────────────────────────────
546
+ buildTree(defs, parent) {
547
+ return defs.map((def) => {
548
+ if (def.children && def.children.length > 0) {
549
+ const groupId = def.colId
550
+ ?? `grp_${def.header.toLowerCase().replace(/[^a-z0-9]+/g, '_')}`;
551
+ const group = {
552
+ nodeType: "group" /* ColumnGroupNodeType.GROUP */,
553
+ groupId,
554
+ header: def.header,
555
+ children: [],
556
+ pinned: def.pinned,
557
+ collapsed: def.openByDefault === false,
558
+ collapsedWidth: def.collapsedWidth ?? 26,
559
+ resizable: def.resizable !== false,
560
+ marryChildren: def.marryChildren === true,
561
+ openByDefault: def.openByDefault !== false,
562
+ resizeStrategy: def.resizeStrategy
563
+ ?? ColumnGroupResizeStrategy.PROPORTIONAL,
564
+ headerCssClass: def.headerCssClass,
565
+ headerRendererFn: def.groupHeaderRendererFn,
566
+ };
567
+ group.children = this.buildTree(def.children, group);
568
+ this.groupMap.set(groupId, group);
569
+ this.parentMap.set(groupId, parent);
570
+ return group;
571
+ }
572
+ const leaf = {
573
+ nodeType: "leaf" /* ColumnGroupNodeType.LEAF */,
574
+ colDef: def,
575
+ };
576
+ this.leafMap.set(def.colId, leaf);
577
+ this.parentMap.set(def.colId, parent);
578
+ return leaf;
579
+ });
580
+ }
581
+ // ── Private: tree traversal ───────────────────────────────────────────────
582
+ computeDepth(nodes) {
583
+ let max = 0;
584
+ for (const node of nodes) {
585
+ if (node.nodeType === "group" /* ColumnGroupNodeType.GROUP */) {
586
+ const d = this.computeDepth(node.children);
587
+ if (d + 1 > max)
588
+ max = d + 1;
589
+ }
590
+ }
591
+ return max;
592
+ }
593
+ collectLeaves(nodes, result, respectCollapse) {
594
+ for (const node of nodes) {
595
+ if (node.nodeType === "leaf" /* ColumnGroupNodeType.LEAF */) {
596
+ if (!respectCollapse || node.colDef.visible !== false) {
597
+ result.push(node.colDef);
598
+ }
599
+ }
600
+ else if (!respectCollapse || !node.collapsed) {
601
+ this.collectLeaves(node.children, result, respectCollapse);
602
+ }
603
+ else {
604
+ // Collapsed: include only the first visible leaf ("peek" column)
605
+ const first = this.findFirstVisibleLeaf(node.children);
606
+ if (first && first.colDef.visible !== false)
607
+ result.push(first.colDef);
608
+ }
609
+ }
610
+ }
611
+ sumLeafWidths(nodes, colStyles) {
612
+ let total = 0;
613
+ for (const node of nodes) {
614
+ if (node.nodeType === "leaf" /* ColumnGroupNodeType.LEAF */) {
615
+ if (node.colDef.visible !== false) {
616
+ total += colStyles.getWidth(node.colDef.colId);
617
+ }
618
+ }
619
+ else if (!node.collapsed) {
620
+ total += this.sumLeafWidths(node.children, colStyles);
621
+ }
622
+ else {
623
+ // Collapsed: count only the first visible leaf's width
624
+ const first = this.findFirstVisibleLeaf(node.children);
625
+ if (first)
626
+ total += colStyles.getWidth(first.colDef.colId);
627
+ }
628
+ }
629
+ return total;
630
+ }
631
+ /**
632
+ * Walk a subtree depth-first and return the first leaf whose `visible`
633
+ * flag is not `false`. Returns `null` when the subtree is empty or all
634
+ * leaves are hidden.
635
+ */
636
+ findFirstVisibleLeaf(nodes) {
637
+ for (const node of nodes) {
638
+ if (node.nodeType === "leaf" /* ColumnGroupNodeType.LEAF */) {
639
+ if (node.colDef.visible !== false)
640
+ return node;
641
+ }
642
+ else {
643
+ const found = this.findFirstVisibleLeaf(node.children);
644
+ if (found)
645
+ return found;
646
+ }
647
+ }
648
+ return null;
649
+ }
650
+ nodeId(node) {
651
+ return node.nodeType === "group" /* ColumnGroupNodeType.GROUP */ ? node.groupId : node.colDef.colId;
652
+ }
653
+ /**
654
+ * Returns `true` when `potentialAncestor` is a direct or indirect ancestor
655
+ * of `groupId` — prevents moving a group into its own subtree.
656
+ */
657
+ isAncestorOf(groupId, potentialAncestor) {
658
+ let current = potentialAncestor;
659
+ while (current !== null) {
660
+ if (current === groupId)
661
+ return true;
662
+ const parent = this.parentMap.get(current);
663
+ current = parent ? parent.groupId : null;
664
+ }
665
+ return false;
666
+ }
667
+ }
668
+ //# sourceMappingURL=column-group-model.js.map