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,355 @@
1
+ /**
2
+ * Accessible, virtually-scrolled custom dropdown editor for `dropdown` and
3
+ * `object` column types.
4
+ *
5
+ * The list panel is appended to `document.body` with `position: fixed` so it
6
+ * escapes the grid's `overflow: hidden` without requiring a portal container.
7
+ *
8
+ * Keyboard shortcuts:
9
+ * - ArrowDown / ArrowUp — move highlight one row
10
+ * - PageDown / PageUp — move highlight one page
11
+ * - Home / End — jump to first / last option
12
+ * - Enter — commit the highlighted option
13
+ * - Escape / Tab — cancel (close without change)
14
+ */
15
+ export class CustomDropdownEditor {
16
+ constructor(
17
+ /** The cell's `.pg-cell__inner` element — the trigger is mounted here. */
18
+ container,
19
+ /** The `.pg-cell` element — used to compute the panel's viewport position. */
20
+ cellEl, options, currentValue, callbacks) {
21
+ this.container = container;
22
+ this.cellEl = cellEl;
23
+ this.options = options;
24
+ this.currentValue = currentValue;
25
+ this.callbacks = callbacks;
26
+ this.instanceId = ++CustomDropdownEditor.instanceCounter;
27
+ this.destroyed = false;
28
+ // ── Event handlers ─────────────────────────────────────────────────────────
29
+ this.handleKeyDown = (e) => {
30
+ switch (e.key) {
31
+ case 'ArrowDown':
32
+ e.preventDefault();
33
+ this.navigate(1);
34
+ break;
35
+ case 'ArrowUp':
36
+ e.preventDefault();
37
+ this.navigate(-1);
38
+ break;
39
+ case 'PageDown':
40
+ e.preventDefault();
41
+ this.navigate(CustomDropdownEditor.MAX_VISIBLE);
42
+ break;
43
+ case 'PageUp':
44
+ e.preventDefault();
45
+ this.navigate(-CustomDropdownEditor.MAX_VISIBLE);
46
+ break;
47
+ case 'Home':
48
+ e.preventDefault();
49
+ this.setHighlight(0);
50
+ this.scrollToIndex(0, 'start');
51
+ break;
52
+ case 'End':
53
+ e.preventDefault();
54
+ this.setHighlight(this.options.length - 1);
55
+ this.scrollToIndex(this.options.length - 1, 'end');
56
+ break;
57
+ case 'Enter':
58
+ e.preventDefault();
59
+ this.selectIndex(this.highlightedIndex);
60
+ break;
61
+ case 'Escape':
62
+ e.preventDefault();
63
+ this.callbacks.onStop(false);
64
+ break;
65
+ case 'Tab':
66
+ e.preventDefault();
67
+ this.callbacks.onStop(true);
68
+ this.callbacks.onTab?.(e.shiftKey);
69
+ break;
70
+ }
71
+ e.stopPropagation();
72
+ };
73
+ this.handleScroll = () => {
74
+ this.renderVisibleItems(this.scrollEl.scrollTop);
75
+ };
76
+ this.handleOutsideClick = (e) => {
77
+ const target = e.target;
78
+ if (this.panelEl.contains(target) ||
79
+ this.cellEl.contains(target))
80
+ return;
81
+ this.callbacks.onStop(false);
82
+ };
83
+ this.handleResize = () => {
84
+ this.positionPanel();
85
+ };
86
+ /**
87
+ * Closes the dropdown immediately when any element outside the panel scrolls.
88
+ * Catches both vertical and horizontal grid body scroll via capture-phase listener.
89
+ * Scroll events originating inside the virtual-scroll list are excluded.
90
+ */
91
+ this.handleBodyScroll = (e) => {
92
+ if (this.destroyed)
93
+ return;
94
+ const target = e.target;
95
+ if (this.panelEl && this.panelEl.contains(target))
96
+ return;
97
+ this.callbacks.onStop(false);
98
+ };
99
+ this.selectedIndex = this.options.findIndex((o) => String(o.value) === String(currentValue ?? ''));
100
+ this.highlightedIndex = this.selectedIndex >= 0 ? this.selectedIndex : 0;
101
+ this.mount();
102
+ }
103
+ /**
104
+ * Tear down the editor: remove the panel from the DOM and detach all event
105
+ * listeners. Safe to call multiple times.
106
+ */
107
+ destroy() {
108
+ if (this.destroyed)
109
+ return;
110
+ this.destroyed = true;
111
+ this.scrollEl?.removeEventListener('keydown', this.handleKeyDown);
112
+ this.scrollEl?.removeEventListener('scroll', this.handleScroll);
113
+ document.removeEventListener('mousedown', this.handleOutsideClick);
114
+ window.removeEventListener('resize', this.handleResize);
115
+ document.removeEventListener('scroll', this.handleBodyScroll, true);
116
+ this.panelEl?.remove();
117
+ }
118
+ // ── Mount ──────────────────────────────────────────────────────────────────
119
+ mount() {
120
+ this.buildTrigger();
121
+ this.buildPanel();
122
+ this.positionPanel();
123
+ document.body.appendChild(this.panelEl);
124
+ // Animate in on next frame (so the initial opacity:0 is applied first)
125
+ requestAnimationFrame(() => {
126
+ if (!this.destroyed)
127
+ this.panelEl.classList.add('pg-dropdown-editor__panel--visible');
128
+ });
129
+ // Focus the scroll container for immediate keyboard control
130
+ setTimeout(() => {
131
+ if (this.destroyed)
132
+ return;
133
+ this.scrollEl.focus();
134
+ // Scroll to show the selected / first item
135
+ this.scrollToIndex(this.highlightedIndex, 'center');
136
+ }, 0);
137
+ // Defer outside-click listener to avoid immediate closure from the dblclick
138
+ setTimeout(() => {
139
+ if (this.destroyed)
140
+ return;
141
+ document.addEventListener('mousedown', this.handleOutsideClick);
142
+ }, 0);
143
+ window.addEventListener('resize', this.handleResize, { passive: true });
144
+ document.addEventListener('scroll', this.handleBodyScroll, { passive: true, capture: true });
145
+ }
146
+ // ── Trigger (inside the cell) ──────────────────────────────────────────────
147
+ buildTrigger() {
148
+ this.triggerEl = document.createElement('div');
149
+ this.triggerEl.className = 'pg-dropdown-editor__trigger';
150
+ this.triggerEl.setAttribute('aria-haspopup', 'listbox');
151
+ this.triggerEl.setAttribute('aria-expanded', 'true');
152
+ this.syncTrigger(this.options[this.selectedIndex]);
153
+ this.container.innerHTML = '';
154
+ this.container.appendChild(this.triggerEl);
155
+ }
156
+ syncTrigger(opt) {
157
+ this.triggerEl.innerHTML = '';
158
+ const icon = this.buildIcon(opt, 'pg-dropdown-editor__opt-icon');
159
+ if (icon)
160
+ this.triggerEl.appendChild(icon);
161
+ const label = document.createElement('span');
162
+ label.className = 'pg-dropdown-editor__trigger-label';
163
+ label.textContent = opt?.label ?? '—';
164
+ this.triggerEl.appendChild(label);
165
+ const arrow = document.createElement('span');
166
+ arrow.className = 'pg-dropdown-editor__arrow';
167
+ arrow.setAttribute('aria-hidden', 'true');
168
+ this.triggerEl.appendChild(arrow);
169
+ }
170
+ // ── Panel (appended to document.body) ─────────────────────────────────────
171
+ buildPanel() {
172
+ this.panelEl = document.createElement('div');
173
+ this.panelEl.className = 'pg-dropdown-editor__panel';
174
+ const visibleCount = Math.min(Math.max(this.options.length, 1), CustomDropdownEditor.MAX_VISIBLE);
175
+ const panelH = visibleCount * CustomDropdownEditor.ITEM_HEIGHT;
176
+ this.scrollEl = document.createElement('div');
177
+ this.scrollEl.className = 'pg-dropdown-editor__scroll';
178
+ this.scrollEl.setAttribute('role', 'listbox');
179
+ this.scrollEl.setAttribute('tabindex', '0');
180
+ this.scrollEl.setAttribute('aria-label', 'Select an option');
181
+ this.scrollEl.style.height = `${panelH}px`;
182
+ this.scrollEl.addEventListener('keydown', this.handleKeyDown);
183
+ this.scrollEl.addEventListener('scroll', this.handleScroll, { passive: true });
184
+ if (this.options.length === 0) {
185
+ const empty = document.createElement('div');
186
+ empty.className = 'pg-dropdown-editor__empty';
187
+ empty.textContent = 'No options available';
188
+ this.scrollEl.appendChild(empty);
189
+ }
190
+ else {
191
+ const spacer = document.createElement('div');
192
+ spacer.className = 'pg-dropdown-editor__spacer';
193
+ spacer.style.height = `${this.options.length * CustomDropdownEditor.ITEM_HEIGHT}px`;
194
+ this.itemsEl = document.createElement('div');
195
+ this.itemsEl.className = 'pg-dropdown-editor__items';
196
+ spacer.appendChild(this.itemsEl);
197
+ this.scrollEl.appendChild(spacer);
198
+ this.renderVisibleItems(0);
199
+ }
200
+ this.panelEl.appendChild(this.scrollEl);
201
+ }
202
+ // ── Virtual rendering ──────────────────────────────────────────────────────
203
+ renderVisibleItems(scrollTop) {
204
+ if (!this.itemsEl)
205
+ return;
206
+ const H = CustomDropdownEditor.ITEM_HEIGHT;
207
+ const BUF = CustomDropdownEditor.SCROLL_BUFFER;
208
+ const VIS = CustomDropdownEditor.MAX_VISIBLE;
209
+ const total = this.options.length;
210
+ const startIdx = Math.max(0, Math.floor(scrollTop / H) - BUF);
211
+ const endIdx = Math.min(total, startIdx + VIS + BUF * 2);
212
+ this.itemsEl.innerHTML = '';
213
+ this.itemsEl.style.transform = `translateY(${startIdx * H}px)`;
214
+ for (let i = startIdx; i < endIdx; i++) {
215
+ const opt = this.options[i];
216
+ const isSelected = i === this.selectedIndex;
217
+ const isHighlight = i === this.highlightedIndex;
218
+ const item = document.createElement('div');
219
+ item.className = 'pg-dropdown-editor__option';
220
+ item.id = this.optId(i);
221
+ item.setAttribute('role', 'option');
222
+ item.setAttribute('aria-selected', String(isSelected));
223
+ item.setAttribute('data-index', String(i));
224
+ if (isSelected)
225
+ item.classList.add('pg-dropdown-editor__option--selected');
226
+ if (isHighlight)
227
+ item.classList.add('pg-dropdown-editor__option--highlighted');
228
+ if (this.callbacks.renderOption) {
229
+ const rendered = this.callbacks.renderOption(opt, i, isSelected, isHighlight);
230
+ if (typeof rendered === 'string') {
231
+ item.innerHTML = rendered;
232
+ }
233
+ else {
234
+ item.appendChild(rendered);
235
+ }
236
+ }
237
+ else {
238
+ const icon = this.buildIcon(opt, 'pg-dropdown-editor__opt-icon');
239
+ if (icon)
240
+ item.appendChild(icon);
241
+ const label = document.createElement('span');
242
+ label.className = 'pg-dropdown-editor__opt-label';
243
+ label.textContent = opt.label;
244
+ item.appendChild(label);
245
+ if (isSelected) {
246
+ const check = document.createElement('span');
247
+ check.className = 'pg-dropdown-editor__opt-check';
248
+ check.setAttribute('aria-hidden', 'true');
249
+ item.appendChild(check);
250
+ }
251
+ }
252
+ // mousedown: prevent focus loss from scroll container, then select
253
+ item.addEventListener('mousedown', (e) => {
254
+ e.preventDefault();
255
+ this.selectIndex(i);
256
+ });
257
+ // Hover highlight
258
+ item.addEventListener('mouseenter', () => this.setHighlight(i));
259
+ this.itemsEl.appendChild(item);
260
+ }
261
+ // Keep ARIA active descendant in sync
262
+ this.scrollEl.setAttribute('aria-activedescendant', this.optId(this.highlightedIndex));
263
+ }
264
+ // ── Positioning ────────────────────────────────────────────────────────────
265
+ positionPanel() {
266
+ const cellRect = this.cellEl.getBoundingClientRect();
267
+ const H = CustomDropdownEditor.ITEM_HEIGHT;
268
+ const VIS = Math.min(Math.max(this.options.length, 1), CustomDropdownEditor.MAX_VISIBLE);
269
+ const panelH = VIS * H;
270
+ const panelW = cellRect.width;
271
+ const GAP = 4;
272
+ let top = cellRect.bottom + GAP;
273
+ let flipsAbove = false;
274
+ if (window.innerHeight - cellRect.bottom < panelH + GAP && cellRect.top > panelH + GAP) {
275
+ top = cellRect.top - panelH - GAP;
276
+ flipsAbove = true;
277
+ }
278
+ const left = Math.max(GAP, Math.min(cellRect.left, window.innerWidth - panelW - GAP));
279
+ this.panelEl.style.top = `${Math.max(GAP, top)}px`;
280
+ this.panelEl.style.left = `${left}px`;
281
+ this.panelEl.style.width = `${panelW}px`;
282
+ this.panelEl.classList.toggle('pg-dropdown-editor__panel--above', flipsAbove);
283
+ }
284
+ // ── Navigation helpers ─────────────────────────────────────────────────────
285
+ navigate(delta) {
286
+ const newIdx = Math.max(0, Math.min(this.options.length - 1, this.highlightedIndex + delta));
287
+ this.setHighlight(newIdx);
288
+ this.scrollToIndex(newIdx, delta > 0 ? 'end' : 'start');
289
+ }
290
+ setHighlight(index) {
291
+ if (this.highlightedIndex === index)
292
+ return;
293
+ // Remove CSS class from the previously highlighted item without a full
294
+ // re-render — re-rendering would detach the item under the cursor, causing
295
+ // subsequent mousedown events to fire on a detached element and miss.
296
+ const prevEl = this.itemsEl?.querySelector(`[data-index="${this.highlightedIndex}"]`);
297
+ prevEl?.classList.remove('pg-dropdown-editor__option--highlighted');
298
+ this.highlightedIndex = index;
299
+ const nextEl = this.itemsEl?.querySelector(`[data-index="${index}"]`);
300
+ nextEl?.classList.add('pg-dropdown-editor__option--highlighted');
301
+ this.scrollEl?.setAttribute('aria-activedescendant', this.optId(index));
302
+ }
303
+ scrollToIndex(index, align) {
304
+ const H = CustomDropdownEditor.ITEM_HEIGHT;
305
+ const itemTop = index * H;
306
+ const itemBot = itemTop + H;
307
+ const curTop = this.scrollEl.scrollTop;
308
+ const height = this.scrollEl.clientHeight;
309
+ if (align === 'center') {
310
+ this.scrollEl.scrollTop = Math.max(0, itemTop - height / 2 + H / 2);
311
+ }
312
+ else if (itemTop < curTop) {
313
+ this.scrollEl.scrollTop = itemTop;
314
+ }
315
+ else if (itemBot > curTop + height) {
316
+ this.scrollEl.scrollTop = itemBot - height;
317
+ }
318
+ }
319
+ selectIndex(index) {
320
+ if (index < 0 || index >= this.options.length)
321
+ return;
322
+ this.callbacks.onSelect(this.options[index]);
323
+ this.callbacks.onStop(true);
324
+ }
325
+ // ── Utility ────────────────────────────────────────────────────────────────
326
+ buildIcon(opt, cls) {
327
+ if (!opt?.image && !opt?.icon)
328
+ return null;
329
+ const wrapper = document.createElement('span');
330
+ wrapper.className = cls;
331
+ if (opt.image) {
332
+ const img = document.createElement('img');
333
+ img.src = opt.image;
334
+ img.alt = '';
335
+ img.width = 20;
336
+ img.height = 20;
337
+ wrapper.appendChild(img);
338
+ }
339
+ else if (opt.icon) {
340
+ wrapper.innerHTML = opt.icon;
341
+ }
342
+ return wrapper;
343
+ }
344
+ optId(index) {
345
+ return `pg-dd-${this.instanceId}-${index}`;
346
+ }
347
+ }
348
+ /** Height of each option row in pixels. Keep in sync with CSS. */
349
+ CustomDropdownEditor.ITEM_HEIGHT = 34;
350
+ /** Maximum number of rows shown before the list scrolls. */
351
+ CustomDropdownEditor.MAX_VISIBLE = 8;
352
+ /** Extra rows rendered above/below the visible window for smooth scrolling. */
353
+ CustomDropdownEditor.SCROLL_BUFFER = 3;
354
+ CustomDropdownEditor.instanceCounter = 0;
355
+ //# sourceMappingURL=custom-dropdown-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-dropdown-editor.js","sourceRoot":"","sources":["../../../src/engines/editing/custom-dropdown-editor.ts"],"names":[],"mappings":"AA8BA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,oBAAoB;IAoB/B;IACE,0EAA0E;IACzD,SAAsB;IACvC,8EAA8E;IAC7D,MAAmB,EACnB,OAA+B,EAC/B,YAAqB,EACrB,SAAkC;QALlC,cAAS,GAAT,SAAS,CAAa;QAEtB,WAAM,GAAN,MAAM,CAAa;QACnB,YAAO,GAAP,OAAO,CAAwB;QAC/B,iBAAY,GAAZ,YAAY,CAAS;QACrB,cAAS,GAAT,SAAS,CAAyB;QAlBpC,eAAU,GAAG,EAAE,oBAAoB,CAAC,eAAe,CAAC;QAS7D,cAAS,GAAG,KAAK,CAAC;QA0O1B,8EAA8E;QAEtE,kBAAa,GAAG,CAAC,CAAgB,EAAQ,EAAE;YACjD,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,WAAW;oBACd,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACjB,MAAM;gBACR,KAAK,SAAS;oBACZ,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClB,MAAM;gBACR,KAAK,UAAU;oBACb,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,QAAQ;oBACX,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;oBACjD,MAAM;gBACR,KAAK,MAAM;oBACT,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBAC/B,MAAM;gBACR,KAAK,KAAK;oBACR,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;oBACnD,MAAM;gBACR,KAAK,OAAO;oBACV,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACxC,MAAM;gBACR,KAAK,QAAQ;oBACX,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,KAAK;oBACR,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM;YACV,CAAC;YACD,CAAC,CAAC,eAAe,EAAE,CAAC;QACtB,CAAC,CAAC;QAEM,iBAAY,GAAG,GAAS,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAAC,CAAa,EAAQ,EAAE;YACnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc,CAAC;YAChC,IACE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5B,OAAO;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEM,iBAAY,GAAG,GAAS,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF;;;;WAIG;QACK,qBAAgB,GAAG,CAAC,CAAQ,EAAQ,EAAE;YAC5C,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc,CAAC;YAChC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;QAzSA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CACtD,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChE,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,8EAA8E;IAEtE,KAAK;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAExC,uEAAuE;QACvE,qBAAqB,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QAEH,4DAA4D;QAC5D,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,2CAA2C;YAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,4EAA4E;QAC5E,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC3B,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,8EAA8E;IAEtE,YAAY;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,6BAA6B,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAEO,WAAW,CAAC,GAA0B;QAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;QACjE,IAAI,IAAI;YAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,SAAS,GAAG,mCAAmC,CAAC;QACtD,KAAK,CAAC,WAAW,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,SAAS,GAAG,2BAA2B,CAAC;QAC9C,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,6EAA6E;IAErE,UAAU;QAChB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,2BAA2B,CAAC;QAErD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAClG,MAAM,MAAM,GAAG,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;QAE/D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,4BAA4B,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;QAE3C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,CAAC,SAAS,GAAG,2BAA2B,CAAC;YAC9C,KAAK,CAAC,WAAW,GAAG,sBAAsB,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,SAAS,GAAG,4BAA4B,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,WAAW,IAAI,CAAC;YAEpF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,2BAA2B,CAAC;YACrD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAElC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,8EAA8E;IAEtE,kBAAkB,CAAC,SAAiB;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,CAAC,GAAO,oBAAoB,CAAC,WAAW,CAAC;QAC/C,MAAM,GAAG,GAAK,oBAAoB,CAAC,aAAa,CAAC;QACjD,MAAM,GAAG,GAAK,oBAAoB,CAAC,WAAW,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAK,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,cAAc,QAAQ,GAAG,CAAC,KAAK,CAAC;QAE/D,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAW,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,UAAU,GAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC;YAC7C,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC;YAEhD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,4BAA4B,CAAC;YAC9C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3C,IAAI,UAAU;gBAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YAC5E,IAAI,WAAW;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YAE/E,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC9E,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;gBACjE,IAAI,IAAI;oBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAEjC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC7C,KAAK,CAAC,SAAS,GAAG,+BAA+B,CAAC;gBAClD,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAExB,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAC7C,KAAK,CAAC,SAAS,GAAG,+BAA+B,CAAC;oBAClD,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;oBAC1C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,mEAAmE;YACnE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;gBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,kBAAkB;YAClB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,8EAA8E;IAEtE,aAAa;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACrD,MAAM,CAAC,GAAU,oBAAoB,CAAC,WAAW,CAAC;QAClD,MAAM,GAAG,GAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAK,GAAG,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAK,QAAQ,CAAC,KAAK,CAAC;QAChC,MAAM,GAAG,GAAQ,CAAC,CAAC;QAEnB,IAAI,GAAG,GAAU,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;QACvC,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,IAAI,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;YACvF,GAAG,GAAU,QAAQ,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC;YACzC,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAK,GAAG,IAAI,IAAI,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAI,GAAG,MAAM,IAAI,CAAC;QAE1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,kCAAkC,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC;IA8ED,8EAA8E;IAEtE,QAAQ,CAAC,KAAa;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEO,YAAY,CAAC,KAAa;QAChC,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK;YAAE,OAAO;QAE5C,uEAAuE;QACvE,2EAA2E;QAC3E,sEAAsE;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CACxC,gBAAgB,IAAI,CAAC,gBAAgB,IAAI,CAC1C,CAAC;QACF,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;QAEpE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CACxC,gBAAgB,KAAK,IAAI,CAC1B,CAAC;QACF,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAEjE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IAEO,aAAa,CAAC,KAAa,EAAE,KAAiC;QACpE,MAAM,CAAC,GAAS,oBAAoB,CAAC,WAAW,CAAC;QACjD,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxC,MAAM,MAAM,GAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAE3C,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QACtD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,8EAA8E;IAEtE,SAAS,CAAC,GAAqC,EAAE,GAAW;QAClE,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,IAAI;YAAE,OAAO,IAAI,CAAC;QAE3C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;QAExB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,GAAG,GAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,GAAG,CAAC,GAAG,GAAM,GAAG,CAAC,KAAK,CAAC;YACvB,GAAG,CAAC,GAAG,GAAM,EAAE,CAAC;YAChB,GAAG,CAAC,KAAK,GAAI,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;QAC/B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,KAAa;QACzB,OAAO,SAAS,IAAI,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC;IAC7C,CAAC;;AAlZD,kEAAkE;AAClD,gCAAW,GAAK,EAAE,AAAP,CAAQ;AACnC,4DAA4D;AAC5C,gCAAW,GAAK,CAAC,AAAN,CAAO;AAClC,+EAA+E;AAC/D,kCAAa,GAAG,CAAC,AAAJ,CAAK;AAEnB,oCAAe,GAAG,CAAC,AAAJ,CAAK"}
@@ -0,0 +1,12 @@
1
+ import type { ColumnDef } from '../../types/column.types';
2
+ export declare function parseValue(raw: unknown, col: ColumnDef): unknown;
3
+ export declare function formatValue(value: unknown, col: ColumnDef, options?: FormatOptions): string;
4
+ export declare function validateValue(value: unknown, col: ColumnDef): string | null;
5
+ export interface FormatOptions {
6
+ locale?: string;
7
+ dateFormat?: string;
8
+ timeZone?: string;
9
+ currencySymbol?: string;
10
+ currencyFormat?: string;
11
+ }
12
+ //# sourceMappingURL=value-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-parser.d.ts","sourceRoot":"","sources":["../../../src/engines/editing/value-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAyBhE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAiD3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CA4B3E;AAkBD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,125 @@
1
+ export function parseValue(raw, col) {
2
+ if (raw === null || raw === undefined || raw === '') {
3
+ return col.required ? null : null;
4
+ }
5
+ switch (col.type) {
6
+ case 'number':
7
+ case 'currency': {
8
+ const n = Number(raw);
9
+ return isNaN(n) ? null : n;
10
+ }
11
+ case 'boolean':
12
+ if (typeof raw === 'boolean')
13
+ return raw;
14
+ if (typeof raw === 'string')
15
+ return raw.toLowerCase() === 'true' || raw === '1';
16
+ return Boolean(raw);
17
+ case 'date':
18
+ case 'time': {
19
+ const d = new Date(raw);
20
+ return isNaN(d.getTime()) ? null : d.toISOString();
21
+ }
22
+ case 'array':
23
+ return Array.isArray(raw) ? raw : [raw];
24
+ default:
25
+ return String(raw);
26
+ }
27
+ }
28
+ export function formatValue(value, col, options) {
29
+ if (value === null || value === undefined)
30
+ return '';
31
+ switch (col.type) {
32
+ case 'number': {
33
+ const n = Number(value);
34
+ if (isNaN(n))
35
+ return String(value);
36
+ const locale = options?.locale ?? 'en-US';
37
+ return n.toLocaleString(locale, {
38
+ minimumFractionDigits: 0,
39
+ maximumFractionDigits: 2,
40
+ });
41
+ }
42
+ case 'currency': {
43
+ const n = Number(value);
44
+ if (isNaN(n))
45
+ return String(value);
46
+ const symbol = options?.currencySymbol ?? '$';
47
+ return `${symbol}${n.toLocaleString(options?.locale ?? 'en-US', {
48
+ minimumFractionDigits: 2,
49
+ maximumFractionDigits: 2,
50
+ })}`;
51
+ }
52
+ case 'date': {
53
+ const d = new Date(value);
54
+ if (isNaN(d.getTime()))
55
+ return String(value);
56
+ return formatDate(d, options?.dateFormat ?? 'dd/MM/yyyy', options?.timeZone);
57
+ }
58
+ case 'time': {
59
+ const d = new Date(value);
60
+ if (isNaN(d.getTime()))
61
+ return String(value);
62
+ return d.toLocaleTimeString(options?.locale ?? 'en-US', {
63
+ hour: '2-digit',
64
+ minute: '2-digit',
65
+ timeZone: options?.timeZone,
66
+ });
67
+ }
68
+ case 'boolean':
69
+ return value ? 'Yes' : 'No';
70
+ case 'array':
71
+ return Array.isArray(value) ? value.join(', ') : String(value);
72
+ case 'dropdown': {
73
+ const opt = col.dropdownOptions?.find((o) => String(o.value) === String(value));
74
+ return opt ? opt.label : String(value);
75
+ }
76
+ default: {
77
+ const str = String(value);
78
+ return str.charAt(0).toUpperCase() + str.slice(1);
79
+ }
80
+ }
81
+ }
82
+ export function validateValue(value, col) {
83
+ if (col.required && (value === null || value === undefined || value === '')) {
84
+ return `${col.header} is required`;
85
+ }
86
+ if (col.type === 'number' || col.type === 'currency') {
87
+ const n = Number(value);
88
+ if (value !== null && value !== undefined && value !== '' && isNaN(n)) {
89
+ return `${col.header} must be a number`;
90
+ }
91
+ if (!isNaN(n)) {
92
+ if (col.min !== undefined && col.min !== null && n < col.min) {
93
+ return `${col.header} must be at least ${col.min}`;
94
+ }
95
+ if (col.max !== undefined && col.max !== null && n > col.max) {
96
+ return `${col.header} must be at most ${col.max}`;
97
+ }
98
+ }
99
+ }
100
+ if (col.type === 'email' && value) {
101
+ const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
102
+ if (!emailRe.test(String(value))) {
103
+ return `${col.header} must be a valid email address`;
104
+ }
105
+ }
106
+ if (col.validatorFn) {
107
+ return col.validatorFn(value);
108
+ }
109
+ return null;
110
+ }
111
+ function formatDate(date, format, timeZone) {
112
+ const opts = {};
113
+ if (timeZone)
114
+ opts.timeZone = timeZone;
115
+ const pad = (n) => String(n).padStart(2, '0');
116
+ const d = new Date(date.toLocaleString('en-US', opts));
117
+ return format
118
+ .replace('yyyy', String(d.getFullYear()))
119
+ .replace('MM', pad(d.getMonth() + 1))
120
+ .replace('dd', pad(d.getDate()))
121
+ .replace('HH', pad(d.getHours()))
122
+ .replace('mm', pad(d.getMinutes()))
123
+ .replace('ss', pad(d.getSeconds()));
124
+ }
125
+ //# sourceMappingURL=value-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-parser.js","sourceRoot":"","sources":["../../../src/engines/editing/value-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { RowNode } from '../../types/row.types';
2
+ import type { ColumnDef } from '../../types/column.types';
3
+ import type { ExportConfig } from '../../types/grid.types';
4
+ import type { EventBus } from '../../event-bus/event-bus';
5
+ export declare class ExportEngine {
6
+ private eventBus;
7
+ constructor(eventBus: EventBus);
8
+ exportToCsv(rows: RowNode[], columns: ColumnDef[], config?: Partial<ExportConfig>): void;
9
+ exportToXlsx(rows: RowNode[], columns: ColumnDef[], config?: Partial<ExportConfig>): void;
10
+ private getExportColumns;
11
+ private escapeCsvCell;
12
+ private escapeXml;
13
+ private downloadFile;
14
+ private resolveValue;
15
+ }
16
+ //# sourceMappingURL=export-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-engine.d.ts","sourceRoot":"","sources":["../../../src/engines/export/export-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI1D,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEtC,WAAW,CACT,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,SAAS,EAAE,EACpB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GACjC,IAAI;IAyBP,YAAY,CACV,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,SAAS,EAAE,EACpB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GACjC,IAAI;IAmCP,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,YAAY;CASrB"}
@@ -0,0 +1,99 @@
1
+ import { GridEventType } from '../../types/event.types';
2
+ import { formatValue } from '../editing/value-parser';
3
+ export class ExportEngine {
4
+ constructor(eventBus) {
5
+ this.eventBus = eventBus;
6
+ }
7
+ exportToCsv(rows, columns, config = {}) {
8
+ const fileName = (config.fileName ?? 'export') + '.csv';
9
+ const exportCols = this.getExportColumns(columns, config);
10
+ const dataRows = rows.filter((r) => r.type === 'data');
11
+ this.eventBus.emit(GridEventType.EXPORT_START, { format: 'csv', fileName, rowCount: dataRows.length });
12
+ const headerRow = exportCols.map((c) => this.escapeCsvCell(c.header)).join(',');
13
+ const bodyRows = dataRows.map((row) => exportCols
14
+ .map((col) => {
15
+ const raw = this.resolveValue(row.data, col.field);
16
+ const formatted = config.processCellValue
17
+ ? config.processCellValue({ value: raw, colDef: col })
18
+ : formatValue(raw, col);
19
+ return this.escapeCsvCell(formatted);
20
+ })
21
+ .join(','));
22
+ const csv = [headerRow, ...bodyRows].join('\r\n');
23
+ this.downloadFile(csv, fileName, 'text/csv;charset=utf-8;');
24
+ this.eventBus.emit(GridEventType.EXPORT_COMPLETE, { format: 'csv', fileName, rowCount: dataRows.length });
25
+ }
26
+ exportToXlsx(rows, columns, config = {}) {
27
+ const fileName = (config.fileName ?? 'export') + '.xlsx';
28
+ const exportCols = this.getExportColumns(columns, config);
29
+ const dataRows = rows.filter((r) => r.type === 'data');
30
+ this.eventBus.emit(GridEventType.EXPORT_START, { format: 'xlsx', fileName, rowCount: dataRows.length });
31
+ const xmlRows = [];
32
+ const headers = exportCols.map((c) => `<Cell><Data ss:Type="String">${this.escapeXml(c.header)}</Data></Cell>`).join('');
33
+ xmlRows.push(`<Row>${headers}</Row>`);
34
+ for (const row of dataRows) {
35
+ const cells = exportCols.map((col) => {
36
+ const raw = this.resolveValue(row.data, col.field);
37
+ const formatted = config.processCellValue
38
+ ? config.processCellValue({ value: raw, colDef: col })
39
+ : formatValue(raw, col);
40
+ const type = col.type === 'number' || col.type === 'currency' ? 'Number' : 'String';
41
+ return `<Cell><Data ss:Type="${type}">${this.escapeXml(formatted)}</Data></Cell>`;
42
+ });
43
+ xmlRows.push(`<Row>${cells.join('')}</Row>`);
44
+ }
45
+ const xmlContent = `<?xml version="1.0"?>
46
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
47
+ xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
48
+ <Worksheet ss:Name="Sheet1">
49
+ <Table>${xmlRows.join('')}</Table>
50
+ </Worksheet>
51
+ </Workbook>`;
52
+ this.downloadFile(xmlContent, fileName, 'application/vnd.ms-excel');
53
+ this.eventBus.emit(GridEventType.EXPORT_COMPLETE, { format: 'xlsx', fileName, rowCount: dataRows.length });
54
+ }
55
+ getExportColumns(columns, config) {
56
+ return columns.filter((col) => {
57
+ if (!config.includeHiddenColumns && col.visible === false)
58
+ return false;
59
+ return true;
60
+ });
61
+ }
62
+ escapeCsvCell(value) {
63
+ if (value.includes(',') || value.includes('"') || value.includes('\n')) {
64
+ return `"${value.replace(/"/g, '""')}"`;
65
+ }
66
+ return value;
67
+ }
68
+ escapeXml(value) {
69
+ return value
70
+ .replace(/&/g, '&amp;')
71
+ .replace(/</g, '&lt;')
72
+ .replace(/>/g, '&gt;')
73
+ .replace(/"/g, '&quot;')
74
+ .replace(/'/g, '&apos;');
75
+ }
76
+ downloadFile(content, fileName, mimeType) {
77
+ const blob = new Blob([content], { type: mimeType });
78
+ const url = URL.createObjectURL(blob);
79
+ const link = document.createElement('a');
80
+ link.href = url;
81
+ link.download = fileName;
82
+ link.style.display = 'none';
83
+ document.body.appendChild(link);
84
+ link.click();
85
+ document.body.removeChild(link);
86
+ URL.revokeObjectURL(url);
87
+ }
88
+ resolveValue(data, path) {
89
+ const parts = path.split('.');
90
+ let current = data;
91
+ for (const part of parts) {
92
+ if (current == null)
93
+ return undefined;
94
+ current = current[part];
95
+ }
96
+ return current;
97
+ }
98
+ }
99
+ //# sourceMappingURL=export-engine.js.map