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,121 @@
1
+ import type { ColumnDef, ColumnDropdownOption } from '../types/column.types';
2
+ import type { FilterOperator } from '../types/filter.types';
3
+ import type { GridApi } from '../core/grid-api';
4
+ import type { PhotonAIMemoryStore } from './photon-ai-memory';
5
+ /** Result of {@link EntityResolver.resolveOperator} — the detected operator plus whatever tokens weren't consumed by its phrase. */
6
+ export interface OperatorMatch {
7
+ readonly operator: FilterOperator | null;
8
+ readonly remaining: string[];
9
+ }
10
+ /** Result of {@link EntityResolver.resolveColumnByValue} — a column guessed purely from a value, with no column name mentioned. */
11
+ export interface ValueMatch {
12
+ readonly column: ColumnDef;
13
+ readonly rawValue: string;
14
+ }
15
+ /**
16
+ * Extracts grid entities (columns, directions, values, filter operators, …)
17
+ * from the leftover tokens an {@link IntentDefinition} receives after
18
+ * intent-keyword removal. Columns are **never** hardcoded — every lookup is
19
+ * against the grid's *current* `ColumnDef[]`, resolved fuzzily
20
+ * (case-insensitive, substring, and edit-distance tolerant) so `"Salary"`,
21
+ * `"employee salary"`, and `"salery"` all resolve to the same column.
22
+ *
23
+ * Stateless aside from the optional {@link PhotonAIMemoryStore}, which lets
24
+ * a fuzzy column match resolved once (e.g. "emp name" → the `name` column)
25
+ * become an exact, instant hit on every later prompt.
26
+ */
27
+ export declare class EntityResolver {
28
+ private readonly memory?;
29
+ constructor(memory?: PhotonAIMemoryStore | undefined);
30
+ /**
31
+ * Finds the single best-matching column for a set of candidate tokens.
32
+ * Checks learned aliases first, then tries the whole remaining phrase (so
33
+ * multi-word column names like "employee salary" resolve directly), then
34
+ * falls back to individual tokens (so a typo'd single word like "salery"
35
+ * still resolves, and so noise words like operators/values sitting next
36
+ * to a column name don't prevent a match).
37
+ */
38
+ resolveColumn(tokens: readonly string[], columns: readonly ColumnDef[]): ColumnDef | null;
39
+ /**
40
+ * Resolves every column named in a list — used by intents that can take
41
+ * more than one column at once (e.g. "pin price and income to the right",
42
+ * "unpin status, income and year", "group by department and status").
43
+ * Greedily tries the longest token window first at each position so a
44
+ * multi-word header like "Album Name" resolves as one column rather than
45
+ * two, but multi-word windows require an *exact* colId/field/header match
46
+ * (no fuzzy leniency) — otherwise the substring rule that lets "employee
47
+ * salary" resolve to "Salary" would just as happily let "price income"
48
+ * swallow both "Price" and "Income" as one bogus match. A single token
49
+ * still gets the full fuzzy/typo-tolerant treatment. Tokens that match
50
+ * nothing (list connectors like "and", stray words) are skipped rather
51
+ * than aborting the whole list.
52
+ */
53
+ resolveColumns(tokens: readonly string[], columns: readonly ColumnDef[]): ColumnDef[];
54
+ /** `'asc'` if any ascending-leaning word is present, `'desc'` if any descending-leaning word is present, else `null`. */
55
+ resolveDirection(tokens: readonly string[]): 'asc' | 'desc' | null;
56
+ /** `'left'` / `'right'` if present, else `null` (meaning "unpin" for pin-side intents). */
57
+ resolveSide(tokens: readonly string[]): 'left' | 'right' | null;
58
+ /** The first bare integer found in the tokens (e.g. `"select row 5"` → `5`), or `null`. */
59
+ resolveIndex(tokens: readonly string[]): number | null;
60
+ /** `true` when the tokens refer to "all"/"every" rather than one named thing (e.g. "hide all columns"). */
61
+ resolveAllRequested(tokens: readonly string[]): boolean;
62
+ /**
63
+ * Joins whatever tokens remain after a column has already been consumed
64
+ * from them — the free-text "value" a filter intent applies (e.g. in
65
+ * `"filter status active"`, once `status` resolves to a column, `"active"`
66
+ * is the value). Strips every individual word of the column's name
67
+ * (colId/field/header), not just an exact whole-phrase match, so
68
+ * multi-word headers like "Album Name" are fully removed.
69
+ */
70
+ extractValue(tokens: readonly string[], consumedColumn: ColumnDef | null): string | null;
71
+ /** Same as {@link extractValue} but returns the leftover tokens as an array (for further operator/value parsing) instead of a joined string. */
72
+ stripColumnTokens(tokens: readonly string[], consumedColumn: ColumnDef | null): string[];
73
+ /** Strips a single leading/anywhere "not" token, reporting whether negation was present so callers can flip their chosen operator. */
74
+ resolveNegation(tokens: readonly string[]): {
75
+ negated: boolean;
76
+ remaining: string[];
77
+ };
78
+ /**
79
+ * Detects a comparison-operator phrase (e.g. "greater than", "starts
80
+ * with", "before") anywhere in `tokens` and returns it along with the
81
+ * tokens that are left after removing that phrase's words. Returns
82
+ * `operator: null` (and the original tokens, untouched) when no phrase
83
+ * matches, so callers can fall back to a type-appropriate default.
84
+ */
85
+ resolveOperator(tokens: readonly string[]): OperatorMatch;
86
+ /** Splits `"between 10 and 50"`-style tokens into their two bounds, or `null` when no `between ... and ...` pattern is present. */
87
+ resolveRange(tokens: readonly string[]): {
88
+ from: string[];
89
+ to: string[];
90
+ } | null;
91
+ /** Parses a free-text number, tolerant of a leading currency symbol or trailing `%`. */
92
+ parseNumberToken(raw: string): number | null;
93
+ /** Parses a date token — ISO/slash-formatted dates plus "today"/"yesterday"/"tomorrow". */
94
+ parseDateToken(raw: string): Date | null;
95
+ /** Maps a boolean-leaning word ("active", "yes", "disabled", …) to `true`/`false`, or `null` when it isn't one. */
96
+ parseBooleanToken(raw: string): boolean | null;
97
+ /** Finds the best matching dropdown/enum option for a free-text value against one already-known column. */
98
+ matchOption(rawValue: string, column: ColumnDef): ColumnDropdownOption | null;
99
+ /**
100
+ * Guesses which column a free-text value belongs to when the user never
101
+ * named one (e.g. "show active items" — "active" is a `Status` dropdown
102
+ * option, not a column reference). Tries, in order: dropdown/enum option
103
+ * labels, boolean-leaning words, then a bounded scan of live row data for
104
+ * an exact match — each step only runs across columns still marked
105
+ * `filterable !== false`, and the raw-data scan is capped at
106
+ * {@link MAX_VALUE_SCAN_ROWS} rows so cost never scales with grid size.
107
+ */
108
+ resolveColumnByValue(tokens: readonly string[], columns: readonly ColumnDef[], api: GridApi): ValueMatch | null;
109
+ private scanRowDataForValue;
110
+ private scoreCandidate;
111
+ /**
112
+ * Scores a free-text value phrase against one dropdown/enum option label.
113
+ * Combines the direct string score (handles typos, e.g. "innactive") with
114
+ * a word-coverage score that ignores connector words on both sides (e.g.
115
+ * "of") — so a candidate like "record out stock" (extra noise word,
116
+ * missing "of") still confidently matches the label "Out of Stock" as
117
+ * long as every *meaningful* label word is present somewhere in it.
118
+ */
119
+ private optionScore;
120
+ }
121
+ //# sourceMappingURL=entity-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-resolver.d.ts","sourceRoot":"","sources":["../../src/photon-ai/entity-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,393 @@
1
+ import { similarity } from './fuzzy-match';
2
+ /** Below this similarity score a fuzzy column match is rejected rather than guessed at. */
3
+ const MIN_COLUMN_SIMILARITY = 0.6;
4
+ /** Higher bar for guessing a column purely from a *value* (e.g. "active" → the Status column) — a wrong guess here silently filters the wrong column, so false positives are costlier than for column-name matching. */
5
+ const MIN_VALUE_MATCH_SIMILARITY = 0.75;
6
+ /** Upper bound on rows scanned when guessing a column from raw cell data — keeps worst-case cost flat regardless of grid size. */
7
+ const MAX_VALUE_SCAN_ROWS = 300;
8
+ const BOOLEAN_TRUE_WORDS = new Set(['true', 'yes', 'active', 'enabled', 'on', 'open']);
9
+ const BOOLEAN_FALSE_WORDS = new Set(['false', 'no', 'inactive', 'disabled', 'off', 'closed']);
10
+ /** Connector words dropped only when comparing a value phrase against a dropdown/enum option's label — never touches the tokens actually used for intent matching. Lets "record out stock" still match the option label "Out of Stock" despite the "of" the user's phrase never had and the "record" it has that the label doesn't. */
11
+ const OPTION_LABEL_STOPWORDS = new Set(['of', 'the', 'a', 'an', 'and', 'or']);
12
+ /** Longest column-name span (in tokens) {@link EntityResolver.resolveColumns} will try to match as one unit, so multi-word headers ("Album Name") resolve in a list without over-matching. */
13
+ const MAX_COLUMN_PHRASE_WORDS = 3;
14
+ const OPERATOR_PHRASE_TABLE = [
15
+ { words: ['greater', 'than', 'or', 'equal'], operator: 'greaterThanOrEqual' },
16
+ { words: ['less', 'than', 'or', 'equal'], operator: 'lessThanOrEqual' },
17
+ { words: ['no', 'less', 'than'], operator: 'greaterThanOrEqual' },
18
+ { words: ['no', 'more', 'than'], operator: 'lessThanOrEqual' },
19
+ { words: ['not', 'equal'], operator: 'notEquals' },
20
+ { words: ['not', 'blank'], operator: 'notBlank' },
21
+ { words: ['not', 'empty'], operator: 'notBlank' },
22
+ { words: ['at', 'least'], operator: 'greaterThanOrEqual' },
23
+ { words: ['at', 'most'], operator: 'lessThanOrEqual' },
24
+ { words: ['start', 'with'], operator: 'startsWith' },
25
+ { words: ['end', 'with'], operator: 'endsWith' },
26
+ { words: ['greater', 'than'], operator: 'greaterThan' },
27
+ { words: ['more', 'than'], operator: 'greaterThan' },
28
+ { words: ['less', 'than'], operator: 'lessThan' },
29
+ { words: ['fewer', 'than'], operator: 'lessThan' },
30
+ { words: ['not', 'contain'], operator: 'notContains' },
31
+ { words: ['contain'], operator: 'contains' },
32
+ { words: ['over'], operator: 'greaterThan' },
33
+ { words: ['above'], operator: 'greaterThan' },
34
+ { words: ['under'], operator: 'lessThan' },
35
+ { words: ['below'], operator: 'lessThan' },
36
+ { words: ['before'], operator: 'before' },
37
+ { words: ['after'], operator: 'after' },
38
+ { words: ['equal'], operator: 'equals' },
39
+ { words: ['blank'], operator: 'blank' },
40
+ { words: ['empty'], operator: 'blank' },
41
+ ];
42
+ /** Ordered by word count (longest phrase first) so "greater than or equal" is preferred over "greater than". */
43
+ const OPERATOR_PHRASES = [...OPERATOR_PHRASE_TABLE].sort((a, b) => b.words.length - a.words.length);
44
+ function normalizeWord(s) {
45
+ return s.toLowerCase().trim();
46
+ }
47
+ /** Every string on a column a user might plausibly type or misspell. */
48
+ function candidateNamesFor(col) {
49
+ return [col.colId, col.field, col.header].filter((s) => !!s).map(normalizeWord);
50
+ }
51
+ /** Every individual word across a column's colId/field/header — used to strip the column reference out of leftover tokens once it's been resolved. */
52
+ function candidateWordsFor(col) {
53
+ const words = new Set();
54
+ for (const name of candidateNamesFor(col)) {
55
+ for (const w of name.split(' '))
56
+ words.add(w);
57
+ }
58
+ return words;
59
+ }
60
+ /**
61
+ * Extracts grid entities (columns, directions, values, filter operators, …)
62
+ * from the leftover tokens an {@link IntentDefinition} receives after
63
+ * intent-keyword removal. Columns are **never** hardcoded — every lookup is
64
+ * against the grid's *current* `ColumnDef[]`, resolved fuzzily
65
+ * (case-insensitive, substring, and edit-distance tolerant) so `"Salary"`,
66
+ * `"employee salary"`, and `"salery"` all resolve to the same column.
67
+ *
68
+ * Stateless aside from the optional {@link PhotonAIMemoryStore}, which lets
69
+ * a fuzzy column match resolved once (e.g. "emp name" → the `name` column)
70
+ * become an exact, instant hit on every later prompt.
71
+ */
72
+ export class EntityResolver {
73
+ constructor(memory) {
74
+ this.memory = memory;
75
+ }
76
+ /**
77
+ * Finds the single best-matching column for a set of candidate tokens.
78
+ * Checks learned aliases first, then tries the whole remaining phrase (so
79
+ * multi-word column names like "employee salary" resolve directly), then
80
+ * falls back to individual tokens (so a typo'd single word like "salery"
81
+ * still resolves, and so noise words like operators/values sitting next
82
+ * to a column name don't prevent a match).
83
+ */
84
+ resolveColumn(tokens, columns) {
85
+ if (tokens.length === 0 || columns.length === 0)
86
+ return null;
87
+ const phrase = tokens.map(normalizeWord).join(' ');
88
+ const learnedColId = this.memory?.getColumnAlias(phrase);
89
+ if (learnedColId) {
90
+ const learned = columns.find((c) => c.colId === learnedColId);
91
+ if (learned)
92
+ return learned;
93
+ }
94
+ const candidates = [phrase, ...tokens.map(normalizeWord)].filter((c) => c.length > 0);
95
+ let best = null;
96
+ let bestScore = 0;
97
+ for (const col of columns) {
98
+ const names = candidateNamesFor(col);
99
+ for (const candidate of candidates) {
100
+ for (const name of names) {
101
+ const score = this.scoreCandidate(candidate, name);
102
+ if (score > bestScore) {
103
+ bestScore = score;
104
+ best = col;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ if (!best || bestScore < MIN_COLUMN_SIMILARITY)
110
+ return null;
111
+ if (bestScore < 1)
112
+ this.memory?.learnColumnAlias(phrase, best.colId);
113
+ return best;
114
+ }
115
+ /**
116
+ * Resolves every column named in a list — used by intents that can take
117
+ * more than one column at once (e.g. "pin price and income to the right",
118
+ * "unpin status, income and year", "group by department and status").
119
+ * Greedily tries the longest token window first at each position so a
120
+ * multi-word header like "Album Name" resolves as one column rather than
121
+ * two, but multi-word windows require an *exact* colId/field/header match
122
+ * (no fuzzy leniency) — otherwise the substring rule that lets "employee
123
+ * salary" resolve to "Salary" would just as happily let "price income"
124
+ * swallow both "Price" and "Income" as one bogus match. A single token
125
+ * still gets the full fuzzy/typo-tolerant treatment. Tokens that match
126
+ * nothing (list connectors like "and", stray words) are skipped rather
127
+ * than aborting the whole list.
128
+ */
129
+ resolveColumns(tokens, columns) {
130
+ const resolved = [];
131
+ const seen = new Set();
132
+ let i = 0;
133
+ while (i < tokens.length) {
134
+ let consumed = 1;
135
+ let match = null;
136
+ for (let windowSize = Math.min(MAX_COLUMN_PHRASE_WORDS, tokens.length - i); windowSize >= 2; windowSize--) {
137
+ const phrase = tokens.slice(i, i + windowSize).map(normalizeWord).join(' ');
138
+ const exact = columns.find((c) => candidateNamesFor(c).includes(phrase));
139
+ if (exact) {
140
+ match = exact;
141
+ consumed = windowSize;
142
+ break;
143
+ }
144
+ }
145
+ if (!match)
146
+ match = this.resolveColumn([tokens[i]], columns);
147
+ if (match && !seen.has(match.colId)) {
148
+ seen.add(match.colId);
149
+ resolved.push(match);
150
+ }
151
+ i += consumed;
152
+ }
153
+ return resolved;
154
+ }
155
+ /** `'asc'` if any ascending-leaning word is present, `'desc'` if any descending-leaning word is present, else `null`. */
156
+ resolveDirection(tokens) {
157
+ const words = new Set(tokens.map(normalizeWord));
158
+ const ascending = ['asc', 'ascending', 'low', 'smallest', 'increasing'];
159
+ const descending = ['desc', 'descending', 'high', 'largest', 'decreasing'];
160
+ if (descending.some((w) => words.has(w)))
161
+ return 'desc';
162
+ if (ascending.some((w) => words.has(w)))
163
+ return 'asc';
164
+ return null;
165
+ }
166
+ /** `'left'` / `'right'` if present, else `null` (meaning "unpin" for pin-side intents). */
167
+ resolveSide(tokens) {
168
+ const words = new Set(tokens.map(normalizeWord));
169
+ if (words.has('left'))
170
+ return 'left';
171
+ if (words.has('right'))
172
+ return 'right';
173
+ return null;
174
+ }
175
+ /** The first bare integer found in the tokens (e.g. `"select row 5"` → `5`), or `null`. */
176
+ resolveIndex(tokens) {
177
+ for (const token of tokens) {
178
+ if (/^\d+$/.test(token))
179
+ return parseInt(token, 10);
180
+ }
181
+ return null;
182
+ }
183
+ /** `true` when the tokens refer to "all"/"every" rather than one named thing (e.g. "hide all columns"). */
184
+ resolveAllRequested(tokens) {
185
+ return tokens.some((t) => normalizeWord(t) === 'all');
186
+ }
187
+ /**
188
+ * Joins whatever tokens remain after a column has already been consumed
189
+ * from them — the free-text "value" a filter intent applies (e.g. in
190
+ * `"filter status active"`, once `status` resolves to a column, `"active"`
191
+ * is the value). Strips every individual word of the column's name
192
+ * (colId/field/header), not just an exact whole-phrase match, so
193
+ * multi-word headers like "Album Name" are fully removed.
194
+ */
195
+ extractValue(tokens, consumedColumn) {
196
+ const remaining = this.stripColumnTokens(tokens, consumedColumn);
197
+ return remaining.length ? remaining.join(' ') : null;
198
+ }
199
+ /** Same as {@link extractValue} but returns the leftover tokens as an array (for further operator/value parsing) instead of a joined string. */
200
+ stripColumnTokens(tokens, consumedColumn) {
201
+ if (!consumedColumn)
202
+ return [...tokens];
203
+ const consumedWords = candidateWordsFor(consumedColumn);
204
+ return tokens.filter((t) => !consumedWords.has(normalizeWord(t)));
205
+ }
206
+ /** Strips a single leading/anywhere "not" token, reporting whether negation was present so callers can flip their chosen operator. */
207
+ resolveNegation(tokens) {
208
+ const idx = tokens.map(normalizeWord).indexOf('not');
209
+ if (idx < 0)
210
+ return { negated: false, remaining: [...tokens] };
211
+ return { negated: true, remaining: [...tokens.slice(0, idx), ...tokens.slice(idx + 1)] };
212
+ }
213
+ /**
214
+ * Detects a comparison-operator phrase (e.g. "greater than", "starts
215
+ * with", "before") anywhere in `tokens` and returns it along with the
216
+ * tokens that are left after removing that phrase's words. Returns
217
+ * `operator: null` (and the original tokens, untouched) when no phrase
218
+ * matches, so callers can fall back to a type-appropriate default.
219
+ */
220
+ resolveOperator(tokens) {
221
+ const words = tokens.map(normalizeWord);
222
+ for (const { words: phrase, operator } of OPERATOR_PHRASES) {
223
+ const start = indexOfSubsequence(words, phrase);
224
+ if (start < 0)
225
+ continue;
226
+ const remaining = [...words.slice(0, start), ...words.slice(start + phrase.length)];
227
+ return { operator, remaining };
228
+ }
229
+ return { operator: null, remaining: [...words] };
230
+ }
231
+ /** Splits `"between 10 and 50"`-style tokens into their two bounds, or `null` when no `between ... and ...` pattern is present. */
232
+ resolveRange(tokens) {
233
+ const words = tokens.map(normalizeWord);
234
+ const betweenIdx = words.indexOf('between');
235
+ if (betweenIdx < 0)
236
+ return null;
237
+ const andIdx = words.indexOf('and', betweenIdx + 1);
238
+ if (andIdx < 0)
239
+ return null;
240
+ const from = words.slice(betweenIdx + 1, andIdx);
241
+ const to = words.slice(andIdx + 1);
242
+ if (from.length === 0 || to.length === 0)
243
+ return null;
244
+ return { from, to };
245
+ }
246
+ /** Parses a free-text number, tolerant of a leading currency symbol or trailing `%`. */
247
+ parseNumberToken(raw) {
248
+ const cleaned = raw.replace(/[^0-9.\-]/g, '');
249
+ if (!cleaned)
250
+ return null;
251
+ const value = Number(cleaned);
252
+ return Number.isNaN(value) ? null : value;
253
+ }
254
+ /** Parses a date token — ISO/slash-formatted dates plus "today"/"yesterday"/"tomorrow". */
255
+ parseDateToken(raw) {
256
+ const word = normalizeWord(raw);
257
+ const now = new Date();
258
+ if (word === 'today')
259
+ return now;
260
+ if (word === 'yesterday')
261
+ return new Date(now.getTime() - 86400000);
262
+ if (word === 'tomorrow')
263
+ return new Date(now.getTime() + 86400000);
264
+ if (!/\d/.test(word))
265
+ return null;
266
+ const parsed = new Date(word);
267
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
268
+ }
269
+ /** Maps a boolean-leaning word ("active", "yes", "disabled", …) to `true`/`false`, or `null` when it isn't one. */
270
+ parseBooleanToken(raw) {
271
+ const word = normalizeWord(raw);
272
+ if (BOOLEAN_TRUE_WORDS.has(word))
273
+ return true;
274
+ if (BOOLEAN_FALSE_WORDS.has(word))
275
+ return false;
276
+ return null;
277
+ }
278
+ /** Finds the best matching dropdown/enum option for a free-text value against one already-known column. */
279
+ matchOption(rawValue, column) {
280
+ const candidate = normalizeWord(rawValue);
281
+ if (!candidate)
282
+ return null;
283
+ const options = column.dropdownOptions ?? column.enumOptions?.map((v) => ({ value: v, label: v })) ?? [];
284
+ let best = null;
285
+ let bestScore = 0;
286
+ for (const option of options) {
287
+ const score = this.optionScore(candidate, String(option.label));
288
+ if (score > bestScore) {
289
+ bestScore = score;
290
+ best = option;
291
+ }
292
+ }
293
+ return bestScore >= MIN_VALUE_MATCH_SIMILARITY ? best : null;
294
+ }
295
+ /**
296
+ * Guesses which column a free-text value belongs to when the user never
297
+ * named one (e.g. "show active items" — "active" is a `Status` dropdown
298
+ * option, not a column reference). Tries, in order: dropdown/enum option
299
+ * labels, boolean-leaning words, then a bounded scan of live row data for
300
+ * an exact match — each step only runs across columns still marked
301
+ * `filterable !== false`, and the raw-data scan is capped at
302
+ * {@link MAX_VALUE_SCAN_ROWS} rows so cost never scales with grid size.
303
+ */
304
+ resolveColumnByValue(tokens, columns, api) {
305
+ if (tokens.length === 0)
306
+ return null;
307
+ const phrase = tokens.map(normalizeWord).join(' ');
308
+ const candidates = [phrase, ...tokens.map(normalizeWord)].filter((c) => c.length > 0);
309
+ const filterableColumns = columns.filter((c) => c.filterable !== false);
310
+ let best = null;
311
+ let bestScore = 0;
312
+ for (const col of filterableColumns) {
313
+ const options = col.dropdownOptions ?? col.enumOptions?.map((v) => ({ value: v, label: v })) ?? [];
314
+ for (const candidate of candidates) {
315
+ for (const option of options) {
316
+ const score = this.optionScore(candidate, String(option.label));
317
+ if (score > bestScore) {
318
+ bestScore = score;
319
+ best = { column: col, rawValue: String(option.value) };
320
+ }
321
+ }
322
+ if (col.type === 'boolean' && this.parseBooleanToken(candidate) !== null) {
323
+ if (1 > bestScore) {
324
+ bestScore = 1;
325
+ best = { column: col, rawValue: candidate };
326
+ }
327
+ }
328
+ }
329
+ }
330
+ if (best && bestScore >= MIN_VALUE_MATCH_SIMILARITY)
331
+ return best;
332
+ return this.scanRowDataForValue(phrase, filterableColumns, api);
333
+ }
334
+ scanRowDataForValue(phrase, columns, api) {
335
+ if (phrase.length < 3)
336
+ return null;
337
+ const scannable = columns.filter((c) => c.type === 'string' || c.type === 'dropdown' || c.type === 'email');
338
+ if (scannable.length === 0)
339
+ return null;
340
+ const rows = api.getAllRows();
341
+ const limit = Math.min(rows.length, MAX_VALUE_SCAN_ROWS);
342
+ for (let i = 0; i < limit; i++) {
343
+ const data = rows[i].data;
344
+ for (const col of scannable) {
345
+ const cell = data[col.field];
346
+ if (cell != null && normalizeWord(String(cell)) === phrase) {
347
+ return { column: col, rawValue: String(cell) };
348
+ }
349
+ }
350
+ }
351
+ return null;
352
+ }
353
+ scoreCandidate(candidate, name) {
354
+ if (candidate === name)
355
+ return 1;
356
+ if (candidate.length >= 3 && (name.includes(candidate) || candidate.includes(name)))
357
+ return 0.9;
358
+ return similarity(candidate, name);
359
+ }
360
+ /**
361
+ * Scores a free-text value phrase against one dropdown/enum option label.
362
+ * Combines the direct string score (handles typos, e.g. "innactive") with
363
+ * a word-coverage score that ignores connector words on both sides (e.g.
364
+ * "of") — so a candidate like "record out stock" (extra noise word,
365
+ * missing "of") still confidently matches the label "Out of Stock" as
366
+ * long as every *meaningful* label word is present somewhere in it.
367
+ */
368
+ optionScore(candidate, optionLabel) {
369
+ const label = normalizeWord(optionLabel);
370
+ const direct = this.scoreCandidate(candidate, label);
371
+ const candidateWords = new Set(candidate.split(' ').filter((w) => w.length > 0));
372
+ const labelWords = label.split(' ').filter((w) => w.length > 0 && !OPTION_LABEL_STOPWORDS.has(w));
373
+ if (labelWords.length === 0)
374
+ return direct;
375
+ const coverage = labelWords.filter((w) => candidateWords.has(w)).length / labelWords.length;
376
+ const coverageScore = coverage === 1 ? 0.95 : coverage * 0.7;
377
+ return Math.max(direct, coverageScore);
378
+ }
379
+ }
380
+ /** Index of the first occurrence of `needle` as a contiguous subsequence of `haystack`, or `-1`. */
381
+ function indexOfSubsequence(haystack, needle) {
382
+ if (needle.length === 0 || needle.length > haystack.length)
383
+ return -1;
384
+ outer: for (let i = 0; i <= haystack.length - needle.length; i++) {
385
+ for (let j = 0; j < needle.length; j++) {
386
+ if (haystack[i + j] !== needle[j])
387
+ continue outer;
388
+ }
389
+ return i;
390
+ }
391
+ return -1;
392
+ }
393
+ //# sourceMappingURL=entity-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-resolver.js","sourceRoot":"","sources":["../../src/photon-ai/entity-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Classic Levenshtein edit distance (insertions + deletions + substitutions)
3
+ * between two strings. Single-row dynamic programming — O(n*m) time, O(min(n,m)) space.
4
+ */
5
+ export declare function levenshteinDistance(a: string, b: string): number;
6
+ /**
7
+ * Normalized similarity in `[0, 1]` — `1` for identical strings, `0` for
8
+ * completely dissimilar ones. Used to fuzzy-match typos in column names
9
+ * (e.g. "salery" vs "salary") without pulling in an external library.
10
+ */
11
+ export declare function similarity(a: string, b: string): number;
12
+ //# sourceMappingURL=fuzzy-match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzy-match.d.ts","sourceRoot":"","sources":["../../src/photon-ai/fuzzy-match.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBhE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Classic Levenshtein edit distance (insertions + deletions + substitutions)
3
+ * between two strings. Single-row dynamic programming — O(n*m) time, O(min(n,m)) space.
4
+ */
5
+ export function levenshteinDistance(a, b) {
6
+ if (a === b)
7
+ return 0;
8
+ if (a.length === 0)
9
+ return b.length;
10
+ if (b.length === 0)
11
+ return a.length;
12
+ let prevRow = Array.from({ length: b.length + 1 }, (_, i) => i);
13
+ let currRow = new Array(b.length + 1);
14
+ for (let i = 1; i <= a.length; i++) {
15
+ currRow[0] = i;
16
+ for (let j = 1; j <= b.length; j++) {
17
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
18
+ currRow[j] = Math.min(prevRow[j] + 1, // deletion
19
+ currRow[j - 1] + 1, // insertion
20
+ prevRow[j - 1] + cost);
21
+ }
22
+ [prevRow, currRow] = [currRow, prevRow];
23
+ }
24
+ return prevRow[b.length];
25
+ }
26
+ /**
27
+ * Normalized similarity in `[0, 1]` — `1` for identical strings, `0` for
28
+ * completely dissimilar ones. Used to fuzzy-match typos in column names
29
+ * (e.g. "salery" vs "salary") without pulling in an external library.
30
+ */
31
+ export function similarity(a, b) {
32
+ const maxLen = Math.max(a.length, b.length);
33
+ if (maxLen === 0)
34
+ return 1;
35
+ return 1 - levenshteinDistance(a, b) / maxLen;
36
+ }
37
+ //# sourceMappingURL=fuzzy-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzy-match.js","sourceRoot":"","sources":["../../src/photon-ai/fuzzy-match.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS;IACtD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IAEpC,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,OAAO,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACnB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAO,WAAW;YAChC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAG,YAAY;YACjC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CACtB,CAAC;QACJ,CAAC;QACD,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC"}
@@ -0,0 +1,15 @@
1
+ export { PhotonAIService } from './photon-ai-service';
2
+ export { PhotonAIPanel } from './photon-ai-panel';
3
+ export { PhotonAICommandRegistry } from './photon-ai-registry';
4
+ export { IntentParser } from './intent-parser';
5
+ export { EntityResolver } from './entity-resolver';
6
+ export type { OperatorMatch, ValueMatch } from './entity-resolver';
7
+ export { CommandBuilder } from './command-builder';
8
+ export { CommandExecutor } from './command-executor';
9
+ export { registerBuiltinCommands } from './builtins';
10
+ export { normalizeInput, tokenize, stemWord } from './text-normalizer';
11
+ export { splitClauses } from './query-splitter';
12
+ export { PhotonAIMemoryStore, columnSignature } from './photon-ai-memory';
13
+ export { levenshteinDistance, similarity } from './fuzzy-match';
14
+ export type { PhotonCommand, PhotonCommandResult, ResolvedEntities, IntentDefinition, ParsedIntentMatch, } from './photon-ai.types';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","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;AACnD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACnE,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;AAChE,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export { PhotonAIService } from './photon-ai-service';
2
+ export { PhotonAIPanel } from './photon-ai-panel';
3
+ export { PhotonAICommandRegistry } from './photon-ai-registry';
4
+ export { IntentParser } from './intent-parser';
5
+ export { EntityResolver } from './entity-resolver';
6
+ export { CommandBuilder } from './command-builder';
7
+ export { CommandExecutor } from './command-executor';
8
+ export { registerBuiltinCommands } from './builtins';
9
+ export { normalizeInput, tokenize, stemWord } from './text-normalizer';
10
+ export { splitClauses } from './query-splitter';
11
+ export { PhotonAIMemoryStore, columnSignature } from './photon-ai-memory';
12
+ export { levenshteinDistance, similarity } from './fuzzy-match';
13
+ //# sourceMappingURL=index.js.map