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,296 @@
|
|
|
1
|
+
import { GridEventType } from '../../types/event.types';
|
|
2
|
+
import { resolveEdges, buildTree, flattenTree } from './tree-node';
|
|
3
|
+
/**
|
|
4
|
+
* Orchestrates Tree Data end to end: builds the hierarchy from raw row data,
|
|
5
|
+
* filters it, sorts it, and flattens it into the plain `RowNode[]` the rest
|
|
6
|
+
* of the pipeline already expects. Plays the same role for self-referential
|
|
7
|
+
* hierarchies that `GroupingEngine` plays for column-value grouping —
|
|
8
|
+
* expansion state lives in the separate `TreeExpansionService`, and
|
|
9
|
+
* filtering/sorting are done by *calling* `FilterEngine`/`SortEngine`, never
|
|
10
|
+
* by re-implementing condition matching or comparison here.
|
|
11
|
+
*/
|
|
12
|
+
export class TreeDataService {
|
|
13
|
+
constructor(store, eventBus, filterEngine, sortEngine, expansionService) {
|
|
14
|
+
this.store = store;
|
|
15
|
+
this.eventBus = eventBus;
|
|
16
|
+
this.filterEngine = filterEngine;
|
|
17
|
+
this.sortEngine = sortEngine;
|
|
18
|
+
this.expansionService = expansionService;
|
|
19
|
+
this.config = null;
|
|
20
|
+
/** The last-built, unfiltered/unsorted tree — kept so `moveNode`/`loadChildren`/selection cascades can resolve a node by id without re-walking raw data. */
|
|
21
|
+
this.lastRoots = [];
|
|
22
|
+
this.lastNodesById = new Map();
|
|
23
|
+
/** Node ids already evaluated against `defaultExpanded` — mirrors `MasterDetailEngine.defaultAppliedNodeIds` so a user-collapsed node is never silently re-expanded on the next pipeline run. */
|
|
24
|
+
this.defaultAppliedNodeIds = new Set();
|
|
25
|
+
this.pendingLoadNodeIds = new Set();
|
|
26
|
+
this.refreshCallback = null;
|
|
27
|
+
}
|
|
28
|
+
/** Applies the grid's `treeData` option block. Called once from `GridCore.initialize`. */
|
|
29
|
+
configure(config) {
|
|
30
|
+
this.config = config?.enabled ? config : null;
|
|
31
|
+
}
|
|
32
|
+
isEnabled() {
|
|
33
|
+
return this.config !== null;
|
|
34
|
+
}
|
|
35
|
+
getConfig() {
|
|
36
|
+
return this.config;
|
|
37
|
+
}
|
|
38
|
+
/** Registers the callback used to re-run the pipeline after an async lazy-load resolves or a reparent commits. Wired from `GridCore`. */
|
|
39
|
+
setRefreshCallback(fn) {
|
|
40
|
+
this.refreshCallback = fn;
|
|
41
|
+
}
|
|
42
|
+
/** `'parentId'`/`'childrenField'` hierarchies are stored data and can be mutated by drag-to-reparent; `'dataPath'`/`'custom'` are derived and read-only. */
|
|
43
|
+
supportsReparenting() {
|
|
44
|
+
return this.config?.mode === 'parentId' || this.config?.mode === 'childrenField';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The full build → filter → sort → flatten sequence `GridApi.applyPipeline`
|
|
48
|
+
* calls when Tree Data is enabled, replacing the flat filter/sort/group
|
|
49
|
+
* steps for this pipeline run.
|
|
50
|
+
*/
|
|
51
|
+
getFlatVisibleRows(allRows, columns) {
|
|
52
|
+
if (!this.config)
|
|
53
|
+
return allRows;
|
|
54
|
+
let roots = this.buildRoots(allRows);
|
|
55
|
+
this.applyDefaultExpansion(roots);
|
|
56
|
+
roots = this.filterTree(roots, columns);
|
|
57
|
+
roots = this.sortTree(roots, columns);
|
|
58
|
+
return flattenTree(roots, this.expansionService.getExpandedIds());
|
|
59
|
+
}
|
|
60
|
+
/** O(n) hierarchy construction from the grid's raw (flat, un-treed) row data. Caches the result for `moveNode`/`loadChildren`/selection-cascade lookups. */
|
|
61
|
+
buildRoots(allRows) {
|
|
62
|
+
if (!this.config)
|
|
63
|
+
return [];
|
|
64
|
+
const rawRecords = allRows.map((r) => r.data);
|
|
65
|
+
const edges = resolveEdges(this.config, rawRecords);
|
|
66
|
+
const roots = buildTree(edges, allRows[0]?.height ?? 50);
|
|
67
|
+
this.lastRoots = roots;
|
|
68
|
+
this.lastNodesById = new Map();
|
|
69
|
+
const index = (nodes) => {
|
|
70
|
+
for (const node of nodes) {
|
|
71
|
+
this.lastNodesById.set(node.nodeId, node);
|
|
72
|
+
if (node.children.length > 0)
|
|
73
|
+
index(node.children);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
index(roots);
|
|
77
|
+
return roots;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Tree-aware filtering: a node survives if it matches the active filters
|
|
81
|
+
* itself (via `FilterEngine.matchesRow` — the exact predicate the flat
|
|
82
|
+
* path uses) **or** any descendant does, so a matching leaf's ancestor
|
|
83
|
+
* chain stays visible. Builds filtered node copies rather than mutating
|
|
84
|
+
* the cached hierarchy, so `lastRoots`/`lastNodesById` stay the true,
|
|
85
|
+
* unfiltered tree for reparenting/selection.
|
|
86
|
+
*/
|
|
87
|
+
filterTree(roots, columns) {
|
|
88
|
+
if (!this.filterEngine.hasActiveFilters())
|
|
89
|
+
return roots;
|
|
90
|
+
const filterNode = (node) => {
|
|
91
|
+
const filteredChildren = node.children
|
|
92
|
+
.map(filterNode)
|
|
93
|
+
.filter((n) => n !== null);
|
|
94
|
+
const selfMatches = this.filterEngine.matchesRow(node, columns);
|
|
95
|
+
if (!selfMatches && filteredChildren.length === 0)
|
|
96
|
+
return null;
|
|
97
|
+
return { ...node, children: filteredChildren, hasChildren: filteredChildren.length > 0 || node.hasChildren };
|
|
98
|
+
};
|
|
99
|
+
return roots.map(filterNode).filter((n) => n !== null);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Tree-aware sorting: reuses `SortEngine.applySorting` completely
|
|
103
|
+
* unchanged, once per sibling array (including the roots array itself).
|
|
104
|
+
* `applySorting` already no-ops when no sort is configured, so an
|
|
105
|
+
* unsorted tree walk costs one cheap pass with zero allocation.
|
|
106
|
+
*/
|
|
107
|
+
sortTree(roots, columns) {
|
|
108
|
+
const sortChildren = (nodes) => {
|
|
109
|
+
const sorted = this.sortEngine.applySorting(nodes, columns);
|
|
110
|
+
for (const node of sorted) {
|
|
111
|
+
if (node.children.length > 0)
|
|
112
|
+
node.children = sortChildren(node.children);
|
|
113
|
+
}
|
|
114
|
+
return sorted;
|
|
115
|
+
};
|
|
116
|
+
return sortChildren(roots);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Computes `RowNode.subtreeEndTop` for every tree row in the final,
|
|
120
|
+
* laid-out `visibleRows` array. Must run *after* `RowModel.setVisibleRows`
|
|
121
|
+
* assigns `top`/`height` — subtree extents can't be known before layout —
|
|
122
|
+
* so `GridApi.applyPipeline` calls this as a separate step, not from
|
|
123
|
+
* `getFlatVisibleRows`. One O(n) stack-based pass: whenever a row appears
|
|
124
|
+
* whose `level` is <= an open ancestor's level, that ancestor's subtree
|
|
125
|
+
* just ended at the new row's `top`.
|
|
126
|
+
*/
|
|
127
|
+
annotateSubtreeExtents(rows) {
|
|
128
|
+
if (!this.config || rows.length === 0)
|
|
129
|
+
return;
|
|
130
|
+
const stack = [];
|
|
131
|
+
for (const row of rows) {
|
|
132
|
+
if (row.type !== 'data')
|
|
133
|
+
continue;
|
|
134
|
+
while (stack.length > 0 && stack[stack.length - 1].level >= row.level) {
|
|
135
|
+
stack.pop().subtreeEndTop = row.top;
|
|
136
|
+
}
|
|
137
|
+
stack.push(row);
|
|
138
|
+
}
|
|
139
|
+
const lastRow = rows[rows.length - 1];
|
|
140
|
+
const end = lastRow.top + lastRow.height;
|
|
141
|
+
for (const open of stack)
|
|
142
|
+
open.subtreeEndTop = end;
|
|
143
|
+
}
|
|
144
|
+
getNode(nodeId) {
|
|
145
|
+
return this.lastNodesById.get(nodeId);
|
|
146
|
+
}
|
|
147
|
+
/** The full, unfiltered/unsorted hierarchy from the most recent `getFlatVisibleRows`/`buildRoots` call — what `expandAllTreeNodes`/`collapseAllTreeNodes` walk. */
|
|
148
|
+
getRoots() {
|
|
149
|
+
return this.lastRoots;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Mutates the underlying raw hierarchy so a subsequent pipeline run
|
|
153
|
+
* rebuilds the tree with `draggedId` under its new parent, then requests a
|
|
154
|
+
* refresh — never hand-splices `visibleRows`, since tree mode always
|
|
155
|
+
* rebuilds it from raw data on every pipeline run anyway.
|
|
156
|
+
*
|
|
157
|
+
* `position: 'before'/'after'` reparents onto the *same parent as*
|
|
158
|
+
* `targetId`; precise sibling ordering within that parent is not yet
|
|
159
|
+
* tracked (a follow-up — see plan notes), so the node lands as that
|
|
160
|
+
* parent's last child rather than at the exact hover position.
|
|
161
|
+
*/
|
|
162
|
+
moveNode(draggedId, targetId, position) {
|
|
163
|
+
if (!this.config || !this.supportsReparenting()) {
|
|
164
|
+
console.warn(`[PhotonGrid] Tree Data drag-to-reparent isn't supported for mode "${this.config?.mode}" (only "parentId"/"childrenField" have a mutable hierarchy).`);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
const dragged = this.lastNodesById.get(draggedId);
|
|
168
|
+
const target = this.lastNodesById.get(targetId);
|
|
169
|
+
if (!dragged || !target || dragged.isTreeFiller || target.isTreeFiller)
|
|
170
|
+
return false;
|
|
171
|
+
const newParent = position === 'inside' ? target : target.parent;
|
|
172
|
+
if (newParent === dragged || this.isDescendantOf(newParent, dragged))
|
|
173
|
+
return false; // never drop a node inside its own subtree
|
|
174
|
+
if (this.config.mode === 'parentId') {
|
|
175
|
+
const idField = this.config.idField ?? 'id';
|
|
176
|
+
const parentIdField = this.config.parentIdField ?? 'parentId';
|
|
177
|
+
dragged.data[parentIdField] = newParent ? newParent.data[idField] : null;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this.reparentChildrenField(dragged, newParent);
|
|
181
|
+
}
|
|
182
|
+
this.refreshCallback?.();
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
/** `'childrenField'` mode: splice the raw record out of its old parent's `children` array and into the new one — both are live references shared with `RowModel`'s raw data, so this mutation is visible on the next pipeline run. */
|
|
186
|
+
reparentChildrenField(dragged, newParent) {
|
|
187
|
+
const childrenField = this.config.childrenField ?? 'children';
|
|
188
|
+
const oldParentChildren = dragged.parent
|
|
189
|
+
? (dragged.parent.data[childrenField] ?? [])
|
|
190
|
+
: null;
|
|
191
|
+
if (oldParentChildren) {
|
|
192
|
+
const idx = oldParentChildren.indexOf(dragged.data);
|
|
193
|
+
if (idx !== -1)
|
|
194
|
+
oldParentChildren.splice(idx, 1);
|
|
195
|
+
}
|
|
196
|
+
if (newParent) {
|
|
197
|
+
const newSiblings = newParent.data[childrenField] ?? [];
|
|
198
|
+
newSiblings.push(dragged.data);
|
|
199
|
+
newParent.data[childrenField] = newSiblings;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
isDescendantOf(candidate, ancestor) {
|
|
203
|
+
let node = candidate;
|
|
204
|
+
while (node) {
|
|
205
|
+
if (node === ancestor)
|
|
206
|
+
return true;
|
|
207
|
+
node = node.parent;
|
|
208
|
+
}
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Lazy-loads a node's children via `TreeDataConfig.lazyLoadChildren`.
|
|
213
|
+
* No-ops if lazy loading isn't configured, children are already loaded, or
|
|
214
|
+
* a fetch for this node is already in flight. On resolve, appends the
|
|
215
|
+
* fetched raw records as children of `node.data` (mode-appropriate: sets
|
|
216
|
+
* `parentId` for `'parentId'` mode, pushes into the `children` array for
|
|
217
|
+
* `'childrenField'` mode) and refreshes.
|
|
218
|
+
*/
|
|
219
|
+
loadChildren(nodeId) {
|
|
220
|
+
const fn = this.config?.lazyLoadChildren;
|
|
221
|
+
const node = this.lastNodesById.get(nodeId);
|
|
222
|
+
if (!fn || !node || node.childrenLoaded || this.pendingLoadNodeIds.has(nodeId))
|
|
223
|
+
return;
|
|
224
|
+
this.pendingLoadNodeIds.add(nodeId);
|
|
225
|
+
fn(node)
|
|
226
|
+
.then((children) => {
|
|
227
|
+
this.attachLoadedChildren(node, children);
|
|
228
|
+
node.childrenLoaded = true;
|
|
229
|
+
this.eventBus.emit(GridEventType.TREE_CHILDREN_LOADED, { nodeId, children });
|
|
230
|
+
})
|
|
231
|
+
.catch((err) => {
|
|
232
|
+
console.error(`[PhotonGrid] treeData.lazyLoadChildren failed for node "${nodeId}":`, err);
|
|
233
|
+
})
|
|
234
|
+
.finally(() => {
|
|
235
|
+
this.pendingLoadNodeIds.delete(nodeId);
|
|
236
|
+
this.refreshCallback?.();
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
isLoadPending(nodeId) {
|
|
240
|
+
return this.pendingLoadNodeIds.has(nodeId);
|
|
241
|
+
}
|
|
242
|
+
attachLoadedChildren(node, children) {
|
|
243
|
+
if (!this.config)
|
|
244
|
+
return;
|
|
245
|
+
if (this.config.mode === 'parentId') {
|
|
246
|
+
const idField = this.config.idField ?? 'id';
|
|
247
|
+
const parentIdField = this.config.parentIdField ?? 'parentId';
|
|
248
|
+
const parentId = node.data[idField];
|
|
249
|
+
for (const child of children)
|
|
250
|
+
child[parentIdField] = parentId;
|
|
251
|
+
}
|
|
252
|
+
else if (this.config.mode === 'childrenField') {
|
|
253
|
+
const childrenField = this.config.childrenField ?? 'children';
|
|
254
|
+
node.data[childrenField] = children;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Applies `TreeDataConfig.defaultExpanded` — but only to nodes never seen
|
|
259
|
+
* before (tracked in `defaultAppliedNodeIds`, mirroring
|
|
260
|
+
* `MasterDetailEngine.defaultAppliedNodeIds`). This runs on *every*
|
|
261
|
+
* pipeline refresh (including the one right after a user collapses a
|
|
262
|
+
* node), so re-evaluating already-seen nodes here would immediately
|
|
263
|
+
* stomp a manual collapse back open — the exact bug this guard prevents.
|
|
264
|
+
* `maxLevel` is `Infinity` for `defaultExpanded: true` (expand everything)
|
|
265
|
+
* or the configured depth for a number.
|
|
266
|
+
*/
|
|
267
|
+
applyDefaultExpansion(roots) {
|
|
268
|
+
const { defaultExpanded } = this.config ?? {};
|
|
269
|
+
if (!defaultExpanded)
|
|
270
|
+
return;
|
|
271
|
+
const maxLevel = defaultExpanded === true ? Infinity : defaultExpanded;
|
|
272
|
+
const toExpand = [];
|
|
273
|
+
const collect = (nodes) => {
|
|
274
|
+
for (const node of nodes) {
|
|
275
|
+
const isEligible = node.level < maxLevel && (node.children.length > 0 || node.hasChildren);
|
|
276
|
+
if (isEligible && !this.defaultAppliedNodeIds.has(node.nodeId)) {
|
|
277
|
+
this.defaultAppliedNodeIds.add(node.nodeId);
|
|
278
|
+
toExpand.push(node);
|
|
279
|
+
}
|
|
280
|
+
if (node.children.length > 0)
|
|
281
|
+
collect(node.children);
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
collect(roots);
|
|
285
|
+
for (const node of toExpand)
|
|
286
|
+
this.expansionService.expand(node);
|
|
287
|
+
}
|
|
288
|
+
destroy() {
|
|
289
|
+
this.lastRoots = [];
|
|
290
|
+
this.lastNodesById.clear();
|
|
291
|
+
this.defaultAppliedNodeIds.clear();
|
|
292
|
+
this.pendingLoadNodeIds.clear();
|
|
293
|
+
this.refreshCallback = null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=tree-data-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-data-service.js","sourceRoot":"","sources":["../../../src/engines/tree/tree-data-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { RowNode } from '../../types/row.types';
|
|
2
|
+
import type { GridStore } from '../../core/grid-store';
|
|
3
|
+
import type { EventBus } from '../../event-bus/event-bus';
|
|
4
|
+
/**
|
|
5
|
+
* Owns Tree Data's expand/collapse state — `expandedTreeNodeIds` on
|
|
6
|
+
* `GridStore` — and nothing else. Deliberately kept separate from
|
|
7
|
+
* `TreeDataService` (which builds/filters/sorts the hierarchy) even though
|
|
8
|
+
* `GroupingEngine` inlines this exact same responsibility for column-value
|
|
9
|
+
* groups; splitting it out here is what the tree feature asked for, and
|
|
10
|
+
* doesn't require touching grouping's already-working code to match.
|
|
11
|
+
*
|
|
12
|
+
* Method shapes mirror `GroupingEngine.expandGroup`/`collapseGroup`/
|
|
13
|
+
* `toggleGroup`/`isGroupExpanded` (`grouping-engine.ts:72-107`) almost
|
|
14
|
+
* verbatim — same pattern, different key namespace.
|
|
15
|
+
*/
|
|
16
|
+
export declare class TreeExpansionService {
|
|
17
|
+
private store;
|
|
18
|
+
private eventBus;
|
|
19
|
+
constructor(store: GridStore, eventBus: EventBus);
|
|
20
|
+
expand(node: RowNode): void;
|
|
21
|
+
collapse(node: RowNode): void;
|
|
22
|
+
toggle(node: RowNode): void;
|
|
23
|
+
isExpanded(nodeId: string): boolean;
|
|
24
|
+
/** Expands every node in `roots` (and their descendants) — "expand all". */
|
|
25
|
+
expandAll(roots: RowNode[]): void;
|
|
26
|
+
collapseAll(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Expands every node whose depth is less than `maxLevel` — backs
|
|
29
|
+
* `TreeDataConfig.defaultExpanded` when it's a number (e.g. `1` expands
|
|
30
|
+
* just the roots). `maxLevel <= 0` leaves everything collapsed.
|
|
31
|
+
*/
|
|
32
|
+
expandToLevel(roots: RowNode[], maxLevel: number): void;
|
|
33
|
+
getExpandedIds(): ReadonlySet<string>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=tree-expansion-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-expansion-service.d.ts","sourceRoot":"","sources":["../../../src/engines/tree/tree-expansion-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;gBADR,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ;IAG5B,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO7B,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAK3B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC,4EAA4E;IAC5E,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAYjC,WAAW,IAAI,IAAI;IAInB;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkBvD,cAAc,IAAI,WAAW,CAAC,MAAM,CAAC;CAGtC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { GridEventType } from '../../types/event.types';
|
|
2
|
+
/**
|
|
3
|
+
* Owns Tree Data's expand/collapse state — `expandedTreeNodeIds` on
|
|
4
|
+
* `GridStore` — and nothing else. Deliberately kept separate from
|
|
5
|
+
* `TreeDataService` (which builds/filters/sorts the hierarchy) even though
|
|
6
|
+
* `GroupingEngine` inlines this exact same responsibility for column-value
|
|
7
|
+
* groups; splitting it out here is what the tree feature asked for, and
|
|
8
|
+
* doesn't require touching grouping's already-working code to match.
|
|
9
|
+
*
|
|
10
|
+
* Method shapes mirror `GroupingEngine.expandGroup`/`collapseGroup`/
|
|
11
|
+
* `toggleGroup`/`isGroupExpanded` (`grouping-engine.ts:72-107`) almost
|
|
12
|
+
* verbatim — same pattern, different key namespace.
|
|
13
|
+
*/
|
|
14
|
+
export class TreeExpansionService {
|
|
15
|
+
constructor(store, eventBus) {
|
|
16
|
+
this.store = store;
|
|
17
|
+
this.eventBus = eventBus;
|
|
18
|
+
}
|
|
19
|
+
expand(node) {
|
|
20
|
+
const ids = new Set(this.store.get('expandedTreeNodeIds'));
|
|
21
|
+
ids.add(node.nodeId);
|
|
22
|
+
this.store.set('expandedTreeNodeIds', ids);
|
|
23
|
+
this.eventBus.emit(GridEventType.TREE_NODE_EXPANDED, { nodeId: node.nodeId, row: node });
|
|
24
|
+
}
|
|
25
|
+
collapse(node) {
|
|
26
|
+
const ids = new Set(this.store.get('expandedTreeNodeIds'));
|
|
27
|
+
ids.delete(node.nodeId);
|
|
28
|
+
this.store.set('expandedTreeNodeIds', ids);
|
|
29
|
+
this.eventBus.emit(GridEventType.TREE_NODE_COLLAPSED, { nodeId: node.nodeId, row: node });
|
|
30
|
+
}
|
|
31
|
+
toggle(node) {
|
|
32
|
+
if (this.isExpanded(node.nodeId))
|
|
33
|
+
this.collapse(node);
|
|
34
|
+
else
|
|
35
|
+
this.expand(node);
|
|
36
|
+
}
|
|
37
|
+
isExpanded(nodeId) {
|
|
38
|
+
return this.store.get('expandedTreeNodeIds').has(nodeId);
|
|
39
|
+
}
|
|
40
|
+
/** Expands every node in `roots` (and their descendants) — "expand all". */
|
|
41
|
+
expandAll(roots) {
|
|
42
|
+
const ids = new Set();
|
|
43
|
+
const collect = (nodes) => {
|
|
44
|
+
for (const node of nodes) {
|
|
45
|
+
if (node.children.length > 0 || node.hasChildren)
|
|
46
|
+
ids.add(node.nodeId);
|
|
47
|
+
if (node.children.length > 0)
|
|
48
|
+
collect(node.children);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
collect(roots);
|
|
52
|
+
this.store.set('expandedTreeNodeIds', ids);
|
|
53
|
+
}
|
|
54
|
+
collapseAll() {
|
|
55
|
+
this.store.set('expandedTreeNodeIds', new Set());
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Expands every node whose depth is less than `maxLevel` — backs
|
|
59
|
+
* `TreeDataConfig.defaultExpanded` when it's a number (e.g. `1` expands
|
|
60
|
+
* just the roots). `maxLevel <= 0` leaves everything collapsed.
|
|
61
|
+
*/
|
|
62
|
+
expandToLevel(roots, maxLevel) {
|
|
63
|
+
if (maxLevel <= 0) {
|
|
64
|
+
this.collapseAll();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const ids = new Set();
|
|
68
|
+
const collect = (nodes) => {
|
|
69
|
+
for (const node of nodes) {
|
|
70
|
+
if (node.level < maxLevel && (node.children.length > 0 || node.hasChildren)) {
|
|
71
|
+
ids.add(node.nodeId);
|
|
72
|
+
if (node.children.length > 0)
|
|
73
|
+
collect(node.children);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
collect(roots);
|
|
78
|
+
this.store.set('expandedTreeNodeIds', ids);
|
|
79
|
+
}
|
|
80
|
+
getExpandedIds() {
|
|
81
|
+
return this.store.get('expandedTreeNodeIds');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=tree-expansion-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-expansion-service.js","sourceRoot":"","sources":["../../../src/engines/tree/tree-expansion-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,oBAAoB;IAC/B,YACU,KAAgB,EAChB,QAAkB;QADlB,UAAK,GAAL,KAAK,CAAW;QAChB,aAAQ,GAAR,QAAQ,CAAU;IACzB,CAAC;IAEJ,MAAM,CAAC,IAAa;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,QAAQ,CAAC,IAAa;QACpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,IAAa;QAClB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;YACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,4EAA4E;IAC5E,SAAS,CAAC,KAAgB;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAQ,EAAE;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW;oBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW;QACT,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,KAAgB,EAAE,QAAgB;QAC9C,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAQ,EAAE;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { RowNode } from '../../types/row.types';
|
|
2
|
+
import type { TreeDataConfig, TreeEdge } from '../../types/tree-data.types';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves raw row data into `{id, parentId, record}` edges, ready for
|
|
5
|
+
* {@link buildTree}. Dispatches on `config.mode` — this is the only place
|
|
6
|
+
* that branches on hierarchy source; everything downstream is source-agnostic.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveEdges(config: TreeDataConfig, rawRecords: Record<string, unknown>[]): TreeEdge[];
|
|
9
|
+
/**
|
|
10
|
+
* `childrenField` mode: input is already nested (`data[i][childrenField]` is
|
|
11
|
+
* an array of raw child records, not `RowNode`s), so it needs one O(n) DFS
|
|
12
|
+
* walk before it can be treated like every other mode's flat edge list.
|
|
13
|
+
*
|
|
14
|
+
* Ids fall back to a positional path (`"0"`, `"0.1"`, `"0.1.2"`, ...) when a
|
|
15
|
+
* record has no `idField` value — stable across rebuilds as long as the
|
|
16
|
+
* caller's array order/shape doesn't change between pipeline runs, which is
|
|
17
|
+
* what keeps `expandedTreeNodeIds` (keyed by these ids) from losing state on
|
|
18
|
+
* every `refresh()`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function flattenNestedChildren(rootsRaw: Record<string, unknown>[], childrenField: string, idField: string): TreeEdge[];
|
|
21
|
+
/**
|
|
22
|
+
* Builds the `RowNode` tree from resolved edges — classic two-pass O(n)
|
|
23
|
+
* construction (no O(n²) parent scanning): pass 1 creates every node keyed
|
|
24
|
+
* by id, pass 2 wires `children`/`parent`/`level` by looking up each edge's
|
|
25
|
+
* `parentId`. An edge whose `parentId` doesn't resolve to a known id (a
|
|
26
|
+
* dangling reference, or a genuine root) becomes a root.
|
|
27
|
+
*
|
|
28
|
+
* `expanded` is intentionally left `false` here — it's set per-node by
|
|
29
|
+
* {@link flattenTree} at flatten time, since expansion state is external,
|
|
30
|
+
* mutable, and this function is called fresh on every pipeline run.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildTree(edges: TreeEdge[], defaultRowHeight?: number): RowNode[];
|
|
33
|
+
/**
|
|
34
|
+
* Flattens an expanded subset of the tree into the flat `RowNode[]` every
|
|
35
|
+
* downstream consumer (pagination, Master/Detail injection, virtualization)
|
|
36
|
+
* already expects — mirrors `flattenGroupTree` (`group-node.ts`) exactly:
|
|
37
|
+
* push a node, recurse into its children only if it's expanded.
|
|
38
|
+
*/
|
|
39
|
+
export declare function flattenTree(roots: RowNode[], expandedIds: ReadonlySet<string>): RowNode[];
|
|
40
|
+
//# sourceMappingURL=tree-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-node.d.ts","sourceRoot":"","sources":["../../../src/engines/tree/tree-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAwB5E;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACpC,QAAQ,EAAE,CAaZ;AAkED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACnC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,QAAQ,EAAE,CAqBZ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,SAAK,GAAG,OAAO,EAAE,CA+C7E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAazF"}
|