@mintplayer/ng-bootstrap 21.25.0 → 21.27.0

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, viewChild, TemplateRef, ChangeDetectionStrategy, Component, output, signal, contentChildren, inject, effect, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { input, viewChild, TemplateRef, ChangeDetectionStrategy, Component, computed, output, signal, contentChildren, inject, effect, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
3
  import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
4
4
  import { html, unsafeCSS, LitElement } from 'lit';
5
5
  import '@mintplayer/ng-bootstrap/web-components/tab-control';
@@ -428,7 +428,7 @@ class MintDockManagerElement extends LitElement {
428
428
  }
429
429
  }
430
430
  static get observedAttributes() {
431
- return [...(super.observedAttributes ?? []), 'layout'];
431
+ return [...(super.observedAttributes ?? []), 'layout', 'debug-layout-integrity'];
432
432
  }
433
433
  static { this.instanceCounter = 0; }
434
434
  // Touch tab-drag gesture: a finger that lands on a tab header must be able
@@ -517,6 +517,11 @@ class MintDockManagerElement extends LitElement {
517
517
  this.cornerSnapYTargets = [];
518
518
  // Debug: render snap markers while dragging
519
519
  this.showSnapMarkers = false;
520
+ // Debug: assert every pane has a projection slot in shadow DOM after each
521
+ // render. Off by default so production hosts pay no overhead; demo enables
522
+ // it via the `debug-layout-integrity` attribute to catch layout-tree bugs
523
+ // loudly during development.
524
+ this.debugLayoutIntegrity = false;
520
525
  this.pendingDragEndTimeout = null;
521
526
  this.previousSplitSizes = new Map();
522
527
  this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;
@@ -631,6 +636,9 @@ class MintDockManagerElement extends LitElement {
631
636
  this.clearSnapMarkers();
632
637
  }
633
638
  }
639
+ else if (name === 'debug-layout-integrity') {
640
+ this.debugLayoutIntegrity = !(newValue === null || newValue === 'false' || newValue === '0');
641
+ }
634
642
  }
