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,549 @@
|
|
|
1
|
+
import { GridEventType } from '../types/event.types';
|
|
2
|
+
import { LogicalGroupRegistry } from './logical-group-registry';
|
|
3
|
+
import { DisplayGroupBuilder } from './display-group-builder';
|
|
4
|
+
import { DisplayGroupHeaderBuilder } from './display-group-header-builder';
|
|
5
|
+
import { DisplayGroupDragHandler } from './display-group-drag-handler';
|
|
6
|
+
/**
|
|
7
|
+
* Orchestrates the complete Display Group Engine for one grid instance.
|
|
8
|
+
*
|
|
9
|
+
* ### Responsibilities
|
|
10
|
+
* - Parse column definitions into the immutable {@link LogicalGroupRegistry}.
|
|
11
|
+
* - Build fresh {@link DisplayHeaderTree} instances via {@link DisplayGroupBuilder}.
|
|
12
|
+
* - Manage per-logical-group collapse state.
|
|
13
|
+
* - Handle group-move (drag-drop) by reordering `store.columns`.
|
|
14
|
+
* - Handle group-resize by distributing width proportionally among leaves.
|
|
15
|
+
* - Expose the DOM builder ({@link DisplayGroupHeaderBuilder}) for `HeaderRenderer`.
|
|
16
|
+
* - Create and own the drag handler ({@link DisplayGroupDragHandler}).
|
|
17
|
+
*
|
|
18
|
+
* ### Architecture (Display Group Builder pattern)
|
|
19
|
+
* ```
|
|
20
|
+
* Original Column Tree (IMMUTABLE, stored in LogicalGroupRegistry)
|
|
21
|
+
* ↓
|
|
22
|
+
* Displayed Column Order (store.columns — changes on drag / pin / show / hide)
|
|
23
|
+
* ↓
|
|
24
|
+
* DisplayGroupBuilder.build() (walk displayed order, create display instances)
|
|
25
|
+
* ↓
|
|
26
|
+
* DisplayHeaderTree (flat rows + DisplayGroupNode instances)
|
|
27
|
+
* ↓
|
|
28
|
+
* DisplayGroupHeaderBuilder.buildGroupRows() (DOM)
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const engine = new DisplayGroupEngine(colStyles, eventBus, columnModel, store, iconRenderer);
|
|
34
|
+
* engine.parse(options.columns);
|
|
35
|
+
* renderer.setDisplayGroupEngine(engine);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export class DisplayGroupEngine {
|
|
39
|
+
constructor(colStyles, eventBus, columnModel, store, iconRenderer) {
|
|
40
|
+
this.colStyles = colStyles;
|
|
41
|
+
this.eventBus = eventBus;
|
|
42
|
+
this.columnModel = columnModel;
|
|
43
|
+
this.store = store;
|
|
44
|
+
this.iconRenderer = iconRenderer;
|
|
45
|
+
/** Drag handler — created lazily on first `createDragHandler()` call. */
|
|
46
|
+
this.dragHandler = null;
|
|
47
|
+
/**
|
|
48
|
+
* Per-instance collapse state.
|
|
49
|
+
* Keyed by stable `instanceId` (`"${logicalGroupId}:${firstLeafColId}"`).
|
|
50
|
+
* Persisted across header rebuilds.
|
|
51
|
+
*/
|
|
52
|
+
this.collapseState = new Map();
|
|
53
|
+
/**
|
|
54
|
+
* Cache of leaf colIds that were visible just before a group instance was
|
|
55
|
+
* collapsed. Used on expand to restore exactly the pre-collapse visibility
|
|
56
|
+
* rather than making ALL registry leaves visible (which would conflict with
|
|
57
|
+
* columns that were manually hidden before the collapse).
|
|
58
|
+
*/
|
|
59
|
+
this.instanceLeaveCache = new Map();
|
|
60
|
+
/**
|
|
61
|
+
* Snapshot of `store.columns` taken at the moment a group drag is activated.
|
|
62
|
+
* Every live preview move is applied against this base so intermediate preview
|
|
63
|
+
* states don't compound — the final position is always relative to the original
|
|
64
|
+
* column order, not the previous preview frame.
|
|
65
|
+
* Cleared on drop confirmation.
|
|
66
|
+
*/
|
|
67
|
+
this.previewBaseColumns = null;
|
|
68
|
+
this.registry = new LogicalGroupRegistry();
|
|
69
|
+
this.builder = new DisplayGroupBuilder();
|
|
70
|
+
this.headerBuilder = new DisplayGroupHeaderBuilder(iconRenderer);
|
|
71
|
+
}
|
|
72
|
+
// ── Initialization ────────────────────────────────────────────────────────
|
|
73
|
+
/**
|
|
74
|
+
* Parse the top-level column definition array and populate the logical
|
|
75
|
+
* group registry. Must be called before any `buildTree()` invocations.
|
|
76
|
+
*
|
|
77
|
+
* Group `ColumnDef` entries (those with a `.children` array) are recorded as
|
|
78
|
+
* `LogicalGroupDef` objects. Leaf columns receive their full group path.
|
|
79
|
+
*
|
|
80
|
+
* @param columns - Top-level `ColumnDef[]`, possibly containing nested groups.
|
|
81
|
+
*/
|
|
82
|
+
parse(columns) {
|
|
83
|
+
this.registry.parse(columns);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* `true` when the parsed column definitions contained at least one group.
|
|
87
|
+
* Use this to decide whether group header rows should be rendered.
|
|
88
|
+
*/
|
|
89
|
+
get hasGroups() { return this.registry.hasGroups; }
|
|
90
|
+
/**
|
|
91
|
+
* `true` while a group header drag is currently in progress.
|
|
92
|
+
* Used by the `GridRenderer` store-watcher to skip the full header
|
|
93
|
+
* destroy / rebuild cycle during live-preview drag, preventing flicker.
|
|
94
|
+
*/
|
|
95
|
+
get isDraggingGroup() { return this.dragHandler?.isDraggingGroup ?? false; }
|
|
96
|
+
/**
|
|
97
|
+
* Returns `true` when the given column has no group ancestry — it is a flat
|
|
98
|
+
* (ungrouped) leaf column rendered alongside grouped columns.
|
|
99
|
+
*
|
|
100
|
+
* @param colId - Leaf column ID to check.
|
|
101
|
+
*/
|
|
102
|
+
isFlat(colId) { return this.registry.getPath(colId).length === 0; }
|
|
103
|
+
// ── Display tree building ─────────────────────────────────────────────────
|
|
104
|
+
/**
|
|
105
|
+
* Build a fresh `DisplayHeaderTree` for the given visible columns.
|
|
106
|
+
*
|
|
107
|
+
* The result is consumed immediately by `DisplayGroupHeaderBuilder` to
|
|
108
|
+
* produce DOM — it should not be stored beyond a single render frame.
|
|
109
|
+
*
|
|
110
|
+
* @param columns - Visible columns for **one panel** in left-to-right order.
|
|
111
|
+
* Columns with `visible === false` are automatically skipped.
|
|
112
|
+
*/
|
|
113
|
+
buildTree(columns) {
|
|
114
|
+
return this.builder.build(columns, this.registry, this.collapseState, this.colStyles);
|
|
115
|
+
}
|
|
116
|
+
// ── Collapse / expand ─────────────────────────────────────────────────────
|
|
117
|
+
/**
|
|
118
|
+
* Toggle the collapsed state of a specific display group instance.
|
|
119
|
+
*
|
|
120
|
+
* The `instanceId` format is `"${logicalGroupId}:${firstLeafColId}"` — the
|
|
121
|
+
* same stable key computed by `DisplayGroupBuilder` when opening each group
|
|
122
|
+
* instance for the first time.
|
|
123
|
+
*
|
|
124
|
+
* When **collapsing**: hides all visible leaves of this instance except the
|
|
125
|
+
* first ("peek") column. The hidden set is cached so expand can restore
|
|
126
|
+
* exactly the pre-collapse visibility without surfacing columns that were
|
|
127
|
+
* already hidden by other means (e.g. column menu).
|
|
128
|
+
*
|
|
129
|
+
* When **expanding**: restores leaves from the cache. Falls back to all
|
|
130
|
+
* visible instance leaves if no cache entry exists.
|
|
131
|
+
*
|
|
132
|
+
* @param instanceId - Stable instance ID in `"groupId:firstLeafColId"` format.
|
|
133
|
+
*/
|
|
134
|
+
toggleGroup(instanceId) {
|
|
135
|
+
const colonIdx = instanceId.indexOf(':');
|
|
136
|
+
const logicalGroupId = colonIdx >= 0 ? instanceId.slice(0, colonIdx) : instanceId;
|
|
137
|
+
const firstLeafColId = colonIdx >= 0 ? instanceId.slice(colonIdx + 1) : '';
|
|
138
|
+
const wasCollapsed = this.collapseState.get(instanceId) ?? false;
|
|
139
|
+
const isNowCollapsed = !wasCollapsed;
|
|
140
|
+
this.collapseState.set(instanceId, isNowCollapsed);
|
|
141
|
+
const allCols = this.store.get('columns');
|
|
142
|
+
const groupLeafIds = new Set(this.registry.getLeavesForGroup(logicalGroupId));
|
|
143
|
+
const instanceLeaves = this.findInstanceLeaves(allCols, firstLeafColId, groupLeafIds);
|
|
144
|
+
if (isNowCollapsed) {
|
|
145
|
+
// Cache only the leaves that are currently visible so expand doesn't
|
|
146
|
+
// make manually-hidden columns reappear.
|
|
147
|
+
const visibleLeaves = instanceLeaves.filter((c) => c.visible !== false);
|
|
148
|
+
this.instanceLeaveCache.set(instanceId, visibleLeaves.map((c) => c.colId));
|
|
149
|
+
for (let i = 0; i < visibleLeaves.length; i++) {
|
|
150
|
+
this.columnModel.setColumnVisible(visibleLeaves[i].colId, i === 0);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const toRestore = this.instanceLeaveCache.get(instanceId)
|
|
155
|
+
?? instanceLeaves.map((c) => c.colId);
|
|
156
|
+
for (const colId of toRestore) {
|
|
157
|
+
this.columnModel.setColumnVisible(colId, true);
|
|
158
|
+
}
|
|
159
|
+
this.instanceLeaveCache.delete(instanceId);
|
|
160
|
+
}
|
|
161
|
+
this.eventBus.emit(isNowCollapsed
|
|
162
|
+
? GridEventType.COLUMN_GROUP_HEADER_COLLAPSED
|
|
163
|
+
: GridEventType.COLUMN_GROUP_HEADER_EXPANDED, { groupId: logicalGroupId });
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Returns `true` when any display instance of the given logical group is
|
|
167
|
+
* currently collapsed.
|
|
168
|
+
*
|
|
169
|
+
* @param logicalGroupId - Logical group ID to inspect.
|
|
170
|
+
*/
|
|
171
|
+
isCollapsed(logicalGroupId) {
|
|
172
|
+
const prefix = `${logicalGroupId}:`;
|
|
173
|
+
for (const [key, val] of this.collapseState) {
|
|
174
|
+
if (key.startsWith(prefix) && val)
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Returns a serializable snapshot of the current collapse state.
|
|
181
|
+
* Suitable for persistence or state-save/restore scenarios.
|
|
182
|
+
*/
|
|
183
|
+
getCollapseStateSnapshot() {
|
|
184
|
+
return Array.from(this.collapseState.entries()).map(([id, collapsed]) => ({
|
|
185
|
+
logicalGroupId: id,
|
|
186
|
+
collapsed,
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Restore collapse state from a previously saved snapshot without triggering
|
|
191
|
+
* a rebuild — the caller must trigger a rebuild after this call if needed.
|
|
192
|
+
*
|
|
193
|
+
* @param states - Array of saved collapse state entries.
|
|
194
|
+
*/
|
|
195
|
+
applyCollapseState(states) {
|
|
196
|
+
for (const { logicalGroupId, collapsed } of states) {
|
|
197
|
+
this.collapseState.set(logicalGroupId, collapsed);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// ── Group move (drag-drop) ────────────────────────────────────────────────
|
|
201
|
+
/**
|
|
202
|
+
* Move a logical group to a new position in the displayed column order.
|
|
203
|
+
*
|
|
204
|
+
* Gathers all leaves of the group that are currently in `sourcePanel`,
|
|
205
|
+
* removes them from `store.columns`, optionally changes their `pinned`
|
|
206
|
+
* property, then re-inserts them before `insertBeforeColId`.
|
|
207
|
+
*
|
|
208
|
+
* Setting `store.columns` triggers the grid's column-watcher which rebuilds
|
|
209
|
+
* the header automatically.
|
|
210
|
+
*
|
|
211
|
+
* @param logicalGroupId - The logical group being moved.
|
|
212
|
+
* @param sourcePanel - The panel the drag originated from.
|
|
213
|
+
* @param targetPanel - The panel the group is dropped into.
|
|
214
|
+
* @param insertBeforeColId - Leaf column to insert before; `null` = end of panel.
|
|
215
|
+
*/
|
|
216
|
+
handleGroupMoved(logicalGroupId, sourcePanel, targetPanel, insertBeforeColId) {
|
|
217
|
+
const storeColumns = this.store.get('columns');
|
|
218
|
+
const leafIds = this.registry.getLeavesForGroup(logicalGroupId);
|
|
219
|
+
// All leaves of this group currently in the source panel (including hidden)
|
|
220
|
+
const groupLeaves = storeColumns.filter((c) => leafIds.includes(c.colId) && (c.pinned ?? null) === sourcePanel);
|
|
221
|
+
if (groupLeaves.length === 0)
|
|
222
|
+
return;
|
|
223
|
+
const groupLeafSet = new Set(groupLeaves.map((c) => c.colId));
|
|
224
|
+
// Column array with the group's leaves removed
|
|
225
|
+
const withoutGroup = storeColumns.filter((c) => !groupLeafSet.has(c.colId));
|
|
226
|
+
// Update pinned for cross-panel moves
|
|
227
|
+
const movedLeaves = groupLeaves.map((c) => ({
|
|
228
|
+
...c,
|
|
229
|
+
pinned: targetPanel,
|
|
230
|
+
}));
|
|
231
|
+
// Find insertion index in withoutGroup
|
|
232
|
+
let insertIdx;
|
|
233
|
+
if (insertBeforeColId) {
|
|
234
|
+
insertIdx = withoutGroup.findIndex((c) => c.colId === insertBeforeColId);
|
|
235
|
+
if (insertIdx === -1) {
|
|
236
|
+
// Fall back to end of target panel
|
|
237
|
+
insertIdx = this.findEndOfPanel(withoutGroup, targetPanel);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
insertIdx = this.findEndOfPanel(withoutGroup, targetPanel);
|
|
242
|
+
}
|
|
243
|
+
const newColumns = [
|
|
244
|
+
...withoutGroup.slice(0, insertIdx),
|
|
245
|
+
...movedLeaves,
|
|
246
|
+
...withoutGroup.slice(insertIdx),
|
|
247
|
+
];
|
|
248
|
+
this.store.set('columns', newColumns);
|
|
249
|
+
}
|
|
250
|
+
// ── Group resize ──────────────────────────────────────────────────────────
|
|
251
|
+
/**
|
|
252
|
+
* Resize a specific display group instance by distributing `newWidth`
|
|
253
|
+
* proportionally among its visible leaf columns.
|
|
254
|
+
*
|
|
255
|
+
* The `instanceId` format is `"${logicalGroupId}:${firstLeafColId}"`.
|
|
256
|
+
* Only the contiguous block of leaves that form THIS instance are resized —
|
|
257
|
+
* split instances of the same logical group are unaffected.
|
|
258
|
+
*
|
|
259
|
+
* Each leaf's new width = `round(oldWidth × newWidth / currentWidth)`,
|
|
260
|
+
* clamped to the leaf's `minWidth`.
|
|
261
|
+
*
|
|
262
|
+
* @param instanceId - Stable instance ID in `"groupId:firstLeafColId"` format.
|
|
263
|
+
* @param newWidth - New total pixel width for this instance.
|
|
264
|
+
*/
|
|
265
|
+
resizeGroup(instanceId, newWidth) {
|
|
266
|
+
const colonIdx = instanceId.indexOf(':');
|
|
267
|
+
const logicalGroupId = colonIdx >= 0 ? instanceId.slice(0, colonIdx) : instanceId;
|
|
268
|
+
const firstLeafColId = colonIdx >= 0 ? instanceId.slice(colonIdx + 1) : '';
|
|
269
|
+
const allCols = this.store.get('columns');
|
|
270
|
+
const groupLeafIds = new Set(this.registry.getLeavesForGroup(logicalGroupId));
|
|
271
|
+
const leaves = this.findInstanceLeaves(allCols, firstLeafColId, groupLeafIds)
|
|
272
|
+
.filter((c) => c.visible !== false);
|
|
273
|
+
if (leaves.length === 0)
|
|
274
|
+
return;
|
|
275
|
+
const currentWidth = leaves.reduce((s, c) => s + this.colStyles.getWidth(c.colId), 0);
|
|
276
|
+
if (currentWidth <= 0 || Math.abs(newWidth - currentWidth) < 1)
|
|
277
|
+
return;
|
|
278
|
+
const ratio = newWidth / currentWidth;
|
|
279
|
+
for (const leaf of leaves) {
|
|
280
|
+
const oldW = this.colStyles.getWidth(leaf.colId);
|
|
281
|
+
const newW = Math.max(leaf.minWidth ?? 40, Math.round(oldW * ratio));
|
|
282
|
+
this.colStyles.setWidth(leaf.colId, newW);
|
|
283
|
+
this.columnModel.setColumnWidth(leaf.colId, newW, false);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// ── Live drag preview (AG Grid-style) ────────────────────────────────────
|
|
287
|
+
/**
|
|
288
|
+
* Called by {@link DisplayGroupDragHandler} when the drag activation threshold
|
|
289
|
+
* is crossed. Saves the current `store.columns` snapshot so every subsequent
|
|
290
|
+
* {@link applyPreviewMove} can rebase from the original order.
|
|
291
|
+
*/
|
|
292
|
+
beginDragPreview() {
|
|
293
|
+
this.previewBaseColumns = this.store.get('columns');
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Apply a temporary (preview) group move from the original column snapshot.
|
|
297
|
+
*
|
|
298
|
+
* Called on **every slot change** during a drag — i.e. many times before the
|
|
299
|
+
* user releases the mouse. Always rebases from `previewBaseColumns` so
|
|
300
|
+
* intermediate positions don't compound. Updates `store.columns` directly,
|
|
301
|
+
* which triggers the grid's column-watcher and causes the header to rebuild
|
|
302
|
+
* synchronously on the next animation frame.
|
|
303
|
+
*
|
|
304
|
+
* @param logicalGroupId - The group being dragged.
|
|
305
|
+
* @param sourcePanel - Panel the drag originated from.
|
|
306
|
+
* @param targetPanel - Panel currently under the cursor.
|
|
307
|
+
* @param insertBeforeColId - Column to insert the group before; `null` = end.
|
|
308
|
+
*/
|
|
309
|
+
applyPreviewMove(logicalGroupId, sourcePanel, targetPanel, insertBeforeColId) {
|
|
310
|
+
const baseColumns = this.previewBaseColumns;
|
|
311
|
+
if (!baseColumns)
|
|
312
|
+
return;
|
|
313
|
+
const leafIds = this.registry.getLeavesForGroup(logicalGroupId);
|
|
314
|
+
const groupLeaves = baseColumns.filter((c) => leafIds.includes(c.colId) && (c.pinned ?? null) === sourcePanel);
|
|
315
|
+
if (groupLeaves.length === 0)
|
|
316
|
+
return;
|
|
317
|
+
const groupLeafSet = new Set(groupLeaves.map((c) => c.colId));
|
|
318
|
+
const withoutGroup = baseColumns.filter((c) => !groupLeafSet.has(c.colId));
|
|
319
|
+
const movedLeaves = groupLeaves.map((c) => ({
|
|
320
|
+
...c,
|
|
321
|
+
pinned: targetPanel,
|
|
322
|
+
}));
|
|
323
|
+
let insertIdx;
|
|
324
|
+
if (insertBeforeColId) {
|
|
325
|
+
insertIdx = withoutGroup.findIndex((c) => c.colId === insertBeforeColId);
|
|
326
|
+
if (insertIdx === -1)
|
|
327
|
+
insertIdx = this.findEndOfPanel(withoutGroup, targetPanel);
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
insertIdx = this.findEndOfPanel(withoutGroup, targetPanel);
|
|
331
|
+
}
|
|
332
|
+
this.store.set('columns', [
|
|
333
|
+
...withoutGroup.slice(0, insertIdx),
|
|
334
|
+
...movedLeaves,
|
|
335
|
+
...withoutGroup.slice(insertIdx),
|
|
336
|
+
]);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Confirm the drag preview: the store already holds the correct final order
|
|
340
|
+
* from the last {@link applyPreviewMove} call. This simply clears the snapshot.
|
|
341
|
+
*/
|
|
342
|
+
confirmDragPreview() {
|
|
343
|
+
this.previewBaseColumns = null;
|
|
344
|
+
}
|
|
345
|
+
// ── Drag handler factory ──────────────────────────────────────────────────
|
|
346
|
+
/**
|
|
347
|
+
* Create and return the drag handler wired to this engine.
|
|
348
|
+
* Creates a new instance on first call; subsequent calls return the same instance.
|
|
349
|
+
*
|
|
350
|
+
* Group dragging deliberately uses the transform-preview mode rather than the
|
|
351
|
+
* live store-mutation mode. Updating `store.columns` on every hover slot makes
|
|
352
|
+
* body/header virtualization rebuild repeatedly and causes the right-side
|
|
353
|
+
* columns to blink under grouped headers. The final order is committed once on
|
|
354
|
+
* drop, matching AG Grid's stable drag preview behavior.
|
|
355
|
+
*
|
|
356
|
+
* @param gridElGetter - Getter that returns the root `.pg-grid` element.
|
|
357
|
+
* May return `null` before the grid is mounted.
|
|
358
|
+
*/
|
|
359
|
+
createDragHandler(gridElGetter) {
|
|
360
|
+
if (!this.dragHandler) {
|
|
361
|
+
this.dragHandler = new DisplayGroupDragHandler(gridElGetter, (groupId, src, tgt, before) => this.handleGroupMoved(groupId, src, tgt, before), undefined, // previewCallbacks — CSS-transform path is used (no live store mutations)
|
|
362
|
+
(groupId) => this.registry.getLeavesForGroup(groupId));
|
|
363
|
+
}
|
|
364
|
+
return this.dragHandler;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Returns the active drag handler, or `null` if `createDragHandler` has not
|
|
368
|
+
* been called yet.
|
|
369
|
+
*/
|
|
370
|
+
getDragHandler() {
|
|
371
|
+
return this.dragHandler;
|
|
372
|
+
}
|
|
373
|
+
// ── Context-menu helpers (used by GroupContextMenu) ──────────────────────
|
|
374
|
+
/**
|
|
375
|
+
* Expose all leaf column IDs for a logical group.
|
|
376
|
+
* Used by the group context menu to inspect and modify group leaves.
|
|
377
|
+
*
|
|
378
|
+
* @param logicalGroupId - Logical group to inspect.
|
|
379
|
+
*/
|
|
380
|
+
getLeavesForGroup(logicalGroupId) {
|
|
381
|
+
return this.registry.getLeavesForGroup(logicalGroupId);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Returns the positional state of a group within its current panel.
|
|
385
|
+
* Used by the group context menu to enable or disable move items.
|
|
386
|
+
*
|
|
387
|
+
* @param logicalGroupId - The group to inspect.
|
|
388
|
+
*/
|
|
389
|
+
getGroupPositionInfo(logicalGroupId) {
|
|
390
|
+
const allCols = this.store.get('columns');
|
|
391
|
+
const leafIds = new Set(this.registry.getLeavesForGroup(logicalGroupId));
|
|
392
|
+
const firstLeaf = allCols.find((c) => leafIds.has(c.colId));
|
|
393
|
+
if (!firstLeaf)
|
|
394
|
+
return { isFirst: true, isLast: true, panel: null };
|
|
395
|
+
const panel = (firstLeaf.pinned ?? null);
|
|
396
|
+
const panelCols = allCols.filter((c) => (c.pinned ?? null) === panel && c.visible !== false);
|
|
397
|
+
// Positions of this group's leaves within the panel column list
|
|
398
|
+
const leafIndices = panelCols.reduce((acc, c, i) => {
|
|
399
|
+
if (leafIds.has(c.colId))
|
|
400
|
+
acc.push(i);
|
|
401
|
+
return acc;
|
|
402
|
+
}, []);
|
|
403
|
+
if (leafIndices.length === 0)
|
|
404
|
+
return { isFirst: true, isLast: true, panel };
|
|
405
|
+
return {
|
|
406
|
+
isFirst: leafIndices[0] === 0,
|
|
407
|
+
isLast: leafIndices[leafIndices.length - 1] === panelCols.length - 1,
|
|
408
|
+
panel,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Move the group one column position to the left within its current panel.
|
|
413
|
+
* No-op when the group is already at the start of the panel.
|
|
414
|
+
*
|
|
415
|
+
* @param logicalGroupId - The group to move.
|
|
416
|
+
*/
|
|
417
|
+
moveGroupLeft(logicalGroupId) {
|
|
418
|
+
const allCols = this.store.get('columns');
|
|
419
|
+
const leafIds = new Set(this.registry.getLeavesForGroup(logicalGroupId));
|
|
420
|
+
const firstLeaf = allCols.find((c) => leafIds.has(c.colId));
|
|
421
|
+
if (!firstLeaf)
|
|
422
|
+
return;
|
|
423
|
+
const panel = (firstLeaf.pinned ?? null);
|
|
424
|
+
const panelCols = allCols.filter((c) => (c.pinned ?? null) === panel);
|
|
425
|
+
const firstLeafIdx = panelCols.findIndex((c) => leafIds.has(c.colId));
|
|
426
|
+
if (firstLeafIdx <= 0)
|
|
427
|
+
return;
|
|
428
|
+
this.handleGroupMoved(logicalGroupId, panel, panel, panelCols[firstLeafIdx - 1].colId);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Move the group one column position to the right within its current panel.
|
|
432
|
+
* No-op when the group is already at the end of the panel.
|
|
433
|
+
*
|
|
434
|
+
* @param logicalGroupId - The group to move.
|
|
435
|
+
*/
|
|
436
|
+
moveGroupRight(logicalGroupId) {
|
|
437
|
+
const allCols = this.store.get('columns');
|
|
438
|
+
const leafIds = new Set(this.registry.getLeavesForGroup(logicalGroupId));
|
|
439
|
+
const firstLeaf = allCols.find((c) => leafIds.has(c.colId));
|
|
440
|
+
if (!firstLeaf)
|
|
441
|
+
return;
|
|
442
|
+
const panel = (firstLeaf.pinned ?? null);
|
|
443
|
+
const panelCols = allCols.filter((c) => (c.pinned ?? null) === panel);
|
|
444
|
+
// Find the last leaf index in the panel column list
|
|
445
|
+
let lastLeafIdx = -1;
|
|
446
|
+
for (let i = 0; i < panelCols.length; i++) {
|
|
447
|
+
if (leafIds.has(panelCols[i].colId))
|
|
448
|
+
lastLeafIdx = i;
|
|
449
|
+
}
|
|
450
|
+
if (lastLeafIdx === -1 || lastLeafIdx >= panelCols.length - 1)
|
|
451
|
+
return;
|
|
452
|
+
// Insert BEFORE the column two positions past the last leaf (i.e. after the next non-group col)
|
|
453
|
+
const insertBeforeIdx = lastLeafIdx + 2;
|
|
454
|
+
const insertBefore = insertBeforeIdx < panelCols.length
|
|
455
|
+
? panelCols[insertBeforeIdx].colId
|
|
456
|
+
: null;
|
|
457
|
+
this.handleGroupMoved(logicalGroupId, panel, panel, insertBefore);
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Move the group to the first position within its current panel.
|
|
461
|
+
* No-op when the group is already at the start.
|
|
462
|
+
*
|
|
463
|
+
* @param logicalGroupId - The group to move.
|
|
464
|
+
*/
|
|
465
|
+
moveGroupToStart(logicalGroupId) {
|
|
466
|
+
const allCols = this.store.get('columns');
|
|
467
|
+
const leafIds = new Set(this.registry.getLeavesForGroup(logicalGroupId));
|
|
468
|
+
const firstLeaf = allCols.find((c) => leafIds.has(c.colId));
|
|
469
|
+
if (!firstLeaf)
|
|
470
|
+
return;
|
|
471
|
+
const panel = (firstLeaf.pinned ?? null);
|
|
472
|
+
const panelCols = allCols.filter((c) => (c.pinned ?? null) === panel);
|
|
473
|
+
const firstNonGroup = panelCols.find((c) => !leafIds.has(c.colId));
|
|
474
|
+
if (!firstNonGroup)
|
|
475
|
+
return;
|
|
476
|
+
this.handleGroupMoved(logicalGroupId, panel, panel, firstNonGroup.colId);
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Move the group to the last position within its current panel.
|
|
480
|
+
* No-op when the group is already at the end.
|
|
481
|
+
*
|
|
482
|
+
* @param logicalGroupId - The group to move.
|
|
483
|
+
*/
|
|
484
|
+
moveGroupToEnd(logicalGroupId) {
|
|
485
|
+
const allCols = this.store.get('columns');
|
|
486
|
+
const leafIds = new Set(this.registry.getLeavesForGroup(logicalGroupId));
|
|
487
|
+
const firstLeaf = allCols.find((c) => leafIds.has(c.colId));
|
|
488
|
+
if (!firstLeaf)
|
|
489
|
+
return;
|
|
490
|
+
const panel = (firstLeaf.pinned ?? null);
|
|
491
|
+
this.handleGroupMoved(logicalGroupId, panel, panel, null);
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Hide all visible leaf columns that belong to this group.
|
|
495
|
+
* Columns that are already hidden are left unchanged.
|
|
496
|
+
*
|
|
497
|
+
* @param logicalGroupId - The group whose leaves should be hidden.
|
|
498
|
+
*/
|
|
499
|
+
hideGroupLeaves(logicalGroupId) {
|
|
500
|
+
const leafIds = this.registry.getLeavesForGroup(logicalGroupId);
|
|
501
|
+
for (const colId of leafIds) {
|
|
502
|
+
this.columnModel.setColumnVisible(colId, false);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
// ── Private helpers ───────────────────────────────────────────────────────
|
|
506
|
+
/**
|
|
507
|
+
* Find the contiguous block of columns that constitute one display instance
|
|
508
|
+
* of a logical group.
|
|
509
|
+
*
|
|
510
|
+
* Scans `allCols` forward from the column with ID `firstLeafColId`. Columns
|
|
511
|
+
* are included while they belong to `groupLeafIds`; the first non-member
|
|
512
|
+
* column terminates the scan. Hidden columns (visible === false) are
|
|
513
|
+
* included so that collapse / expand operates on all leaves, not just the
|
|
514
|
+
* currently-visible ones.
|
|
515
|
+
*
|
|
516
|
+
* @param allCols - Full column array from the store (incl. hidden).
|
|
517
|
+
* @param firstLeafColId - Column ID of the first leaf of the target instance.
|
|
518
|
+
* @param groupLeafIds - Set of all leaf colIds for the logical group.
|
|
519
|
+
*/
|
|
520
|
+
findInstanceLeaves(allCols, firstLeafColId, groupLeafIds) {
|
|
521
|
+
const startIdx = allCols.findIndex((c) => c.colId === firstLeafColId);
|
|
522
|
+
if (startIdx === -1)
|
|
523
|
+
return [];
|
|
524
|
+
const result = [];
|
|
525
|
+
for (let i = startIdx; i < allCols.length; i++) {
|
|
526
|
+
if (!groupLeafIds.has(allCols[i].colId))
|
|
527
|
+
break;
|
|
528
|
+
result.push(allCols[i]);
|
|
529
|
+
}
|
|
530
|
+
return result;
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Find the index **one past** the last column in `panel` within `columns`.
|
|
534
|
+
* Returns `columns.length` when no column with the target panel is found
|
|
535
|
+
* (appends to the absolute end of the array).
|
|
536
|
+
*
|
|
537
|
+
* @param columns - Column array to search within.
|
|
538
|
+
* @param panel - Target panel (`'left'`, `null` for center, `'right'`).
|
|
539
|
+
*/
|
|
540
|
+
findEndOfPanel(columns, panel) {
|
|
541
|
+
let lastIdx = -1;
|
|
542
|
+
for (let i = 0; i < columns.length; i++) {
|
|
543
|
+
if ((columns[i].pinned ?? null) === panel)
|
|
544
|
+
lastIdx = i;
|
|
545
|
+
}
|
|
546
|
+
return lastIdx === -1 ? columns.length : lastIdx + 1;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=display-group-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-group-engine.js","sourceRoot":"","sources":["../../src/column-groups/display-group-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { IconRenderer } from '../icons/icon-renderer';
|
|
2
|
+
import type { DisplayHeaderTree, DisplayGroupNode } from './display-group.types';
|
|
3
|
+
/**
|
|
4
|
+
* Options passed to DOM-building methods of {@link DisplayGroupHeaderBuilder}.
|
|
5
|
+
*/
|
|
6
|
+
export interface DisplayGroupCellOptions {
|
|
7
|
+
/** Height of a single header row in pixels — reserved for future row-height customization. */
|
|
8
|
+
rowHeight: number;
|
|
9
|
+
/** Called when the user clicks a group header cell to toggle collapsed state. */
|
|
10
|
+
onCollapseToggle?: (logicalGroupId: string) => void;
|
|
11
|
+
/** Called when the user finishes dragging a group resize handle. */
|
|
12
|
+
onGroupResize?: (logicalGroupId: string, newWidth: number) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Called on `mousedown` of a group header cell (before the drag threshold check).
|
|
15
|
+
* The drag handler uses this to attach its own listeners to each new cell.
|
|
16
|
+
*/
|
|
17
|
+
onGroupHeaderMouseDown?: (e: MouseEvent, node: DisplayGroupNode, el: HTMLElement) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Guard function — returns `true` when a group drag just completed.
|
|
20
|
+
* Used to suppress the residual `click` event that fires after mouseup.
|
|
21
|
+
*/
|
|
22
|
+
didJustDragFn?: () => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Called when the user right-clicks a group header cell.
|
|
25
|
+
* The consumer (e.g. `HeaderRenderer`) opens a `GroupContextMenu` from here.
|
|
26
|
+
*/
|
|
27
|
+
onGroupContextMenu?: (e: MouseEvent, node: DisplayGroupNode, el: HTMLElement) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Builds the multi-row grouped header DOM from a {@link DisplayHeaderTree}.
|
|
31
|
+
*
|
|
32
|
+
* ### Layout model
|
|
33
|
+
* ```
|
|
34
|
+
* pg-header-group-row depth-0 ← group cells (position: absolute)
|
|
35
|
+
* pg-header-group-row depth-1 ← deeper group cells (if nested)
|
|
36
|
+
* pg-header-row ← leaf headers (built by HeaderRenderer)
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* Group rows use `position: relative` with absolutely-positioned cells,
|
|
40
|
+
* allowing arbitrary column widths and nesting depths without flex constraints.
|
|
41
|
+
* Filler cells occupy the group-row space of flat/shallow columns, making them
|
|
42
|
+
* appear to span the full header height.
|
|
43
|
+
*
|
|
44
|
+
* ### Responsibilities
|
|
45
|
+
* - Build one `HTMLElement` per group depth row (`buildGroupRows`).
|
|
46
|
+
* - Rebuild existing rows in place without re-mounting (`updateGroupRows`).
|
|
47
|
+
* - Render group cells: label, collapse button, resize handle.
|
|
48
|
+
* - Render filler cells for flat/shallow columns.
|
|
49
|
+
*/
|
|
50
|
+
export declare class DisplayGroupHeaderBuilder {
|
|
51
|
+
private readonly iconRenderer;
|
|
52
|
+
constructor(iconRenderer: IconRenderer);
|
|
53
|
+
/**
|
|
54
|
+
* Build one `HTMLElement` per group depth row from the given display tree.
|
|
55
|
+
* Returns an empty array when `maxGroupDepth === 0` (no groups present).
|
|
56
|
+
*
|
|
57
|
+
* @param tree - Fully-computed display header tree.
|
|
58
|
+
* @param options - Callbacks and configuration for interactive cells.
|
|
59
|
+
*/
|
|
60
|
+
buildGroupRows(tree: DisplayHeaderTree, options: DisplayGroupCellOptions): HTMLElement[];
|
|
61
|
+
/**
|
|
62
|
+
* Rebuild the contents of existing group-row elements in place.
|
|
63
|
+
* Called when column widths change or collapse state is toggled.
|
|
64
|
+
*
|
|
65
|
+
* @param rowEls - Previously built row elements (from `buildGroupRows`).
|
|
66
|
+
* @param tree - Updated display header tree.
|
|
67
|
+
* @param options - Callbacks and configuration.
|
|
68
|
+
*/
|
|
69
|
+
updateGroupRows(rowEls: HTMLElement[], tree: DisplayHeaderTree, options: DisplayGroupCellOptions): void;
|
|
70
|
+
private buildRow;
|
|
71
|
+
private populateRow;
|
|
72
|
+
private buildCell;
|
|
73
|
+
/**
|
|
74
|
+
* Build a single interactive group header cell.
|
|
75
|
+
*
|
|
76
|
+
* @param group - Display group node supplying all rendering data.
|
|
77
|
+
* @param left - Pixel left offset within the row.
|
|
78
|
+
* @param width - Pixel width of the cell.
|
|
79
|
+
* @param options - Interactive callbacks.
|
|
80
|
+
*/
|
|
81
|
+
private buildGroupCell;
|
|
82
|
+
private buildDefaultContent;
|
|
83
|
+
/**
|
|
84
|
+
* Start a group-header resize drag.
|
|
85
|
+
* Computes the new width on each mousemove and fires `onGroupResize`.
|
|
86
|
+
*
|
|
87
|
+
* @param e - Initiating mousedown event.
|
|
88
|
+
* @param group - The group being resized.
|
|
89
|
+
* @param startWidth - Pixel width at drag start.
|
|
90
|
+
* @param options - Contains the `onGroupResize` callback.
|
|
91
|
+
*/
|
|
92
|
+
private startGroupResize;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=display-group-header-builder.d.ts.map
|