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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/photon-ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ParsedIntentMatch } from './photon-ai.types';
2
+ import type { PhotonAICommandRegistry } from './photon-ai-registry';
3
+ /**
4
+ * Matches normalized input tokens against every intent in a
5
+ * {@link PhotonAICommandRegistry} and returns the single best match.
6
+ *
7
+ * Matching is a "bag of words" containment check (see
8
+ * `IntentDefinition.aliases`) rather than exact-phrase or positional
9
+ * matching, so a column name or other entity words sitting between an
10
+ * intent's keywords (e.g. "pin **salary column** left") never breaks
11
+ * detection. When multiple intents match, the one whose winning alias has
12
+ * the most words wins — the more specific phrase is preferred (this is what
13
+ * lets `"show name column"` resolve to *show column* rather than the
14
+ * shorter, also-present `"show"` fragment of *filter*'s `"show only"` alias,
15
+ * since that alias isn't fully covered here at all).
16
+ */
17
+ export declare class IntentParser {
18
+ parse(tokens: string[], registry: PhotonAICommandRegistry): ParsedIntentMatch | null;
19
+ }
20
+ //# sourceMappingURL=intent-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-parser.d.ts","sourceRoot":"","sources":["../../src/photon-ai/intent-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAyBpE;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,uBAAuB,GAAG,iBAAiB,GAAG,IAAI;CAmBrF"}
@@ -0,0 +1,52 @@
1
+ function matchAlias(alias, tokens) {
2
+ const tokenSet = new Set(tokens);
3
+ const covered = alias.every((word) => tokenSet.has(word));
4
+ return { covered, words: alias };
5
+ }
6
+ /** The best-covered alias for one intent, or `null` if none of its phrases fully matched. */
7
+ function bestAliasFor(intent, tokens) {
8
+ let best = null;
9
+ for (const alias of intent.aliases) {
10
+ const match = matchAlias(alias, tokens);
11
+ if (!match.covered)
12
+ continue;
13
+ if (!best || alias.length > best.length)
14
+ best = alias;
15
+ }
16
+ return best;
17
+ }
18
+ /**
19
+ * Matches normalized input tokens against every intent in a
20
+ * {@link PhotonAICommandRegistry} and returns the single best match.
21
+ *
22
+ * Matching is a "bag of words" containment check (see
23
+ * `IntentDefinition.aliases`) rather than exact-phrase or positional
24
+ * matching, so a column name or other entity words sitting between an
25
+ * intent's keywords (e.g. "pin **salary column** left") never breaks
26
+ * detection. When multiple intents match, the one whose winning alias has
27
+ * the most words wins — the more specific phrase is preferred (this is what
28
+ * lets `"show name column"` resolve to *show column* rather than the
29
+ * shorter, also-present `"show"` fragment of *filter*'s `"show only"` alias,
30
+ * since that alias isn't fully covered here at all).
31
+ */
32
+ export class IntentParser {
33
+ parse(tokens, registry) {
34
+ let winner = null;
35
+ let winningAlias = null;
36
+ for (const intent of registry.getAll()) {
37
+ const alias = bestAliasFor(intent, tokens);
38
+ if (!alias)
39
+ continue;
40
+ if (!winningAlias || alias.length > winningAlias.length) {
41
+ winner = intent;
42
+ winningAlias = alias;
43
+ }
44
+ }
45
+ if (!winner || !winningAlias)
46
+ return null;
47
+ const usedWords = new Set(winningAlias);
48
+ const remainingTokens = tokens.filter((t) => !usedWords.has(t));
49
+ return { intent: winner, remainingTokens };
50
+ }
51
+ }
52
+ //# sourceMappingURL=intent-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-parser.js","sourceRoot":"","sources":["../../src/photon-ai/intent-parser.ts"],"names":[],"mappings":"AASA,SAAS,UAAU,CAAC,KAAwB,EAAE,MAAyB;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,6FAA6F;AAC7F,SAAS,YAAY,CAAC,MAAwB,EAAE,MAAyB;IACvE,IAAI,IAAI,GAA6B,IAAI,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS;QAC7B,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YAAE,IAAI,GAAG,KAAK,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,MAAgB,EAAE,QAAiC;QACvD,IAAI,MAAM,GAA4B,IAAI,CAAC;QAC3C,IAAI,YAAY,GAA6B,IAAI,CAAC;QAElD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxD,MAAM,GAAG,MAAM,CAAC;gBAChB,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ import type { PhotonCommand } from './photon-ai.types';
2
+ /**
3
+ * Persistent "learning" layer for Photon AI. Every grid feature (sort,
4
+ * filter, pin, …) already resolves entities from scratch on every prompt;
5
+ * this store lets two kinds of resolution get *remembered* across page
6
+ * loads so the same or a similar prompt resolves instantly next time,
7
+ * without re-running fuzzy matching:
8
+ *
9
+ * - **Column aliases** — once a free-text phrase (e.g. "emp name") is
10
+ * fuzzily resolved to a real column (e.g. `colId: "name"`), that mapping
11
+ * is remembered so the next lookup is an exact hit rather than a fuzzy
12
+ * guess.
13
+ * - **Phrase → commands** — once a whole clause (e.g. "show active items")
14
+ * successfully resolves to a set of commands, the exact clause text is
15
+ * remembered so retyping it later skips parsing entirely.
16
+ *
17
+ * Backed by `localStorage`, namespaced per grid instance (by its column
18
+ * signature) so unrelated grids on the same page/origin never share learned
19
+ * state. Falls back to an in-memory-only store when `localStorage` is
20
+ * unavailable (SSR, privacy mode) or throws — Photon AI must never fail a
21
+ * command because persistence isn't available.
22
+ */
23
+ export declare class PhotonAIMemoryStore {
24
+ private readonly storageKey;
25
+ private snapshot;
26
+ constructor(namespace: string);
27
+ /** The colId previously learned for this exact free-text phrase, or `null`. */
28
+ getColumnAlias(phrase: string): string | null;
29
+ /** Remembers that `phrase` refers to `colId`, persisting immediately. */
30
+ learnColumnAlias(phrase: string, colId: string): void;
31
+ /** The commands previously learned for this exact normalized clause, or `null`. */
32
+ getPhraseCommands(clause: string): PhotonCommand[] | null;
33
+ /** Remembers that submitting `clause` should run `commands`, persisting immediately. */
34
+ learnPhrase(clause: string, commands: readonly PhotonCommand[]): void;
35
+ /** Clears every learned column alias and phrase for this namespace. */
36
+ clear(): void;
37
+ private load;
38
+ private persist;
39
+ }
40
+ /** Builds a stable namespace for a grid's column set, so learned memory doesn't leak between differently-shaped grids sharing an origin. */
41
+ export declare function columnSignature(colIds: readonly string[]): string;
42
+ //# sourceMappingURL=photon-ai-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-ai-memory.d.ts","sourceRoot":"","sources":["../../src/photon-ai/photon-ai-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAavD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,SAAS,EAAE,MAAM;IAK7B,+EAA+E;IAC/E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C,yEAAyE;IACzE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMrD,mFAAmF;IACnF,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,IAAI;IAIzD,wFAAwF;IACxF,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IAMrE,uEAAuE;IACvE,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,OAAO;CAQhB;AAED,4IAA4I;AAC5I,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,86 @@
1
+ function emptySnapshot() {
2
+ return { columnAliases: {}, phrases: {} };
3
+ }
4
+ /**
5
+ * Persistent "learning" layer for Photon AI. Every grid feature (sort,
6
+ * filter, pin, …) already resolves entities from scratch on every prompt;
7
+ * this store lets two kinds of resolution get *remembered* across page
8
+ * loads so the same or a similar prompt resolves instantly next time,
9
+ * without re-running fuzzy matching:
10
+ *
11
+ * - **Column aliases** — once a free-text phrase (e.g. "emp name") is
12
+ * fuzzily resolved to a real column (e.g. `colId: "name"`), that mapping
13
+ * is remembered so the next lookup is an exact hit rather than a fuzzy
14
+ * guess.
15
+ * - **Phrase → commands** — once a whole clause (e.g. "show active items")
16
+ * successfully resolves to a set of commands, the exact clause text is
17
+ * remembered so retyping it later skips parsing entirely.
18
+ *
19
+ * Backed by `localStorage`, namespaced per grid instance (by its column
20
+ * signature) so unrelated grids on the same page/origin never share learned
21
+ * state. Falls back to an in-memory-only store when `localStorage` is
22
+ * unavailable (SSR, privacy mode) or throws — Photon AI must never fail a
23
+ * command because persistence isn't available.
24
+ */
25
+ export class PhotonAIMemoryStore {
26
+ constructor(namespace) {
27
+ this.storageKey = `photon-ai:memory:${namespace}`;
28
+ this.snapshot = this.load();
29
+ }
30
+ /** The colId previously learned for this exact free-text phrase, or `null`. */
31
+ getColumnAlias(phrase) {
32
+ return this.snapshot.columnAliases[phrase] ?? null;
33
+ }
34
+ /** Remembers that `phrase` refers to `colId`, persisting immediately. */
35
+ learnColumnAlias(phrase, colId) {
36
+ if (!phrase || this.snapshot.columnAliases[phrase] === colId)
37
+ return;
38
+ this.snapshot.columnAliases[phrase] = colId;
39
+ this.persist();
40
+ }
41
+ /** The commands previously learned for this exact normalized clause, or `null`. */
42
+ getPhraseCommands(clause) {
43
+ return this.snapshot.phrases[clause] ?? null;
44
+ }
45
+ /** Remembers that submitting `clause` should run `commands`, persisting immediately. */
46
+ learnPhrase(clause, commands) {
47
+ if (!clause || commands.length === 0)
48
+ return;
49
+ this.snapshot.phrases[clause] = [...commands];
50
+ this.persist();
51
+ }
52
+ /** Clears every learned column alias and phrase for this namespace. */
53
+ clear() {
54
+ this.snapshot = emptySnapshot();
55
+ this.persist();
56
+ }
57
+ load() {
58
+ try {
59
+ if (typeof localStorage === 'undefined')
60
+ return emptySnapshot();
61
+ const raw = localStorage.getItem(this.storageKey);
62
+ if (!raw)
63
+ return emptySnapshot();
64
+ const parsed = JSON.parse(raw);
65
+ return { columnAliases: parsed.columnAliases ?? {}, phrases: parsed.phrases ?? {} };
66
+ }
67
+ catch {
68
+ return emptySnapshot();
69
+ }
70
+ }
71
+ persist() {
72
+ try {
73
+ if (typeof localStorage === 'undefined')
74
+ return;
75
+ localStorage.setItem(this.storageKey, JSON.stringify(this.snapshot));
76
+ }
77
+ catch {
78
+ // Storage unavailable/full/blocked — learning silently degrades to in-memory-only for this session.
79
+ }
80
+ }
81
+ }
82
+ /** Builds a stable namespace for a grid's column set, so learned memory doesn't leak between differently-shaped grids sharing an origin. */
83
+ export function columnSignature(colIds) {
84
+ return [...colIds].sort().join('|');
85
+ }
86
+ //# sourceMappingURL=photon-ai-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-ai-memory.js","sourceRoot":"","sources":["../../src/photon-ai/photon-ai-memory.ts"],"names":[],"mappings":"AASA,SAAS,aAAa;IACpB,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,mBAAmB;IAI9B,YAAY,SAAiB;QAC3B,IAAI,CAAC,UAAU,GAAG,oBAAoB,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,+EAA+E;IAC/E,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACrD,CAAC;IAED,yEAAyE;IACzE,gBAAgB,CAAC,MAAc,EAAE,KAAa;QAC5C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,KAAK;YAAE,OAAO;QACrE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,mFAAmF;IACnF,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,wFAAwF;IACxF,WAAW,CAAC,MAAc,EAAE,QAAkC;QAC5D,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,uEAAuE;IACvE,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,IAAI;QACV,IAAI,CAAC;YACH,IAAI,OAAO,YAAY,KAAK,WAAW;gBAAE,OAAO,aAAa,EAAE,CAAC;YAChE,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,GAAG;gBAAE,OAAO,aAAa,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoC,CAAC;YAClE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,aAAa,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,OAAO;QACb,IAAI,CAAC;YACH,IAAI,OAAO,YAAY,KAAK,WAAW;gBAAE,OAAO;YAChD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,oGAAoG;QACtG,CAAC;IACH,CAAC;CACF;AAED,4IAA4I;AAC5I,MAAM,UAAU,eAAe,CAAC,MAAyB;IACvD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { IconRenderer } from '../icons/icon-renderer';
2
+ import type { PhotonAIConfig } from '../types/photon-ai.types';
3
+ import type { PhotonCommandResult } from './photon-ai.types';
4
+ /**
5
+ * The "Photon AI" panel — a docked sidebar sliding in from the right edge of
6
+ * the grid's own body viewport, where users type natural-language commands
7
+ * and questions for {@link PhotonAIService} to interpret, with a scrollable
8
+ * conversation history (not just a one-line status) so multi-turn use
9
+ * (a command, then a follow-up question, then another command) reads like a
10
+ * chat rather than a disappearing toast.
11
+ *
12
+ * Mounted as a sibling of the pinned-column panels (same pattern as
13
+ * `DetailRowRenderer`/the sticky layer — see `GridRenderer.buildLayout`), so
14
+ * it floats independently of virtualization and never affects row layout.
15
+ * It deliberately stays *inside* the grid's own body box (never
16
+ * `document.body`) — `bodyWrapEl`'s `overflow: hidden` is what keeps the
17
+ * whole widget contained to the grid the way an embeddable component should
18
+ * be, rather than taking over the host page. Unlike a modal, it never
19
+ * blocks interaction with the grid behind it — there is no backdrop.
20
+ *
21
+ * Pure UI: it knows nothing about intents, columns, or the `GridApi` — it
22
+ * only calls the submit handler wired in via {@link setSubmitHandler} and
23
+ * renders whatever `PhotonCommandResult` comes back.
24
+ */
25
+ export declare class PhotonAIPanel {
26
+ private iconRenderer;
27
+ private launcherEl;
28
+ private panelEl;
29
+ private logEl;
30
+ private inputEl;
31
+ private sendBtnEl;
32
+ private submitHandler;
33
+ private isOpen;
34
+ private messages;
35
+ constructor(iconRenderer: IconRenderer);
36
+ /** Mounts the launcher + docked side panel into the grid body. Idempotent-safe: call once per grid instance. */
37
+ mount(bodyWrapEl: HTMLElement, config: PhotonAIConfig): void;
38
+ /** Wires the callback that turns typed text into a result — set once `GridApi`/`PhotonAIService` exist (after `GridCore` construction). */
39
+ setSubmitHandler(fn: (text: string) => PhotonCommandResult): void;
40
+ /** Programmatic equivalent of typing `text` and pressing send — also appends to the conversation log, so a scripted call and a manual one look identical. */
41
+ invoke(text: string): PhotonCommandResult;
42
+ open(): void;
43
+ close(): void;
44
+ destroy(): void;
45
+ private buildLauncher;
46
+ private buildPanel;
47
+ private buildHeader;
48
+ private buildInputArea;
49
+ private autoGrow;
50
+ private trySubmit;
51
+ private appendGreeting;
52
+ private appendMessage;
53
+ }
54
+ //# sourceMappingURL=photon-ai-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-ai-panel.d.ts","sourceRoot":"","sources":["../../src/photon-ai/photon-ai-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAa7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAa;IAWZ,OAAO,CAAC,YAAY;IAVhC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAkC;IAEnD,OAAO,CAAC,aAAa,CAAwD;IAC7E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAqB;gBAEjB,YAAY,EAAE,YAAY;IAE9C,gHAAgH;IAChH,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAS5D,2IAA2I;IAC3I,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,mBAAmB,GAAG,IAAI;IAIjE,6JAA6J;IAC7J,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAOzC,IAAI,IAAI,IAAI;IASZ,KAAK,IAAI,IAAI;IAOb,OAAO,IAAI,IAAI;IAcf,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;CAkBtB"}
@@ -0,0 +1,191 @@
1
+ import { createDiv, createElement } from '../renderer/dom-utils';
2
+ /** Textarea grows with content up to this height (px), then scrolls internally. */
3
+ const INPUT_MAX_HEIGHT_PX = 120;
4
+ /**
5
+ * The "Photon AI" panel — a docked sidebar sliding in from the right edge of
6
+ * the grid's own body viewport, where users type natural-language commands
7
+ * and questions for {@link PhotonAIService} to interpret, with a scrollable
8
+ * conversation history (not just a one-line status) so multi-turn use
9
+ * (a command, then a follow-up question, then another command) reads like a
10
+ * chat rather than a disappearing toast.
11
+ *
12
+ * Mounted as a sibling of the pinned-column panels (same pattern as
13
+ * `DetailRowRenderer`/the sticky layer — see `GridRenderer.buildLayout`), so
14
+ * it floats independently of virtualization and never affects row layout.
15
+ * It deliberately stays *inside* the grid's own body box (never
16
+ * `document.body`) — `bodyWrapEl`'s `overflow: hidden` is what keeps the
17
+ * whole widget contained to the grid the way an embeddable component should
18
+ * be, rather than taking over the host page. Unlike a modal, it never
19
+ * blocks interaction with the grid behind it — there is no backdrop.
20
+ *
21
+ * Pure UI: it knows nothing about intents, columns, or the `GridApi` — it
22
+ * only calls the submit handler wired in via {@link setSubmitHandler} and
23
+ * renders whatever `PhotonCommandResult` comes back.
24
+ */
25
+ export class PhotonAIPanel {
26
+ constructor(iconRenderer) {
27
+ this.iconRenderer = iconRenderer;
28
+ this.launcherEl = null;
29
+ this.panelEl = null;
30
+ this.logEl = null;
31
+ this.inputEl = null;
32
+ this.sendBtnEl = null;
33
+ this.submitHandler = null;
34
+ this.isOpen = false;
35
+ this.messages = [];
36
+ }
37
+ /** Mounts the launcher + docked side panel into the grid body. Idempotent-safe: call once per grid instance. */
38
+ mount(bodyWrapEl, config) {
39
+ this.launcherEl = this.buildLauncher();
40
+ this.panelEl = this.buildPanel(config);
41
+ bodyWrapEl.appendChild(this.launcherEl);
42
+ bodyWrapEl.appendChild(this.panelEl);
43
+ if (config.defaultOpen)
44
+ this.open();
45
+ }
46
+ /** Wires the callback that turns typed text into a result — set once `GridApi`/`PhotonAIService` exist (after `GridCore` construction). */
47
+ setSubmitHandler(fn) {
48
+ this.submitHandler = fn;
49
+ }
50
+ /** Programmatic equivalent of typing `text` and pressing send — also appends to the conversation log, so a scripted call and a manual one look identical. */
51
+ invoke(text) {
52
+ this.appendMessage({ role: 'user', text });
53
+ const result = this.submitHandler?.(text) ?? { success: false, message: 'Photon AI is not ready yet.' };
54
+ this.appendMessage({ role: 'assistant', text: result.message, success: result.success });
55
+ return result;
56
+ }
57
+ open() {
58
+ if (this.isOpen || !this.panelEl || !this.launcherEl)
59
+ return;
60
+ this.isOpen = true;
61
+ this.launcherEl.classList.add('pg-ai-launcher--hidden');
62
+ this.panelEl.classList.add('pg-ai-panel--open');
63
+ if (this.messages.length === 0)
64
+ this.appendGreeting();
65
+ requestAnimationFrame(() => this.inputEl?.focus());
66
+ }
67
+ close() {
68
+ if (!this.isOpen || !this.panelEl || !this.launcherEl)
69
+ return;
70
+ this.isOpen = false;
71
+ this.panelEl.classList.remove('pg-ai-panel--open');
72
+ this.launcherEl.classList.remove('pg-ai-launcher--hidden');
73
+ }
74
+ destroy() {
75
+ this.launcherEl?.remove();
76
+ this.panelEl?.remove();
77
+ this.launcherEl = null;
78
+ this.panelEl = null;
79
+ this.logEl = null;
80
+ this.inputEl = null;
81
+ this.sendBtnEl = null;
82
+ this.submitHandler = null;
83
+ this.messages = [];
84
+ }
85
+ // ─── Private: construction ─────────────────────────────────────────────
86
+ buildLauncher() {
87
+ const btn = createElement('button', { type: 'button', 'aria-label': 'Open Photon AI' });
88
+ btn.className = 'pg-ai-launcher';
89
+ btn.appendChild(this.iconRenderer.render('sparkle', { size: 20 }));
90
+ btn.addEventListener('click', () => this.open());
91
+ return btn;
92
+ }
93
+ buildPanel(config) {
94
+ const panel = createDiv('pg-ai-panel');
95
+ panel.setAttribute('role', 'complementary');
96
+ panel.setAttribute('aria-label', 'Photon AI');
97
+ panel.appendChild(this.buildHeader());
98
+ this.logEl = createDiv('pg-ai-panel__log');
99
+ this.logEl.setAttribute('role', 'log');
100
+ this.logEl.setAttribute('aria-live', 'polite');
101
+ panel.appendChild(this.logEl);
102
+ panel.appendChild(this.buildInputArea(config));
103
+ return panel;
104
+ }
105
+ buildHeader() {
106
+ const header = createDiv('pg-ai-panel__header');
107
+ const title = createDiv('pg-ai-panel__title');
108
+ title.appendChild(this.iconRenderer.render('sparkle', { size: 16 }));
109
+ const label = document.createElement('span');
110
+ label.textContent = 'Photon AI';
111
+ title.appendChild(label);
112
+ header.appendChild(title);
113
+ const closeBtn = createElement('button', { type: 'button', 'aria-label': 'Close Photon AI' });
114
+ closeBtn.className = 'pg-ai-panel__close';
115
+ closeBtn.appendChild(this.iconRenderer.render('close', { size: 14 }));
116
+ closeBtn.addEventListener('click', () => this.close());
117
+ header.appendChild(closeBtn);
118
+ return header;
119
+ }
120
+ buildInputArea(config) {
121
+ const wrap = createDiv('pg-ai-panel__input-wrap');
122
+ const input = createElement('textarea', {
123
+ placeholder: config.placeholder ?? 'Ask Photon AI to do something...',
124
+ rows: 1,
125
+ });
126
+ input.className = 'pg-ai-panel__input';
127
+ this.inputEl = input;
128
+ const sendBtn = createElement('button', { type: 'button', 'aria-label': 'Send' });
129
+ sendBtn.className = 'pg-ai-panel__send';
130
+ sendBtn.disabled = true;
131
+ sendBtn.appendChild(this.iconRenderer.render('arrowUp', { size: 14 }));
132
+ this.sendBtnEl = sendBtn;
133
+ input.addEventListener('input', () => {
134
+ this.autoGrow(input);
135
+ sendBtn.disabled = input.value.trim().length === 0;
136
+ });
137
+ input.addEventListener('keydown', (e) => {
138
+ if (e.key === 'Enter' && !e.shiftKey) {
139
+ e.preventDefault();
140
+ this.trySubmit();
141
+ }
142
+ });
143
+ sendBtn.addEventListener('click', () => this.trySubmit());
144
+ wrap.appendChild(input);
145
+ wrap.appendChild(sendBtn);
146
+ return wrap;
147
+ }
148
+ // ─── Private: behavior ──────────────────────────────────────────────────
149
+ autoGrow(input) {
150
+ input.style.height = 'auto';
151
+ input.style.height = `${Math.min(input.scrollHeight, INPUT_MAX_HEIGHT_PX)}px`;
152
+ }
153
+ trySubmit() {
154
+ const input = this.inputEl;
155
+ const sendBtn = this.sendBtnEl;
156
+ if (!input || !sendBtn)
157
+ return;
158
+ const text = input.value.trim();
159
+ if (!text || sendBtn.disabled)
160
+ return;
161
+ this.invoke(text);
162
+ input.value = '';
163
+ sendBtn.disabled = true;
164
+ this.autoGrow(input);
165
+ }
166
+ appendGreeting() {
167
+ this.appendMessage({
168
+ role: 'assistant',
169
+ text: 'Hi! Tell me what to do — sort, filter, pin, group, hide/show columns, move columns, selection, and more — or ask me a question about the grid\'s current state (try "help" to see everything I understand).',
170
+ success: true,
171
+ });
172
+ }
173
+ appendMessage(message) {
174
+ this.messages.push(message);
175
+ if (!this.logEl)
176
+ return;
177
+ const bubble = createDiv(`pg-ai-panel__message pg-ai-panel__message--${message.role}`);
178
+ if (message.role === 'assistant') {
179
+ bubble.classList.toggle('pg-ai-panel__message--error', message.success === false);
180
+ }
181
+ // Multi-line responses (e.g. "help"'s bulleted list) render as separate lines.
182
+ for (const line of message.text.split('\n')) {
183
+ const lineEl = document.createElement('div');
184
+ lineEl.textContent = line;
185
+ bubble.appendChild(lineEl);
186
+ }
187
+ this.logEl.appendChild(bubble);
188
+ this.logEl.scrollTop = this.logEl.scrollHeight;
189
+ }
190
+ }
191
+ //# sourceMappingURL=photon-ai-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-ai-panel.js","sourceRoot":"","sources":["../../src/photon-ai/photon-ai-panel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { IntentDefinition } from './photon-ai.types';
2
+ /**
3
+ * Catalog of every intent Photon AI can recognize. Pure storage — matching
4
+ * input against the catalog is `IntentParser`'s job, not this class's; this
5
+ * keeps "what intents exist" fully decoupled from "how text is matched to
6
+ * one of them".
7
+ *
8
+ * Any grid feature can extend the catalog at runtime via {@link register} —
9
+ * built-in intents (sort, filter, pin, …) register themselves exactly the
10
+ * same way a future custom feature would, so there is no special-casing
11
+ * between "built-in" and "user-defined" commands.
12
+ */
13
+ export declare class PhotonAICommandRegistry {
14
+ private readonly intents;
15
+ /** Registers an intent, replacing any existing one with the same `key`. */
16
+ register(intent: IntentDefinition): void;
17
+ /** Registers several intents in one call — a small convenience for a feature's `registerAI()` entry point. */
18
+ registerAll(intents: readonly IntentDefinition[]): void;
19
+ unregister(key: string): void;
20
+ get(key: string): IntentDefinition | undefined;
21
+ getAll(): IntentDefinition[];
22
+ has(key: string): boolean;
23
+ clear(): void;
24
+ }
25
+ //# sourceMappingURL=photon-ai-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-ai-registry.d.ts","sourceRoot":"","sources":["../../src/photon-ai/photon-ai-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAE/D,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIxC,8GAA8G;IAC9G,WAAW,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI;IAIvD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI9C,MAAM,IAAI,gBAAgB,EAAE;IAI5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Catalog of every intent Photon AI can recognize. Pure storage — matching
3
+ * input against the catalog is `IntentParser`'s job, not this class's; this
4
+ * keeps "what intents exist" fully decoupled from "how text is matched to
5
+ * one of them".
6
+ *
7
+ * Any grid feature can extend the catalog at runtime via {@link register} —
8
+ * built-in intents (sort, filter, pin, …) register themselves exactly the
9
+ * same way a future custom feature would, so there is no special-casing
10
+ * between "built-in" and "user-defined" commands.
11
+ */
12
+ export class PhotonAICommandRegistry {
13
+ constructor() {
14
+ this.intents = new Map();
15
+ }
16
+ /** Registers an intent, replacing any existing one with the same `key`. */
17
+ register(intent) {
18
+ this.intents.set(intent.key, intent);
19
+ }
20
+ /** Registers several intents in one call — a small convenience for a feature's `registerAI()` entry point. */
21
+ registerAll(intents) {
22
+ for (const intent of intents)
23
+ this.register(intent);
24
+ }
25
+ unregister(key) {
26
+ this.intents.delete(key);
27
+ }
28
+ get(key) {
29
+ return this.intents.get(key);
30
+ }
31
+ getAll() {
32
+ return Array.from(this.intents.values());
33
+ }
34
+ has(key) {
35
+ return this.intents.has(key);
36
+ }
37
+ clear() {
38
+ this.intents.clear();
39
+ }
40
+ }
41
+ //# sourceMappingURL=photon-ai-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-ai-registry.js","sourceRoot":"","sources":["../../src/photon-ai/photon-ai-registry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,uBAAuB;IAApC;QACmB,YAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IA+BjE,CAAC;IA7BC,2EAA2E;IAC3E,QAAQ,CAAC,MAAwB;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,8GAA8G;IAC9G,WAAW,CAAC,OAAoC;QAC9C,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,71 @@
1
+ import type { GridApi } from '../core/grid-api';
2
+ import { PhotonAICommandRegistry } from './photon-ai-registry';
3
+ import type { PhotonCommandResult } from './photon-ai.types';
4
+ /**
5
+ * The only public entry point into Photon AI. Runs the full deterministic
6
+ * pipeline for one prompt:
7
+ *
8
+ * ```
9
+ * split into clauses → (learned-phrase replay | normalize → parse intent →
10
+ * resolve entities → build command) → execute → learn
11
+ * ```
12
+ *
13
+ * A compound sentence ("hide the id column and sort by price descending")
14
+ * is split into independent clauses by {@link splitClauses} and each is run
15
+ * through the pipeline in order, so multi-step natural-language requests
16
+ * work without any single intent needing to know about the others.
17
+ *
18
+ * Every successfully-executed clause is remembered by a
19
+ * {@link PhotonAIMemoryStore}, namespaced to this grid's current columns:
20
+ * the *next* time the same clause is typed, it replays the learned command
21
+ * directly (skipping intent matching and entity resolution entirely) as
22
+ * long as the column it refers to still exists — this is what makes Photon
23
+ * AI "learn" a user's phrasing over time, including phrasings that only
24
+ * resolved on the first try via fuzzy/implicit matching.
25
+ *
26
+ * Every stage past clause-splitting is a small, independent, replaceable
27
+ * collaborator (`IntentParser`, `EntityResolver`, `CommandBuilder`,
28
+ * `CommandExecutor`); this class only sequences them and never contains
29
+ * matching or execution logic itself.
30
+ */
31
+ export declare class PhotonAIService {
32
+ private api;
33
+ private readonly registry;
34
+ private readonly memory;
35
+ private readonly parser;
36
+ private readonly resolver;
37
+ private readonly builder;
38
+ private readonly executor;
39
+ /**
40
+ * @param api - The grid's own `GridApi` — every command runs through it, never around it.
41
+ * @param registry - Supply a custom registry to fully replace the built-ins, or omit to get sort/filter/pin/visibility/grouping/selection out of the box.
42
+ */
43
+ constructor(api: GridApi, registry?: PhotonAICommandRegistry);
44
+ /** A registry pre-populated with every built-in intent — the default `PhotonAIService` uses when none is supplied. */
45
+ static createDefaultRegistry(): PhotonAICommandRegistry;
46
+ /** Registers additional custom intents at runtime (e.g. a third-party feature's own `registerAI()`). */
47
+ getRegistry(): PhotonAICommandRegistry;
48
+ /** Forgets every column alias and phrase this service has learned for the current grid — useful after a large schema change or for testing. */
49
+ forgetLearnedMemory(): void;
50
+ /**
51
+ * Runs one prompt through the full pipeline. Always resolves —
52
+ * parsing/resolution failures come back as `{ success: false }`, never a
53
+ * thrown error. A compound sentence runs each clause independently and
54
+ * aggregates their results.
55
+ */
56
+ submit(rawInput: string): PhotonCommandResult;
57
+ private runClause;
58
+ private runCommands;
59
+ /**
60
+ * Handles a clause that normalized away to nothing — every one of its
61
+ * words was filler. Rather than a blanket parse error, greetings and
62
+ * thanks get a friendly, on-brand reply; anything else (stray filler with
63
+ * no real words at all) still reports that it couldn't be parsed.
64
+ */
65
+ private replyToSmallTalk;
66
+ /** A learned command referencing a column that's since been removed/renamed can't be safely replayed — falls back to re-parsing the clause instead. */
67
+ private commandStillValid;
68
+ /** The set of verbs `splitClauses` treats as "this starts a new command" — every registered intent's leading alias word, recomputed per call so custom intents registered at runtime are picked up immediately. */
69
+ private clauseVerbs;
70
+ }
71
+ //# sourceMappingURL=photon-ai-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photon-ai-service.d.ts","sourceRoot":"","sources":["../../src/photon-ai/photon-ai-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAOhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,KAAK,EAAiB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAkB5E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,eAAe;IAYd,OAAO,CAAC,GAAG;IAXvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C;;;OAGG;gBACiB,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,uBAAuB;IAOpE,sHAAsH;IACtH,MAAM,CAAC,qBAAqB,IAAI,uBAAuB;IAMvD,wGAAwG;IACxG,WAAW,IAAI,uBAAuB;IAItC,+IAA+I;IAC/I,mBAAmB,IAAI,IAAI;IAI3B;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IAe7C,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,WAAW;IAUnB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAgBxB,uJAAuJ;IACvJ,OAAO,CAAC,iBAAiB;IAKzB,mNAAmN;IACnN,OAAO,CAAC,WAAW;CASpB"}