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.
- package/LICENSE +1 -0
- package/README.md +0 -0
- package/cell-selection/active-grid-registry.d.ts +37 -0
- package/cell-selection/active-grid-registry.d.ts.map +1 -0
- package/cell-selection/active-grid-registry.js +25 -0
- package/cell-selection/active-grid-registry.js.map +1 -0
- package/cell-selection/cell-selection-engine.d.ts +336 -0
- package/cell-selection/cell-selection-engine.d.ts.map +1 -0
- package/cell-selection/cell-selection-engine.js +1534 -0
- package/cell-selection/cell-selection-engine.js.map +1 -0
- package/cell-selection/selection-range.d.ts +16 -0
- package/cell-selection/selection-range.d.ts.map +1 -0
- package/cell-selection/selection-range.js +48 -0
- package/cell-selection/selection-range.js.map +1 -0
- package/cell-selection/selection-renderer.d.ts +24 -0
- package/cell-selection/selection-renderer.d.ts.map +1 -0
- package/cell-selection/selection-renderer.js +107 -0
- package/cell-selection/selection-renderer.js.map +1 -0
- package/chart/chart-analyzer/aggregation-analyzer.d.ts +18 -0
- package/chart/chart-analyzer/aggregation-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/aggregation-analyzer.js +63 -0
- package/chart/chart-analyzer/aggregation-analyzer.js.map +1 -0
- package/chart/chart-analyzer/bar-analyzer.d.ts +19 -0
- package/chart/chart-analyzer/bar-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/bar-analyzer.js +56 -0
- package/chart/chart-analyzer/bar-analyzer.js.map +1 -0
- package/chart/chart-analyzer/bubble-analyzer.d.ts +16 -0
- package/chart/chart-analyzer/bubble-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/bubble-analyzer.js +61 -0
- package/chart/chart-analyzer/bubble-analyzer.js.map +1 -0
- package/chart/chart-analyzer/cardinality-analyzer.d.ts +13 -0
- package/chart/chart-analyzer/cardinality-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/cardinality-analyzer.js +28 -0
- package/chart/chart-analyzer/cardinality-analyzer.js.map +1 -0
- package/chart/chart-analyzer/dimension-analyzer.d.ts +12 -0
- package/chart/chart-analyzer/dimension-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/dimension-analyzer.js +33 -0
- package/chart/chart-analyzer/dimension-analyzer.js.map +1 -0
- package/chart/chart-analyzer/histogram-analyzer.d.ts +11 -0
- package/chart/chart-analyzer/histogram-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/histogram-analyzer.js +43 -0
- package/chart/chart-analyzer/histogram-analyzer.js.map +1 -0
- package/chart/chart-analyzer/index.d.ts +58 -0
- package/chart/chart-analyzer/index.d.ts.map +1 -0
- package/chart/chart-analyzer/index.js +130 -0
- package/chart/chart-analyzer/index.js.map +1 -0
- package/chart/chart-analyzer/line-analyzer.d.ts +23 -0
- package/chart/chart-analyzer/line-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/line-analyzer.js +61 -0
- package/chart/chart-analyzer/line-analyzer.js.map +1 -0
- package/chart/chart-analyzer/measure-analyzer.d.ts +11 -0
- package/chart/chart-analyzer/measure-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/measure-analyzer.js +44 -0
- package/chart/chart-analyzer/measure-analyzer.js.map +1 -0
- package/chart/chart-analyzer/pie-analyzer.d.ts +19 -0
- package/chart/chart-analyzer/pie-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/pie-analyzer.js +64 -0
- package/chart/chart-analyzer/pie-analyzer.js.map +1 -0
- package/chart/chart-analyzer/recommendation-engine.d.ts +18 -0
- package/chart/chart-analyzer/recommendation-engine.d.ts.map +1 -0
- package/chart/chart-analyzer/recommendation-engine.js +82 -0
- package/chart/chart-analyzer/recommendation-engine.js.map +1 -0
- package/chart/chart-analyzer/scatter-analyzer.d.ts +16 -0
- package/chart/chart-analyzer/scatter-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer/scatter-analyzer.js +70 -0
- package/chart/chart-analyzer/scatter-analyzer.js.map +1 -0
- package/chart/chart-analyzer/types.d.ts +52 -0
- package/chart/chart-analyzer/types.d.ts.map +1 -0
- package/chart/chart-analyzer/types.js +10 -0
- package/chart/chart-analyzer/types.js.map +1 -0
- package/chart/chart-analyzer.d.ts +12 -0
- package/chart/chart-analyzer.d.ts.map +1 -0
- package/chart/chart-analyzer.js +77 -0
- package/chart/chart-analyzer.js.map +1 -0
- package/chart/chart-data-transformer.d.ts +26 -0
- package/chart/chart-data-transformer.d.ts.map +1 -0
- package/chart/chart-data-transformer.js +93 -0
- package/chart/chart-data-transformer.js.map +1 -0
- package/chart/chart-engine.d.ts +38 -0
- package/chart/chart-engine.d.ts.map +1 -0
- package/chart/chart-engine.js +96 -0
- package/chart/chart-engine.js.map +1 -0
- package/chart/chart-panel.d.ts +54 -0
- package/chart/chart-panel.d.ts.map +1 -0
- package/chart/chart-panel.js +350 -0
- package/chart/chart-panel.js.map +1 -0
- package/chart/chart-renderer.d.ts +93 -0
- package/chart/chart-renderer.d.ts.map +1 -0
- package/chart/chart-renderer.js +1330 -0
- package/chart/chart-renderer.js.map +1 -0
- package/chart/sparkline/sparkline-renderer.d.ts +269 -0
- package/chart/sparkline/sparkline-renderer.d.ts.map +1 -0
- package/chart/sparkline/sparkline-renderer.js +875 -0
- package/chart/sparkline/sparkline-renderer.js.map +1 -0
- package/chart/sparkline/sparkline.types.d.ts +214 -0
- package/chart/sparkline/sparkline.types.d.ts.map +1 -0
- package/chart/sparkline/sparkline.types.js +8 -0
- package/chart/sparkline/sparkline.types.js.map +1 -0
- package/column-groups/column-group-drag-handler.d.ts +169 -0
- package/column-groups/column-group-drag-handler.d.ts.map +1 -0
- package/column-groups/column-group-drag-handler.js +517 -0
- package/column-groups/column-group-drag-handler.js.map +1 -0
- package/column-groups/column-group-header-builder.d.ts +106 -0
- package/column-groups/column-group-header-builder.d.ts.map +1 -0
- package/column-groups/column-group-header-builder.js +311 -0
- package/column-groups/column-group-header-builder.js.map +1 -0
- package/column-groups/column-group-model.d.ts +248 -0
- package/column-groups/column-group-model.d.ts.map +1 -0
- package/column-groups/column-group-model.js +668 -0
- package/column-groups/column-group-model.js.map +1 -0
- package/column-groups/column-group-state-manager.d.ts +110 -0
- package/column-groups/column-group-state-manager.d.ts.map +1 -0
- package/column-groups/column-group-state-manager.js +153 -0
- package/column-groups/column-group-state-manager.js.map +1 -0
- package/column-groups/column-group.types.d.ts +250 -0
- package/column-groups/column-group.types.d.ts.map +1 -0
- package/column-groups/column-group.types.js +20 -0
- package/column-groups/column-group.types.js.map +1 -0
- package/column-groups/display-group-builder.d.ts +91 -0
- package/column-groups/display-group-builder.d.ts.map +1 -0
- package/column-groups/display-group-builder.js +225 -0
- package/column-groups/display-group-builder.js.map +1 -0
- package/column-groups/display-group-drag-handler.d.ts +205 -0
- package/column-groups/display-group-drag-handler.d.ts.map +1 -0
- package/column-groups/display-group-drag-handler.js +536 -0
- package/column-groups/display-group-drag-handler.js.map +1 -0
- package/column-groups/display-group-engine.d.ts +310 -0
- package/column-groups/display-group-engine.d.ts.map +1 -0
- package/column-groups/display-group-engine.js +549 -0
- package/column-groups/display-group-engine.js.map +1 -0
- package/column-groups/display-group-header-builder.d.ts +94 -0
- package/column-groups/display-group-header-builder.d.ts.map +1 -0
- package/column-groups/display-group-header-builder.js +224 -0
- package/column-groups/display-group-header-builder.js.map +1 -0
- package/column-groups/display-group.types.d.ts +140 -0
- package/column-groups/display-group.types.d.ts.map +1 -0
- package/column-groups/display-group.types.js +2 -0
- package/column-groups/display-group.types.js.map +1 -0
- package/column-groups/index.d.ts +25 -0
- package/column-groups/index.d.ts.map +1 -0
- package/column-groups/index.js +26 -0
- package/column-groups/index.js.map +1 -0
- package/column-groups/logical-group-registry.d.ts +77 -0
- package/column-groups/logical-group-registry.d.ts.map +1 -0
- package/column-groups/logical-group-registry.js +118 -0
- package/column-groups/logical-group-registry.js.map +1 -0
- package/core/column-model.d.ts +30 -0
- package/core/column-model.d.ts.map +1 -0
- package/core/column-model.js +203 -0
- package/core/column-model.js.map +1 -0
- package/core/grid-api.d.ts +187 -0
- package/core/grid-api.d.ts.map +1 -0
- package/core/grid-api.js +569 -0
- package/core/grid-api.js.map +1 -0
- package/core/grid-context.d.ts +61 -0
- package/core/grid-context.d.ts.map +1 -0
- package/core/grid-context.js +2 -0
- package/core/grid-context.js.map +1 -0
- package/core/grid-core.d.ts +49 -0
- package/core/grid-core.d.ts.map +1 -0
- package/core/grid-core.js +675 -0
- package/core/grid-core.js.map +1 -0
- package/core/grid-store.d.ts +62 -0
- package/core/grid-store.d.ts.map +1 -0
- package/core/grid-store.js +104 -0
- package/core/grid-store.js.map +1 -0
- package/core/row-model.d.ts +32 -0
- package/core/row-model.d.ts.map +1 -0
- package/core/row-model.js +150 -0
- package/core/row-model.js.map +1 -0
- package/drag-drop/drag-autoscroll.d.ts +14 -0
- package/drag-drop/drag-autoscroll.d.ts.map +1 -0
- package/drag-drop/drag-autoscroll.js +66 -0
- package/drag-drop/drag-autoscroll.js.map +1 -0
- package/drag-drop/drag-drop-engine.d.ts +55 -0
- package/drag-drop/drag-drop-engine.d.ts.map +1 -0
- package/drag-drop/drag-drop-engine.js +179 -0
- package/drag-drop/drag-drop-engine.js.map +1 -0
- package/drag-drop/drag-preview.d.ts +32 -0
- package/drag-drop/drag-preview.d.ts.map +1 -0
- package/drag-drop/drag-preview.js +74 -0
- package/drag-drop/drag-preview.js.map +1 -0
- package/engines/aggregation/aggregation-engine.d.ts +66 -0
- package/engines/aggregation/aggregation-engine.d.ts.map +1 -0
- package/engines/aggregation/aggregation-engine.js +149 -0
- package/engines/aggregation/aggregation-engine.js.map +1 -0
- package/engines/clipboard/clipboard-engine.d.ts +89 -0
- package/engines/clipboard/clipboard-engine.d.ts.map +1 -0
- package/engines/clipboard/clipboard-engine.js +323 -0
- package/engines/clipboard/clipboard-engine.js.map +1 -0
- package/engines/editing/cell-editor-engine.d.ts +62 -0
- package/engines/editing/cell-editor-engine.d.ts.map +1 -0
- package/engines/editing/cell-editor-engine.js +359 -0
- package/engines/editing/cell-editor-engine.js.map +1 -0
- package/engines/editing/custom-dropdown-editor.d.ts +99 -0
- package/engines/editing/custom-dropdown-editor.d.ts.map +1 -0
- package/engines/editing/custom-dropdown-editor.js +355 -0
- package/engines/editing/custom-dropdown-editor.js.map +1 -0
- package/engines/editing/value-parser.d.ts +12 -0
- package/engines/editing/value-parser.d.ts.map +1 -0
- package/engines/editing/value-parser.js +125 -0
- package/engines/editing/value-parser.js.map +1 -0
- package/engines/export/export-engine.d.ts +16 -0
- package/engines/export/export-engine.d.ts.map +1 -0
- package/engines/export/export-engine.js +99 -0
- package/engines/export/export-engine.js.map +1 -0
- package/engines/filter/filter-condition.d.ts +7 -0
- package/engines/filter/filter-condition.d.ts.map +1 -0
- package/engines/filter/filter-condition.js +126 -0
- package/engines/filter/filter-condition.js.map +1 -0
- package/engines/filter/filter-engine.d.ts +35 -0
- package/engines/filter/filter-engine.d.ts.map +1 -0
- package/engines/filter/filter-engine.js +150 -0
- package/engines/filter/filter-engine.js.map +1 -0
- package/engines/filter/filter-panel.d.ts +103 -0
- package/engines/filter/filter-panel.d.ts.map +1 -0
- package/engines/filter/filter-panel.js +645 -0
- package/engines/filter/filter-panel.js.map +1 -0
- package/engines/grouping/group-node.d.ts +21 -0
- package/engines/grouping/group-node.d.ts.map +1 -0
- package/engines/grouping/group-node.js +96 -0
- package/engines/grouping/group-node.js.map +1 -0
- package/engines/grouping/grouping-engine.d.ts +33 -0
- package/engines/grouping/grouping-engine.d.ts.map +1 -0
- package/engines/grouping/grouping-engine.js +118 -0
- package/engines/grouping/grouping-engine.js.map +1 -0
- package/engines/master-detail/master-detail-engine.d.ts +77 -0
- package/engines/master-detail/master-detail-engine.d.ts.map +1 -0
- package/engines/master-detail/master-detail-engine.js +199 -0
- package/engines/master-detail/master-detail-engine.js.map +1 -0
- package/engines/pagination/pagination-engine.d.ts +33 -0
- package/engines/pagination/pagination-engine.d.ts.map +1 -0
- package/engines/pagination/pagination-engine.js +110 -0
- package/engines/pagination/pagination-engine.js.map +1 -0
- package/engines/selection/row-selection-engine.d.ts +26 -0
- package/engines/selection/row-selection-engine.d.ts.map +1 -0
- package/engines/selection/row-selection-engine.js +145 -0
- package/engines/selection/row-selection-engine.js.map +1 -0
- package/engines/sort/sort-comparator.d.ts +43 -0
- package/engines/sort/sort-comparator.d.ts.map +1 -0
- package/engines/sort/sort-comparator.js +113 -0
- package/engines/sort/sort-comparator.js.map +1 -0
- package/engines/sort/sort-engine.d.ts +67 -0
- package/engines/sort/sort-engine.d.ts.map +1 -0
- package/engines/sort/sort-engine.js +178 -0
- package/engines/sort/sort-engine.js.map +1 -0
- package/engines/summary/summary-engine.d.ts +17 -0
- package/engines/summary/summary-engine.d.ts.map +1 -0
- package/engines/summary/summary-engine.js +72 -0
- package/engines/summary/summary-engine.js.map +1 -0
- package/engines/tree/tree-data-service.d.ts +117 -0
- package/engines/tree/tree-data-service.d.ts.map +1 -0
- package/engines/tree/tree-data-service.js +296 -0
- package/engines/tree/tree-data-service.js.map +1 -0
- package/engines/tree/tree-expansion-service.d.ts +35 -0
- package/engines/tree/tree-expansion-service.d.ts.map +1 -0
- package/engines/tree/tree-expansion-service.js +84 -0
- package/engines/tree/tree-expansion-service.js.map +1 -0
- package/engines/tree/tree-node.d.ts +40 -0
- package/engines/tree/tree-node.d.ts.map +1 -0
- package/engines/tree/tree-node.js +199 -0
- package/engines/tree/tree-node.js.map +1 -0
- package/engines/tree/tree-selection-service.d.ts +35 -0
- package/engines/tree/tree-selection-service.d.ts.map +1 -0
- package/engines/tree/tree-selection-service.js +72 -0
- package/engines/tree/tree-selection-service.js.map +1 -0
- package/engines/undo-redo/undo-redo-engine.d.ts +114 -0
- package/engines/undo-redo/undo-redo-engine.d.ts.map +1 -0
- package/engines/undo-redo/undo-redo-engine.js +165 -0
- package/engines/undo-redo/undo-redo-engine.js.map +1 -0
- package/event-bus/event-bus.d.ts +21 -0
- package/event-bus/event-bus.d.ts.map +1 -0
- package/event-bus/event-bus.js +106 -0
- package/event-bus/event-bus.js.map +1 -0
- package/icons/icon-registry.d.ts +19 -0
- package/icons/icon-registry.d.ts.map +1 -0
- package/icons/icon-registry.js +37 -0
- package/icons/icon-registry.js.map +1 -0
- package/icons/icon-renderer.d.ts +18 -0
- package/icons/icon-renderer.d.ts.map +1 -0
- package/icons/icon-renderer.js +75 -0
- package/icons/icon-renderer.js.map +1 -0
- package/icons/icon-sets/core-icons.d.ts +2 -0
- package/icons/icon-sets/core-icons.d.ts.map +1 -0
- package/icons/icon-sets/core-icons.js +48 -0
- package/icons/icon-sets/core-icons.js.map +1 -0
- package/index.d.ts +72 -0
- package/index.d.ts.map +1 -0
- package/index.js +54 -0
- package/index.js.map +1 -0
- package/package.json +64 -0
- package/photon-ai/builtins/filter.commands.d.ts +4 -0
- package/photon-ai/builtins/filter.commands.d.ts.map +1 -0
- package/photon-ai/builtins/filter.commands.js +189 -0
- package/photon-ai/builtins/filter.commands.js.map +1 -0
- package/photon-ai/builtins/grouping.commands.d.ts +4 -0
- package/photon-ai/builtins/grouping.commands.d.ts.map +1 -0
- package/photon-ai/builtins/grouping.commands.js +115 -0
- package/photon-ai/builtins/grouping.commands.js.map +1 -0
- package/photon-ai/builtins/index.d.ts +10 -0
- package/photon-ai/builtins/index.d.ts.map +1 -0
- package/photon-ai/builtins/index.js +26 -0
- package/photon-ai/builtins/index.js.map +1 -0
- package/photon-ai/builtins/info.commands.d.ts +4 -0
- package/photon-ai/builtins/info.commands.d.ts.map +1 -0
- package/photon-ai/builtins/info.commands.js +201 -0
- package/photon-ai/builtins/info.commands.js.map +1 -0
- package/photon-ai/builtins/move.commands.d.ts +4 -0
- package/photon-ai/builtins/move.commands.d.ts.map +1 -0
- package/photon-ai/builtins/move.commands.js +53 -0
- package/photon-ai/builtins/move.commands.js.map +1 -0
- package/photon-ai/builtins/pin.commands.d.ts +4 -0
- package/photon-ai/builtins/pin.commands.d.ts.map +1 -0
- package/photon-ai/builtins/pin.commands.js +106 -0
- package/photon-ai/builtins/pin.commands.js.map +1 -0
- package/photon-ai/builtins/selection.commands.d.ts +4 -0
- package/photon-ai/builtins/selection.commands.d.ts.map +1 -0
- package/photon-ai/builtins/selection.commands.js +102 -0
- package/photon-ai/builtins/selection.commands.js.map +1 -0
- package/photon-ai/builtins/sort.commands.d.ts +4 -0
- package/photon-ai/builtins/sort.commands.d.ts.map +1 -0
- package/photon-ai/builtins/sort.commands.js +67 -0
- package/photon-ai/builtins/sort.commands.js.map +1 -0
- package/photon-ai/builtins/visibility.commands.d.ts +4 -0
- package/photon-ai/builtins/visibility.commands.d.ts.map +1 -0
- package/photon-ai/builtins/visibility.commands.js +75 -0
- package/photon-ai/builtins/visibility.commands.js.map +1 -0
- package/photon-ai/command-builder.d.ts +21 -0
- package/photon-ai/command-builder.d.ts.map +1 -0
- package/photon-ai/command-builder.js +18 -0
- package/photon-ai/command-builder.js.map +1 -0
- package/photon-ai/command-executor.d.ts +15 -0
- package/photon-ai/command-executor.d.ts.map +1 -0
- package/photon-ai/command-executor.js +26 -0
- package/photon-ai/command-executor.js.map +1 -0
- package/photon-ai/entity-resolver.d.ts +121 -0
- package/photon-ai/entity-resolver.d.ts.map +1 -0
- package/photon-ai/entity-resolver.js +393 -0
- package/photon-ai/entity-resolver.js.map +1 -0
- package/photon-ai/fuzzy-match.d.ts +12 -0
- package/photon-ai/fuzzy-match.d.ts.map +1 -0
- package/photon-ai/fuzzy-match.js +37 -0
- package/photon-ai/fuzzy-match.js.map +1 -0
- package/photon-ai/index.d.ts +15 -0
- package/photon-ai/index.d.ts.map +1 -0
- package/photon-ai/index.js +13 -0
- package/photon-ai/index.js.map +1 -0
- package/photon-ai/intent-parser.d.ts +20 -0
- package/photon-ai/intent-parser.d.ts.map +1 -0
- package/photon-ai/intent-parser.js +52 -0
- package/photon-ai/intent-parser.js.map +1 -0
- package/photon-ai/photon-ai-memory.d.ts +42 -0
- package/photon-ai/photon-ai-memory.d.ts.map +1 -0
- package/photon-ai/photon-ai-memory.js +86 -0
- package/photon-ai/photon-ai-memory.js.map +1 -0
- package/photon-ai/photon-ai-panel.d.ts +54 -0
- package/photon-ai/photon-ai-panel.d.ts.map +1 -0
- package/photon-ai/photon-ai-panel.js +191 -0
- package/photon-ai/photon-ai-panel.js.map +1 -0
- package/photon-ai/photon-ai-registry.d.ts +25 -0
- package/photon-ai/photon-ai-registry.d.ts.map +1 -0
- package/photon-ai/photon-ai-registry.js +41 -0
- package/photon-ai/photon-ai-registry.js.map +1 -0
- package/photon-ai/photon-ai-service.d.ts +71 -0
- package/photon-ai/photon-ai-service.d.ts.map +1 -0
- package/photon-ai/photon-ai-service.js +165 -0
- package/photon-ai/photon-ai-service.js.map +1 -0
- package/photon-ai/photon-ai.types.d.ts +100 -0
- package/photon-ai/photon-ai.types.d.ts.map +1 -0
- package/photon-ai/photon-ai.types.js +2 -0
- package/photon-ai/photon-ai.types.js.map +1 -0
- package/photon-ai/query-splitter.d.ts +22 -0
- package/photon-ai/query-splitter.d.ts.map +1 -0
- package/photon-ai/query-splitter.js +81 -0
- package/photon-ai/query-splitter.js.map +1 -0
- package/photon-ai/text-normalizer.d.ts +33 -0
- package/photon-ai/text-normalizer.d.ts.map +1 -0
- package/photon-ai/text-normalizer.js +132 -0
- package/photon-ai/text-normalizer.js.map +1 -0
- package/renderer/auto-scroller.d.ts +78 -0
- package/renderer/auto-scroller.d.ts.map +1 -0
- package/renderer/auto-scroller.js +141 -0
- package/renderer/auto-scroller.js.map +1 -0
- package/renderer/body-renderer.d.ts +191 -0
- package/renderer/body-renderer.d.ts.map +1 -0
- package/renderer/body-renderer.js +806 -0
- package/renderer/body-renderer.js.map +1 -0
- package/renderer/cell-renderer.d.ts +26 -0
- package/renderer/cell-renderer.d.ts.map +1 -0
- package/renderer/cell-renderer.js +201 -0
- package/renderer/cell-renderer.js.map +1 -0
- package/renderer/column-menu.d.ts +285 -0
- package/renderer/column-menu.d.ts.map +1 -0
- package/renderer/column-menu.js +873 -0
- package/renderer/column-menu.js.map +1 -0
- package/renderer/column-style-manager.d.ts +38 -0
- package/renderer/column-style-manager.d.ts.map +1 -0
- package/renderer/column-style-manager.js +110 -0
- package/renderer/column-style-manager.js.map +1 -0
- package/renderer/detail-row-renderer.d.ts +153 -0
- package/renderer/detail-row-renderer.d.ts.map +1 -0
- package/renderer/detail-row-renderer.js +388 -0
- package/renderer/detail-row-renderer.js.map +1 -0
- package/renderer/dom-utils.d.ts +22 -0
- package/renderer/dom-utils.d.ts.map +1 -0
- package/renderer/dom-utils.js +132 -0
- package/renderer/dom-utils.js.map +1 -0
- package/renderer/footer-renderer.d.ts +25 -0
- package/renderer/footer-renderer.d.ts.map +1 -0
- package/renderer/footer-renderer.js +168 -0
- package/renderer/footer-renderer.js.map +1 -0
- package/renderer/grid-renderer.d.ts +295 -0
- package/renderer/grid-renderer.d.ts.map +1 -0
- package/renderer/grid-renderer.js +1456 -0
- package/renderer/grid-renderer.js.map +1 -0
- package/renderer/group-context-menu.d.ts +79 -0
- package/renderer/group-context-menu.d.ts.map +1 -0
- package/renderer/group-context-menu.js +238 -0
- package/renderer/group-context-menu.js.map +1 -0
- package/renderer/group-drop-zone.d.ts +56 -0
- package/renderer/group-drop-zone.d.ts.map +1 -0
- package/renderer/group-drop-zone.js +376 -0
- package/renderer/group-drop-zone.js.map +1 -0
- package/renderer/header-renderer.d.ts +264 -0
- package/renderer/header-renderer.d.ts.map +1 -0
- package/renderer/header-renderer.js +1321 -0
- package/renderer/header-renderer.js.map +1 -0
- package/renderer/overlay-renderer.d.ts +16 -0
- package/renderer/overlay-renderer.d.ts.map +1 -0
- package/renderer/overlay-renderer.js +64 -0
- package/renderer/overlay-renderer.js.map +1 -0
- package/renderer/renderer-resolver.d.ts +18 -0
- package/renderer/renderer-resolver.d.ts.map +1 -0
- package/renderer/renderer-resolver.js +18 -0
- package/renderer/renderer-resolver.js.map +1 -0
- package/renderer/row-animator.d.ts +72 -0
- package/renderer/row-animator.d.ts.map +1 -0
- package/renderer/row-animator.js +175 -0
- package/renderer/row-animator.js.map +1 -0
- package/renderer/row-drag-renderer.d.ts +58 -0
- package/renderer/row-drag-renderer.d.ts.map +1 -0
- package/renderer/row-drag-renderer.js +395 -0
- package/renderer/row-drag-renderer.js.map +1 -0
- package/renderer/row-offset-search.d.ts +17 -0
- package/renderer/row-offset-search.d.ts.map +1 -0
- package/renderer/row-offset-search.js +31 -0
- package/renderer/row-offset-search.js.map +1 -0
- package/renderer/row-position-sheet.d.ts +11 -0
- package/renderer/row-position-sheet.d.ts.map +1 -0
- package/renderer/row-position-sheet.js +29 -0
- package/renderer/row-position-sheet.js.map +1 -0
- package/renderer/scroll-controller.d.ts +58 -0
- package/renderer/scroll-controller.d.ts.map +1 -0
- package/renderer/scroll-controller.js +200 -0
- package/renderer/scroll-controller.js.map +1 -0
- package/renderer/sticky-row-tracker.d.ts +40 -0
- package/renderer/sticky-row-tracker.d.ts.map +1 -0
- package/renderer/sticky-row-tracker.js +63 -0
- package/renderer/sticky-row-tracker.js.map +1 -0
- package/renderer/tooltip-renderer.d.ts +36 -0
- package/renderer/tooltip-renderer.d.ts.map +1 -0
- package/renderer/tooltip-renderer.js +133 -0
- package/renderer/tooltip-renderer.js.map +1 -0
- package/renderer/tree-cell-renderer.d.ts +37 -0
- package/renderer/tree-cell-renderer.d.ts.map +1 -0
- package/renderer/tree-cell-renderer.js +75 -0
- package/renderer/tree-cell-renderer.js.map +1 -0
- package/renderer/tree-sticky-row-tracker.d.ts +62 -0
- package/renderer/tree-sticky-row-tracker.d.ts.map +1 -0
- package/renderer/tree-sticky-row-tracker.js +120 -0
- package/renderer/tree-sticky-row-tracker.js.map +1 -0
- package/renderer/virtual-scroll-renderer.d.ts +37 -0
- package/renderer/virtual-scroll-renderer.d.ts.map +1 -0
- package/renderer/virtual-scroll-renderer.js +133 -0
- package/renderer/virtual-scroll-renderer.js.map +1 -0
- package/styles/base-styles.d.ts +3 -0
- package/styles/base-styles.d.ts.map +1 -0
- package/styles/base-styles.js +3045 -0
- package/styles/base-styles.js.map +1 -0
- package/styles/themes/theme-alpine.d.ts +2 -0
- package/styles/themes/theme-alpine.d.ts.map +1 -0
- package/styles/themes/theme-alpine.js +120 -0
- package/styles/themes/theme-alpine.js.map +1 -0
- package/styles/themes/theme-balham.d.ts +2 -0
- package/styles/themes/theme-balham.d.ts.map +1 -0
- package/styles/themes/theme-balham.js +120 -0
- package/styles/themes/theme-balham.js.map +1 -0
- package/styles/themes/theme-dark.d.ts +2 -0
- package/styles/themes/theme-dark.d.ts.map +1 -0
- package/styles/themes/theme-dark.js +216 -0
- package/styles/themes/theme-dark.js.map +1 -0
- package/styles/themes/theme-material.d.ts +2 -0
- package/styles/themes/theme-material.d.ts.map +1 -0
- package/styles/themes/theme-material.js +134 -0
- package/styles/themes/theme-material.js.map +1 -0
- package/styles/themes/theme-quartz.d.ts +2 -0
- package/styles/themes/theme-quartz.d.ts.map +1 -0
- package/styles/themes/theme-quartz.js +120 -0
- package/styles/themes/theme-quartz.js.map +1 -0
- package/theme/css-var-injector.d.ts +10 -0
- package/theme/css-var-injector.d.ts.map +1 -0
- package/theme/css-var-injector.js +63 -0
- package/theme/css-var-injector.js.map +1 -0
- package/theme/theme-manager.d.ts +20 -0
- package/theme/theme-manager.d.ts.map +1 -0
- package/theme/theme-manager.js +79 -0
- package/theme/theme-manager.js.map +1 -0
- package/theme/themes/dark-theme.d.ts +3 -0
- package/theme/themes/dark-theme.d.ts.map +1 -0
- package/theme/themes/dark-theme.js +149 -0
- package/theme/themes/dark-theme.js.map +1 -0
- package/theme/themes/light-theme.d.ts +3 -0
- package/theme/themes/light-theme.d.ts.map +1 -0
- package/theme/themes/light-theme.js +149 -0
- package/theme/themes/light-theme.js.map +1 -0
- package/types/column.types.d.ts +195 -0
- package/types/column.types.d.ts.map +1 -0
- package/types/column.types.js +2 -0
- package/types/column.types.js.map +1 -0
- package/types/event.types.d.ts +213 -0
- package/types/event.types.d.ts.map +1 -0
- package/types/event.types.js +67 -0
- package/types/event.types.js.map +1 -0
- package/types/filter.types.d.ts +42 -0
- package/types/filter.types.d.ts.map +1 -0
- package/types/filter.types.js +2 -0
- package/types/filter.types.js.map +1 -0
- package/types/grid.types.d.ts +214 -0
- package/types/grid.types.d.ts.map +1 -0
- package/types/grid.types.js +2 -0
- package/types/grid.types.js.map +1 -0
- package/types/master-detail.types.d.ts +112 -0
- package/types/master-detail.types.d.ts.map +1 -0
- package/types/master-detail.types.js +2 -0
- package/types/master-detail.types.js.map +1 -0
- package/types/photon-ai.types.d.ts +19 -0
- package/types/photon-ai.types.d.ts.map +1 -0
- package/types/photon-ai.types.js +2 -0
- package/types/photon-ai.types.js.map +1 -0
- package/types/renderer.types.d.ts +156 -0
- package/types/renderer.types.d.ts.map +1 -0
- package/types/renderer.types.js +19 -0
- package/types/renderer.types.js.map +1 -0
- package/types/row.types.d.ts +127 -0
- package/types/row.types.d.ts.map +1 -0
- package/types/row.types.js +9 -0
- package/types/row.types.js.map +1 -0
- package/types/theme.types.d.ts +159 -0
- package/types/theme.types.d.ts.map +1 -0
- package/types/theme.types.js +2 -0
- package/types/theme.types.js.map +1 -0
- package/types/tree-data.types.d.ts +94 -0
- package/types/tree-data.types.d.ts.map +1 -0
- package/types/tree-data.types.js +2 -0
- 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":"AAGA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEjE,mFAAmF;AACnF,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAShC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,aAAa;IAWxB,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAVtC,eAAU,GAA6B,IAAI,CAAC;QAC5C,YAAO,GAAuB,IAAI,CAAC;QACnC,UAAK,GAAuB,IAAI,CAAC;QACjC,YAAO,GAA+B,IAAI,CAAC;QAC3C,cAAS,GAA6B,IAAI,CAAC;QAE3C,kBAAa,GAAmD,IAAI,CAAC;QACrE,WAAM,GAAG,KAAK,CAAC;QACf,aAAQ,GAAkB,EAAE,CAAC;IAEY,CAAC;IAElD,gHAAgH;IAChH,KAAK,CAAC,UAAuB,EAAE,MAAsB;QACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,2IAA2I;IAC3I,gBAAgB,CAAC,EAAyC;QACxD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,6JAA6J;IAC7J,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;QACxG,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QACtD,qBAAqB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC9D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,0EAA0E;IAElE,aAAa;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxF,GAAG,CAAC,SAAS,GAAG,gBAAgB,CAAC;QACjC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,UAAU,CAAC,MAAsB;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;QACvC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC5C,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAE9C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAE/C,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW;QACjB,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC9C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;QAChC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC9F,QAAQ,CAAC,SAAS,GAAG,oBAAoB,CAAC;QAC1C,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACtE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,cAAc,CAAC,MAAsB;QAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAElD,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE;YACtC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,kCAAkC;YACrE,IAAI,EAAE,CAAC;SACR,CAAwB,CAAC;QAC1B,KAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC;QACxC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QAEzB,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACtC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACrC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAEnE,QAAQ,CAAC,KAA0B;QACzC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC;IAChF,CAAC;IAEO,SAAS;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO;QAE/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO;QAEtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAElB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,aAAa,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,6MAA6M;YACnN,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,OAAoB;QACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAExB,MAAM,MAAM,GAAG,SAAS,CAAC,8CAA8C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,6BAA6B,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QACpF,CAAC;QACD,+EAA+E;QAC/E,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -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"}
|