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,179 @@
1
+ import { GridEventType } from '../types/event.types';
2
+ import { DragPreview } from './drag-preview';
3
+ import { DragAutoscroll } from './drag-autoscroll';
4
+ const DRAG_THRESHOLD = 4;
5
+ const DRAG_DELAY = 0;
6
+ export class DragDropEngine {
7
+ constructor(eventBus) {
8
+ this.eventBus = eventBus;
9
+ this.dropTargets = new Map();
10
+ this.currentSession = null;
11
+ this.preview = new DragPreview();
12
+ this.autoscroll = new DragAutoscroll();
13
+ this.previewOptions = {};
14
+ this.boundMouseMove = this.onMouseMove.bind(this);
15
+ this.boundMouseUp = this.onMouseUp.bind(this);
16
+ }
17
+ registerDropTarget(target) {
18
+ this.dropTargets.set(target.id, target);
19
+ return () => this.dropTargets.delete(target.id);
20
+ }
21
+ makeDraggable(el, item, scrollContainer, previewOpts) {
22
+ if (previewOpts)
23
+ this.previewOptions = previewOpts;
24
+ const onMouseDown = (e) => {
25
+ if (e.button !== 0)
26
+ return;
27
+ e.preventDefault();
28
+ this.currentSession = {
29
+ item,
30
+ sourceEl: el,
31
+ currentTarget: null,
32
+ position: null,
33
+ startX: e.clientX,
34
+ startY: e.clientY,
35
+ currentX: e.clientX,
36
+ currentY: e.clientY,
37
+ isDragging: false,
38
+ startTime: Date.now(),
39
+ };
40
+ if (scrollContainer)
41
+ this.autoscroll.attach(scrollContainer);
42
+ document.addEventListener('mousemove', this.boundMouseMove);
43
+ document.addEventListener('mouseup', this.boundMouseUp);
44
+ };
45
+ el.addEventListener('mousedown', onMouseDown);
46
+ el.style.cursor = 'grab';
47
+ el.setAttribute('data-draggable', item.type);
48
+ return () => {
49
+ el.removeEventListener('mousedown', onMouseDown);
50
+ el.style.cursor = '';
51
+ el.removeAttribute('data-draggable');
52
+ };
53
+ }
54
+ setScrollContainer(el) {
55
+ this.autoscroll.attach(el);
56
+ }
57
+ cancelDrag() {
58
+ if (this.currentSession) {
59
+ this.cleanupDrag(true);
60
+ }
61
+ }
62
+ destroy() {
63
+ this.cancelDrag();
64
+ this.autoscroll.detach();
65
+ document.removeEventListener('mousemove', this.boundMouseMove);
66
+ document.removeEventListener('mouseup', this.boundMouseUp);
67
+ }
68
+ onMouseMove(e) {
69
+ if (!this.currentSession)
70
+ return;
71
+ const session = this.currentSession;
72
+ session.currentX = e.clientX;
73
+ session.currentY = e.clientY;
74
+ if (!session.isDragging) {
75
+ const dx = Math.abs(e.clientX - session.startX);
76
+ const dy = Math.abs(e.clientY - session.startY);
77
+ if (dx < DRAG_THRESHOLD && dy < DRAG_THRESHOLD)
78
+ return;
79
+ session.isDragging = true;
80
+ session.sourceEl.classList.add('pg-dragging');
81
+ this.preview.create(this.previewOptions);
82
+ this.autoscroll.start();
83
+ this.eventBus.emit(GridEventType.DRAG_STARTED, { item: session.item });
84
+ }
85
+ this.preview.moveTo(e.clientX, e.clientY);
86
+ this.autoscroll.onMouseMove(e.clientX, e.clientY);
87
+ const hitTarget = this.findDropTarget(e.clientX, e.clientY, session.item);
88
+ if (hitTarget !== session.currentTarget) {
89
+ if (session.currentTarget) {
90
+ session.currentTarget.el.classList.remove('pg-drop-over');
91
+ session.currentTarget.onDragLeave?.(session.item);
92
+ }
93
+ session.currentTarget = hitTarget;
94
+ if (hitTarget) {
95
+ hitTarget.el.classList.add('pg-drop-over');
96
+ hitTarget.onDragEnter?.(session.item);
97
+ }
98
+ }
99
+ if (hitTarget) {
100
+ session.position = this.calcDropPosition(e.clientY, hitTarget.el);
101
+ this.updateDropIndicator(hitTarget.el, session.position);
102
+ }
103
+ this.eventBus.emit(GridEventType.DRAG_OVER, {
104
+ item: session.item,
105
+ targetId: hitTarget?.id ?? null,
106
+ position: session.position,
107
+ });
108
+ }
109
+ onMouseUp(e) {
110
+ if (!this.currentSession)
111
+ return;
112
+ const session = this.currentSession;
113
+ if (session.isDragging && session.currentTarget && session.position) {
114
+ session.currentTarget.onDrop?.(session.item, session.position);
115
+ this.eventBus.emit(GridEventType.DRAG_STOPPED, {
116
+ item: session.item,
117
+ targetId: session.currentTarget.id,
118
+ position: session.position,
119
+ accepted: true,
120
+ });
121
+ }
122
+ else {
123
+ this.eventBus.emit(GridEventType.DRAG_STOPPED, {
124
+ item: session.item,
125
+ targetId: null,
126
+ position: null,
127
+ accepted: false,
128
+ });
129
+ }
130
+ this.cleanupDrag(false);
131
+ }
132
+ cleanupDrag(cancelled) {
133
+ if (!this.currentSession)
134
+ return;
135
+ const session = this.currentSession;
136
+ session.sourceEl.classList.remove('pg-dragging');
137
+ if (session.currentTarget) {
138
+ session.currentTarget.el.classList.remove('pg-drop-over');
139
+ this.clearDropIndicator(session.currentTarget.el);
140
+ }
141
+ this.preview.destroy();
142
+ this.autoscroll.stop();
143
+ document.removeEventListener('mousemove', this.boundMouseMove);
144
+ document.removeEventListener('mouseup', this.boundMouseUp);
145
+ this.currentSession = null;
146
+ }
147
+ findDropTarget(x, y, dragItem) {
148
+ let best = null;
149
+ for (const target of this.dropTargets.values()) {
150
+ if (!target.acceptsTypes.includes(dragItem.type))
151
+ continue;
152
+ if (target.id === dragItem.id)
153
+ continue;
154
+ const rect = target.el.getBoundingClientRect();
155
+ if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {
156
+ best = target;
157
+ }
158
+ }
159
+ return best;
160
+ }
161
+ calcDropPosition(mouseY, el) {
162
+ const rect = el.getBoundingClientRect();
163
+ const relY = mouseY - rect.top;
164
+ const ratio = relY / rect.height;
165
+ if (ratio < 0.25)
166
+ return 'before';
167
+ if (ratio > 0.75)
168
+ return 'after';
169
+ return 'inside';
170
+ }
171
+ updateDropIndicator(el, position) {
172
+ el.classList.remove('pg-drop-before', 'pg-drop-after', 'pg-drop-inside');
173
+ el.classList.add(`pg-drop-${position}`);
174
+ }
175
+ clearDropIndicator(el) {
176
+ el.classList.remove('pg-drop-before', 'pg-drop-after', 'pg-drop-inside');
177
+ }
178
+ }
179
+ //# sourceMappingURL=drag-drop-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-drop-engine.js","sourceRoot":"","sources":["../../src/drag-drop/drag-drop-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAmCnD,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,MAAM,OAAO,cAAc;IASzB,YAAoB,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAR9B,gBAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC5C,mBAAc,GAAuB,IAAI,CAAC;QAC1C,YAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAC5B,eAAU,GAAG,IAAI,cAAc,EAAE,CAAC;QAGlC,mBAAc,GAAuB,EAAE,CAAC;QAG9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,kBAAkB,CAAC,MAAkB;QACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,aAAa,CACX,EAAe,EACf,IAAc,EACd,eAA6B,EAC7B,WAAgC;QAEhC,IAAI,WAAW;YAAE,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;QAEnD,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;YACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC3B,CAAC,CAAC,cAAc,EAAE,CAAC;YAEnB,IAAI,CAAC,cAAc,GAAG;gBACpB,IAAI;gBACJ,QAAQ,EAAE,EAAE;gBACZ,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,CAAC,CAAC,OAAO;gBACjB,MAAM,EAAE,CAAC,CAAC,OAAO;gBACjB,QAAQ,EAAE,CAAC,CAAC,OAAO;gBACnB,QAAQ,EAAE,CAAC,CAAC,OAAO;gBACnB,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,IAAI,eAAe;gBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAE7D,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC5D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC,CAAC;QAEF,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9C,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,OAAO,GAAG,EAAE;YACV,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACjD,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YACrB,EAAE,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,EAAe;QAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;IAEO,WAAW,CAAC,CAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;QAE7B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,EAAE,GAAG,cAAc,IAAI,EAAE,GAAG,cAAc;gBAAE,OAAO;YAEvD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAElD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAE1E,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC1D,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YAClC,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC3C,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;YAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,CAAa;QAC7B,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QAEpC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACpE,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;gBAC7C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE;gBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;gBAC7C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEO,WAAW,CAAC,SAAkB;QACpC,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QAEpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEO,cAAc,CACpB,CAAS,EACT,CAAS,EACT,QAAkB;QAElB,IAAI,IAAI,GAAsB,IAAI,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC3D,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;gBAAE,SAAS;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC3E,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,gBAAgB,CACtB,MAAc,EACd,EAAe;QAEf,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACjC,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,QAAQ,CAAC;QAClC,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,OAAO,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,mBAAmB,CAAC,EAAe,EAAE,QAAuC;QAClF,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QACzE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEO,kBAAkB,CAAC,EAAe;QACxC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ export interface DragPreviewOptions {
2
+ label?: string;
3
+ icon?: string;
4
+ count?: number;
5
+ avatarUrl?: string;
6
+ shape?: 'circle' | 'square';
7
+ }
8
+ export declare class DragPreview {
9
+ private el;
10
+ private offsetX;
11
+ private offsetY;
12
+ /**
13
+ * Create a theme-styled floating drag preview.
14
+ *
15
+ * Visual styling belongs to `.pg-drag-preview` CSS rules; this method only
16
+ * builds semantic children and data-driven classes.
17
+ *
18
+ * @param options - Label, icon, count badge, and optional avatar metadata.
19
+ */
20
+ create(options?: DragPreviewOptions): HTMLElement;
21
+ moveTo(x: number, y: number): void;
22
+ /**
23
+ * Set the cursor-relative offset used by {@link moveTo}.
24
+ *
25
+ * @param x - Horizontal offset in CSS pixels.
26
+ * @param y - Vertical offset in CSS pixels.
27
+ */
28
+ setOffset(x: number, y: number): void;
29
+ /** Remove the current preview element from the DOM. */
30
+ destroy(): void;
31
+ }
32
+ //# sourceMappingURL=drag-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-preview.d.ts","sourceRoot":"","sources":["../../src/drag-drop/drag-preview.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAM;IAErB;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW;IA2CrD,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC;;;;;OAKG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrC,uDAAuD;IACvD,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,74 @@
1
+ export class DragPreview {
2
+ constructor() {
3
+ this.el = null;
4
+ this.offsetX = 12;
5
+ this.offsetY = 12;
6
+ }
7
+ /**
8
+ * Create a theme-styled floating drag preview.
9
+ *
10
+ * Visual styling belongs to `.pg-drag-preview` CSS rules; this method only
11
+ * builds semantic children and data-driven classes.
12
+ *
13
+ * @param options - Label, icon, count badge, and optional avatar metadata.
14
+ */
15
+ create(options = {}) {
16
+ this.destroy();
17
+ const preview = document.createElement('div');
18
+ preview.className = 'pg-drag-preview';
19
+ if (options.avatarUrl || options.shape) {
20
+ const avatar = document.createElement('div');
21
+ const shape = options.shape ?? 'circle';
22
+ avatar.className = `pg-drag-preview__avatar pg-drag-preview__avatar--${shape}`;
23
+ if (options.avatarUrl) {
24
+ const img = document.createElement('img');
25
+ img.className = 'pg-drag-preview__avatar-img';
26
+ img.src = options.avatarUrl;
27
+ avatar.appendChild(img);
28
+ }
29
+ preview.appendChild(avatar);
30
+ }
31
+ if (options.icon) {
32
+ const iconSpan = document.createElement('span');
33
+ iconSpan.className = 'pg-drag-preview__icon';
34
+ iconSpan.innerHTML = options.icon;
35
+ preview.appendChild(iconSpan);
36
+ }
37
+ const labelSpan = document.createElement('span');
38
+ labelSpan.className = 'pg-drag-preview__label';
39
+ labelSpan.textContent = options.label ?? 'Dragging';
40
+ preview.appendChild(labelSpan);
41
+ if (options.count && options.count > 1) {
42
+ const badge = document.createElement('span');
43
+ badge.className = 'pg-drag-preview__badge';
44
+ badge.textContent = String(options.count);
45
+ preview.appendChild(badge);
46
+ }
47
+ document.body.appendChild(preview);
48
+ this.el = preview;
49
+ return preview;
50
+ }
51
+ moveTo(x, y) {
52
+ if (!this.el)
53
+ return;
54
+ this.el.style.transform = `translate(${x + this.offsetX}px, ${y + this.offsetY}px)`;
55
+ }
56
+ /**
57
+ * Set the cursor-relative offset used by {@link moveTo}.
58
+ *
59
+ * @param x - Horizontal offset in CSS pixels.
60
+ * @param y - Vertical offset in CSS pixels.
61
+ */
62
+ setOffset(x, y) {
63
+ this.offsetX = x;
64
+ this.offsetY = y;
65
+ }
66
+ /** Remove the current preview element from the DOM. */
67
+ destroy() {
68
+ if (this.el) {
69
+ this.el.remove();
70
+ this.el = null;
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=drag-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-preview.js","sourceRoot":"","sources":["../../src/drag-drop/drag-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { ColumnDef } from '../../types/column.types';
2
+ import type { GroupTree } from '../grouping/group-node';
3
+ /**
4
+ * Stateless service that computes group-level aggregations in a bottom-up pass
5
+ * over a {@link GroupTree} produced by {@link GroupingEngine}.
6
+ *
7
+ * ### Eligibility
8
+ * Only columns whose {@link ColumnDef.type} is `'currency'` or `'number'` **and** that have
9
+ * {@link ColumnDef.aggFunc} set are processed. All other columns are skipped,
10
+ * keeping the total work proportional to `(leaf rows) × (agg-eligible columns)`.
11
+ *
12
+ * ### Supported functions
13
+ * | `aggFunc` | Description |
14
+ * |-----------|-------------|
15
+ * | `sum` | Sum of all leaf values |
16
+ * | `avg` | True weighted average across all leaf rows |
17
+ * | `min` | Minimum leaf value |
18
+ * | `max` | Maximum leaf value |
19
+ * | `count` | Count of leaf rows with a finite value |
20
+ *
21
+ * ### Usage
22
+ * ```ts
23
+ * const engine = new AggregationEngine();
24
+ * // Called once per pipeline run, before flattenGroupTree:
25
+ * engine.compute(groupTree, allColumns);
26
+ * // Every GroupTree node now has aggregatedValues populated.
27
+ * ```
28
+ */
29
+ export declare class AggregationEngine {
30
+ /**
31
+ * Walk the entire group tree bottom-up and write `aggregatedValues` onto
32
+ * every node.
33
+ *
34
+ * - **Leaf groups** aggregate directly from their raw {@link RowNode} data.
35
+ * - **Interior groups** combine the pre-computed child accumulators, so
36
+ * averages are correctly weighted and leaf rows are never double-counted.
37
+ *
38
+ * @param tree - Top-level nodes from `GroupingEngine.buildGroupTree`.
39
+ * @param columns - Full column set; filtered internally to agg-eligible cols.
40
+ */
41
+ compute(tree: GroupTree[], columns: ColumnDef[]): void;
42
+ /**
43
+ * Recursively process `group` and return its raw {@link AggAccumulator}s so
44
+ * the parent can combine them without re-scanning leaf rows.
45
+ */
46
+ private walkGroup;
47
+ /**
48
+ * Scan a flat array of leaf {@link RowNode}s and build one
49
+ * {@link AggAccumulator} per agg-eligible column.
50
+ *
51
+ * Non-numeric values and `NaN`/`Infinity` are silently skipped; they do
52
+ * not increment `count`, ensuring averages remain correct.
53
+ */
54
+ private buildAccumulatorsFromRows;
55
+ /**
56
+ * Combine child {@link AggAccumulator}s into a single accumulator for the
57
+ * parent group. Children with zero count are skipped.
58
+ */
59
+ private mergeAccumulators;
60
+ /**
61
+ * Convert raw {@link AggAccumulator}s into the final display values keyed by
62
+ * `colDef.field`. Groups with `count === 0` get `null` for that field.
63
+ */
64
+ private deriveDisplayValues;
65
+ }
66
+ //# sourceMappingURL=aggregation-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregation-engine.d.ts","sourceRoot":"","sources":["../../../src/engines/aggregation/aggregation-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAyBxD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IActD;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CA+B5B"}
@@ -0,0 +1,149 @@
1
+ import { resolveField } from '../grouping/group-node';
2
+ // ─── AggregationEngine ───────────────────────────────────────────────────────
3
+ /**
4
+ * Stateless service that computes group-level aggregations in a bottom-up pass
5
+ * over a {@link GroupTree} produced by {@link GroupingEngine}.
6
+ *
7
+ * ### Eligibility
8
+ * Only columns whose {@link ColumnDef.type} is `'currency'` or `'number'` **and** that have
9
+ * {@link ColumnDef.aggFunc} set are processed. All other columns are skipped,
10
+ * keeping the total work proportional to `(leaf rows) × (agg-eligible columns)`.
11
+ *
12
+ * ### Supported functions
13
+ * | `aggFunc` | Description |
14
+ * |-----------|-------------|
15
+ * | `sum` | Sum of all leaf values |
16
+ * | `avg` | True weighted average across all leaf rows |
17
+ * | `min` | Minimum leaf value |
18
+ * | `max` | Maximum leaf value |
19
+ * | `count` | Count of leaf rows with a finite value |
20
+ *
21
+ * ### Usage
22
+ * ```ts
23
+ * const engine = new AggregationEngine();
24
+ * // Called once per pipeline run, before flattenGroupTree:
25
+ * engine.compute(groupTree, allColumns);
26
+ * // Every GroupTree node now has aggregatedValues populated.
27
+ * ```
28
+ */
29
+ export class AggregationEngine {
30
+ /**
31
+ * Walk the entire group tree bottom-up and write `aggregatedValues` onto
32
+ * every node.
33
+ *
34
+ * - **Leaf groups** aggregate directly from their raw {@link RowNode} data.
35
+ * - **Interior groups** combine the pre-computed child accumulators, so
36
+ * averages are correctly weighted and leaf rows are never double-counted.
37
+ *
38
+ * @param tree - Top-level nodes from `GroupingEngine.buildGroupTree`.
39
+ * @param columns - Full column set; filtered internally to agg-eligible cols.
40
+ */
41
+ compute(tree, columns) {
42
+ const aggCols = columns.filter((c) => (c.type === 'currency' || c.type === 'number') && c.aggFunc != null);
43
+ if (aggCols.length === 0)
44
+ return;
45
+ for (const group of tree) {
46
+ this.walkGroup(group, aggCols);
47
+ }
48
+ }
49
+ // ─── Private ──────────────────────────────────────────────────────────────
50
+ /**
51
+ * Recursively process `group` and return its raw {@link AggAccumulator}s so
52
+ * the parent can combine them without re-scanning leaf rows.
53
+ */
54
+ walkGroup(group, aggCols) {
55
+ let accs;
56
+ if (group.children.length > 0) {
57
+ const childAccs = group.children.map((child) => this.walkGroup(child, aggCols));
58
+ accs = this.mergeAccumulators(childAccs, aggCols);
59
+ }
60
+ else {
61
+ accs = this.buildAccumulatorsFromRows(group.rows, aggCols);
62
+ }
63
+ group.aggregatedValues = this.deriveDisplayValues(accs, aggCols);
64
+ return accs;
65
+ }
66
+ /**
67
+ * Scan a flat array of leaf {@link RowNode}s and build one
68
+ * {@link AggAccumulator} per agg-eligible column.
69
+ *
70
+ * Non-numeric values and `NaN`/`Infinity` are silently skipped; they do
71
+ * not increment `count`, ensuring averages remain correct.
72
+ */
73
+ buildAccumulatorsFromRows(rows, aggCols) {
74
+ const result = {};
75
+ for (const col of aggCols) {
76
+ const acc = { sum: 0, count: 0, min: Infinity, max: -Infinity };
77
+ for (const row of rows) {
78
+ const raw = resolveField(row.data, col.field);
79
+ const n = typeof raw === 'number' ? raw : parseFloat(String(raw ?? ''));
80
+ if (!isFinite(n))
81
+ continue;
82
+ acc.sum += n;
83
+ acc.count++;
84
+ if (n < acc.min)
85
+ acc.min = n;
86
+ if (n > acc.max)
87
+ acc.max = n;
88
+ }
89
+ result[col.field] = acc;
90
+ }
91
+ return result;
92
+ }
93
+ /**
94
+ * Combine child {@link AggAccumulator}s into a single accumulator for the
95
+ * parent group. Children with zero count are skipped.
96
+ */
97
+ mergeAccumulators(childAccs, aggCols) {
98
+ const result = {};
99
+ for (const col of aggCols) {
100
+ const acc = { sum: 0, count: 0, min: Infinity, max: -Infinity };
101
+ for (const child of childAccs) {
102
+ const c = child[col.field];
103
+ if (!c || c.count === 0)
104
+ continue;
105
+ acc.sum += c.sum;
106
+ acc.count += c.count;
107
+ if (c.min < acc.min)
108
+ acc.min = c.min;
109
+ if (c.max > acc.max)
110
+ acc.max = c.max;
111
+ }
112
+ result[col.field] = acc;
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Convert raw {@link AggAccumulator}s into the final display values keyed by
118
+ * `colDef.field`. Groups with `count === 0` get `null` for that field.
119
+ */
120
+ deriveDisplayValues(accs, aggCols) {
121
+ const result = {};
122
+ for (const col of aggCols) {
123
+ const acc = accs[col.field];
124
+ if (!acc || acc.count === 0) {
125
+ result[col.field] = null;
126
+ continue;
127
+ }
128
+ switch (col.aggFunc) {
129
+ case 'sum':
130
+ result[col.field] = acc.sum;
131
+ break;
132
+ case 'avg':
133
+ result[col.field] = acc.sum / acc.count;
134
+ break;
135
+ case 'min':
136
+ result[col.field] = isFinite(acc.min) ? acc.min : null;
137
+ break;
138
+ case 'max':
139
+ result[col.field] = isFinite(acc.max) ? acc.max : null;
140
+ break;
141
+ case 'count':
142
+ result[col.field] = acc.count;
143
+ break;
144
+ }
145
+ }
146
+ return result;
147
+ }
148
+ }
149
+ //# sourceMappingURL=aggregation-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregation-engine.js","sourceRoot":"","sources":["../../../src/engines/aggregation/aggregation-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { CellRange } from '../../types/grid.types';
2
+ import type { RowNode } from '../../types/row.types';
3
+ import type { ColumnDef } from '../../types/column.types';
4
+ export declare class ClipboardEngine {
5
+ /** Internal fallback buffer used when clipboard-read permission is denied. */
6
+ private clipboardBuffer;
7
+ /**
8
+ * Copies the first cell range to the system clipboard as tab-separated text.
9
+ * Also populates the internal buffer so paste works even when the browser
10
+ * clipboard-read permission is denied.
11
+ *
12
+ * @param ranges - Active cell ranges (only the first is used for copy)
13
+ * @param rows - All visible rows
14
+ * @param columns - All visible column definitions
15
+ * @param withHeaders - Include a header row in the copied text
16
+ * @param leafGroupField - Field name of the deepest grouping column; when
17
+ * provided, leaf data rows include their group-field
18
+ * value in the first (auto-group label) clipboard column
19
+ */
20
+ copyRangesToClipboard(ranges: CellRange[], rows: RowNode[], columns: ColumnDef[], withHeaders?: boolean, leafGroupField?: string): Promise<void>;
21
+ /**
22
+ * Reads text from the system clipboard and returns it as a 2D string array.
23
+ * Falls back to the internal buffer when clipboard-read is denied.
24
+ */
25
+ pasteFromClipboard(): Promise<string[][]>;
26
+ /**
27
+ * Copies selected rows (with headers) to the clipboard.
28
+ * Used by row-selection mode rather than cell-range mode.
29
+ *
30
+ * @param selectedRows - Rows to copy
31
+ * @param columns - Column definitions
32
+ */
33
+ copyRowsToClipboard(selectedRows: RowNode[], columns: ColumnDef[]): Promise<void>;
34
+ /**
35
+ * Copies a single cell value to the clipboard.
36
+ *
37
+ * @param value - Cell value
38
+ * @param col - Column definition for type-aware formatting
39
+ */
40
+ copyCellValue(value: unknown, col: ColumnDef): Promise<void>;
41
+ /**
42
+ * Builds the tab-separated clipboard text and the raw 2D string buffer in a
43
+ * **single pass** over the row/column range.
44
+ *
45
+ * ### Performance strategy
46
+ * - **Pre-compiled descriptors** — `ColDesc[]` is built once before the loop;
47
+ * each descriptor caches the split field path, column type, and a
48
+ * `Map<value→label>` for dropdown columns. No `field.split('.')` or
49
+ * option-list `.find()` inside the hot cell loop.
50
+ * - **Single pass** — text and 2D buffer are produced together, eliminating
51
+ * the previous approach of building text then calling `parseClipboardText`
52
+ * to re-split it back.
53
+ * - **Fast formatter** — `String(n)` instead of `n.toLocaleString({…})`;
54
+ * the latter creates a temporary `Intl.NumberFormat` on every call.
55
+ *
56
+ * @param ranges - Cell selection ranges
57
+ * @param rows - Visible rows
58
+ * @param columns - Visible column definitions
59
+ * @param withHeaders - Include a header row
60
+ */
61
+ private buildRangeData;
62
+ /**
63
+ * Builds clipboard data for Ctrl+Click multi-range selections.
64
+ *
65
+ * The output spans the bounding box of all ranges; cells that fall inside
66
+ * the bounding box but belong to no range get an empty string. Rows that
67
+ * have no selected cell in any range are skipped entirely so the clipboard
68
+ * stays compact.
69
+ *
70
+ * @param ranges - Two or more cell ranges (Ctrl+Click selections).
71
+ * @param rows - Visible rows.
72
+ * @param columns - Visible column definitions.
73
+ * @param withHeaders - Include a header row.
74
+ */
75
+ private buildMultiRangeData;
76
+ /**
77
+ * Compiles `ColDesc` objects for columns `[startCol, endCol]` inclusive.
78
+ * Called once per copy operation — never inside the row loop.
79
+ */
80
+ private buildDescriptors;
81
+ /**
82
+ * Splits tab-separated clipboard text into a 2D string array.
83
+ * Used only on paste (not on copy — the buffer is built directly).
84
+ */
85
+ private parseClipboardText;
86
+ private writeToClipboard;
87
+ private execCommandCopy;
88
+ }
89
+ //# sourceMappingURL=clipboard-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard-engine.d.ts","sourceRoot":"","sources":["../../../src/engines/clipboard/clipboard-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAqE1D,qBAAa,eAAe;IAC1B,8EAA8E;IAC9E,OAAO,CAAC,eAAe,CAAkB;IAEzC;;;;;;;;;;;;OAYG;IACH,qBAAqB,CACnB,MAAM,EAAE,SAAS,EAAE,EACnB,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,SAAS,EAAE,EACpB,WAAW,UAAQ,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC;IAMhB;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAS/C;;;;;;OAMG;IACH,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAajF;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,cAAc;IA+FtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,mBAAmB;IAyD3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,eAAe;CAUxB"}