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,517 @@
|
|
|
1
|
+
import { GridEventType } from '../types/event.types';
|
|
2
|
+
import { createDiv } from '../renderer/dom-utils';
|
|
3
|
+
/** `{ valid: false }` sentinel. */
|
|
4
|
+
const INVALID_TARGET = {
|
|
5
|
+
valid: false, targetId: '', position: 'before', indicatorX: 0,
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Manages drag-and-drop operations for group header cells.
|
|
9
|
+
*
|
|
10
|
+
* Handles three drag scenarios:
|
|
11
|
+
* 1. **Group header drag** — move an entire group (all children move together).
|
|
12
|
+
* 2. **Leaf inside a married group** — dragging a child moves the parent group.
|
|
13
|
+
* 3. **Leaf drag out of group** — creates a solo wrapper group at the drop site.
|
|
14
|
+
*
|
|
15
|
+
* Drop targets:
|
|
16
|
+
* - **Another group** — inserts the dragged group before/after the target.
|
|
17
|
+
* - **Row-grouping bar** — triggers row-grouping for all `groupable` leaves.
|
|
18
|
+
* - **Outside the grid** — shows a "hide" preview and hides all columns.
|
|
19
|
+
*
|
|
20
|
+
* Visual feedback:
|
|
21
|
+
* - Ghost chip following the cursor.
|
|
22
|
+
* - Thin vertical drop-indicator line at the insertion point.
|
|
23
|
+
* - Ghost turns red when dragged outside the grid.
|
|
24
|
+
*/
|
|
25
|
+
export class ColumnGroupDragHandler {
|
|
26
|
+
constructor(columnModel, groupModel, headerBuilder, colStyles, eventBus,
|
|
27
|
+
/** Returns the root `.pg-grid` element; may be `null` before mount. */
|
|
28
|
+
gridElGetter) {
|
|
29
|
+
this.columnModel = columnModel;
|
|
30
|
+
this.groupModel = groupModel;
|
|
31
|
+
this.headerBuilder = headerBuilder;
|
|
32
|
+
this.colStyles = colStyles;
|
|
33
|
+
this.eventBus = eventBus;
|
|
34
|
+
this.gridElGetter = gridElGetter;
|
|
35
|
+
/** Currently dragged group ID, `null` when not dragging. */
|
|
36
|
+
this.draggingId = null;
|
|
37
|
+
/** `true` when the dragged node is a group (vs. a leaf). */
|
|
38
|
+
this.draggingIsGroup = false;
|
|
39
|
+
/** Ghost element following the cursor. */
|
|
40
|
+
this.ghostEl = null;
|
|
41
|
+
/** Vertical indicator line shown at the drop target. */
|
|
42
|
+
this.indicatorEl = null;
|
|
43
|
+
/** The grid `.pg-grid` element, captured at drag-start from the getter. */
|
|
44
|
+
this.gridEl = null;
|
|
45
|
+
/** Last computed drop target. */
|
|
46
|
+
this.currentTarget = null;
|
|
47
|
+
/** `true` for the remainder of the current event loop after a drag completes. */
|
|
48
|
+
this._didJustDrag = false;
|
|
49
|
+
// ── Live drag transform state ────────────────────────────────────────────
|
|
50
|
+
/** Injected `<style>` element holding CSS transforms during a drag. */
|
|
51
|
+
this.dragStyleEl = null;
|
|
52
|
+
/** Captured group-cell positions (at drag-start) for the same depth level. */
|
|
53
|
+
this.dragCells = [];
|
|
54
|
+
/** Width of the dragged group cell (pixels). */
|
|
55
|
+
this.dragCellWidth = 0;
|
|
56
|
+
/** Index of the dragged group cell within `dragCells`. */
|
|
57
|
+
this.dragSourceIdx = -1;
|
|
58
|
+
/** Current effective drop index (updated each mousemove). */
|
|
59
|
+
this.dragEffectiveIdx = -1;
|
|
60
|
+
this.boundMouseMove = this.onMouseMove.bind(this);
|
|
61
|
+
this.boundMouseUp = this.onMouseUp.bind(this);
|
|
62
|
+
}
|
|
63
|
+
// ── Public ───────────────────────────────────────────────────────────────
|
|
64
|
+
/**
|
|
65
|
+
* `true` immediately after a drag session ends (cleared after one tick).
|
|
66
|
+
* Used by the header builder to suppress the collapse-toggle click that
|
|
67
|
+
* fires after a drag completes.
|
|
68
|
+
*/
|
|
69
|
+
get didJustDrag() { return this._didJustDrag; }
|
|
70
|
+
/**
|
|
71
|
+
* Attach drag listeners to a group header cell element.
|
|
72
|
+
* Drag starts only after the pointer has moved more than 5 px so that a
|
|
73
|
+
* short click still fires the collapse-toggle handler.
|
|
74
|
+
*
|
|
75
|
+
* @param el - The group header `<div>` element.
|
|
76
|
+
* @param group - The group node this cell represents.
|
|
77
|
+
*/
|
|
78
|
+
attachGroupDragListeners(el, group) {
|
|
79
|
+
el.addEventListener('mousedown', (e) => {
|
|
80
|
+
if (e.target.closest('.pg-th__resize-handle, .pg-th__collapse-btn'))
|
|
81
|
+
return;
|
|
82
|
+
if (e.button !== 0)
|
|
83
|
+
return;
|
|
84
|
+
const startX = e.clientX;
|
|
85
|
+
let moved = false;
|
|
86
|
+
const onMoveStart = (ev) => {
|
|
87
|
+
if (!moved && Math.abs(ev.clientX - startX) > 5) {
|
|
88
|
+
moved = true;
|
|
89
|
+
document.removeEventListener('mousemove', onMoveStart);
|
|
90
|
+
document.removeEventListener('mouseup', onUpEarly);
|
|
91
|
+
this.startGroupDrag(group, ev.clientX, ev.clientY);
|
|
92
|
+
document.addEventListener('mousemove', this.boundMouseMove);
|
|
93
|
+
document.addEventListener('mouseup', this.boundMouseUp);
|
|
94
|
+
// Intercept the click that would fire on mouseup so collapse does not toggle
|
|
95
|
+
const blockClick = (ce) => {
|
|
96
|
+
ce.stopPropagation();
|
|
97
|
+
document.removeEventListener('click', blockClick, true);
|
|
98
|
+
};
|
|
99
|
+
document.addEventListener('click', blockClick, true);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const onUpEarly = () => {
|
|
103
|
+
document.removeEventListener('mousemove', onMoveStart);
|
|
104
|
+
document.removeEventListener('mouseup', onUpEarly);
|
|
105
|
+
};
|
|
106
|
+
document.addEventListener('mousemove', onMoveStart);
|
|
107
|
+
document.addEventListener('mouseup', onUpEarly);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Attach drag listeners to a leaf header cell, respecting `marryChildren`.
|
|
112
|
+
*
|
|
113
|
+
* When the leaf's parent group has `marryChildren === true`, dragging the
|
|
114
|
+
* leaf starts a group drag instead of a leaf drag.
|
|
115
|
+
*
|
|
116
|
+
* @param el - The leaf header `<div>` element.
|
|
117
|
+
* @param colDef - The column definition.
|
|
118
|
+
*/
|
|
119
|
+
attachLeafDragListeners(el, colDef) {
|
|
120
|
+
const parent = this.groupModel.getParent(colDef.colId);
|
|
121
|
+
if (parent?.marryChildren) {
|
|
122
|
+
const group = this.groupModel.getGroup(parent.groupId);
|
|
123
|
+
if (group)
|
|
124
|
+
this.attachGroupDragListeners(el, group);
|
|
125
|
+
}
|
|
126
|
+
// Non-married leaves use HeaderRenderer's built-in drag
|
|
127
|
+
}
|
|
128
|
+
/** `true` while a drag session is in progress. */
|
|
129
|
+
get isDragging() { return this.draggingId !== null; }
|
|
130
|
+
/** Release all event listeners and remove DOM artefacts. */
|
|
131
|
+
destroy() {
|
|
132
|
+
this.cleanupDrag();
|
|
133
|
+
document.removeEventListener('mousemove', this.boundMouseMove);
|
|
134
|
+
document.removeEventListener('mouseup', this.boundMouseUp);
|
|
135
|
+
}
|
|
136
|
+
// ── Private: drag lifecycle ───────────────────────────────────────────────
|
|
137
|
+
startGroupDrag(group, clientX, clientY) {
|
|
138
|
+
const gridEl = this.gridElGetter();
|
|
139
|
+
if (!gridEl)
|
|
140
|
+
return;
|
|
141
|
+
this.draggingId = group.groupId;
|
|
142
|
+
this.draggingIsGroup = true;
|
|
143
|
+
this.gridEl = gridEl;
|
|
144
|
+
// Ghost chip
|
|
145
|
+
const ghost = createDiv('pg-col-drag-ghost');
|
|
146
|
+
const label = document.createElement('span');
|
|
147
|
+
label.className = 'pg-col-drag-ghost__label';
|
|
148
|
+
label.textContent = group.header;
|
|
149
|
+
ghost.appendChild(label);
|
|
150
|
+
ghost.style.left = `${clientX + 14}px`;
|
|
151
|
+
ghost.style.top = `${clientY}px`;
|
|
152
|
+
document.body.appendChild(ghost);
|
|
153
|
+
this.ghostEl = ghost;
|
|
154
|
+
// Drop indicator
|
|
155
|
+
const indicator = createDiv('pg-group-drop-indicator');
|
|
156
|
+
gridEl.appendChild(indicator);
|
|
157
|
+
this.indicatorEl = indicator;
|
|
158
|
+
document.body.style.cursor = 'grabbing';
|
|
159
|
+
document.body.style.userSelect = 'none';
|
|
160
|
+
gridEl.classList.add('pg-grid--col-dragging');
|
|
161
|
+
// ── Capture group-cell positions for live CSS-transform visual ──────────
|
|
162
|
+
const draggedCell = gridEl.querySelector(`[data-group-id="${group.groupId}"]`);
|
|
163
|
+
const depth = parseInt(draggedCell?.closest('[data-group-depth]')?.getAttribute('data-group-depth') ?? '0', 10);
|
|
164
|
+
const cells = [];
|
|
165
|
+
for (const row of gridEl.querySelectorAll(`[data-group-depth="${depth}"]`)) {
|
|
166
|
+
for (const cell of row.querySelectorAll('[data-group-id]')) {
|
|
167
|
+
cells.push({ groupId: cell.getAttribute('data-group-id') ?? '', rect: cell.getBoundingClientRect() });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
cells.sort((a, b) => a.rect.left - b.rect.left);
|
|
171
|
+
this.dragCells = cells;
|
|
172
|
+
this.dragSourceIdx = cells.findIndex((c) => c.groupId === group.groupId);
|
|
173
|
+
this.dragCellWidth = cells[this.dragSourceIdx]?.rect.width ?? 0;
|
|
174
|
+
this.dragEffectiveIdx = this.dragSourceIdx;
|
|
175
|
+
const styleEl = document.createElement('style');
|
|
176
|
+
styleEl.setAttribute('data-pg-group-drag', '');
|
|
177
|
+
document.head.appendChild(styleEl);
|
|
178
|
+
this.dragStyleEl = styleEl;
|
|
179
|
+
}
|
|
180
|
+
onMouseMove(e) {
|
|
181
|
+
if (!this.draggingId || !this.ghostEl)
|
|
182
|
+
return;
|
|
183
|
+
this.ghostEl.style.left = `${e.clientX + 14}px`;
|
|
184
|
+
this.ghostEl.style.top = `${e.clientY}px`;
|
|
185
|
+
// Visual feedback: turn ghost red when outside grid
|
|
186
|
+
const outside = this.isOutsideGrid(e.clientX, e.clientY);
|
|
187
|
+
this.ghostEl.classList.toggle('pg-col-drag-ghost--outside', outside);
|
|
188
|
+
if (outside) {
|
|
189
|
+
this.currentTarget = null;
|
|
190
|
+
this.updateIndicator(null);
|
|
191
|
+
this.applyDragTransforms(-1);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const target = this.hitTest(e.clientX, e.clientY);
|
|
195
|
+
this.currentTarget = target;
|
|
196
|
+
this.updateIndicator(target);
|
|
197
|
+
// Live CSS-transform reordering (mirrors HeaderRenderer column drag visual)
|
|
198
|
+
if (this.dragCells.length > 0) {
|
|
199
|
+
let effectiveIdx = this.dragSourceIdx;
|
|
200
|
+
for (let i = 0; i < this.dragCells.length; i++) {
|
|
201
|
+
if (i === this.dragSourceIdx)
|
|
202
|
+
continue;
|
|
203
|
+
const r = this.dragCells[i].rect;
|
|
204
|
+
if (e.clientX >= r.left && e.clientX < r.right) {
|
|
205
|
+
effectiveIdx = i;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Clamp to edges
|
|
210
|
+
if (e.clientX < (this.dragCells[0]?.rect.left ?? 0))
|
|
211
|
+
effectiveIdx = 0;
|
|
212
|
+
if (e.clientX >= (this.dragCells[this.dragCells.length - 1]?.rect.right ?? 0)) {
|
|
213
|
+
effectiveIdx = this.dragCells.length - 1;
|
|
214
|
+
}
|
|
215
|
+
this.dragEffectiveIdx = effectiveIdx;
|
|
216
|
+
this.applyDragTransforms(effectiveIdx);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Write CSS `transform: translateX()` rules for the live drag preview.
|
|
221
|
+
* Pass `-1` to clear all transforms.
|
|
222
|
+
*/
|
|
223
|
+
applyDragTransforms(effectiveIdx) {
|
|
224
|
+
if (!this.dragStyleEl || !this.gridEl)
|
|
225
|
+
return;
|
|
226
|
+
if (effectiveIdx === -1 || effectiveIdx === this.dragSourceIdx) {
|
|
227
|
+
this.dragStyleEl.textContent = '';
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const gridId = this.gridEl.getAttribute('data-photon-grid-id') ?? '';
|
|
231
|
+
const scope = gridId ? `[data-photon-grid-id="${gridId}"] ` : '';
|
|
232
|
+
const src = this.dragSourceIdx;
|
|
233
|
+
const src_rect = this.dragCells[src]?.rect;
|
|
234
|
+
const tgt_rect = this.dragCells[effectiveIdx]?.rect;
|
|
235
|
+
if (!src_rect || !tgt_rect)
|
|
236
|
+
return;
|
|
237
|
+
const srcOffset = effectiveIdx > src
|
|
238
|
+
? tgt_rect.right - src_rect.right
|
|
239
|
+
: tgt_rect.left - src_rect.left;
|
|
240
|
+
let css = `${scope}[data-group-id="${this.draggingId}"] { transform: translateX(${srcOffset}px); z-index: 10; position: relative; transition: none; }\n`;
|
|
241
|
+
for (let i = 0; i < this.dragCells.length; i++) {
|
|
242
|
+
if (i === src)
|
|
243
|
+
continue;
|
|
244
|
+
let offset = 0;
|
|
245
|
+
if (effectiveIdx > src && i > src && i <= effectiveIdx)
|
|
246
|
+
offset = -this.dragCellWidth;
|
|
247
|
+
else if (effectiveIdx < src && i >= effectiveIdx && i < src)
|
|
248
|
+
offset = this.dragCellWidth;
|
|
249
|
+
if (offset !== 0) {
|
|
250
|
+
css += `${scope}[data-group-id="${this.dragCells[i].groupId}"] { transform: translateX(${offset}px); }\n`;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
this.dragStyleEl.textContent = css;
|
|
254
|
+
}
|
|
255
|
+
onMouseUp(e) {
|
|
256
|
+
const target = this.currentTarget;
|
|
257
|
+
const id = this.draggingId;
|
|
258
|
+
const isGroup = this.draggingIsGroup;
|
|
259
|
+
const gridEl = this.gridEl;
|
|
260
|
+
const outside = gridEl ? this.isOutsideGrid(e.clientX, e.clientY) : false;
|
|
261
|
+
const onGroupBar = gridEl ? this.isOverGroupingBar(e.clientX, e.clientY) : false;
|
|
262
|
+
this.cleanupDrag();
|
|
263
|
+
this._didJustDrag = true;
|
|
264
|
+
// Clear flag after current event loop so the collapse click is suppressed
|
|
265
|
+
Promise.resolve().then(() => { this._didJustDrag = false; });
|
|
266
|
+
if (!id)
|
|
267
|
+
return;
|
|
268
|
+
// ── Drop: outside grid ──────────────────────────────────────────────────
|
|
269
|
+
if (outside) {
|
|
270
|
+
if (isGroup) {
|
|
271
|
+
const leaves = this.groupModel.getLeavesInGroup(id);
|
|
272
|
+
for (const leaf of leaves) {
|
|
273
|
+
this.columnModel.setColumnVisible(leaf.colId, false);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
// ── Drop: row-grouping bar ──────────────────────────────────────────────
|
|
279
|
+
if (onGroupBar) {
|
|
280
|
+
if (isGroup) {
|
|
281
|
+
const leaves = this.groupModel.getLeavesInGroup(id);
|
|
282
|
+
const groupableIds = leaves.filter((l) => l.groupable).map((l) => l.colId);
|
|
283
|
+
if (groupableIds.length > 0) {
|
|
284
|
+
// COLUMN_GROUP_CHANGED fires with an array of colIds to add to the
|
|
285
|
+
// grouped-column set; GroupDropZone / GroupingEngine pick this up.
|
|
286
|
+
this.eventBus.emit(GridEventType.COLUMN_GROUP_CHANGED, {
|
|
287
|
+
action: 'add',
|
|
288
|
+
colIds: groupableIds,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
// ── Drop: use live-transform effective index for precise positioning ──────
|
|
295
|
+
// If the live transform computed a valid effectiveIdx, use that to determine
|
|
296
|
+
// the insert position rather than the hitTest (which can be stale on fast drags).
|
|
297
|
+
const effectiveIdx = this.dragEffectiveIdx;
|
|
298
|
+
const useLiveIdx = effectiveIdx !== -1 && effectiveIdx !== this.dragSourceIdx
|
|
299
|
+
&& effectiveIdx < this.dragCells.length;
|
|
300
|
+
const resolvedTarget = useLiveIdx
|
|
301
|
+
? {
|
|
302
|
+
valid: true,
|
|
303
|
+
targetId: this.dragCells[effectiveIdx].groupId,
|
|
304
|
+
position: effectiveIdx > this.dragSourceIdx ? 'after' : 'before',
|
|
305
|
+
indicatorX: 0,
|
|
306
|
+
}
|
|
307
|
+
: target;
|
|
308
|
+
if (!resolvedTarget?.valid)
|
|
309
|
+
return;
|
|
310
|
+
if (isGroup) {
|
|
311
|
+
// Moving the whole group: insert before/after target
|
|
312
|
+
const targetGroup = this.groupModel.getGroup(resolvedTarget.targetId);
|
|
313
|
+
if (!targetGroup)
|
|
314
|
+
return;
|
|
315
|
+
const targetParent = this.groupModel.getParent(resolvedTarget.targetId);
|
|
316
|
+
const targetParentId = targetParent?.groupId ?? null;
|
|
317
|
+
const insertBeforeId = resolvedTarget.position === 'before' ? resolvedTarget.targetId : null;
|
|
318
|
+
// After-insert: find the node immediately following the target, insert before it
|
|
319
|
+
const insertBeforeNext = resolvedTarget.position === 'after'
|
|
320
|
+
? this.nextSiblingId(resolvedTarget.targetId)
|
|
321
|
+
: null;
|
|
322
|
+
const finalInsertBefore = insertBeforeId ?? insertBeforeNext;
|
|
323
|
+
// Dissolve solo group if being moved back to its origin group
|
|
324
|
+
const draggedGroup = this.groupModel.getGroup(id);
|
|
325
|
+
if (draggedGroup?.isSoloGroup && draggedGroup.originalParentGroupId === targetParentId) {
|
|
326
|
+
const leafNode = draggedGroup.children[0];
|
|
327
|
+
if (leafNode?.nodeType === "leaf" /* ColumnGroupNodeType.LEAF */) {
|
|
328
|
+
this.groupModel.dissolveGroupIfSolo(id, targetParentId, finalInsertBefore);
|
|
329
|
+
this.columnModel.setColumnVisible(leafNode.colDef.colId, true);
|
|
330
|
+
this.triggerRebuild();
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
this.groupModel.moveGroup(id, targetParentId, finalInsertBefore);
|
|
335
|
+
}
|
|
336
|
+
this.triggerRebuild();
|
|
337
|
+
}
|
|
338
|
+
cleanupDrag() {
|
|
339
|
+
this.draggingId = null;
|
|
340
|
+
this.draggingIsGroup = false;
|
|
341
|
+
this.currentTarget = null;
|
|
342
|
+
this.dragCells = [];
|
|
343
|
+
this.dragCellWidth = 0;
|
|
344
|
+
this.dragSourceIdx = -1;
|
|
345
|
+
this.dragEffectiveIdx = -1;
|
|
346
|
+
this.ghostEl?.remove();
|
|
347
|
+
this.ghostEl = null;
|
|
348
|
+
this.indicatorEl?.remove();
|
|
349
|
+
this.indicatorEl = null;
|
|
350
|
+
this.dragStyleEl?.remove();
|
|
351
|
+
this.dragStyleEl = null;
|
|
352
|
+
this.gridEl?.classList.remove('pg-grid--col-dragging');
|
|
353
|
+
this.gridEl = null;
|
|
354
|
+
document.body.style.cursor = '';
|
|
355
|
+
document.body.style.userSelect = '';
|
|
356
|
+
document.removeEventListener('mousemove', this.boundMouseMove);
|
|
357
|
+
document.removeEventListener('mouseup', this.boundMouseUp);
|
|
358
|
+
}
|
|
359
|
+
// ── Private: drop-target hit test ────────────────────────────────────────
|
|
360
|
+
/**
|
|
361
|
+
* Locate the nearest group header cell to the cursor using
|
|
362
|
+
* `getBoundingClientRect` on all visible `[data-group-id]` elements within
|
|
363
|
+
* the grid. Excludes the element being dragged.
|
|
364
|
+
*/
|
|
365
|
+
hitTest(clientX, clientY) {
|
|
366
|
+
if (!this.gridEl)
|
|
367
|
+
return INVALID_TARGET;
|
|
368
|
+
const cells = this.gridEl.querySelectorAll('[data-group-id]');
|
|
369
|
+
const gridRect = this.gridEl.getBoundingClientRect();
|
|
370
|
+
let closest = null;
|
|
371
|
+
let minDist = Infinity;
|
|
372
|
+
for (const cell of cells) {
|
|
373
|
+
const gid = cell.getAttribute('data-group-id') ?? '';
|
|
374
|
+
if (gid === this.draggingId)
|
|
375
|
+
continue;
|
|
376
|
+
const rect = cell.getBoundingClientRect();
|
|
377
|
+
// Y must be within the group row (with 4 px tolerance)
|
|
378
|
+
if (clientY < rect.top - 4 || clientY > rect.bottom + 4)
|
|
379
|
+
continue;
|
|
380
|
+
const midX = rect.left + rect.width / 2;
|
|
381
|
+
const dist = Math.abs(clientX - midX);
|
|
382
|
+
if (dist < minDist) {
|
|
383
|
+
minDist = dist;
|
|
384
|
+
const position = clientX < midX ? 'before' : 'after';
|
|
385
|
+
closest = {
|
|
386
|
+
valid: true,
|
|
387
|
+
targetId: gid,
|
|
388
|
+
position,
|
|
389
|
+
// indicatorX is relative to the grid's left edge
|
|
390
|
+
indicatorX: (position === 'before' ? rect.left : rect.right) - gridRect.left,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return closest ?? INVALID_TARGET;
|
|
395
|
+
}
|
|
396
|
+
updateIndicator(target) {
|
|
397
|
+
if (!this.indicatorEl)
|
|
398
|
+
return;
|
|
399
|
+
if (!target?.valid) {
|
|
400
|
+
this.indicatorEl.style.display = 'none';
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
this.indicatorEl.style.display = 'block';
|
|
404
|
+
this.indicatorEl.style.left = `${target.indicatorX}px`;
|
|
405
|
+
}
|
|
406
|
+
/** `true` when the cursor is more than 40 px outside the grid boundary. */
|
|
407
|
+
isOutsideGrid(clientX, clientY) {
|
|
408
|
+
if (!this.gridEl)
|
|
409
|
+
return false;
|
|
410
|
+
const rect = this.gridEl.getBoundingClientRect();
|
|
411
|
+
const margin = 40;
|
|
412
|
+
return clientX < rect.left - margin
|
|
413
|
+
|| clientX > rect.right + margin
|
|
414
|
+
|| clientY < rect.top - margin
|
|
415
|
+
|| clientY > rect.bottom + margin;
|
|
416
|
+
}
|
|
417
|
+
/** `true` when the cursor is over the row-grouping bar. */
|
|
418
|
+
isOverGroupingBar(clientX, clientY) {
|
|
419
|
+
if (!this.gridEl)
|
|
420
|
+
return false;
|
|
421
|
+
const bar = this.gridEl.querySelector('.pg-group-drop-zone--top');
|
|
422
|
+
if (!bar)
|
|
423
|
+
return false;
|
|
424
|
+
const rect = bar.getBoundingClientRect();
|
|
425
|
+
return clientX >= rect.left && clientX <= rect.right
|
|
426
|
+
&& clientY >= rect.top && clientY <= rect.bottom;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Return the ID of the node immediately after `nodeId` among its siblings.
|
|
430
|
+
* Returns `null` when `nodeId` is the last sibling or is not found.
|
|
431
|
+
*/
|
|
432
|
+
nextSiblingId(nodeId) {
|
|
433
|
+
const parent = this.groupModel.getParent(nodeId);
|
|
434
|
+
const list = parent ? parent.children : this.groupModel.rootNodes;
|
|
435
|
+
const idx = list
|
|
436
|
+
.findIndex((n) => (n.nodeType === "group" /* ColumnGroupNodeType.GROUP */ ? n.groupId : n.colDef?.colId) === nodeId);
|
|
437
|
+
if (idx === -1 || idx >= list.length - 1)
|
|
438
|
+
return null;
|
|
439
|
+
const next = list[idx + 1];
|
|
440
|
+
return next.nodeType === "group" /* ColumnGroupNodeType.GROUP */ ? (next.groupId ?? null) : (next.colDef?.colId ?? null);
|
|
441
|
+
}
|
|
442
|
+
// ── Public: leaf clone / extract API ────────────────────────────────────
|
|
443
|
+
/**
|
|
444
|
+
* Extract a leaf from its parent group into a solo clone group WITHOUT
|
|
445
|
+
* reordering `store.columns` via `getAllLeaves()`.
|
|
446
|
+
*
|
|
447
|
+
* Use this when the column has already been repositioned by `moveColumn` or
|
|
448
|
+
* `moveAndPin` — the store order is correct; only the group tree and header
|
|
449
|
+
* need to be updated.
|
|
450
|
+
*
|
|
451
|
+
* The solo group is repositioned to be immediately before `insertBeforeId` in
|
|
452
|
+
* the root node list so that a subsequent `getAllLeaves()` tree sync (triggered
|
|
453
|
+
* by the `-1` sentinel) produces the same order as the flat store.
|
|
454
|
+
*
|
|
455
|
+
* @param colId - The `colId` of the leaf to extract.
|
|
456
|
+
* @param insertBeforeId - Root-level sibling node ID to insert the solo group
|
|
457
|
+
* before. Pass `null` to append at the end of the root list.
|
|
458
|
+
*/
|
|
459
|
+
extractLeafToSoloGroup(colId, insertBeforeId) {
|
|
460
|
+
const parent = this.groupModel.getParent(colId);
|
|
461
|
+
if (!parent)
|
|
462
|
+
return;
|
|
463
|
+
const soloId = this.groupModel.createSoloGroupForLeaf(colId);
|
|
464
|
+
if (!soloId)
|
|
465
|
+
return;
|
|
466
|
+
// Reposition so that tree order matches the intended column order
|
|
467
|
+
this.groupModel.moveGroup(soloId, null, insertBeforeId);
|
|
468
|
+
// Full rebuild + store sync via the standard -1 sentinel
|
|
469
|
+
this.triggerRebuild();
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Called by `HeaderRenderer.onGlobalMouseUp` when a leaf column that belongs
|
|
473
|
+
* to a group is dropped onto a different group's header cell.
|
|
474
|
+
*
|
|
475
|
+
* **Merge-back**: if the leaf is currently in a solo-clone group whose
|
|
476
|
+
* `originalParentGroupId` matches `targetGroupId`, the clone is dissolved and
|
|
477
|
+
* the leaf is returned to its original group.
|
|
478
|
+
*
|
|
479
|
+
* **Clone**: otherwise a new solo-clone wrapper group (same header as the
|
|
480
|
+
* leaf's current parent) is created and positioned next to the target group.
|
|
481
|
+
*
|
|
482
|
+
* @param colId - The `colId` of the dragged leaf column.
|
|
483
|
+
* @param targetGroupId - The group header the leaf was dropped on.
|
|
484
|
+
*/
|
|
485
|
+
createLeafClone(colId, targetGroupId) {
|
|
486
|
+
const parentGroup = this.groupModel.getParent(colId);
|
|
487
|
+
if (!parentGroup)
|
|
488
|
+
return; // standalone leaf — nothing to clone
|
|
489
|
+
// ── Merge-back: solo clone dropped on its original parent ───────────────
|
|
490
|
+
if (parentGroup.isSoloGroup && parentGroup.originalParentGroupId === targetGroupId) {
|
|
491
|
+
this.groupModel.dissolveGroupIfSolo(parentGroup.groupId, targetGroupId, null);
|
|
492
|
+
this.columnModel.setColumnVisible(colId, true);
|
|
493
|
+
this.triggerRebuild();
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
// ── Same parent → no-op ─────────────────────────────────────────────────
|
|
497
|
+
if (parentGroup.groupId === targetGroupId)
|
|
498
|
+
return;
|
|
499
|
+
// ── Clone: extract leaf into a solo wrapper group ───────────────────────
|
|
500
|
+
const soloGroupId = this.groupModel.createSoloGroupForLeaf(colId);
|
|
501
|
+
if (!soloGroupId)
|
|
502
|
+
return;
|
|
503
|
+
// Position the new solo group next to (before) the target group
|
|
504
|
+
const targetParent = this.groupModel.getParent(targetGroupId);
|
|
505
|
+
this.groupModel.moveGroup(soloGroupId, targetParent?.groupId ?? null, targetGroupId);
|
|
506
|
+
this.triggerRebuild();
|
|
507
|
+
}
|
|
508
|
+
/** Emit an event that tells the grid renderer to do a full header rebuild. */
|
|
509
|
+
triggerRebuild() {
|
|
510
|
+
this.eventBus.emit(GridEventType.COLUMN_MOVED, {
|
|
511
|
+
colDef: null,
|
|
512
|
+
fromIndex: -1,
|
|
513
|
+
toIndex: -1,
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
//# sourceMappingURL=column-group-drag-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-group-drag-handler.js","sourceRoot":"","sources":["../../src/column-groups/column-group-drag-handler.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA+BlD,mCAAmC;AACnC,MAAM,cAAc,GAAoB;IACtC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,sBAAsB;IA+BjC,YACmB,WAA2B,EAC3B,UAAgC,EAChC,aAAwC,EACxC,SAAkC,EAClC,QAAwB;IACzC,uEAAuE;IACtD,YAAwC;QANxC,gBAAW,GAAX,WAAW,CAAgB;QAC3B,eAAU,GAAV,UAAU,CAAsB;QAChC,kBAAa,GAAb,aAAa,CAA2B;QACxC,cAAS,GAAT,SAAS,CAAyB;QAClC,aAAQ,GAAR,QAAQ,CAAgB;QAExB,iBAAY,GAAZ,YAAY,CAA4B;QArC3D,4DAA4D;QACpD,eAAU,GAAsB,IAAI,CAAC;QAC7C,4DAA4D;QACpD,oBAAe,GAAG,KAAK,CAAC;QAChC,0CAA0C;QAClC,YAAO,GAA8B,IAAI,CAAC;QAClD,wDAAwD;QAChD,gBAAW,GAA0B,IAAI,CAAC;QAClD,2EAA2E;QACnE,WAAM,GAA+B,IAAI,CAAC;QAClD,iCAAiC;QACzB,kBAAa,GAA4B,IAAI,CAAC;QACtD,iFAAiF;QACzE,iBAAY,GAAM,KAAK,CAAC;QAEhC,4EAA4E;QAC5E,uEAAuE;QAC/D,gBAAW,GAAkC,IAAI,CAAC;QAC1D,8EAA8E;QACtE,cAAS,GAAiD,EAAE,CAAC;QACrE,gDAAgD;QACxC,kBAAa,GAAQ,CAAC,CAAC;QAC/B,0DAA0D;QAClD,kBAAa,GAAQ,CAAC,CAAC,CAAC;QAChC,6DAA6D;QACrD,qBAAgB,GAAK,CAAC,CAAC,CAAC;QAc9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,GAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,4EAA4E;IAE5E;;;;OAIG;IACH,IAAI,WAAW,KAAc,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAExD;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAe,EAAE,KAAuB;QAC/D,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAa,EAAE,EAAE;YACjD,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,6CAA6C,CAAC;gBAAE,OAAO;YAC7F,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE3B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACzB,IAAI,KAAK,GAAM,KAAK,CAAC;YAErB,MAAM,WAAW,GAAG,CAAC,EAAc,EAAE,EAAE;gBACrC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChD,KAAK,GAAG,IAAI,CAAC;oBACb,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;oBACvD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBACnD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;oBACnD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC5D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAI,IAAI,CAAC,YAAY,CAAC,CAAC;oBAE1D,6EAA6E;oBAC7E,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAE;wBAC/B,EAAE,CAAC,eAAe,EAAE,CAAC;wBACrB,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;oBAC1D,CAAC,CAAC;oBACF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,SAAS,GAAG,GAAG,EAAE;gBACrB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACvD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrD,CAAC,CAAC;YAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACpD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAI,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAe,EAAE,MAAiB;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,MAAM,EAAE,aAAa,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,KAAK;gBAAE,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QACD,wDAAwD;IAC1D,CAAC;IAED,kDAAkD;IAClD,IAAI,UAAU,KAAc,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC;IAE9D,4DAA4D;IAC5D,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,6EAA6E;IAErE,cAAc,CACpB,KAAyB,EACzB,OAAe,EACf,OAAe;QAEf,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC,UAAU,GAAQ,KAAK,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAY,MAAM,CAAC;QAE9B,aAAa;QACb,MAAM,KAAK,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,SAAS,GAAK,0BAA0B,CAAC;QAC/C,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;QACjC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,IAAI,GAAI,GAAG,OAAO,GAAG,EAAE,IAAI,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAK,GAAG,OAAO,IAAI,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,iBAAiB;QACjB,MAAM,SAAS,GAAG,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAE7B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAO,UAAU,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAE9C,2EAA2E;QAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAc,mBAAmB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAC5F,MAAM,KAAK,GAAG,QAAQ,CACpB,WAAW,EAAE,OAAO,CAAc,oBAAoB,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,IAAI,GAAG,EAChG,EAAE,CACH,CAAC;QACF,MAAM,KAAK,GAAyC,EAAE,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAc,sBAAsB,KAAK,IAAI,CAAC,EAAE,CAAC;YACxF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,EAAE,CAAC;gBACxE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAS,KAAK,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,GAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;QAE3C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,CAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,IAAI,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAI,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC;QAE3C,oDAAoD;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QAErE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE7B,4EAA4E;QAC5E,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa;oBAAE,SAAS;gBACvC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;oBAAC,YAAY,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAC9E,CAAC;YACD,iBAAiB;YACjB,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;gBAAE,YAAY,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC9E,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;YACrC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,YAAoB;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC9C,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/D,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,KAAK,GAAI,MAAM,CAAC,CAAC,CAAC,yBAAyB,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,GAAG,GAAM,IAAI,CAAC,aAAa,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;QACpD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEnC,MAAM,SAAS,GAAG,YAAY,GAAG,GAAG;YAClC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAI,QAAQ,CAAC,KAAK;YAClC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAK,QAAQ,CAAC,IAAI,CAAC;QAEpC,IAAI,GAAG,GAAG,GAAG,KAAK,mBAAmB,IAAI,CAAC,UAAU,8BAA8B,SAAS,6DAA6D,CAAC;QAEzJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,GAAG;gBAAE,SAAS;YACxB,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,YAAY,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,YAAY;gBAAE,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;iBAChF,IAAI,YAAY,GAAG,GAAG,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,GAAG,GAAG;gBAAE,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YACzF,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,GAAG,IAAI,GAAG,KAAK,mBAAmB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,8BAA8B,MAAM,UAAU,CAAC;YAC5G,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,GAAG,CAAC;IACrC,CAAC;IAEO,SAAS,CAAC,CAAa;QAC7B,MAAM,MAAM,GAAO,IAAI,CAAC,aAAa,CAAC;QACtC,MAAM,EAAE,GAAW,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,OAAO,GAAM,IAAI,CAAC,eAAe,CAAC;QACxC,MAAM,MAAM,GAAO,IAAI,CAAC,MAAM,CAAC;QAC/B,MAAM,OAAO,GAAM,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEjF,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,0EAA0E;QAC1E,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC,EAAE;YAAE,OAAO;QAEhB,2EAA2E;QAC3E,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACpD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,2EAA2E;QAC3E,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,mEAAmE;oBACnE,mEAAmE;oBACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;wBACrD,MAAM,EAAE,KAAK;wBACb,MAAM,EAAE,YAAY;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,6EAA6E;QAC7E,6EAA6E;QAC7E,kFAAkF;QAClF,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3C,MAAM,UAAU,GAAK,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,KAAK,IAAI,CAAC,aAAa;eAC1D,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAE1D,MAAM,cAAc,GAA2B,UAAU;YACvD,CAAC,CAAC;gBACE,KAAK,EAAO,IAAI;gBAChB,QAAQ,EAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,OAAO;gBAChD,QAAQ,EAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;gBAClE,UAAU,EAAE,CAAC;aACd;YACH,CAAC,CAAC,MAAM,CAAC;QAEX,IAAI,CAAC,cAAc,EAAE,KAAK;YAAE,OAAO;QAEnC,IAAI,OAAO,EAAE,CAAC;YACZ,qDAAqD;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,MAAM,YAAY,GAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC5E,MAAM,cAAc,GAAK,YAAY,EAAE,OAAO,IAAI,IAAI,CAAC;YACvD,MAAM,cAAc,GAAK,cAAc,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAE/F,iFAAiF;YACjF,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,KAAK,OAAO;gBAC1D,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,iBAAiB,GAAG,cAAc,IAAI,gBAAgB,CAAC;YAE7D,8DAA8D;YAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,YAAY,EAAE,WAAW,IAAI,YAAY,CAAC,qBAAqB,KAAK,cAAc,EAAE,CAAC;gBACvF,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,QAAQ,EAAE,QAAQ,0CAA6B,EAAE,CAAC;oBACpD,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;oBAC3E,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/D,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;YACH,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,UAAU,GAAS,IAAI,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAI,KAAK,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAM,IAAI,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAM,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAO,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;QACpC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,4EAA4E;IAE5E;;;;OAIG;IACK,OAAO,CAAC,OAAe,EAAE,OAAe;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,cAAc,CAAC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAErD,IAAI,OAAO,GAA2B,IAAI,CAAC;QAC3C,IAAI,OAAO,GAAG,QAAQ,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU;gBAAE,SAAS;YAEtC,MAAM,IAAI,GAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3C,uDAAuD;YACvD,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAElE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YAEtC,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;gBACnB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,QAAQ,GAAsB,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxE,OAAO,GAAG;oBACR,KAAK,EAAO,IAAI;oBAChB,QAAQ,EAAI,GAAG;oBACf,QAAQ;oBACR,iDAAiD;oBACjD,UAAU,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI;iBAC7E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,IAAI,cAAc,CAAC;IACnC,CAAC;IAEO,eAAe,CAAC,MAA8B;QACpD,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAM,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC;IAC5D,CAAC;IAED,2EAA2E;IACnE,aAAa,CAAC,OAAe,EAAE,OAAe;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,IAAI,GAAK,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,OAAO,OAAO,GAAG,IAAI,CAAC,IAAI,GAAK,MAAM;eAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,GAAI,MAAM;eAC9B,OAAO,GAAG,IAAI,CAAC,GAAG,GAAM,MAAM;eAC9B,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACxC,CAAC;IAED,2DAA2D;IACnD,iBAAiB,CAAC,OAAe,EAAE,OAAe;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAc,0BAA0B,CAAC,CAAC;QAC/E,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACzC,OAAO,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK;eAC7C,OAAO,IAAI,IAAI,CAAC,GAAG,IAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;IACxD,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,MAAc;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,GAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,UAAkB,CAAC,SAAe,CAAC;QACnF,MAAM,GAAG,GAAO,IAAkF;aAC/F,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,4CAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC;QACzG,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAK,IAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9D,MAAM,IAAI,GAAI,IAAkF,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1G,OAAO,IAAI,CAAC,QAAQ,4CAA8B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;IAC7G,CAAC;IAED,2EAA2E;IAE3E;;;;;;;;;;;;;;;OAeG;IACH,sBAAsB,CAAC,KAAa,EAAE,cAA6B;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,kEAAkE;QAClE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACxD,yDAAyD;QACzD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,KAAa,EAAE,aAAqB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,qCAAqC;QAE/D,2EAA2E;QAC3E,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,qBAAqB,KAAK,aAAa,EAAE,CAAC;YACnF,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,2EAA2E;QAC3E,IAAI,WAAW,CAAC,OAAO,KAAK,aAAa;YAAE,OAAO;QAElD,2EAA2E;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,gEAAgE;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,IAAI,IAAI,EAAE,aAAa,CAAC,CAAC;QAErF,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,8EAA8E;IAC9E,cAAc;QACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;YAC7C,MAAM,EAAK,IAAI;YACf,SAAS,EAAE,CAAC,CAAC;YACb,OAAO,EAAI,CAAC,CAAC;SACd,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { ColumnStyleManager } from '../renderer/column-style-manager';
|
|
2
|
+
import type { IconRenderer } from '../icons/icon-renderer';
|
|
3
|
+
import type { ColumnGroupDragHandler } from './column-group-drag-handler';
|
|
4
|
+
import { type ColumnTreeNode, type HeaderGroupRow } from './column-group.types';
|
|
5
|
+
/**
|
|
6
|
+
* Options for building the DOM cells in a group header row.
|
|
7
|
+
*/
|
|
8
|
+
export interface GroupCellBuildOptions {
|
|
9
|
+
/** Height of a single header row in pixels — used for span calculation. */
|
|
10
|
+
rowHeight: number;
|
|
11
|
+
/** Callback fired when the user clicks or presses Enter/Space on a group cell. */
|
|
12
|
+
onCollapseToggle?: (groupId: string) => void;
|
|
13
|
+
/** Callback fired when the user drags the group resize handle. */
|
|
14
|
+
onGroupResize?: (groupId: string, newWidth: number) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Builds the multi-row grouped header DOM for a single panel.
|
|
18
|
+
*
|
|
19
|
+
* ### Layout model
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* pg-header-group-row depth-0 ← group cells (position: absolute)
|
|
23
|
+
* pg-header-group-row depth-1 ← deeper group cells (if nested)
|
|
24
|
+
* pg-header-row ← existing leaf row (built by HeaderRenderer)
|
|
25
|
+
* pg-filter-row ← optional filter row
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* Group rows use `position: relative` with absolutely-positioned cells so that
|
|
29
|
+
* any arbitrary column width and nesting depth can be expressed without
|
|
30
|
+
* flex-layout constraints. The rows are direct children of the panel's
|
|
31
|
+
* `pg-panel__header-inner` element, which means they scroll together with the
|
|
32
|
+
* leaf row via the same `translateX` CSS transform.
|
|
33
|
+
*
|
|
34
|
+
* ### Virtualization
|
|
35
|
+
*
|
|
36
|
+
* Group rows render **all** group cells (not just the virtual window slice).
|
|
37
|
+
* Because groups span many leaf columns, the number of group cells is small
|
|
38
|
+
* compared to the number of leaf cells — the perf overhead is negligible.
|
|
39
|
+
* The visible portion is automatically clipped by the panel's `overflow: hidden`.
|
|
40
|
+
*/
|
|
41
|
+
export declare class ColumnGroupHeaderBuilder {
|
|
42
|
+
private readonly iconRenderer;
|
|
43
|
+
/** Optional drag handler — wired after construction via {@link setDragConfig}. */
|
|
44
|
+
private dragHandler;
|
|
45
|
+
/** Getter returning the root `.pg-grid` element for drag boundary checks. */
|
|
46
|
+
private gridElGetter;
|
|
47
|
+
constructor(iconRenderer: IconRenderer);
|
|
48
|
+
/**
|
|
49
|
+
* Wire a {@link ColumnGroupDragHandler} into the builder so that each
|
|
50
|
+
* group header cell receives drag-and-drop listeners at build time.
|
|
51
|
+
*
|
|
52
|
+
* Must be called before the first `buildGroupRows` invocation if drag
|
|
53
|
+
* support is needed.
|
|
54
|
+
*
|
|
55
|
+
* @param handler - Fully-constructed drag handler instance.
|
|
56
|
+
* @param gridElGetter - Returns the root `.pg-grid` element (may be `null`
|
|
57
|
+
* before mount).
|
|
58
|
+
*/
|
|
59
|
+
setDragConfig(handler: ColumnGroupDragHandler, gridElGetter: () => HTMLElement | null): void;
|
|
60
|
+
/**
|
|
61
|
+
* Build one `HTMLElement` per depth level for the given panel tree.
|
|
62
|
+
*
|
|
63
|
+
* Returns an ordered array of group-row elements (depth 0 first).
|
|
64
|
+
* The leaf row is **not** included — it is built by {@link HeaderRenderer}.
|
|
65
|
+
* Returns an empty array when `maxDepth === 0` (no groups).
|
|
66
|
+
*
|
|
67
|
+
* @param panelNodes - Root-level tree nodes for this panel.
|
|
68
|
+
* @param colStyles - Width manager for resolving leaf column widths.
|
|
69
|
+
* @param maxDepth - Global tree depth (from `ColumnGroupModel.getMaxDepth()`).
|
|
70
|
+
* @param cellOptions - DOM build options (row height, callbacks).
|
|
71
|
+
*/
|
|
72
|
+
buildGroupRows(panelNodes: ColumnTreeNode[], colStyles: ColumnStyleManager, maxDepth: number, cellOptions: GroupCellBuildOptions): HTMLElement[];
|
|
73
|
+
/**
|
|
74
|
+
* Rebuild the cells of existing group-row elements in place.
|
|
75
|
+
* Called after a virtual-column-window change or width update.
|
|
76
|
+
*
|
|
77
|
+
* @param groupRowEls - Previously built group-row elements (from `buildGroupRows`).
|
|
78
|
+
* @param panelNodes - Current root nodes for this panel.
|
|
79
|
+
* @param colStyles - Current column widths.
|
|
80
|
+
* @param maxDepth - Global tree depth.
|
|
81
|
+
* @param cellOptions - DOM build options.
|
|
82
|
+
*/
|
|
83
|
+
updateGroupRows(groupRowEls: HTMLElement[], panelNodes: ColumnTreeNode[], colStyles: ColumnStyleManager, maxDepth: number, cellOptions: GroupCellBuildOptions): void;
|
|
84
|
+
/**
|
|
85
|
+
* Compute the header layout data without constructing any DOM.
|
|
86
|
+
* Returns one {@link HeaderGroupRow} per depth level (0 to `maxDepth - 1`).
|
|
87
|
+
* Used for testing and by the drag handler for hit-testing.
|
|
88
|
+
*
|
|
89
|
+
* @param panelNodes - Root-level tree nodes for this panel.
|
|
90
|
+
* @param colStyles - Width manager for leaf column widths.
|
|
91
|
+
* @param maxDepth - Maximum nesting depth across the full tree.
|
|
92
|
+
*/
|
|
93
|
+
computeLayout(panelNodes: ColumnTreeNode[], colStyles: ColumnStyleManager, maxDepth: number): HeaderGroupRow[];
|
|
94
|
+
private walk;
|
|
95
|
+
/**
|
|
96
|
+
* Walk a subtree and return the `colId` of the first non-hidden leaf.
|
|
97
|
+
* Returns `null` when no visible leaf is found.
|
|
98
|
+
*/
|
|
99
|
+
private getFirstVisibleLeafColId;
|
|
100
|
+
private buildGroupRow;
|
|
101
|
+
private populateGroupRow;
|
|
102
|
+
private buildGroupCell;
|
|
103
|
+
private buildDefaultContent;
|
|
104
|
+
private startGroupResize;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=column-group-header-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-group-header-builder.d.ts","sourceRoot":"","sources":["../../src/column-groups/column-group-header-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAuB,KAAK,cAAc,EAA+C,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGlJ;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kEAAkE;IAClE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,wBAAwB;IAMvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IALzC,kFAAkF;IAClF,OAAO,CAAC,WAAW,CAAwC;IAC3D,6EAA6E;IAC7E,OAAO,CAAC,YAAY,CAA2C;gBAElC,YAAY,EAAE,YAAY;IAEvD;;;;;;;;;;OAUG;IACH,aAAa,CAAC,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI;IAO5F;;;;;;;;;;;OAWG;IACH,cAAc,CACZ,UAAU,EAAG,cAAc,EAAE,EAC7B,SAAS,EAAI,kBAAkB,EAC/B,QAAQ,EAAK,MAAM,EACnB,WAAW,EAAE,qBAAqB,GACjC,WAAW,EAAE;IAOhB;;;;;;;;;OASG;IACH,eAAe,CACb,WAAW,EAAE,WAAW,EAAE,EAC1B,UAAU,EAAG,cAAc,EAAE,EAC7B,SAAS,EAAI,kBAAkB,EAC/B,QAAQ,EAAK,MAAM,EACnB,WAAW,EAAE,qBAAqB,GACjC,IAAI;IAWP;;;;;;;;OAQG;IACH,aAAa,CACX,UAAU,EAAE,cAAc,EAAE,EAC5B,SAAS,EAAG,kBAAkB,EAC9B,QAAQ,EAAI,MAAM,GACjB,cAAc,EAAE;IAanB,OAAO,CAAC,IAAI;IAmEZ;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,cAAc;IA6EtB,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,gBAAgB;CA2BzB"}
|