635
643
  get layout() {
636
644
  return {
@@ -673,6 +681,9 @@ class MintDockManagerElement extends LitElement {
673
681
  this.rootLayout = this.cloneLayoutNode(snapshot.root);
674
682
  this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);
675
683
  this.titles = snapshot.titles ? { ...snapshot.titles } : {};
684
+ // Sanitize whatever the host fed us: empty stacks, 0/1-child splits, and
685
+ // nested same-direction splits get pruned/flattened before we render.
686
+ this.normalizeAllLayouts();
676
687
  this.renderLayout();
677
688
  }
678
689
  /**
@@ -756,6 +767,7 @@ class MintDockManagerElement extends LitElement {
756
767
  // wired up in firstUpdated (rootResizeObserver, dockedMutationObserver,
757
768
  // and delegated 'resizing' / 'resize-end' events). The MutationObserver
758
769
  // on dockedEl fires when the renderNode subtree above is appended.
770
+ this.verifyProjectionSlots();
759
771
  }
760
772
  renderNode(node, path, floatingIndex) {
761
773
  if (node.kind === 'split') {
@@ -2735,16 +2747,14 @@ class MintDockManagerElement extends LitElement {
2735
2747
  if (!source) {
2736
2748
  return;
2737
2749
  }
2738
- const stackEmptied = this.removePaneFromLocation(source, pane, true);
2750
+ this.removePaneFromLocation(source, pane, true);
2739
2751
  const newRoot = {
2740
2752
  kind: 'stack',
2741
2753
  panes: [pane],
2742
2754
  activePane: pane,
2743
2755
  };
2744
2756
  this.rootLayout = newRoot;
2745
- if (stackEmptied) {
2746
- this.cleanupLocation(source);
2747
- }
2757
+ this.normalizeAllLayouts();
2748
2758
  this.renderLayout();
2749
2759
  this.dispatchLayoutChanged();
2750
2760
  if (this.dragState) {
@@ -2760,6 +2770,7 @@ class MintDockManagerElement extends LitElement {
2760
2770
  return;
2761
2771
  }
2762
2772
  this.reorderPaneInLocation(source, pane);
2773
+ this.normalizeAllLayouts();
2763
2774
  this.renderLayout();
2764
2775
  this.dispatchLayoutChanged();
2765
2776
  if (this.dragState) {
@@ -2767,13 +2778,11 @@ class MintDockManagerElement extends LitElement {
2767
2778
  }
2768
2779
  return;
2769
2780
  }
2770
- const stackEmptied = this.removePaneFromLocation(source, pane, true);
2781
+ this.removePaneFromLocation(source, pane, true);
2771
2782
  if (zone === 'center') {
2772
2783
  this.addPaneToLocation(target, pane);
2773
2784
  this.setActivePaneForLocation(target, pane);
2774
- if (stackEmptied) {
2775
- this.cleanupLocation(source);
2776
- }
2785
+ this.normalizeAllLayouts();
2777
2786
  this.renderLayout();
2778
2787
  this.dispatchLayoutChanged();
2779
2788
  if (this.dragState) {
@@ -2792,9 +2801,7 @@ class MintDockManagerElement extends LitElement {
2792
2801
  else {
2793
2802
  const floating = this.floatingLayouts[target.index];
2794
2803
  if (!floating) {
2795
- if (stackEmptied) {
2796
- this.cleanupLocation(source);
2797
- }
2804
+ this.normalizeAllLayouts();
2798
2805
  this.renderLayout();
2799
2806
  this.dispatchLayoutChanged();
2800
2807
  return;
@@ -2802,9 +2809,7 @@ class MintDockManagerElement extends LitElement {
2802
2809
  floating.root = this.dockNodeBeside(floating.root, target.node, newStack, zone);
2803
2810
  floating.activePane = pane;
2804
2811
  }
2805
- if (stackEmptied) {
2806
- this.cleanupLocation(source);
2807
- }
2812
+ this.normalizeAllLayouts();
2808
2813
  this.renderLayout();
2809
2814
  this.dispatchLayoutChanged();
2810
2815
  if (this.dragState) {
@@ -2822,6 +2827,7 @@ class MintDockManagerElement extends LitElement {
2822
2827
  if (!target && targetPath.type === 'docked' && !this.rootLayout) {
2823
2828
  this.rootLayout = this.cloneLayoutNode(source.root);
2824
2829
  this.removeFloatingAt(sourceIndex);
2830
+ this.normalizeAllLayouts();
2825
2831
  this.renderLayout();
2826
2832
  this.dispatchLayoutChanged();
2827
2833
  return true;
@@ -2847,6 +2853,7 @@ class MintDockManagerElement extends LitElement {
2847
2853
  this.setActivePaneForLocation(target, activePane);
2848
2854
  }
2849
2855
  this.removeFloatingAt(sourceIndex);
2856
+ this.normalizeAllLayouts();
2850
2857
  this.renderLayout();
2851
2858
  this.dispatchLayoutChanged();
2852
2859
  return true;
@@ -2859,12 +2866,14 @@ class MintDockManagerElement extends LitElement {
2859
2866
  floating.root = this.dockNodeBeside(floating.root, target.node, source.root, zone);
2860
2867
  floating.activePane = source.activePane ?? this.findFirstPaneName(source.root) ?? undefined;
2861
2868
  this.removeFloatingAt(sourceIndex);
2869
+ this.normalizeAllLayouts();
2862
2870
  this.renderLayout();
2863
2871
  this.dispatchLayoutChanged();
2864
2872
  return true;
2865
2873
  }
2866
2874
  this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, source.root, zone);
2867
2875
  this.removeFloatingAt(sourceIndex);
2876
+ this.normalizeAllLayouts();
2868
2877
  this.renderLayout();
2869
2878
  this.dispatchLayoutChanged();
2870
2879
  return true;
@@ -2902,7 +2911,7 @@ class MintDockManagerElement extends LitElement {
2902
2911
  if (skipCleanup) {
2903
2912
  return true;
2904
2913
  }
2905
- this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, stack);
2914
+ this.normalizeAllLayouts();
2906
2915
  return true;
2907
2916
  }
2908
2917
  findParentSplit(node, child) {
@@ -3275,48 +3284,6 @@ class MintDockManagerElement extends LitElement {
3275
3284
  this.normalizeSplitNode(parentInfo.parent);
3276
3285
  return root;
3277
3286
  }
3278
- cleanupEmptyStackInTree(root, stack) {
3279
- if (!root || stack.panes.length > 0) {
3280
- return root;
3281
- }
3282
- const parentInfo = this.findParentSplit(root, stack);
3283
- if (!parentInfo) {
3284
- return root === stack ? null : root;
3285
- }
3286
- const parent = parentInfo.parent;
3287
- const index = parent.children.indexOf(stack);
3288
- if (index === -1) {
3289
- return root;
3290
- }
3291
- parent.children.splice(index, 1);
3292
- if (Array.isArray(parent.sizes)) {
3293
- parent.sizes.splice(index, 1);
3294
- }
3295
- this.normalizeSplitNode(parent);
3296
- return this.cleanupSplitIfNecessary(root, parent);
3297
- }
3298
- cleanupSplitIfNecessary(root, split) {
3299
- if (split.children.length === 1) {
3300
- return this.replaceNodeInTree(root, split, split.children[0]);
3301
- }
3302
- if (split.children.length === 0) {
3303
- const parentInfo = this.findParentSplit(root, split);
3304
- if (!parentInfo) {
3305
- return null;
3306
- }
3307
- const parent = parentInfo.parent;
3308
- const index = parent.children.indexOf(split);
3309
- if (index !== -1) {
3310
- parent.children.splice(index, 1);
3311
- if (Array.isArray(parent.sizes)) {
3312
- parent.sizes.splice(index, 1);
3313
- }
3314
- this.normalizeSplitNode(parent);
3315
- return this.cleanupSplitIfNecessary(root, parent);
3316
- }
3317
- }
3318
- return root;
3319
- }
3320
3287
  dockNodeBeside(root, targetNode, newNode, zone) {
3321
3288
  const orientation = zone === 'left' || zone === 'right' ? 'horizontal' : 'vertical';
3322
3289
  const placeBefore = zone === 'left' || zone === 'top';
@@ -3537,21 +3504,6 @@ class MintDockManagerElement extends LitElement {
3537
3504
  }
3538
3505
  }
3539
3506
  }
3540
- cleanupLocation(location) {
3541
- if (location.context === 'docked') {
3542
- this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, location.node);
3543
- }
3544
- else {
3545
- const floating = this.floatingLayouts[location.index];
3546
- if (!floating) {
3547
- return;
3548
- }
3549
- floating.root = this.cleanupEmptyStackInTree(floating.root, location.node);
3550
- if (!floating.root) {
3551
- this.removeFloatingAt(location.index);
3552
- }
3553
- }
3554
- }
3555
3507
  reorderPaneInLocation(location, pane) {
3556
3508
  const panes = location.node.panes;
3557
3509
  const index = panes.indexOf(pane);
@@ -3607,10 +3559,7 @@ class MintDockManagerElement extends LitElement {
3607
3559
  if (skipCleanup) {
3608
3560
  return true;
3609
3561
  }
3610
- floating.root = this.cleanupEmptyStackInTree(floating.root, node);
3611
- if (!floating.root) {
3612
- this.removeFloatingAt(index);
3613
- }
3562
+ this.normalizeAllLayouts();
3614
3563
  return true;
3615
3564
  }
3616
3565
  normalizeSizesArray(sizes, count) {
@@ -3630,6 +3579,115 @@ class MintDockManagerElement extends LitElement {
3630
3579
  normalizeSplitNode(split) {
3631
3580
  split.sizes = this.normalizeSizesArray(split.sizes, split.children.length);
3632
3581
  }
3582
+ /**
3583
+ * Bottom-up layout sanitizer. Returns a normalized version of `node` where:
3584
+ * - Empty stacks (panes.length === 0) are dropped (returned as null).
3585
+ * - A stack's `activePane` is repaired if it no longer references one of `panes`.
3586
+ * - Splits whose direction matches a child split are flattened, with sizes
3587
+ * combined multiplicatively so the resulting on-screen pixel layout is
3588
+ * identical to the pre-merge one.
3589
+ * - Splits with 0 children become null. Splits with 1 child are unwrapped.
3590
+ *
3591
+ * Idempotent: passing the result back through this method yields the same
3592
+ * structure. Mutates the input tree in place but only returns nodes that
3593
+ * remain part of the layout.
3594
+ */
3595
+ normalizeLayoutNode(node) {
3596
+ if (!node)
3597
+ return null;
3598
+ if (node.kind === 'stack') {
3599
+ if (node.panes.length === 0)
3600
+ return null;
3601
+ if (!node.activePane || !node.panes.includes(node.activePane)) {
3602
+ node.activePane = node.panes[0];
3603
+ }
3604
+ return node;
3605
+ }
3606
+ const slotSizes = this.normalizeSizesArray(node.sizes, node.children.length);
3607
+ // Pair each child with its slot weight, drop nulls, then expand any
3608
+ // same-direction child split into its grandchildren with sizes scaled
3609
+ // multiplicatively. A 0.4 slot containing [0.3, 0.7] becomes [0.12, 0.28].
3610
+ const survivors = node.children
3611
+ .map((child, i) => ({ child: this.normalizeLayoutNode(child), slot: slotSizes[i] }))
3612
+ .filter((p) => p.child !== null)
3613
+ .flatMap(({ child, slot }) => {
3614
+ if (child.kind === 'split' && child.direction === node.direction) {
3615
+ const innerSizes = this.normalizeSizesArray(child.sizes, child.children.length);
3616
+ return child.children.map((grandchild, idx) => ({
3617
+ child: grandchild,
3618
+ slot: slot * innerSizes[idx],
3619
+ }));
3620
+ }
3621
+ return [{ child, slot }];
3622
+ });
3623
+ if (survivors.length === 0)
3624
+ return null;
3625
+ if (survivors.length === 1)
3626
+ return survivors[0].child;
3627
+ node.children = survivors.map((s) => s.child);
3628
+ node.sizes = this.normalizeSizesArray(survivors.map((s) => s.slot), survivors.length);
3629
+ return node;
3630
+ }
3631
+ /**
3632
+ * Apply `normalizeLayoutNode` to `rootLayout` and every floating window's
3633
+ * root, drop floating windows whose root collapses to null, and repair
3634
+ * stale `activePane` references on each floating window. Run this at the
3635
+ * end of every public mutation entry point (drop handlers, layout setter,
3636
+ * pane removal) so the tree the renderer sees is always in canonical form.
3637
+ */
3638
+ normalizeAllLayouts() {
3639
+ this.rootLayout = this.normalizeLayoutNode(this.rootLayout);
3640
+ this.floatingLayouts = this.floatingLayouts
3641
+ .map((floating) => {
3642
+ floating.root = this.normalizeLayoutNode(floating.root);
3643
+ if (!floating.root)
3644
+ return null;
3645
+ const panes = this.collectPaneNames(floating.root);
3646
+ if (!floating.activePane || !panes.includes(floating.activePane)) {
3647
+ const fallback = this.findFirstPaneName(floating.root);
3648
+ if (fallback) {
3649
+ floating.activePane = fallback;
3650
+ }
3651
+ else {
3652
+ delete floating.activePane;
3653
+ }
3654
+ }
3655
+ return floating;
3656
+ })
3657
+ .filter((f) => f !== null);
3658
+ }
3659
+ /**
3660
+ * Dev-mode integrity guard: walks every pane referenced by the current
3661
+ * layout and asserts that the rendered shadow DOM contains a matching
3662
+ * `<slot name="${pane}">`. A missing slot means the layout tree got into
3663
+ * a state the renderer can't display — typically a missed normalize() call
3664
+ * or a render bug. Opt in via the `debug-layout-integrity` attribute or
3665
+ * the `debugLayoutIntegrity` property; off by default.
3666
+ */
3667
+ verifyProjectionSlots() {
3668
+ if (!this.debugLayoutIntegrity)
3669
+ return;
3670
+ const root = this.shadowRoot;
3671
+ if (!root)
3672
+ return;
3673
+ // Collect every slot the renderer produced. Walking the rendered DOM
3674
+ // (instead of building a CSS selector per pane) sidesteps environment
3675
+ // differences — e.g. jsdom does not expose `CSS.escape`, which would
3676
+ // crash the guard during unit tests before the assertion runs.
3677
+ const slotNames = new Set(Array.from(root.querySelectorAll('slot'))
3678
+ .map((slot) => slot.getAttribute('name'))
3679
+ .filter((name) => !!name));
3680
+ const panes = [
3681
+ ...this.collectPaneNames(this.rootLayout),
3682
+ ...this.floatingLayouts.flatMap((f) => this.collectPaneNames(f.root)),
3683
+ ];
3684
+ const missing = panes.find((pane) => !slotNames.has(pane));
3685
+ if (missing) {
3686
+ throw new Error(`mint-dock-manager: pane "${missing}" has no projection slot in the shadow DOM. ` +
3687
+ `The layout tree got into a state the renderer can't display — likely a ` +
3688
+ `missing normalize() call or a render bug.`);
3689
+ }
3690
+ }
3633
3691
  dispatchLayoutChanged() {
3634
3692
  this.dispatchEvent(new CustomEvent('dock-layout-changed', {
3635
3693
  detail: this.snapshot,
@@ -3661,6 +3719,14 @@ class BsDockManagerComponent {
3661
3719
  }
3662
3720
  constructor() {
3663
3721
  this.layout = input(null, ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
3722
+ /**
3723
+ * Dev-mode integrity guard. When `true`, the inner web component throws
3724
+ * after each render if any registered pane has no projection slot in the
3725
+ * shadow DOM — a signal that the layout tree got corrupted. Off by default;
3726
+ * enable in development to catch layout-logic bugs loudly.
3727
+ */
3728
+ this.debugLayoutIntegrity = input(false, ...(ngDevMode ? [{ debugName: "debugLayoutIntegrity" }] : /* istanbul ignore next */ []));
3729
+ this.debugLayoutIntegrityAttr = computed(() => this.debugLayoutIntegrity() ? '' : null, ...(ngDevMode ? [{ debugName: "debugLayoutIntegrityAttr" }] : /* istanbul ignore next */ []));
3664
3730
  this.layoutChange = output();
3665
3731
  this.layoutSnapshotChange = output();
3666
3732
  this.layoutString = signal(null, ...(ngDevMode ? [{ debugName: "layoutString" }] : /* istanbul ignore next */ []));
@@ -3729,12 +3795,12 @@ class BsDockManagerComponent {
3729
3795
  return JSON.parse(JSON.stringify(layout));
3730
3796
  }
3731
3797
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: BsDockManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3732
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: BsDockManagerComponent, isStandalone: true, selector: "bs-dock-manager", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange", layoutSnapshotChange: "layoutSnapshotChange" }, queries: [{ propertyName: "panes", predicate: BsDockPaneComponent, isSignal: true }], viewQueries: [{ propertyName: "managerRef", first: true, predicate: ["manager"], descendants: true, isSignal: true }], ngImport: i0, template: "<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n", styles: [":host{display:block;width:100%;height:100%}.bs-dock-manager{display:block;width:100%;height:100%}.bs-dock-pane{display:contents}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3798
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: BsDockManagerComponent, isStandalone: true, selector: "bs-dock-manager", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, debugLayoutIntegrity: { classPropertyName: "debugLayoutIntegrity", publicName: "debugLayoutIntegrity", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange", layoutSnapshotChange: "layoutSnapshotChange" }, queries: [{ propertyName: "panes", predicate: BsDockPaneComponent, isSignal: true }], viewQueries: [{ propertyName: "managerRef", first: true, predicate: ["manager"], descendants: true, isSignal: true }], ngImport: i0, template: "<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n [attr.debug-layout-integrity]=\"debugLayoutIntegrityAttr()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n", styles: [":host{display:block;width:100%;height:100%}.bs-dock-manager{display:block;width:100%;height:100%}.bs-dock-pane{display:contents}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3733
3799
  }
3734
3800
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: BsDockManagerComponent, decorators: [{
3735
3801
  type: Component,
3736
- args: [{ selector: 'bs-dock-manager', imports: [NgTemplateOutlet], schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n", styles: [":host{display:block;width:100%;height:100%}.bs-dock-manager{display:block;width:100%;height:100%}.bs-dock-pane{display:contents}\n"] }]
3737
- }], ctorParameters: () => [], propDecorators: { layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], layoutChange: [{ type: i0.Output, args: ["layoutChange"] }], layoutSnapshotChange: [{ type: i0.Output, args: ["layoutSnapshotChange"] }], panes: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => BsDockPaneComponent), { isSignal: true }] }], managerRef: [{ type: i0.ViewChild, args: ['manager', { isSignal: true }] }] } });
3802
+ args: [{ selector: 'bs-dock-manager', imports: [NgTemplateOutlet], schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mint-dock-manager\n #manager\n class=\"bs-dock-manager\"\n [attr.layout]=\"layoutString()\"\n [attr.debug-layout-integrity]=\"debugLayoutIntegrityAttr()\"\n (dock-layout-changed)=\"onLayoutChanged($event)\"\n >\n @for (pane of panes(); track trackByPane($index, pane)) {\n <div class=\"bs-dock-pane\" [attr.slot]=\"pane.name()\">\n <ng-container *ngTemplateOutlet=\"pane.template()\"></ng-container>\n </div>\n }\n</mint-dock-manager>\n", styles: [":host{display:block;width:100%;height:100%}.bs-dock-manager{display:block;width:100%;height:100%}.bs-dock-pane{display:contents}\n"] }]
3803
+ }], ctorParameters: () => [], propDecorators: { layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], debugLayoutIntegrity: [{ type: i0.Input, args: [{ isSignal: true, alias: "debugLayoutIntegrity", required: false }] }], layoutChange: [{ type: i0.Output, args: ["layoutChange"] }], layoutSnapshotChange: [{ type: i0.Output, args: ["layoutSnapshotChange"] }], panes: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => BsDockPaneComponent), { isSignal: true }] }], managerRef: [{ type: i0.ViewChild, args: ['manager', { isSignal: true }] }] } });
3738
3804
 
3739
3805
  /**
3740
3806
  * Generated bundle index. Do not edit.